1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubで公開されているEMLinuxを、QEMUでエミュレートしたRaspberry Piで動かしてみた

Last updated at Posted at 2024-03-31

はじめに

サイバートラストが提供する組み込み/IoT機器向けのOSであるEMLinuxを、QEMUでエミュレートしたRaspberry Pi上で動かしてみました。

なお、本記事では、GitHubのリポジトリで公開されているEMLinuxを使用しました。

参考

EMLinuxのWebページ

  • EMLinux
    • 製品版と同じ機能を利用できる無償評価版の申し込みが可能です。

EMLinuxのブログ

MIRACLE LINUX Users Meetup!!!

構成図

+--------------------------------+
| +----------------------------+ |
| | +------------------------+ | |
| | | +--------------------+ | | |
| | | | EMLinux 3.0        | | | |
| | | +--------------------+ | | |
| | | 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

meta-emlinuxリポジトリのクローン

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コマンドで、リポジトリをクローンしてください。

git clone -b bookworm https://github.com/miraclelinux/meta-emlinux.git repos/meta-emlinux

以下のディレクトリに移動してください。

cd /home/emlinux/github/miraclelinux/emlinux/repos/meta-emlinux/docker

上記dockerディレクトリ内にあるrun.shを実行してください。初回起動時にはコンテナの作成処理が行われます。コンテナ作成処理後、コンテナにログインした状態になります。

$ ./run.sh
(snip)
build@82fa043f8378:~/work$

local.confファイルの編集

以下のコマンドを実行し、ビルドのために必要な環境変数を設定してください。

source repos/meta-emlinux/scripts/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/github/miraclelinux/emlinux/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

さいごに

GitHubから入手したEMLinuxを、QEMUでエミュレートしたRaspberry Pi上で動かしてみました。Raspberry Piをすぐに入手できない場合の参考になれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?