はじめに
サイバートラストが提供する組み込み/IoT機器向けのOSである「EMLinux」を、QEMUでエミュレートしたRaspberry Pi上で動かしてみました。
本記事では、以下に公開されている、EMLinuxの無償評価版を使用しました。
GitHubで公開されているEMLinuxを使う場合には以下の記事をご参照ください。
参考
EMLinuxのブログ
MIRACLE LINUX Users Meetup!!
構成図
+----------------------------------+
| +------------------------------+ |
| | +--------------------------+ | |
| | | +----------------------+ | | |
| | | | EMLinux 3.0 (202403) | | | |
| | | +----------------------+ | | |
| | | Rapsberry Pi 3 | | |
| | +--------------------------+ | |
| | QEMU | |
| +------------------------------+ |
| Ubuntu Server 22.04.4 LTS |
+----------------------------------+
各ソフトウェアのバージョン
Ubuntu Server
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.4 LTS"
Docker
$ docker version
Client:
Version: 24.0.5
API version: 1.43
Go version: go1.20.3
Git commit: 24.0.5-0ubuntu1~22.04.1
Built: Mon Aug 21 19:50:14 2023
OS/Arch: linux/amd64
Context: default
Server:
Engine:
Version: 24.0.5
API version: 1.43 (minimum version 1.12)
Go version: go1.20.3
Git commit: 24.0.5-0ubuntu1~22.04.1
Built: Mon Aug 21 19:50:14 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.2
GitCommit:
runc:
Version: 1.1.7-0ubuntu1~22.04.2
GitCommit:
docker-init:
Version: 0.19.0
GitCommit:
Docker Compose
$ docker compose version
Docker Compose version 2.20.2+ds1-0ubuntu1~22.04.1
QEMU
$ qemu-system-aarch64 --version
QEMU emulator version 6.2.0 (Debian 1:6.2+dfsg-2ubuntu6.17)
Copyright (c) 2003-2021 Fabrice Bellard and the QEMU Project developers
前提条件
評価環境
項目 | 要件 |
---|---|
OS | Dockerが動作するLinux |
CPU | Intel 64対応プロセッサまたはAMD64対応プロセッサ (8スレッド以上を推奨) |
RAM | 8GiB以上 (16GiB以上を推奨) |
Disk | 30GiB以上の空き容量 |
その他 | インターネットに接続可能であること |
- Proxyサーバがある場合、.bashrcなどに以下を設定し、再ログインしてください。
$ cat .bashrc (snip) PROXY=http://<proxyサーバのIPアドレス>:<ポート番号> export http_proxy=${PROXY} export https_proxy=${PROXY} export ftp_proxy=${PROXY} export no_proxy='127.0.0.1'
その他
- 以降の作業は、Ubuntu Serverインストール時に作成したemlinuxユーザを使用しました。
- emlinuxユーザのホームディレクトリは/home/emlinuxです。以降の作業は/home/emlinux上で行いました。
DockerおよびDocker Comoseのインストール
以下のコマンドを実行し、DockerおよびDocker Composeをインストールしてください。
sudo apt install -y docker.io docker-compose-v2
emlinuxユーザをdockerグループに追加してください。
sudo gpasswd -a emlinux docker
ログアウトし、再ログイン後、sudoなしでdockerコマンドを実行できることを確認してください。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Proxyサーバがある場合、Dockerにproxyサーバを設定してください。
sudo mkdir /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=<proxyサーバのIPアドレス>:<ポート番号>"
Environment="HTTPS_PROXY=<proxyサーバのIPアドレス>:<ポート番号>"
EOF
dockerデーモンを再起動してください。
sudo systemctl daemon-reload
sudo systemctl restart docker
docker searchコマンドを実行し、proxyサーバが正しく設定されていることを確認してください。
$ docker search mariadb
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mariadb MariaDB Server is a high performing open sou… 5713 [OK]
(snip)
qemu-user-staticのインストール
x86_64の環境でarm64のバイナリをクロスビルドするために、qemu-user-staticをインストールしてください。
sudo apt install -y qemu-user-static
EMLinuxの展開
以下のページの「評価版お申込みフォーム」に必要事項を記入してください。
後日、申し込み時に入力いただいたメールアドレスに、ダウンロードURLを記載したメールが届きます。そのURLから EMLinux 3.0 をダウンロードしてください。なお、本記事では、EMLinux 3.0 (202403) を使用しています (EMLinuxは1ヶ月周期の定期リリースを行っており、yyyymmのようなバージョンが付いています) 。
EMLinux_3.0-202403.zipを/home/emlinuxにコピーしてください。
EMLinux_3.0-202403.zipを解凍してください。
cd /home/emlinux
unzip EMLinux_3.0-202403.zip
$ unzip EMLinux_3.0-202403.zip
Archive: EMLinux_3.0-202403.zip
creating: EMLinux_3.0-202403/
creating: EMLinux_3.0-202403/source/
inflating: EMLinux_3.0-202403/source/emlinux-3.0-202403.tar.gz
creating: EMLinux_3.0-202403/doc/
inflating: EMLinux_3.0-202403/doc/EMLinux_3.0-202403_Release_Notes.pdf
inflating: EMLinux_3.0-202403/doc/EMLinux_3.0-202403_User_Manual_ja.pdf
inflating: EMLinux_3.0-202403/doc/EMLinux_3.0-202403_Recipe_Guide_ja.pdf
解凍後、sourceディレクトリに移動してください。
cd /home/emlinux/EMLinux_3.0-202403/source/
上記sourceディレクトリに保存されている emlinux-3.0-202403.tar.gzファイルを、tarコマンドで解凍してください。
tar xvf emlinux-3.0-202403.tar.gz
解凍後、以下のディレクトリに移動してください。
cd /home/emlinux/EMLinux_3.0-202403/source/emlinux-3.0-202403/repos/meta-emlinux/docker/
上記dockerディレクトリ内にある run.sh を実行してください。初回起動時にはコンテナの作成処理が行われます。コンテナ作成処理後、コンテナにログインした状態になります。
$ ./run.sh
(snip)
build@82fa043f8378:~/work$
local.confファイルの編集
以下のコマンドを実行し、ビルドのために必要な環境変数を設定してください。
source setup-emlinux build
viエディタでlocal.confファイルを開き、ファイルの末尾に以下を追記してください。
$ vi conf/local.conf
(snip)
MACHINE = "raspberrypi3bplus-64"
USERS += "emlinux"
USER_emlinux[password] = "emlinux"
USER_emlinux[flags] = "create-home clear-text-password"
USER_emlinux[home] = "/home/emlinux"
USER_emlinux[shell] = "/bin/bash"
IMAGE_INSTALL:append = " sshd-regen-keys"
IMAGE_PREINSTALL:append = " \
openssh-server \
connman \
"
EMLinuxのビルド
EMLinuxのビルドを行ってください。
bitbake emlinux-image-base
ビルド完了後、exitコマンドでコンテナからログアウトしてください。
build@82fa043f8378:~/work$ exit
exit
QEMUのインストール
QEMUをインストールしてください。
sudo apt install -y qemu-system-arm seabios
EMLinuxの起動
以下のディレクトリに移動してください。
cd /home/emlinux/EMLinux_3.0-202403/source/emlinux-3.0-202403/build
wicファイルのサイズを変更してください。1GiB, 2GiB, 4GiBのように、2の乗数のサイズとなるように変更してください。以下の例では、1GiBに変更しています。
qemu-img resize ./tmp/deploy/images/raspberrypi3bplus-64/emlinux-image-base-emlinux-bookworm-raspberrypi3bplus-64.wic 1G
viエディタでrun.shファイルを作成してください。
vi run.sh
run.shファイルに以下を記載してください。
qemu-system-aarch64 \
-m 1024 \
-M raspi3b \
-kernel ./tmp/deploy/images/raspberrypi3bplus-64/Image \
-dtb ./tmp/deploy/images/raspberrypi3bplus-64/bcm2837-rpi-3-b-plus.dtb \
-drive format=raw,file=./tmp/deploy/images/raspberrypi3bplus-64/emlinux-image-base-emlinux-bookworm-raspberrypi3bplus-64.wic \
-append "console=ttyAMA0 root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4 dwc_otg.fiq_fsm_enable=0 bcm2708_fb.fbwidth=1280 bcm2708_fb.fbheight=720" \
-no-reboot \
-device usb-kbd \
-device usb-mouse \
-device usb-net,netdev=net0 \
-netdev user,id=net0,hostfwd=tcp::2222-:22 \
-nographic
run.shファイルに実行権限を付与してください。
chmod +x run.sh
run.shファイルを実行してください。
./run.sh
$ ./run.sh
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[ 0.000000] Linux version 6.1.75-cip14 (isar-users@googlegroups.com) (aarch64-linux-gnu-gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Thu, 01 Jan 1970 0 1:00:00 +0000
[ 0.000000] Machine model: Raspberry Pi 3 Model B+
[ 0.000000] efi: UEFI not found.
[ 0.000000] Reserved memory: created CMA memory pool at 0x0000000038000000, size 64 MiB
(snip)
- FIXME: 現時点では、ログインプロンプトが表示されず、後述のsshでログインする必要があります。
別のターミナルを開き、sshで仮想マシンにアクセスできることを確認してください。
ssh emlinux@localhost -p 2222
さいごに
ビルドしたEMLinux 3.0 (202403) を、QEMUでエミュレートしたRaspberry Pi上で動かしてみました。お手元にRaspberry Piの実機が無くても、QEMUでお手軽に動かすことが可能です。