跳转到内容

构建说明

这里说明如何从本项目文件构建得到 arCNiso 的镜像文件。

环境要求

法一:在 Arch Linux 系统中构建

  • 一个可联网的、AMD64 架构的 Arch Linux 系统。
  • 以普通用户身份登录,且具有 sudo 权限。

法二:在 Docker 容器中构建

参见构建说明(Docker 版)

分步说明

安装依赖(约 1 分钟,依赖网速)

Terminal window
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-bin
cd /tmp/paru-bin;aaa makepkg -si --noconfirm;cd /tmp;rm -rf /tmp/paru-bin

获取本项目(约 1 分钟,依赖网速)

克隆本仓库,为此在 bash 或 zsh 中运行:

Terminal window
# arCNiso 项目目录,路径可据实际情况设置
# 若于 docker 容器内构建,请确保它与之前 docker run 的 -v 参数映射到的容器目录路径一致,默认不需要改动
ARCN_DIR=$HOME/arCNiso
git clone --filter=blob:none https://github.com/clsty/arCNiso $ARCN_DIR && cd $ARCN_DIR

其中 --filter=blob:none 是为了仅下载所需的对象,而忽略多余的 blob,以便加快速度。

如果注重稳定性,建议切换到最新的 tag:

Terminal window
git checkout $(git describe --tags `git rev-list --tags --max-count=1`)

准备 .emacs.d(可选;约 5 分钟,依赖网速)

运行

Terminal window
./homebase/prepareemacs.sh

接下来按指示操作即可。

准备 anotherpac(约 5 分钟,依赖网速和 CPU 速度)

运行

Terminal window
./anotherpac/full-prepare.sh

接下来按指示操作即可。

准备 AUR 包(约 30 分钟,依赖网速和 CPU 速度)

arCNiso 使用了部分来自 AUR 的包(见 packages.x86_64 的开头部分), 因此需要提前构建它们。

可以利用

Terminal window
# 加 -f 参数以强制全部构建
./aur/full-update.sh

自动构建这些包。 但请注意,此脚本可能仍存在一些问题,可能无法一次直接地完成所有工作,或者无法合理避免重复工作,还可能会出现构建时缺依赖报错的问题,对此只要据报错信息手动解决即可(大概需要你会一点 Bash)。 或者,清理一下 ./aur/cache 目录,或者其下造成问题的子目录。

安全启动支持(可选,耗时未知)

为了支持安全启动,需要对 mkarchiso 进行修改。 而 mkarchiso 脚本来自 Arch Linux 官方,可能不断更新,从而导致旧的补丁(指 mkarchiso.patch )无效,加上其他的情况变动,均可能需要手动调整修改脚本、排查并解决问题。因此,若需要安全启动支持,则视顺利程度,耗时下限低于 5 分钟,上限则无穷大。

步骤:

  • 需要确保 packages.x86_64 含有的包名:mokutil shim-signed(来自 AUR)
    • 如果你不需要安全启动,可以选择把这些包名从中移除。
  • 安装依赖:
Terminal window
./patchedmkarchiso/deps.sh
  • 生成密钥
Terminal window
./patchedmkarchiso/genkey.sh
  • 打补丁
Terminal window
./patchedmkarchiso/PATCH.sh

正式构建(约 5 分钟,依赖网速和 CPU 速度)

运行(若 OUT 目录存在,则会被删除):

Terminal window
./makeiso

输出的镜像文件位于 ./OUT 下(为了方便使用虚拟机进行测试,每次输出时会固定更名为 arCNiso.iso )。

再次构建

如果短时间内多次构建,不必重复进行正式构建之前的准备工作,可以直接运行 ./makeiso

但是,比如一个月之后再次构建呢? 此时对整个项目再次进行准备工作就比较有必要了——不过,当然不是完全从零开始。

以下进行分步说明,但并不是所有步骤都必要,请根据实际情况适当安排。

以下默认工作目录为 arCNiso 的项目文件夹。

更新系统

以 paru 为例:

Terminal window
function aaa { while true;do if "$@";then break;else echo "[aaa] Retrying \"$@\"";sleep 1;fi;done; }
aaa paru -Sy&&aaa paru -Su --noconfirm

注意,部分软件包在更新之后可能需要重启系统才能正常工作。

更新 arCNiso 项目仓库

Terminal window
git pull

更新 .emacs.d

Terminal window
./homebase/prepareemacs.sh -f

接下来按指示操作即可。

更新 anotherpac

Terminal window
./anotherpac/full-prepare.sh

更新 AUR 包

Terminal window
./aur/full-update.sh -f

更新 mkarchiso

Terminal window
./patchedmkarchiso/PATCH.sh

正式构建

Terminal window
./makeiso