やりたいこと
- RaspberryPiのBuildやDockerを高速なマシンでやりたい
仮想マシンでQEMUを動かす
こちらのページを参考にさせていただきます
Raspberry Pi のセルフビルド環境を QEMU で作る
手順 qemuインストール
Azureで仮想マシンを作ります。UbuntuServer-18.04-LTSでデフォルトで作成しました。
CPUの構成もデフォルトで、これに成功したらもっと早い構成を作ります。
sudo apt-get update
sudo apt-get upgrade
sudo apt install qemu
sudo apt install unzip
北陸先端大学のミラーサーバーから最新のイメージをダウンロードさせていただきます。
本家のサーバーはダウンロードに1時間くらいかかるので、ミラーサーバーは大変助かります。
解凍します
unzip 2019-04-08-raspbian-stretch-lite.zip
https://github.com/dhruvvyas90/qemu-rpi-kernel よりQEMU用カーネルとDevice Treeファイルをダウンロード。
wget https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/master/kernel-qemu-4.14.79-stretch
wget https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/master/versatile-pb.dtb
最新版のはず。
何をやっているのか全くわかっていません。QEMUのマニュアルを熟読するべき(自戒)
ダウンロードしたものを、¥QEMUにコピーして、imageファイルを見ると
2019-04-08-raspbian-stretch-lite.img: DOS/MBR boot sector;
partition 1 : ID=0xc, start-CHS (0x0,130,3), end-CHS (0x5,249,31), startsector 8192, 87851 sectors;
partition 2 : ID=0x83, start-CHS (0x6,30,25), end-CHS (0xdb,68,41), startsector 98304, 3424256 sectors
sudo losetup -frP 2019-04-08-raspbian-stretch-lite.img
確認すると、デバイスファイルができているようです。
$ sudo fdisk -l /dev/loop0
Disk /dev/loop0: 1.7 GiB, 1803550720 bytes, 3522560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc1dc39e5
Device Boot Start End Sectors Size Id Type
/dev/loop0p1 8192 96042 87851 42.9M c W95 FAT32 (LBA)
/dev/loop0p2 98304 3522559 3424256 1.6G 83 Linux
適当にマウントしてtarballに固め、unmount して losetup -dをします。
sudo mount -o ro /dev/loop0p2 /mnt
sudo tar cvjf ~/raspbian-stretch-lite.tar.bz2 -C /mnt .
sudo umount /mnt
確認して削除
$losetup -l
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC
/dev/loop0 0 0 0 1 /home/kuma/qemu-pi/2019-04-08-raspbian-stretch-lite.img 0 512
sudo losetup -d /dev/loop0
先達に従い、粛々とコマンドを打ち込んで実行します。
$ mkdir -p ~/arm/raspbian
$ cd ~/arm/raspbian
$ sudo tar xjf ~/raspbian-stretch-lite.tar.bz2
$ sudo apt-get install qemu-user-static
$ sudo update-binfmts --display | grep arm
qemu-arm (enabled):
interpreter = /usr/bin/qemu-arm-static
qemu-armeb (enabled):
interpreter = /usr/bin/qemu-armeb-static
$ cd
$ sudo cp /usr/bin/qemu-arm-static arm/raspbian/usr/bin/
色々マウントする
sudo mount -t sysfs sysfs arm/raspbian/sys
sudo mount -t proc proc arm/raspbian/proc
sudo mount -t devtmpfs udev arm/raspbian/dev
sudo mount -t devpts devpts arm/raspbian/dev/pts
起動してみます。
sudo chroot arm/raspbian /bin/bash
root@myBuilder:/# su - pi
pi@myBuilder:~ $ uname -a
Linux myBuilder 4.18.0-1024-azure #25~18.04.1-Ubuntu SMP Fri Jun 28 23:27:46 UTC 2019 armv7l GNU/Linux
pi@myBuilder:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 9.8 (stretch)
Release: 9.8
Codename: stretch
おお、これでなんとか動く環境が揃いました。
exitを何度かすると、通常のubuntuに戻り、
sudo chroot arm/raspbian /bin/bash
su - pi
で、Raspbianに切り替わります。
せっかくできたのでスナップショットを撮り、バックアップを自動化しておきます。
Dockerインストール
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker pi
systemctl コマンドなどが、全く効かない。
Dockerも異常を出して止まってしまう。
この辺りで解決すると聞いて
$ sudo apt-get install -y resolvconf
$ sudo systemctl restart networking.service
$ sudo cat /etc/resolv.conf