构建说明
这里说明如何从本项目文件构建得到 arCNiso 的镜像文件。
环境要求
法一:在 Arch Linux 系统中构建
- 一个可联网的、AMD64 架构的 Arch Linux 系统。
- 以普通用户身份登录,且具有 sudo 权限。
法二:在 Docker 容器中构建
分步说明
安装依赖(约 1 分钟,依赖网速)
sudo pacman -S --needed archiso git rsync pandoc base-devel fd cmake less sudo
# 安装 paru(若已添加 archlinuxcn 等第三方源,也可用 pacman 直接安装)## 自定义函数 aaa(again and again)以便在失败时自动重试;## 若失败太多次,请按 Ctrl-C 来强制停止,再排查问题function aaa { while true;do if "$@";then break;else echo "[aaa] Retrying \"$@\"";sleep 1;fi;done; }git clone https://aur.archlinux.org/paru-bin.git /tmp/paru-bincd /tmp/paru-bin;aaa makepkg -si --noconfirm;cd /tmp;rm -rf /tmp/paru-bin
获取本项目(约 1 分钟,依赖网速)
克隆本仓库,为此在 bash 或 zsh 中运行:
# arCNiso 项目目录,路径可据实际情况设置# 若于 docker 容器内构建,请确保它与之前 docker run 的 -v 参数映射到的容器目录路径一致,默认不需要改动ARCN_DIR=$HOME/arCNisogit clone --filter=blob:none https://github.com/clsty/arCNiso $ARCN_DIR && cd $ARCN_DIR
其中 --filter=blob:none
是为了仅下载所需的对象,而忽略多余的 blob,以便加快速度。
如果注重稳定性,建议切换到最新的 tag:
git checkout $(git describe --tags `git rev-list --tags --max-count=1`)
准备 .emacs.d(可选;约 5 分钟,依赖网速)
运行
./homebase/prepareemacs.sh
接下来按指示操作即可。
准备 anotherpac(约 5 分钟,依赖网速和 CPU 速度)
运行
./anotherpac/full-prepare.sh
接下来按指示操作即可。
准备 AUR 包(约 30 分钟,依赖网速和 CPU 速度)
arCNiso 使用了部分来自 AUR 的包(见 packages.x86_64
的开头部分),
因此需要提前构建它们。
可以利用
# 加 -f 参数以强制全部构建./aur/full-update.sh
自动构建这些包。
但请注意,此脚本可能仍存在一些问题,可能无法一次直接地完成所有工作,或者无法合理避免重复工作,还可能会出现构建时缺依赖报错的问题,对此只要据报错信息手动解决即可(大概需要你会一点 Bash)。
或者,清理一下 ./aur/cache
目录,或者其下造成问题的子目录。
安全启动支持(可选,耗时未知)
为了支持安全启动,需要对 mkarchiso 进行修改。
而 mkarchiso 脚本来自 Arch Linux 官方,可能不断更新,从而导致旧的补丁(指 mkarchiso.patch
)无效,加上其他的情况变动,均可能需要手动调整修改脚本、排查并解决问题。因此,若需要安全启动支持,则视顺利程度,耗时下限低于 5 分钟,上限则无穷大。
步骤:
- 需要确保
packages.x86_64
含有的包名:mokutil
shim-signed
(来自 AUR)- 如果你不需要安全启动,可以选择把这些包名从中移除。
- 安装依赖:
./patchedmkarchiso/deps.sh
- 生成密钥
./patchedmkarchiso/genkey.sh
- 打补丁
./patchedmkarchiso/PATCH.sh
正式构建(约 5 分钟,依赖网速和 CPU 速度)
运行(若 OUT
目录存在,则会被删除):
./makeiso
输出的镜像文件位于 ./OUT
下(为了方便使用虚拟机进行测试,每次输出时会固定更名为 arCNiso.iso
)。
再次构建
如果短时间内多次构建,不必重复进行正式构建之前的准备工作,可以直接运行 ./makeiso
。
但是,比如一个月之后再次构建呢? 此时对整个项目再次进行准备工作就比较有必要了——不过,当然不是完全从零开始。
以下进行分步说明,但并不是所有步骤都必要,请根据实际情况适当安排。
以下默认工作目录为 arCNiso
的项目文件夹。
更新系统
以 paru 为例:
function aaa { while true;do if "$@";then break;else echo "[aaa] Retrying \"$@\"";sleep 1;fi;done; }aaa paru -Sy&&aaa paru -Su --noconfirm
注意,部分软件包在更新之后可能需要重启系统才能正常工作。
更新 arCNiso 项目仓库
git pull
更新 .emacs.d
./homebase/prepareemacs.sh -f
接下来按指示操作即可。
更新 anotherpac
./anotherpac/full-prepare.sh
更新 AUR 包
./aur/full-update.sh -f
更新 mkarchiso
./patchedmkarchiso/PATCH.sh
正式构建
./makeiso