archiso
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 環境裡使用,請參考 #向映像中添加倉庫
安裝 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
。
例如,添加用戶 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
文件須以換行符結尾。Add the user to archlive/airootfs/etc/shadow
following the syntax of shadow(5). If you want to define a password for the user, generate a password hash with openssl passwd -6
and add it to the file. For example:
按 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/
未修改的配置文件。
# 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
技巧提示[編輯 | 編輯原始碼]
準備 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 環境中,例如在需要使用 DKMS 模塊的硬件上安裝軟件包時,根文件系統的默認大小可能不允許包的下載和安裝。
當在 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 可能會在加載時凍結。