Archiso

来自 Arch Linux 中文维基
(重定向自Archiso (简体中文)

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

安装[编辑 | 编辑源代码]

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

准备自定义配置文件[编辑 | 编辑源代码]

Archiso 带有两个配置文件,relengbaseline

  • 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 配置位于 syslinuxisolinux 目录中。

UEFI 安全启动[编辑 | 编辑源代码]

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

systemd 单元[编辑 | 编辑源代码]

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

例如,要启用包含 WantedBy=multi-user.targetgpm.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/passwdarchlive/airootfs /etc/shadowarchlive/airootfs/etc/grouparchlive/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-desktopedk2-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 configurationiwd.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 中的兼容性和嵌套 cryptkeycryptsetup 合并请求需要被批准。

已经合并了这些功能的包是 archiso-encryptionAURmkinitcpio-archiso-encryptionAURcryptsetup-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,其中包含放置在外部存储上的密钥文件能够启动系统)。

基于 baselinereleng 配置文件的示例配置在 archiso-profilesAUR 中以 ebaselineereleng 的形式提供包。

Google Compute Engine 映像[编辑 | 编辑源代码]

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

Libvirt 虚拟机配置[编辑 | 编辑源代码]

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

疑难解答[编辑 | 编辑源代码]

窗口管理器冻结[编辑 | 编辑源代码]

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

参见[编辑 | 编辑源代码]