Archiso (简体中文) - ArchWiki

Jump to content

相关文章

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

翻译状态：本文是 Archiso 的翻译。上次翻译日期：2022-10-04。如果英文版本有所更改，则您可以帮助同步翻译。

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

## 安装

安装 archiso 或 archiso-gitAUR 包。 archiso-profilesAUR 包含额外的社区提供的配置文件。

## 准备自定义配置文件

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`.profile.rst。

### 选择包

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

#### 自定义本地仓库

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

    archlive/pacman.conf

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

注意： `pacman.conf` 中的顺序很重要。要为您的自定义存储库提供最高优先级，请将其置于其他存储库条目之上。

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

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

### 向映像里添加文件

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。

### 内核

尽管两个 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 用于 UEFI 引导。有关其配置语法的信息，请参阅引导加载程序的文章。

提示：

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

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

#### UEFI 安全启动

如果要使 Archiso 在启用 UEFI 安全启动的环境下可启动，则必须使用签名过的启动加载程序。您可以按照 Secure Boot#Booting an installation medium 中的说明进行操作。

### 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

或者干脆删除它来禁用自动登录。

### 用户和密码

要创建在 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

使用 `openssl passwd -6` 生成密码哈希，并按照 shadow(5) 的语法将其添加到 `archlive/airootfs/etc/shadow`。例如：

    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

## 技巧提示

### 在线构建

如果您没有可用的 Arch 系统，或者您需要从另一个 GNU/Linux 发行版设置 Archiso，请注意，这里有提供 在线构建器。

### 准备 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 Archiso 上安装包时，例如在需要 DKMS 模块的硬件上，Archiso 的默认大小可能因大小不允许此类包的下载与安装。

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

    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=2G /run/archiso/cowspace

要在 Live Arch Linux 系统引导前调整其根分区的大小，请按 `Tab` 键编辑内核参数。在末尾附加 `cow_spacesize=2G` 以获得根分区的 2G 大小。

按 `Enter` 继续引导到 Live 系统。

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

    $ df -h

查看更多启动参数于 此

### 加密

为了让 vanilla `mkarchiso` 生成加密映像，LUKS 支持 archiso, encrypt 挂钩在 mkinitcpio-archiso 中的兼容性和嵌套 `cryptkey` 在 cryptsetup 合并请求需要被批准。

已经合并了这些功能的包是 archiso-encryptionAUR、mkinitcpio-archiso-encryptionAUR 和 cryptsetup-nested-cryptkeyAUR。

要对现有配置文件启用加密：

- 将 `+luks` 添加到 `profiledef.sh` 中的 `airootfs_image_type` 值；
- 在 `profiledef.sh` 中设置一个 `encryption_key`（使用密钥文件而不是密码）。
- 在 `/etc/mkinitcpio.conf` 中启用 `encrypt` 挂钩；
- 将 AUR 包（或使用上述源构建自定义替换）添加到 `packages.x86_64`。
- 将 `keys` 构建模式添加到 `profiledef.sh` 中的 `buildmodes` 列表（构建第二个 ISO，其中包含放置在外部存储上的密钥文件能够启动系统）。

基于 `baseline` 和 `releng` 配置文件的示例配置在 archiso-profilesAUR 中以 `ebaseline` 和 `ereleng` 的形式提供包。

### 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 的工具

Categories:

- Live Arch systems (简体中文)
- Installation process (简体中文)
- Arch projects (简体中文)

Hidden category:

- Pages with broken section links