從現有 Linux 發行版安裝 Arch Linux
本指南給出了從當前 Linux 發行版安裝 Arch Linux 所需的準備步驟。 準備完成後的安裝參考 Installation guide。
從當前 Linux 發行版安裝 Arch Linux 對以下情形有所幫助:
- 遠程安裝 Arch Linux,如一台(虛擬的)根伺服器
- 無需 LiveCD 替換當前 Linux 發行版(參見#無 LiveCD 替換當前系統)
- 創建基於 Arch Linux 的新 Linux 發行版或 LiveCD
- 創建 Arch Linux 的 chroot 環境,如可為 Docker 基礎容器創建
- 為無盤機器準備 rootfs-over-NFS
這些準備步驟的目的在於為搭建一個 arch-install-scripts包(如 pacstrap(8) 和 arch-chroot(8))可運行的環境。
如果當前系統是 Arch Linux,這個目的可通過在當前系統安裝 arch-install-scripts包 達成。如果當前系統不是 Arch Linux,可以構建基於 Arch Linux 的 chroot 環境。
備份和準備
備份你的所有數據,包括郵件、網頁伺服器等,把所有數據都放在手邊。記錄下你的伺服器配置、hostname 等數據。
你可能會用到的數據:
- IP 地址
- hostname(s),(注意:根伺服器可能是域名提供的一部份,在你刪除
/etc/hosts前先檢查並備份) - DNS 伺服器(檢查
/etc/resolv.conf) - SSH 密鑰(如果其它人也要用你的伺服器,如果你刪除了 SSH 密鑰,他們就需要新的密鑰了。這些密鑰可能來自:Apache、郵件伺服器、SSH 伺服器和其它服務)
- 硬體信息(比如網卡,參考你的
/etc/modules.conf) - 引導加載程序(Boot Loader)的配置文件。
總之,在本地備份一份原本的 /etc 總不會錯。
從一個正在運行 Arch Linux 的主機
安裝 arch-install-scripts包。
參考 Installation guide#掛載分區來掛載用來安裝的文件系統根目錄,以及其它必要的掛載點。如果 /mnt 文件夾已經被占用 , 只要新建一個文件夾,比如 /mnt/install 用來替代即可。
目前,Arch Linux 可以從頭安裝,或者作為宿主系統的鏡像,這兩種選項會在下面說明。
進行全新的 Arch Linux 安裝
參考 Installation guide#Installation。
你可以跳過 Installation guide#選擇鏡像,因為主機中應該已經有了合適的鏡像列表。
pacstrap 會使用 來自宿主機的 /etc/pacman.conf 的配置文件以及 pacman 鉤子。參見 archlinux/arch-install-scripts#60。 如果你的設置偏離了標準(例如你在你的 pacman 配置中有 Noextract=),這也會影響到新安裝的系統。
- 如果需要,下載默認的 pacman.conf 並通過 pacstrap 的
-C選項來指定這個文件。
- 要避免重新下載所有軟體包,可以參考 pacman/Tips and tricks#在網絡上共享pacman緩存。或者使用 pacstrap 的
-c選項,來使用宿主系統上的軟體包緩存。
創建已有的 Arch 的備份
複製宿主系統的文件系統到新分區,再做一些必要的調整,就可以備份已有的 Arch Linux。
第一步是拷貝宿主文件到新的分區裡,可以考慮使用 Rsync#全盤系統備份裡展示的方法。
然後,參考 Installation guide#配置系統裡的步驟,注意以下幾點:
- 可以跳過 Installation guide#時區、Installation guide#本地化和 Installation guide#Root 密碼
- 如果改變了文件系統,比如從 ext4 改為 Btrfs,必須進行 Installation guide#Initramfs
- 參考 Installation guide#安裝引導程序,務必重新安裝引導程序
- 刪除
/etc/machine-id,並使用 systemd-machine-id-setup(1) 來創建一個新的。
如果鏡像 Arch 必須要使用與宿主系統不同的配置,或者要安裝到不同的硬體上,考慮進行以下操作:
- 在進行 Installation guide#安裝引導程序時,使用目標系統 CPU 的微碼
- 如果宿主系統上有於目標系統上不兼容的 Xorg#配置,參考 Moving an existing install into (or out of) a virtual machine#Disable any Xorg-related files
- 其它針對目標系統的配置諸如網絡和音頻。
從一個運行另一個 Linux 發行版的主機
下列是多個可以自動處理大量步驟的工具。具體方法可以參考他們各自主頁的相關說明。
- archstrap (Bash)
- digitalocean-debian-to-arch (需要重新分區,針對 DigitalOcean; does not perform PGP signature verification)
- image-bootstrap (Python; does not perform PGP signature verification)
- vps2arch (Bash; does not perform PGP signature verification)
以下是介紹手動處理的辦法,具體思路要麼是直接在宿主系統上運行 pacman,要麼是在宿主系統裡運行一個 Arch 系統,這個嵌套系統位於 chroot 中。
在宿主系統上運行 pacman
Pacman 可以在大部分 Linux 發行版上編譯運行,可以直接用來在宿主系統上創建 Arch Linux。最近的發行版上 arch-install-scripts 應該可以順利運行。
一些發行版官方提供 pacman 和 / 或者 arch-install-scripts 的軟體包。截止 2020 六月,Void Linux 提供了 pacman 軟體包,Apline Linux 和 Fedora 提供了 pacman 和 arch-install-scripts 的軟體包。
創建 chroot
從鏡像站下載 bootstrap 鏡像到 /tmp。
從下載頁下載 bootstrap 的簽名文件並把它放在與鏡像相同的文件夾下。不要從鏡像站下載它。
使用 GnuPG 驗證。
解壓 tarball:
# tar xf /path-to-bootstrap-image/archlinux-bootstrap-x86_64.tar.zst --numeric-owner
留意最後的 --numeric-owner 選項。你當前的 Linux 系統使用的 UID 和 GID 可能與 Arch Linux 不同,這個選項可以保留解壓出文件的 UID 和 GID。
然後編輯來 /tmp/root.x86_64/etc/pacman.d/mirrorlist 選擇軟體倉庫伺服器。
進入 chroot:
- 若安裝了4或更高版本的 bash,並且 unshare 支持
--fork--pid選項 (util-linux 2.24 or later):# /tmp/root.x86_64/bin/arch-chroot /tmp/root.x86_64/
- 若無,執行:
# mount --bind /tmp/root.x86_64 /tmp/root.x86_64 # cd /tmp/root.x86_64 # cp /etc/resolv.conf etc # mount -t proc /proc proc # mount --make-rslave --rbind /sys sys # mount --make-rslave --rbind /dev dev # mount --make-rslave --rbind /run run # (假设文件系统上存在 /run) # chroot /tmp/root.x86_64 /bin/bash
使用 chroot 環境
初始環境非常基礎(沒有 nano包 或者 lvm2包),因此,我們得設置好 pacman 來安裝必要的軟體包。
初始化 pacman 密鑰環
開始安裝前,需要設置 pacman 密鑰。執行以下命令:
# pacman-key --init # pacman-key --populate
更多請參見 pacman/軟體包簽名#Initializing the keyring。
下載基本工具
刷新軟體包列表並安裝你需要的軟體包:base包、base-devel包組、parted包 等等。
error: could not determine cachedir mount point /var/cache/pacman/pkg。解決辦法是在 chroot 前運行:# mount --bind directory-to-livecd-or-bootstrap directory-to-livecd-or-bootstrap參考 FS#46169。
安裝提示
請按照Installation guide中的掛載分區和安裝必須的軟體小節進行安裝。
一些宿主系統或配置可能需要額外的步驟,參考下面的章節。
基於 Debian 的當前系統
/dev/shm
在基於 Debian 的當前系統上,pacstrap 會發生以下錯誤:
# pacstrap -K /mnt base
==> Creating install root at /mnt mount: mount point /mnt/dev/shm is a symbolic link to nowhere ==> ERROR: failed to setup API filesystems in new root
Debian 中,/dev/shm 指向 /run/shm。而在基於 Arch 的 chroot 中,/run/shm 並不存在,因而連結失效。創建 /run/shm 目錄可修復此錯誤:
# mkdir /run/shm
基於Fedora的當前系統
在基於 Fedora 的宿主系統和 live USBs 上時,當你用 genfstab 生成你的 fstab 你可能會遇到問題。移除重複的入口和 seclabel 選項(如果有),因為它們是針對 Fedora 的。
重啟前要檢查的
為得到一個成功的安裝,重啟前請再次檢查一些你的安裝的細節。 首先 chroot 到你的新系統然後:
- 創建一個用戶並設置密碼, 使得你可以通過 ssh 登錄。這很重要因為從 OpenSSH-7.1p2 開始登錄 root 被默認禁用。
- 設置 root 用戶密碼 以便之後你可以通過 su 切換至 root。
- 安裝一個 ssh 實現並啟用服務端實例使得它開機自動啟動。
- 設置網絡配置使得你在啟動後能使用網絡。
- 設置 boot loader 並配置它使用你之前所挪用的交換分區做為根分區 。 你可能還想讓你的 boot loader 能夠啟動到你的舊系統;對此可復用已存在的
/boot分區來達成這個目的。
無 LiveCD 替換當前系統
在硬碟上劃分出 ~700 MiB 的空閒空間,如分割交換分區。你可以禁用交換分區並用省下的空間建立新系統。
把舊的交換分區設為新的根分區
檢查 cfdisk、/proc/swaps 或者 /etc/fstab 來找到你的交換分區。假設你的硬碟位於 sdaX(X 是數字)。
執行下面的操作:
禁用交換分區:
# swapoff /dev/sdaX
在上面建立新的文件系統
# fdisk /dev/sda (设置 /dev/sdaX ID 为 "Linux" - Hex 83) # mke2fs -j /dev/sdaX
創建一個新目錄來掛載它
# mkdir /mnt/newsys
最後,掛載新目錄並安裝過渡系統。
# mount -t ext4 /dev/sdaX /mnt/newsys
安裝
安裝必要軟體包和其它讓系統聯網和在臨時文件系統下運行的必需軟體包。注意 ~700 MB 的空間限制。當使用 pacstrap 安裝時,考慮加上 -c 選項來避免占滿寶貴的空間。
一旦完成安裝,修復引導器配置,然後重啟進入到新系統並rsync 整個系統至主分區。