LoginSignup
0
1

More than 3 years have passed since last update.

RaspberryPi仮想マシンでDockerコンテナイメージを作って時短したい3回目(失敗かも)

Last updated at Posted at 2019-07-19

やりたいこと

  • 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時間くらいかかるので、ミラーサーバーは大変助かります。

wget http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian_lite/images/raspbian_lite-2019-04-09/2019-04-08-raspbian-stretch-lite.zip

解凍します

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ファイルを見ると

file
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

確認すると、デバイスファイルができているようです。

fdisk
$ 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 
0
1
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
0
1