LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

创建干净可迁移的 Armbian 环境

各种环境缺点

Armbian 的构建项目 一直以来都是有自己官方的构建要求,而且随着版本更迭,会有不同要求。如 23.08 和 21.08 的构建脚本在系统包和构建方式就有很大区别。

使用一般环境

老版本有非官方的 Docker 项目,但是问题很多。虚拟机的话,虽然在官方支持列表,效率和内存暂不说,硬盘这个就是大问题,你挂 Virtualbox 的 vboxsf 和 cifs 都是编译不了的,如果代码要放到虚拟机里头,那就真的麻烦了。主机系统来搞的话,很容易又把系统搞得很脏,还不利于分版本编译。

使用容器环境

最好的方式就是利用如 lxdsystemd-nspawn 等系统级别的容器来创建,但是容器有个缺点,需要有创建并读取新设备的权限,可惜系统级别的容器都会以 tmpfs 自动挂载 /dev,虽然可以给予设备权限,但是新设备是没法自动看到的。于是这里有个 /dev 需要读写(通过主机的 loop 设备,创建新的主机 loopXpY 设备能够读到并且操作)和不该被读写(容器会覆盖主系统,导致安全和奔溃)的矛盾。如果利用如 docker 这样应用级别的容器,将 /dev 完全开放,是一个解决办法,但是比起系统级别的容器来讲,有动态映射的问题和系统管理的麻烦,且依旧摆脱不聊覆盖系统设备的风险。

使用 chroot 环境

如果系统级容器解决不了设备问题,那么最简单的方式就是 chroot 或者各种 fakeroot 技术。为了不使容器系统的系统级别的包影响到主机设备,最好是在 chroot 之前,借用 lxdsystemd-nspawn 等运行 Armbian 的构建脚本把需要的包安装好。

开始

这里以老版本 21.08 来说,其他版本同理。

创建系统

21.08 依赖的操作系统是 Ubuntu Hirsute:

debootstrap --include=systemd,dbus hirsute hirsute http://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/

安装依赖

这里假定 Armbian 的构建项目在 $HOME/Documents/Projects/Other/Armbian/build

systemd-nspawn -D hirsute
passwd
exit
systemd-nspawn -D hirsute -b --bind="$HOME/Documents/Projects/Other/Armbian:/mnt"

然后进入系统创建普通用户并成为 sudoer,使用用户到 /mnt/build 执行 ./compile.sh。该怎么执行就怎么执行,主要是为了在正式构建镜像之前把包自动安装。安装完就退出容器。

运行环境

for target in dev dev/pts proc sys ; do mount -o bind /$target ./hirsute/$target ; done
mount --bind "$HOME/Documents/Projects/Other/Armbian" ./hirsute/mnt
chroot hirsute

使用完后最好把设备都 umount 掉:

umount -R ./hirsute/{mnt,dev/pts,dev,proc,sys}