archiso - Arch Linux 中文维基

跳转到内容

# archiso

来自 Arch Linux 中文维基

相关文章

- Archiso as pxe server
- Offline installation
- USB flash installation medium

翻译状态：

- 本文（或部分内容）译自 archiso，最近一次同步于 2025-01-22，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

Archiso 是一个高度可定制的工具，用于构建 Arch Linux live CD/USB ISO 映像。官方映像是用 archiso 构建的，包含这些软件包。它可以用作救援系统、linux 安装程序或其他系统的基础。这篇 Wiki 文章介绍了如何安装 archiso，以及如何配置它以控制生成的 ISO 映像的各个方面，例如随附的软件包和文件。 技术需求和构建步骤可以在官方项目文档中找到。 archiso 通过许多 bash 脚本实现。 archiso 的核心组件是 mkarchiso 命令。 它的选项记录在 mkarchiso -h 中，这里不作介绍。

## 安装

安装 archiso包 或 archiso-gitAUR 包。

## 准备自定义配置文件

Archiso 带有两个配置文件，releng 和 baseline。

- releng 用于创建正式的每月安装ISO。它可以作为创建自定义ISO映像的起点。

- baseline 是一种最低限度的配置，它只包括从介质启动 Live 环境所需的最低限度的软件包。

要构建配置文件的未修改版本，请参阅 #构建 ISO 映像。否则，如果您希望调整或自定义 archiso 的已发布配置文件之一，请将其从 `/usr/share/archiso/configs/profile-name/` 复制到一个可写目录，并使用您的名称选择。例如：

    $ cp -r /usr/share/archiso/configs/releng/ archlive

现在，根据所选的配置文件和您的目标进入不同的章节。

### 配置文件结构

Archiso 配置文件包含定义生成的 ISO 映像的配置。配置文件结构记录在 `/usr/share/doc/archiso/README.profile.rst`[1]。

### 选择包

编辑 `packages.x86_64` 以选择要在 Live 系统映像上安装的软件包，逐行列出软件包。

#### 自定义本地仓库

要添加不在标准 Arch 仓库中的包（例如来自 AUR 或采用 ABS 定制的包），请建立一个自建本地仓库并将您的自定义包添加到其中。然后将您的仓库添加到 `pacman.conf`，如下所示：

    archlive/pacman.conf

    ...
    [customrepo]
    SigLevel = Optional TrustAll
    Server = file:///path/to/customrepo
    ...

注意：

- `pacman.conf` 中的顺序很重要。要为您的自定义存储库提供最高优先级，请将其置于其他存储库条目之上。
- 这个 `pacman.conf` 仅用于在构建映像，而不会在 live 环境中有效。要在 live 环境里使用，请参考 #向映像中添加仓库
- 确保 mkarchiso 过程（包括 chroot）可以访问仓库，应将仓库放在合适的目录下（如 `/tmp`），以确保映像构建时正确读取仓库。

#### 安装 multilib 中的软件包

要从 Multilib 资源库中安装软件包，仅需在`pacman.conf`中取消注释如下的相关行以启用 multilib：

    [multilib]
    Include = /etc/pacman.d/mirrorlist

### 向映像里添加文件

Airootfs 目录用作映像上 Live 系统的根目录 (`/`) 的起点。在安装包之前，它的所有内容都将被复制到工作目录中。

将任何自定义文件和/或目录放在 `airootfs/` 下的所需位置。例如，如果您在当前系统上有一组 iptables 脚本，您希望在您的 Live 映像上使用它们，请按如下方式复制它们：

    $ cp -r /etc/iptables archlive/airootfs/etc

同样，对于驻留在层次结构中某处的特殊配置文件也需要格外小心。使用 mkdir(1) 可以轻松地创建目录结构的缺失部分。

提示：要将文件添加到安装用户的主目录，请将其放在 `archlive/airootfs/root/` 中。要将文件添加到所有其他用户的主目录，请将其放在 `archlive/airootfs/etc/skel/`。
注意：与软件包提供的冲突的自定义文件将被覆盖，除非软件包将它们指定为 备份文件。

默认情况下，权限将是 `644` （对于文件）和 `755`（对于目录）。所有这些都将归根用户所有。要为特定文件和/或文件夹设置不同的权限或所有权，请使用 `profiledef.sh` 中的 `file_permissions` 关联列表。有关详细信息，请参阅 README.profile.rst。

### 向映像中添加仓库

要在 live 环境中添加一个可用的仓库，请创建一个适当修改的`pacman.conf`，并将其置于`archlive/airootfs/etc/`下。

若仓库也使用密钥，将密钥放置在 `archlive/airootfs/usr/share/pacman/keyrings/` 下。密钥文件名须以 `.gpg` 结尾。并且，密钥必须被信任。可以在同目录下创建 GnuPG 导出的信任文件，来实现这一点。文件名须以 `-trusted` 结尾。文件的第一部分是密钥指纹，第二部分是信任信息。您可以参考 `/usr/share/pacman/keyrings/archlinux-trusted` 作为实例。

#### archzfs 实例

实例中文件如下：

    airootfs
    ├── etc
    │   ├── pacman.conf
    │   └── pacman.d
    │       └── archzfs_mirrorlist
    └── usr
        └── share
            └── pacman
                └── keyrings
                    ├── archzfs.gpg
                    └── archzfs-trusted

    airootfs/etc/pacman.conf

    ...
    [archzfs]
    Include = /etc/pacman.d/archzfs_mirrorlist
    ...

    airootfs/etc/pacman.d/archzfs_mirrorlist

    Server = https://archzfs.com/$repo/$arch
    Server = https://mirror.sum7.eu/archlinux/archzfs/$repo/$arch
    Server = https://mirror.biocrafting.net/archlinux/archzfs/$repo/$arch
    Server = https://mirror.in.themindsmaze.com/archzfs/$repo/$arch
    Server = https://zxcvfdsa.com/archzfs/$repo/$arch

    airootfs/usr/share/pacman/keyrings/archzfs-trusted

    DDF7DB817396A49B2A2723F7403BD972F75D9D76:4:

`archzfs.gpg`本身可直接从 https://archzfs.com/archzfs.gpg 的仓库网站获取。

### 内核

尽管两个 Archiso 包含的配置文件都只有linux包，但可以使映像包含其他甚至多个内核。

首先，编辑 `packages.x86_64` 以包含您想要的内核包名称。当 mkarchiso 运行时，它将包括所有 `work_dir/airootfs/boot/vmlinuz-*` 和 `work_dir/boot/initramfs-*.img` ISO 中的文件（以及用于 UEFI 引导的 FAT 映像中）。

mkinitcpio 默认情况下预设将构建后备 initramfs 映像。对于 ISO，主 initramfs 映像通常不包含 `autodetect` 挂钩，因此不需要额外的备用映像。为防止创建后备 initramfs 映像，使其不占用空间或减慢构建过程，请在 `archlive/airootfs/etc/mkinitcpio.d/pkgbase.preset` 中放置自定义预设。例如，对于 linux-lts包：

    archlive/airootfs/etc/mkinitcpio.d/linux-lts.preset

    PRESETS=('archiso')

    ALL_kver='/boot/vmlinuz-linux-lts'
    ALL_config='/etc/mkinitcpio.conf'

    archiso_image="/boot/initramfs-linux-lts.img"

最后，创建引导加载程序配置文件来启动内核。

### 引导器

Archiso 支持 syslinux 用于 BIOS 引导和 systemd-boot 或 GRUB 用于 UEFI 引导。有关其配置语法的信息，请参阅引导加载程序的文章。

提示：

- 当使用 El Torito 刻录到光盘时，或使用 Isohybrid 写入硬盘（或 USB 闪存驱动器或类似驱动器）时，releng' 配置文件默认构建到支持 BIOS 和 UEFI 启动的 ISO 中。
- 由于 isolinux 的模块化特性，您可以使用许多插件，因为所有 .c32 文件都已复制并可供您使用。看看 官方 syslinux 站点 和 configs/releng/syslinux archiso git repo。使用所述插件，可以制作具有视觉吸引力的复杂菜单。参见 [1]。

mkarchiso 期望 GRUB 配置位于 `grub` 目录中，systemd-boot 配置位于 `efiboot` 目录中，而 syslinux 配置位于 `syslinux` 目录中。

#### UEFI 安全启动

如果要使 archiso 在启用 UEFI 安全启动的环境下可启动，则必须使用签名过的启动加载程序。您可以按照 安全启动#引导安装介质 中的说明进行操作。

### systemd 单元

要为 Live 环境 启用 systemd 服务/套接字/计时器，您需要像 `systemctl enable` 那样手动创建符号链接。

例如，要启用包含 `WantedBy=multi-user.target` 的 `gpm.service`，请运行：

    $ mkdir -p archlive/airootfs/etc/systemd/system/multi-user.target.wants
    $ ln -s /usr/lib/systemd/system/gpm.service archlive/airootfs/etc/systemd/system/multi-user.target.wants/

可以通过读取 systemd 单元找到所需的符号链接，或者如果您安装了服务，则通过 启用 它并观察 systemctl 输出。

#### 登录管理器

通过启用登录管理器的 systemd 服务来在启动时 Start X。如果您不知道要启用哪个 .service，您可以轻松找出是否在您构建 ISO 的系统上使用相同的程序。只需使用：

    $ ls -l /etc/systemd/system/display-manager.service

现在在 `archlive/airootfs/etc/systemd/system/` 中创建相同的符号链接。对于 LXDM：

    $ ln -s /usr/lib/systemd/system/lxdm.service archlive/airootfs/etc/systemd/system/display-manager.service

这将在您的 Live 系统上的系统启动时启用 LXDM。

### 改变自动登录

Getty 的自动登录配置位于 `airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf`。

您可以修改这个文件来更改自动登录用户：

    [Service]
    ExecStart=
    ExecStart=-/sbin/agetty --autologin username --noclear %I 38400 linux

或者干脆删除 `autologin.conf` 来禁用自动登录。

如果使用串行控制台，请创建 `airootfs/etc/systemd/system/serial-getty@ttyS0.service.d/autologin.conf` 并添加以下内容：

### 用户和密码

要创建在 Live 环境中可用的 用户，您必须手动编辑 `archlive/airootfs/etc/passwd`、`archlive/airootfs/etc/shadow`、`archlive/airootfs/etc/group` 和 `archlive/airootfs/etc/gshadow`。

注意：如果这些文件存在，它们必须包含 root 用户和组。

例如，添加用户 `archie`。按照 passwd(5) 语法将它们添加到 `archlive/airootfs/etc/passwd` ：

    archlive/airootfs/etc/passwd

    root:x:0:0:root:/root:/usr/bin/zsh
    archie:x:1000:1000::/home/archie:/usr/bin/zsh

注意：`passwd` 文件须以换行符结尾。

按 shadow(5) 的语法将用户添加到 `archlive/airootfs/etc/shadow`。若要为用户设置密码，请使用 `openssl passwd -6` 生成密码哈希值，并将其添加到文件中。例如：

    archlive/airootfs/etc/shadow

    root::14871::::::
    archie:$6$randomsalt$cij4/pJREFQV/NgAgh9YyBIoCRRNq2jp5l8lbnE5aLggJnzIRmNVlogAg8N6hEEecLwXHtMQIl2NX2HlDqhCU1:14871::::::

您也可以将密码字段留空。这意味着，该用户无需密码即可登录。

根据 group(5) 将用户的组和他们将加入的组添加到 `archlive/airootfs/etc/group`。例如：

    archlive/airootfs/etc/group

    root:x:0:root
    adm:x:4:archie
    wheel:x:10:archie
    uucp:x:14:archie
    archie:x:1000:

根据 gshadow(5) 创建相应的 `archlive/airootfs/etc/gshadow`：

    archlive/airootfs/etc/gshadow

    root:!*::root
    archie:!*::

确保 `/etc/shadow` 和 `/etc/gshadow` 具有正确的权限：

    archlive/profiledef.sh

    ...
    file_permissions=(
      ...
      ["/etc/shadow"]="0:0:0400"
      ["/etc/gshadow"]="0:0:0400"
    )

☢软件包安装后，mkarchiso 将为 `archlive/airootfs/etc/passwd` 中列出的用户创建所有指定的主目录并复制 `work_directory/x86_64/ airootfs/etc/skel/*` 给他们。复制的文件将具有适当的用户和组所有权。

### 更改 ISO 中使用的分发名称

首先将文件 `/etc/os-release` 复制到 rootfs 的 `etc/` 文件夹中。然后，相应地编辑文件。您还可以更改 GRUB 和 syslinux 内部的名称。

## 构建 ISO 映像

通过运行以下命令构建一个 ISO 映像，然后您可以将其刻录到 CD 或 USB：

    # mkarchiso -v -w /path/to/work_dir -o /path/to/out_dir /path/to/profile/

- `-w` 指定工作目录。如果未指定该选项，则默认为当前目录中的 `work`。
- `-o` 指定将放置构建的 ISO 映像的目录。如果未指定该选项，则默认为当前目录中的 `out`。
- 需要注意的是配置文件 `profiledef.sh` 在运行 mkarchiso 时不能指定，只能指定文件的路径。

将 `/path/to/profile/` 替换为您的自定义配置文件的路径，或者如果您正在构建一个 `/usr/share/archiso/configs/releng/`未修改的配置文件。

提示：如果内存允许，最好将工作目录放在 tmpfs 上。例如：

    # mkarchiso -v -w /tmp/archiso-tmp /path/to/profile/

运行时，脚本将下载并安装您指定到 `work_directory/x86_64/airootfs` 的包，创建内核和初始化映像，应用您的自定义选项，最后将 ISO 构建到输出目录中。

### 删除工作目录

警告：如果 mkarchiso 被中断，运行 findmnt(8) 以确保在删除之前没有挂载绑定 - 否则，你可能会丢失数据（例如安装在 `/run/media/user/label` 的外部设备绑定在 `work/x86_64/airootfs/run/media/user/label` 在构建过程中）。

临时文件被复制到工作目录中。成功构建 ISO 后，可以删除工作目录及其内容。例如：

    # rm -rf /path/to/work_dir

## 使用 ISO

有关各种选项，请参见 Installation guide#准备安装介质。

## 在 QEMU 中测试 ISO

安装 可选依赖项 qemu-desktop包 和 edk2-ovmf包。

使用便捷脚本 `run_archiso` 使用 QEMU 运行构建的映像。

    $ run_archiso -i /path/to/archlinux-yyyy.mm.dd-x86_64.iso

虚拟机也可以使用 UEFI 仿真运行：

    $ run_archiso -u -i /path/to/archlinux-yyyy.mm.dd-x86_64.iso

## 技巧提示

### 准备 ISO 以通过 SSH 进行安装

注意：自从 `archlinux-2021.02.01-x86_64.iso`，提供cloud-init 支持，`sshd.service`是默认启用的。

要 通过 SSH 安装 Arch Linux 而不与系统进行任何交互，必须将 SSH 公钥放在 `authorized_keys` 中。

添加 SSH 密钥可以手动完成（在此处解释），也可以通过 cloud-init。

要手动添加密钥，首先 复制 archiso 的 releng 配置文件 到可写目录。以下示例使用 `archlive`。

    $ cp -r /usr/share/archiso/configs/profile/ archlive

在将用于登录的用户的主目录中创建一个 `.ssh` 目录。以下示例将使用 root 用户。

    $ mkdir archlive/airootfs/root/.ssh

将用于登录的 SSH 公钥添加到 `authorized_keys`：

    $ cat ~/.ssh/key1.pub >> archlive/airootfs/root/.ssh/authorized_keys
    $ cat ~/.ssh/key2.pub >> archlive/airootfs/root/.ssh/authorized_keys

为 `.ssh` 目录和 `authorized_keys` 文件设置正确的 权限 和所有权：

    archlive/profiledef.sh

    ...
    file_permissions=(
      ...
      ["/root"]="0:0:0750"
      ["/root/.ssh"]="0:0:0700"
      ["/root/.ssh/authorized_keys"]="0:0:0600"
    )

最终 构建 ISO 映像。启动 ISO 后，OpenSSH 将启动，并且可以使用相应的 SSH 私钥登录。

### 使用 iwd 自动连接到 Wi-Fi 网络

在配置文件的 `airootfs` 目录中创建 `/var/lib/iwd/` 并设置正确的权限：

    $ mkdir -p archlive/airootfs/var/lib/iwd

    archlive/profiledef.sh

    ...
    file_permissions=(
      ...
      ["/var/lib/iwd"]="0:0:0700"
    )

按照 iwd#Network configuration 和 iwd.network(5) 中的说明为您的 Wi-Fi 网络创建网络配置文件。

将配置文件保存在 `archlive/airootfs/var/lib/iwd/` 中。

### 调整根文件系统的大小

在 live 环境中，例如在需要使用 DKMS 模块的硬件上安装软件包时，根文件系统的默认大小可能不允许包的下载和安装。

提示：选中大小的理由请参见 BBS#210389，历史细节请参见 FS#45618。

当在 live 环境中下载文件或安装软件包时，它将表现为以下错误信息：

    error: partition / too full: 63256 blocks needed, 61450 blocks free
    error: not enough free disk space
    error: failed to commit transaction (not enough free disk space)
    Errors occurred: no packages were upgraded.

您亦可通过运行以下命令以动态调整根分区大小：

    # mount -o remount,size=SIZE /run/archiso/cowspace

关于 `SIZE` 可能的参数，请参见 tmpfs(5) § size。

要在引导程序阶段调整大小（按 `e` 或 `Tab`），请使用以下引导选项：

    cow_spacesize=SIZE

要在构建映像阶段调整大小，请将引导选项添加至：

- `efiboot/loader/entries/*.cfg`
- `grub/*.cfg`
- `syslinux/*.cfg`

您可以通过运行以下命令检查文件系统的大小：

    $ df -h

查看 mkinitcpio-archiso 启动参数于此

### Google Compute Engine 映像

Google Compute Engine 兼容的 `releng` 压缩映像以 archlinux-gceAUR 的形式提供。

### Libvirt 虚拟机配置

运行 `releng` 映像的 libvirt 配置可用作 archlinux-libvirtAUR。

## 疑难解答

### 窗口管理器冻结

如果您想在 Live CD 中使用窗口管理器，则必须添加必要且正确的显卡驱动，否则 WM 可能会在加载时冻结。

## 参见

- Archiso 项目主页
- 官方档案
- Arch Linux 发布工程邮件列表
- #archlinux-releng——Arch Linux 发布工程 IRC 频道
- archiso-manager——用于构建官方每月 ISO 的工具

分类：​

- Live Arch 系统
- 安装过程
- Arch 项目

archiso
添加话题