はじめに
EMLinuxを自宅のPC (PC-GN234CCD8) でも動かしてみたいなぁ~、ということでやってみました。
該当のPCにはWindows 10がインストールされているため、USBフラッシュメモリからEMLinuxを起動させてみました。
手順の概要
Ubuntu Server 22.04でビルドしたEMLinuxのOSのイメージファイルをddコマンドなどでUSBフラッシュメモリに書き込みます。
そのUSBフラッシュメモリをPC-GN234CCD8に挿し、USBフラッシュメモリからEMLinuxを起動させます。
また、IPアドレスはDHCPで割り当てることにしました。
+------------------------------------------+
| Ubuntu Server 22.04 |
| |
| +---------+ Write image with dd command |
| | EMLinux |-------------------+ |
| +----A----+ | |
| | Build EMLinux OS image | |
| +----|-------------+ | |
| | +--|------+ | | +------------------+
| | | bitbake | | | | USB flash memory |
| | +---------+ | | | +---------+ |
| | Docker Container | +----------->| EMLinux | |
| +------------------+ | +---------+ |
| +------------------+
+------------------------------------------+ |
|
| Replace
|
+------------------------------------------+ V
| PC-GN234CCD8 +------------------+
| | USB flash memory |
| | +---------+ |
| Boot EMLinux from USB flash memory <------| EMLinux | |
| | +---------+ |
| +------------------+
+-+-----+----------------------------------+
| NIC |
+--+--+ +---------------+
| Assign IP address with DHCP | Router |
+-----------------------------+ Buffalo +---> The Internet
| AirStation |
| WSR-3200AX4S |
+---------------+
事前準備
EMLinuxをビルドする環境
こちらの記事と同じ環境を使いました。
DockerおよびDocker Composerのインストール
こちらの記事を参考にしてください。
レポジトリのクローン
以下、Ubuntu Serverで作業を行います。
Proxyサーバがある環境の場合、以下のコマンドでproxyサーバの設定を行ってください。
git config --global http.proxy <proxyサーバのFQDNまたはIPアドレス>:<ポート番号>
git config --global https.proxy <proxyサーバのFQDNまたはIPアドレス>:<ポート番号>
リポジトリをクローンするためのディレクトリを作成してください。
mkdir -p /home/emlinux/github/miraclelinux/emlinux/repos
以下のディレクトリに移動してください。
cd /home/emlinux/github/miraclelinux/emlinux
git cloneコマンドで、EMLinuxのリポジトリをクローンしてください。
git clone -b bookworm https://github.com/miraclelinux/meta-emlinux.git repos/meta-emlinux
git cloneコマンドで、meta-emlinux-flavorsのリポジトリをクローンしてください。
git clone -b openssh https://github.com/takaaki-fukunaga/meta-emlinux-flavors.git repos/meta-emlinux-flavors
EMLinuxのビルド
以下のディレクトリに移動してください。
cd /home/emlinux/github/miraclelinux/emlinux/repos/meta-emlinux/docker
EMLinuxのビルド用のコンテナを起動してください。
./run.sh
以下のコマンドを実行し、ビルドのために必要な環境変数を設定してください。
source repos/meta-emlinux/scripts/setup-emlinux build
meta-emlinux-flavorsのレイヤーを追加してください。
bitbake-layers add-layer ../repos/meta-emlinux-flavors/
meta-emlinux-flavorsが追加されていることを確認してください。
build@143bd1f2a182:~/work/build$ bitbake-layers show-layers
NOTE: Starting bitbake server...
layer path priority
========================================================================================================
core /home/build/work/build/../repos/isar/meta 5
emlinux /home/build/work/build/../repos/meta-emlinux 12
cip-core /home/build/work/build/../repos/isar-cip-core 6
meta-emlinux-flavors /home/build/work/repos/meta-emlinux-flavors 50
vimコマンドでconf/local.confファイルを開いてください。
vim conf/local.conf
conf/local.confファイルの末尾に以下を追記してください。
(snip)
#
# Add MACHINE parameter
#
MACHINE = "generic-x86-64"
#
# Extra space for rootfs in MB
#
ROOTFS_EXTRA = "100"
- 必要最小限のルートファイルシステムでビルドされるため、空き容量が必要な場合にはROOTFS_EXTRAにMB単位でサイズを指定してください。
bitbakeコマンドでEMLinuxをビルドしてください。
bitbake emlinux-image-openssh
上記コマンドではOpenSSHをインストールしています。その他flavorについては以下をご参照ください。
ビルド完了後、exitコマンドでコンテナからログアウトしてください。
exit
USBフラッシュメモリへの書き込み
EMLinuxのOSイメージファイルが保存されているディレクトリに移動してください。
cd /home/emlinux/github/miraclelinux/emlinux/build/tmp/deploy/images/generic-x86-64
ddコマンドでEMLinuxのOSのイメージをUSBフラッシュメモリに書き込んでください。
dd if=emlinux-image-openssh-emlinux-bookworm-generic-x86-64.wic of=/dev/sdX
blkidコマンドでUSBフラッシュメモリのbootパーティションのUUIDを確認してください。
sudo blkid
(snip)
/dev/sdb2: LABEL="platform" UUID="9a72fa4d-4c73-4c7e-bc36-f16c72586e5b" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="platform" PARTUUID="be248d81-44b6-4f74-a4d6-a94bc8429dae"
/dev/sdb1: SEC_TYPE="msdos" LABEL_FATBOOT="efi" LABEL="efi" UUID="13B9-D08D" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="efi" PARTUUID="eb6beaea-0569-4ee2-80ff-517f4020b8f0"
USBフラッシュメモリのルートパーティションを任意のディレクトリ (e.g., /mnt) にマウントしてください。
sudo mount /dev/sdb2 /mnt
vimコマンドなどでfstabファイルを開き、以下のように編集してください。
sudo vim /mnt/etc/fstab
- 編集前
(snip) /dev/sda1 /boot vfat defaults 0 0 UUID=9a72fa4d-4c73-4c7e-bc36-f16c72586e5b / ext4 defaults 0 0
- 編集後
(snip) #/dev/sda1 /boot vfat defaults 0 0 UUID=13B9-D08D /boot vfat defaults 0 0 UUID=9a72fa4d-4c73-4c7e-bc36-f16c72586e5b / ext4 defaults 0 0
USBフラッシュメモリのルートパーティションをアンマウントしてください。
sudo umount /mnt
USBフラッシュメモリからのEMLinuxの起動
PC-GN234CCD8にUSBフラッシュメモリを挿してください。
PCを起動し、BIOS設定にて以下を設定してください。
- Securityタブ
- Secure Boot [Disabled]
- Bootタブ
- 1st Boot [USB Hard Disk]
BIOSの設定変更後、PCを再起動してください。
無事にEMLinuxが起動しました。以下、dmesgコマンドの抜粋です。
[ 0.000000] Linux version 6.1.119-cip33 (isar-users@googlegroups.com) (gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT_DYNAMIC Thu, 01 Jan 1970 01:00:00 +0000
[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-6.1.119-cip33 root=PARTUUID=be248d81-44b6-4f74-a4d6-a94bc8429dae rootwait console=ttyS0,115200 console=tty0
(snip)
さいごに
USBフラッシュメモリからEMLinuxを起動させることができました。
本記事では実施しませんでしたが、USBフラッシュメモリからPCの内蔵ディスクにddコマンドなどでイメージの書き込みを行えば、内蔵ディスクからの起動も可能になります。
参考情報
PC-GN234CCD8のスペック
参考情報として各種コマンドの実行結果を載せておきます。
CPU
root@EMLinux3:~# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 39 bits physical, 48 bits virtual
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Vendor ID: GenuineIntel
BIOS Vendor ID: Intel(R) Corporation
Model name: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz
BIOS Model name: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz CPU @ 2.3GHz
BIOS CPU family: 205
CPU family: 6
Model: 78
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
Stepping: 3
CPU(s) scaling MHz: 23%
CPU max MHz: 2800.0000
CPU min MHz: 400.0000
BogoMIPS: 4800.00
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtsc
p lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2
ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpci
d_single pti tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt in
tel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
Virtualization features:
Virtualization: VT-x
Caches (sum of all):
L1d: 64 KiB (2 instances)
L1i: 64 KiB (2 instances)
L2: 512 KiB (2 instances)
L3: 3 MiB (1 instance)
NUMA:
NUMA node(s): 1
NUMA node0 CPU(s): 0-3
Vulnerabilities:
Gather data sampling: Vulnerable: No microcode
Itlb multihit: KVM: Mitigation: VMX disabled
L1tf: Mitigation; PTE Inversion; VMX conditional cache flushes, SMT vulnerable
Mds: Vulnerable: Clear CPU buffers attempted, no microcode; SMT vulnerable
Meltdown: Mitigation; PTI
Mmio stale data: Vulnerable: Clear CPU buffers attempted, no microcode; SMT vulnerable
Reg file data sampling: Not affected
Retbleed: Vulnerable
Spec rstack overflow: Not affected
Spec store bypass: Vulnerable
Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Spectre v2: Mitigation; Retpolines; STIBP disabled; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected
Srbds: Vulnerable: No microcode
Tsx async abort: Not affected
メモリ
root@EMLinux3:~# free -h
total used free shared buff/cache available
Mem: 7.7Gi 522Mi 5.2Gi 43Mi 2.3Gi 7.2Gi
Swap: 0B 0B 0B
ディスク構成
root@EMLinux3:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 931.5G 0 disk
├─sda1 8:1 0 260M 0 part
├─sda2 8:2 0 16M 0 part
├─sda3 8:3 0 465.1G 0 part
├─sda4 8:4 0 1000M 0 part
├─sda5 8:5 0 400G 0 part
└─sda6 8:6 0 65.2G 0 part
sdb 8:16 1 58.8G 0 disk
├─sdb1 8:17 1 66.1M 0 part /boot
└─sdb2 8:18 1 58.8G 0 part /
sr0 11:0 1 1024M 0 rom
- sda
- Windows 10が保存されているディスクです。
- sdb
- EMLinuxが保存されているUSBフラッシュメモリです。このUSBフラッシュメモリからEMLinuxを起動しています。