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 を設定する。
よく知らないので、
あたりを参考に、br0 を作って、上のconfig のように、lxc.network を設定すればいいんじゃないかな…(うろおぼえ)