Archiso (简体中文)
Archiso 是用于构建 Arch Linux Live CD ISO 映像的工具。 官方映像 是使用 Archiso 构建的。 Archiso 是可配置的,并且可以用作不同系统的基础,例如救援系统或 Linux 安装程序。 这篇 Wiki 文章介绍了如何安装 Archiso,以及如何配置它以控制生成的 ISO 映像的各个方面,例如随附的软件包和文件。 技术需求和构建步骤可以在 官方项目文档 中找到。 Archiso 通过许多 bash 脚本实现。 Archiso 的核心组件是 mkarchiso 命令。 其选项记录在其用法输出中,此处未涉及。 用户不需要直接与 mkarchiso 交互。
安装和配置
安装 archiso 或 archiso-gitAUR。
Archiso 附带2个预定义配置(profiles): releng 和baseline。
- releng用于创建正式的每月安装ISO。它可以作为创建自定义ISO映像的起点。
- baseline是一种最低限度的配置,它只包括从介质启动实时环境所需的最低限度的软件包。
使用以下命令将您选择的配置文件复制到目录中。 用 releng
或 baseline
替换 profile
,并用你选择的目录名称替换 archlive
。
# cp -r /usr/share/archiso/configs/profile archlive
现在,根据所选的配置文件和您的目标进入不同的章节。
-
releng:如果您选择了 releng ,并且
- 如果要自定义映像,请继续进行章节 #配置 Live 介质。
- 如果要复制官方映像,请继续进行 #构建ISO。
- baseline:如果您选择了 baseline 配置文件,请继续进行 #构建ISO。
配置 Live 介质
本节详细介绍如何配置映像,以及定义以后将复制到映像的软件包和配置。
在 #安装和配置 中创建的archlive
目录中有许多文件和目录; 我们只关注以下的:
-
packages.x86_64
- 此文件列出了 Live 系统映像上安装的软件包。 -
airootfs
- 此目录用作覆盖,并允许您进行自定义。
您可以通过编辑 archlive/airootfs/root/customize_airootfs.sh
来编写遵循安装指南(或安装后)的所有管理任务的脚本,除了软件包安装。该脚本是从正在运行的 Live 系统的角度编写的,即,在脚本中,路径 /
是指正在运行的 Live 系统的根目录。
安装包
编辑 packages.x86_64
中的软件包列表,以配置将哪些软件包安装在 Live 系统映像上,逐行列出软件包。
自定义本地库
为了准备自定义软件包或从 AUR/ABS 准备软件包,您还可以 自建本地仓库。
然后,您可以将以下内容放入 ~/archlive/pacman.conf
中,添加到其他仓库条目上方(最高优先级):
~/archlive/pacman.conf
... # custom repository [customrepo] SigLevel = Optional TrustAll Server = file:///home/user/customrepo/$arch ...
安装 multilib 中的软件包
要从 Multilib 资源库中安装软件包,仅需在~/archlive/pacman.conf
中取消注释以下行以启用 multilib:
pacman.conf
[multilib] SigLevel = PackageRequired Include = /etc/pacman.d/mirrorlist
向映像里添加文件
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:
# cp -r /etc/iptables ~/archlive/airootfs/etc
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 airootfs/home
,而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 customize_airootfs.sh
——我们要使用它在引导时复制文件以及梳理权限。
首先,创建 skel 目录
# mkdir ~/archlive/airootfs/etc/skel
现在,复制 'home' 的文件到 skel 目录。例如,对于 .bashrc
:
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/
当 ~/archlive/airootfs/root/customize_airootfs.sh
被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 /etc/X11/xinit/xinitrc
位于可能被安装包覆盖的路径上。要将 xinitrc
的配置文件放在 ~/archlive/airootfs/etc/skel/
,然后修改 customize_airootfs.sh
以适当地移动。
内核
默认archiso使用linux内核和模块,但创建的ISO映像文件可以包含其他或多重内核。
首先,编辑packages.x86_64
,将想要的内核包名写入,mkarchiso运行时会将映像(以及用于UEFI引导的FAT映像)work_dir/airootfs/boot/vmlinuz-*
和work_dir/boot/initramfs-*.img
中的所有文件导入。
默认的mkinitcpio将构建fallback镜像。对于映像文件,主initramfs镜像不包含autodetect钩子拓展,因此没有必要创建一个额外的fallback镜像。
自定义替换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"
最后,创建boot loader configuration配置文件来启动内核。
引导器
默认的文件应该可以正常工作,所以你应该不需要去碰它。
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看 syslinux 官方网站 和 Archiso Git Repo。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 此处。
UEFI 安全启动
如果要使 Archiso 在启用 UEFI 安全启动的环境下可启动,则必须使用签名过的启动加载程序。您可以按照 Secure Boot#Booting an installation medium 中的说明进行操作。
登录管理器
通过启用您登录管理器的 systemd 服务来做到在引导时启动 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。(This will enable LXDM at system start on your live system.)
或者,您也可以启用 airootfs/root/customize_airootfs.sh
中的服务以及其中启用的其他服务。
如果您希望图形环境在启动过程中自动启动,请确保编辑 airootfs/root/customize_airootfs.sh
并替换
systemctl set-default multi-user.target
为
systemctl set-default graphical.target
改变自动登录
Getty 的自动登录配置位于 airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf
。
您可以修改这个文件来更改自动登录用户:
[Service] ExecStart= ExecStart=-/sbin/agetty --autologin isouser --noclear %I 38400 linux
或者干脆删除它来禁用自动登录。
构建ISO
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB。
在 ~/archlive
中执行:
# mkarchiso -v -w /path/to/work_dir -o /path/to/out_dir /path/to/profile/
-
-w
指定工作目录。如果未指定该选项,它将默认在当前目录中工作。 -
-o
指定将放置生成的ISO映像的目录。如果未指定该选项,则默认为在当前目录中输出。 - 应该注意配置文件
profiledef.sh
运行mkarchiso时无法指定,只能指定文件的路径。
如果您正在构建未修改的概要文件或自定义概要文件的路径,请将/path/to/profile/替换为/usr/share/archiso/configs/releng/。
该脚本将现在下载并安装你指定的软件包到 work/*/airootfs
,创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 out/
。
重建ISO
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:
# rm -v work/build.make_*
如果您编辑了 airootfs/root/customize_airootfs.sh
以创建非特权用户,则重建将在创建时失败,因为该用户已经存在(FS#41865)。 为避免此问题,您需要在运行 useradd
之前检查用户是否存在,例如 通过运行 id
:
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch
同时删除创建的用户或符号链接,如 /etc/sudoers
等持久性数据。
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:
修改前:
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then
修改后:
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。
删除工作目录
临时文件将复制到工作目录中。 如果碰巧 build.sh 脚本被中断,请确保在删除之前没有 mount binds - 否则,您可能会丢失数据(例如,安装在 /run/media/$user/$label
的外部设备在构建过程中被绑定在 work/x86_64/airootfs/run/media/$user/$label
中。
使用 ISO
有关各种选项,请参见 Installation guide (简体中文)#启动到 Live 环境。
在 QEMU 中运行 ISO
qemu-system-x86_64 \ -accel kvm \ -boot order=d,menu=on,reboot-timeout=5000 \ -m size=3072,slots=0,maxmem=$((3072*1024*1024)) \ -k en \ -name archiso,process=archiso_0 \ -drive file=/path/to/archlinux-yyyy.mm.dd-x86_64.iso,media=cdrom,readonly=on \ -display sdl \ -vga virtio \ -enable-kvm \ -no-reboot \ -no-shutdown