Archiso
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
。
例如,添加用户 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/
未修改的配置文件。
# mkarchiso -v -w /tmp/archiso-tmp /path/to/profile/
运行时,脚本将下载并安装您指定到 work_directory/x86_64/airootfs
的包,创建内核和初始化映像,应用您的自定义选项,最后将 ISO 构建到输出目录中。
删除工作目录[编辑 | 编辑源代码]
/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 进行安装[编辑 | 编辑源代码]
要 通过 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 可能会在加载时冻结。