从源码编译图像
📦 前提条件
- 一台运行 Arch Linux、Arch Linux ARM 或其他基于 Arch 的发行版的计算机
- root 权限
- 15GB 的空闲空间
- 8GB 的内存
- 一些耐心
🚀 简介
在本指南中,我们将带你了解如何为 Fydetab Duo 从源代码制作镜像。这将允许你创建具有特定配置和软件包的自定义镜像。这个过程类似于使用 mkarchiso 工具创建 Arch Linux ISO 镜像,但经过一些修改,以支持 ARM64 架构和 Fydetab Duo 硬件。
- 后端库:ImageForge
- 镜像仓库:GitHub
镜像结构
以下是 Fydetab Duo 镜像中各个文件的说明:
-
fydetab-duo_UEFI.img
:这是 Fydetab Duo 的 UEFI 镜像文件,包含启动加载器。 -
packages.aarch64
:该文件列出了将在 Fydetab Duo 上安装的所有软件包。它在镜像创建过程中使用,以指定所需的软件包。 -
pacman.conf.aarch64
:这是特定于 ARM64 架构的 Pacman 配置文件,包管理器将使用此文件来确定软件包源和配置。 -
profiledef
:此文件定义了 Fydetab Duo 镜像的配置文件。它指定了系统配置,如磁盘分区、输出镜像名称以及其他设置。 -
rootfs
:此目录包含 Fydetab Duo 镜像的根文件系统,包括构成操作系统的所有必要文件和目录。
每个文件在镜像创建过程中都起着至关重要的作用,允许你根据具体需求定制和配置 Fydetab Duo 镜像。
设置构建环境
1. 安装依赖
在开始构建镜像之前,你需要安装必要的依赖。运行以下命令进行安装:
sudo pacman -Sy --noconfirm --needed python parted btrfs-progs git wget arch-install-scripts gptfdisk dosfstools multipath-tools
wget https://deb-mirror.fydeos.com/pacman/repo/fyde/aarch64/python-imageforge-0.0.1-1-any.pkg.tar.zst
sudo pacman -U --noconfirm python-imageforge-0.0.1-1-any.pkg.tar.zst
2. 设置 QEMU(可选)
如果你希望在 x86 机器上构建镜像,可以使用 QEMU 来模拟 ARM64 环境。安装 QEMU,运行以下命令:
sudo pacman -S --noconfirm qemu-user-static qemu-user-static-binfmt
重启 binfmt 服务以启用 QEMU:
sudo systemctl restart systemd-binfmt
3. 克隆仓库
接下来,克隆 ImageForge 仓库到本地计算机:
git clone https://github.com/Linux-for-Fydetab-Duo/images.git
4. 构建镜像
进入 images
目录,运行以下命令来构建镜像:
sudo ./fydetab-arch/profiledef -c fydetab-arch -w ./work -o ./out
如果你有超过 16GB 的内存,可以通过将工作目录设置为 tmpfs 挂载点来加速构建过程。这样可以减少 I/O 开销,并加快镜像创建速度。在运行 profiledef 命令时,指定 -w /tmp/work
作为工作目录。
5. 刷写镜像
镜像创建完成后,你可以按照 安装 指南中的说明,将生成的镜像刷写到 microSD 卡或 eMMC 中。
常见问题
- 下载库错误:
有时,由于网络连接不稳定,构建过程可能会由于下载库错误而失败。错误信息如下所示:
warning: failed to retrieve some files
error: failed to commit transaction (download library error)
Errors occurred, no packages were upgraded.
==> ERROR: Failed to install packages to new root
Traceback (most recent call last):
File "/home/panda/images/fydetab-arch/profiledef", line 82, in <module>
main()
File "/home/panda/images/fydetab-arch/profiledef", line 58, in main
pacstrap_packages()
File "/usr/lib/python3.12/site-packages/imageforge/packages.py", line 23, in pacstrap_packages
subprocess.run(
File "/usr/lib/python3.12/subprocess.py", line 571, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['pacstrap -c -C /home/panda/images/fydetab-arch/pacman.conf.aarch64 -M -G /home/panda/images/work/aarch64 ..... ']' returned non-zero exit status 1.- 为了解决这个问题,你可以尝试重新运行 profiledef 命令。如果问题仍然存在,可以在 ImageForge 仓库中提交问题,以便获取进一步的帮助。