DockerイメージからWSLのカスタムディストロを作る
OpenSUSE Tumbleweedベース
ビルドOSの必要条件
buildah
GNU tar
182MB程度のrootfs.tar.gzができる
podman, buildah, cniプラグイン各バイナリが重いので好みでドロップしていい
code:build.sh
set -xe
container=$(buildah from opensuse/tumbleweed)
buildah run $container zypper --non-interactive install vim-small bsdtar less wget curl openssh podman buildah shadow sudo
buildah run $container zypper clean --all
buildah run $container useradd -m wsluser
buildah run $container sh -c 'printf "wsluser\tALL=(ALL)\tNOPASSWD:\t/usr/bin/zypper\n" > /etc/sudoers.d/wsluser'
cat << 'EOF' > wsl.conf
options = "metadata,umask=022,fmask=111"
default = "wsluser"
EOF
buildah copy $container wsl.conf /etc/wsl.conf
buildah run $container chmod 555 /etc/wsl.conf
root="$(buildah unshare -- buildah mount $container)"
dir="$(pwd)"
cd "$root"
tar --exclude=./etc/resolv.conf -czf "$dir/rootfs.tar.gz" .
buildah unmount $container
buildah rm $container
rootfsから/etc/resolv.confを除いているのは、このファイルのパーミッションが700になっていてWSLにインポートした後でも保持されてしまうため
コンテナランタイムで管理されていることが関係していると思われるが調べてない