跳转到主要内容

从源码编译图像

📦 前提条件

  • 一台运行 Arch Linux、Arch Linux ARM 或其他基于 Arch 的发行版的计算机
  • root 权限
  • 15GB 的空闲空间
  • 8GB 的内存
  • 一些耐心

🚀 简介

在本指南中,我们将带你了解如何为 Fydetab Duo 从源代码制作镜像。这将允许你创建具有特定配置和软件包的自定义镜像。这个过程类似于使用 mkarchiso 工具创建 Arch Linux ISO 镜像,但经过一些修改,以支持 ARM64 架构和 Fydetab Duo 硬件。

镜像结构

以下是 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 中。

常见问题

  1. 下载库错误:

    有时,由于网络连接不稳定,构建过程可能会由于下载库错误而失败。错误信息如下所示:

    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 仓库中提交问题,以便获取进一步的帮助。