有天入了 fedora 的坑,把笔记本电脑安装了它作为主系统。但是有个问题随之而来,恐怕我以后没法用 deb 包还有星火商店了(解deb包吧还怪麻烦,而且不太方便找软件)。想起星火社区搞了一个 ACE(debian 容器),但 rpm 构建脚本已经年久失修,问题挺多的。后面干脆看 ACE 的源码看它怎么实现的了。后面了解到使用了 bwrap ,随后我在一个 debian rootfs 上做了些简易测试,感觉还算成功。
首先通过 debootstrap 可以下载 debian 的 rootfs。
sudo debootstrap --arch amd64 sid /path/to/debian/ https://deb.debian.org/debian
参数:--arch amd64 代表 x86 64 架构,sid 为发行版代号,/path/to/debian/
为 rootfs 存放的位置,给个路径就好。而最后面是下载源。
通过 dnf 安装 bwrap
sudo dnf install bubblewrap
编写一个启动脚本
#!/bin/bash
CHROOT_DIR="/path/to/debian"
uid="1000"
gid="1000"
bwrap \
--dev-bind $CHROOT_DIR / \
--proc /proc \
--dev /dev \
--dev-bind-try /dev/snd/midiC3D0 /dev/snd/midiC3D0 \
--dev-bind /dev/snd /dev/snd \
--dev-bind-try /dev/shm /dev/shm \
--dev-bind-try /etc/resolv.conf /etc/resolv.conf \
--dev-bind-try /dev/dri /dev/dri \
--dev-bind /tmp /tmp \
--dev-bind-try /run/user/$uid/pulse /run/user/$uid/pulse \
--setenv DISPLAY :0 \
--dev-bind-try /media /media \
--dev-bind /run /run \
--dev-bind /sys /sys \
--dev-bind /tmp/.X11-unix /tmp/.X11-unix \
--chdir / \
--hostname debianBox \
--cap-add CAP_SYS_ADMIN \
--unshare-uts \
-- /bin/bash
其中 CHROOT_DIR
为 rootfs 路径,其中需要挂载宿主比较重要的 /dev
/proc
/run
/tmp
/sys/
目录(按需挂载),其中 /tmp/.X11-unix
为用于 Xorg,支持 GUI 程序。 /dev/dri
为在安装相关驱动情况下用于直通宿主显卡设备。/dev/snd
允许容器访问声卡设备。/run/user/$uid/pulse
为 PulseAudio 音频服务器用户运行会话目录。/dev/snd/midiC3D0
为 midi 接口需要。uid
gid
为用户id和用户所在的组id。DISPLAY
通常是以 :0
为默认,指的是显示屏幕。还有很多相关参数不一一介绍了,它本身的自由度比较高,详细可自行了解相关资料。
在 sudo [shell文件路径]
提权执行后即可进入该容器。就和 chroot 方式差不多。
补一张在 fedora 上跑起星火商店的图片。