RaspberryPi 3 で 64bit debian を動かす

まあ今は各ディストリビューションからぼちぼち出てるから無理しなくてもいいんだけど…

RPi って結構ユーザー空間のツールやライブラリが必要で、カーネルだけ動いてもなんか機能が不足してたりして、raspbian 以外のディストリだと、なんかが動いたり動かなかったりするなどするイメージがあるね(よく知らない)

なので、raspbian の上で、debian arm64 を動かすことにする。

まず、

https://devsidestory.com/build-a-64-bit-kernel-for-your-raspberry-pi-3/

これを参考にして、64bit kernel をビルドして、64bit kernel の上で、raspbian 32bit が動くようにする。

次に、LXC を入れる(apt install lxc) 。入れたら、

 $ sudo -i
 # CONTAINER_NAME=debian64 # 好きな名前
 # lxc-create -t debian -n $CONTAINER_NAME -- -a arm64

とかする、と、LXC の debian は armhf から armv8 は作れないとか言われるので、負けないで、/usr/share/lxc/templates/lxc-debian の "armhf" でごにょごにょしてるところを消す

if [ $hostarch = "armhf" -o $hostarch = "armel" ] && \
   [ $arch != "armhf" -a $arch != "armel" ]; then
    echo "can't create $arch container on $hostarch"
#    exit 1
fi

消したら、

 # lxc-create -t debian -n $CONTAINER_NAME -- -a arm64

して、debootstrap が終わるまで待つ。

終わったら、

 # lxc-start -n $CONTAINER_NAME 

する…と、何故か起動しないので、/var/lib/lxc/$CONTAINER_NAME/config を書きかえる。(debian.common.conf がなんか良くない気がする)


とりあえず手元では以下のconfig で動いてるから。

# Template used to create this container: /usr/share/lxc/templates/lxc-debian
# Parameters passed to the template: -a arm64
# For additional config options, please look at lxc.container.conf(5)
lxc.network.type = veth
lxc.network.link = br0
lxc.network.flags = up
lxc.network.name = eth0

lxc.rootfs = /var/lib/lxc/debian64/rootfs


# Common configuration
# lxc.include = /usr/share/lxc/config/debian.common.conf

lxc.pivotdir = lxc_putold

# Default mount entries
lxc.mount.entry = proc proc proc nodev,noexec,nosuid 0 0
lxc.mount.entry = sysfs sys sysfs ro 0 0

# Default console settings
lxc.tty = 4
lxc.pts = 1024


# Container specific configuration
# lxc.mount = /var/lib/lxc/debian64/fstab
lxc.utsname = debian64
lxc.arch = arm64
lxc.autodev = 1
lxc.kmsg = 0


# Default cgroup limits
lxc.cgroup.devices.deny = a
## Allow any mknod (but not using the node)
lxc.cgroup.devices.allow = c *:* m
lxc.cgroup.devices.allow = b *:* m
## /dev/null and zero
lxc.cgroup.devices.allow = c 1:3 rwm
lxc.cgroup.devices.allow = c 1:5 rwm
## consoles
lxc.cgroup.devices.allow = c 5:0 rwm
lxc.cgroup.devices.allow = c 5:1 rwm
## /dev/{,u}random
lxc.cgroup.devices.allow = c 1:8 rwm
lxc.cgroup.devices.allow = c 1:9 rwm
## /dev/pts/*
lxc.cgroup.devices.allow = c 5:2 rwm
lxc.cgroup.devices.allow = c 136:* rwm
## rtc
lxc.cgroup.devices.allow = c 254:0 rm
## fuse
lxc.cgroup.devices.allow = c 10:229 rwm
## tun
lxc.cgroup.devices.allow = c 10:200 rwm
## full
lxc.cgroup.devices.allow = c 1:7 rwm
## hpet
lxc.cgroup.devices.allow = c 10:228 rwm
## kvm
lxc.cgroup.devices.allow = c 10:232 rwm
## To use loop devices, copy the following line to the container's
## configuration file (uncommented).
#lxc.cgroup.devices.allow = b 7:* rwm


外へネットワーク繋げたいなら、veth を設定する。

よく知らないので、

https://wiki.archlinuxjp.org/index.php/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%96%E3%83%AA%E3%83%83%E3%82%B8#iproute2_.E3.82.92.E4.BD.BF.E3.81.86

あたりを参考に、br0 を作って、上のconfig のように、lxc.network を設定すればいいんじゃないかな…(うろおぼえ)