archiso - Arch Linux 中文维基

跳至內容

# archiso

出自 Arch Linux 中文维基

相關文章

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

翻譯狀態：

- 本文（或部分內容）譯自 archiso，最近一次同步於 2025-01-22，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

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 環境裡使用，請參考 #向映像中添加倉庫
- 確保 mkarchiso 過程（包括 chroot）可以訪問倉庫，應將倉庫放在合適的目錄下（如 `/tmp`），以確保映像構建時正確讀取倉庫。

#### 安裝 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`。

注意：如果這些文件存在，它們必須包含 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

注意：`passwd` 文件須以換行符結尾。

按 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/`未修改的配置文件。

提示：如果內存允許，最好將工作目錄放在 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

## 技巧提示

### 準備 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 環境中，例如在需要使用 DKMS 模塊的硬體上安裝軟體包時，根文件系統的默認大小可能不允許包的下載和安裝。

提示：選中大小的理由請參見 BBS#210389，歷史細節請參見 FS#45618。

當在 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 可能會在加載時凍結。

## 參見

- Archiso 項目主頁
- 官方檔案
- Arch Linux 發布工程郵件列表
- #archlinux-releng——Arch Linux 發布工程 IRC 頻道
- archiso-manager——用於構建官方每月 ISO 的工具

分類：​

- Live Arch 系統
- 安裝過程
- Arch 項目

archiso
新增話題