ArchLinux 安裝指北

前言

這篇文章也是應該要很久以前就寫完了,但是因為我個人很懶,所以才拖到現在,剛好最近有 CCNS 的社課要教學 ArchLinux 安裝,就順便把文章生出來。

安裝 Arch 最好要確保你看得懂 ArchWiki 上寫什麼,在安裝過程中,我會盡量給出每個地方對應的 Wiki Page,如果有能力,最好將 Wiki 看完,才能對自己的系統有更深的理解,這篇文章主要是跟隨 Installation guide[1]的流程

為什麼要使用 Arch

我個人認為 ArchLinux 有三個最主要的優點

  • 高度的客製化:從安裝開始就完全由使用者決定裝什麼
  • Rolling Release:ArchLinux 是滾動式更新,軟體會一直在最新的穩定版本上
  • AUR:Arch User Repository,提供其他 Arch 使用者撰寫的 PKGBUILD,可以用來產生不在官方鏡像站裡的軟體包,當然,使用前需要自己看看有沒有人在裡面加料, AUR 不對此保證安全

Arch 很容易滾掛?

我使用 ArchLinux 差不多6年了,目前是沒有遇過更新到開不了機的大問題,不過日用可能隔幾個月會需要解決一些也許是因為軟體更新造成的問題,但是使用其他發行版同樣可能遇到,所以 Arch 其實並沒有別人想像的不穩定。

安裝

我個人安裝 Arch 不喜歡使用archinstall指令,一方面是以前安裝的時候就沒這個指令,另一方面,前面提到我認為 Arch 最大的優點就是高度客製化,如果使用腳本來安裝,那為什麼不使用其他發行版或是 Artix 呢?


ArchLinux 的安裝其實很簡單,就像把大象放進冰箱只需要三個步驟一樣,我將 ArchLinux 的安裝也分成大致三個步驟( ArchWiki 的 Installation guide 也是分成這三個大步驟[1])

  • 前置準備
    • 連接網路
    • 硬碟分區、格式化和掛載
  • 安裝軟體
    • 安裝系統需要的各種軟體
  • 系統設定
    • 設定各種系統文件
    • 安裝其他軟體
    • 設定 bootloader

前置準備

假設現在已經開機到 Arch live USB 的環境

連接網路

有線網路

如果是使用 ethernet,並且 LAN 中有 DHCP server,則 live USB 會在開機後自動獲取 IP,或是可以使用dhcpcd指令來手動獲取 DHCP

使用ip address來確認自己是否有獲取 IP

Wi-Fi

我個人在 live USB 中喜歡使用iwctl來連接無線網路[2]

1
2
3
4
5
6
7
8
9
# iwctl
[iwd] device list
[iwd] station <device> scan
[iwd] station <device> get-networks
[iwd] station <device> connect <SSID>
[iwd] exit

# # 或是可以使用底下的指令一行來連接,如果知道要連接網路的SSID和密碼
# iwctl --passphrase <passphrase> station <device> connect <SSID>

同樣使用ip address來確認自己是否有獲取 Wi-Fi 連接後 DHCP 配發的 IP

測試

隨便 ping 個東西測試

1
# ping archlinux.org

設定 SSH

這一項並不是必須,但如果網路內有其他電腦,我會習慣在其他電腦上 ssh 到 live USB 裡遠端安裝,這樣終端機比較好看,也可以複製貼上

1
2
3
4
5
6
# # 設定密碼,隨便設就好
# passwd
# # 找到PermitRootLogin,改成PermitRootLogin yes
# vim /etc/ssh/sshd_configs
# # 重啟sshd
# systemctl restart sshd

設定時間

避免因為時間錯誤對照下載時錯誤

1
# timedatectl set-ntp true

硬碟分區

我個人習慣使用 gdisk 來進行分區,看個人習慣也可以使用 fdisk、parted 或是有 TUI 的 cfdisk、cgdisk

分區範例

UEFI 需要使用 GPT 分區表,並且至少需要將/boot獨立分區,底下是範例的分區,如果需要安裝很多不同核心或是 Early KMS 的 kernel module,則 Boot 可以適當放大到 1G, timeshift 是用來做系統備份的,我使用 ext4 因此需要額外的空間做備份,如果使用 btrfs 則不用,可以跳過這個

Name Size Code
Boot 512MiB EF00
Root 60GiB 8300/8304
Timeshift 70GiB 8300
Home - 8300/8302

gdisk 指令

在 gdisk 中會需要用到的指令大概就這些,可以按?來查看所有選項

Command Usage
p print the partition table
n add a new partition
d delete a partition
c change a partition’s name
t change a partition’s type code
q quit without saving
w save and exit
x-z zap GPT data structures and exit
  1. 基本上就是先 x 然後 z 摧毀所有原本的 GPT 分區表(如果硬碟之前有裝東西,而且不再需要裡面的資料)

  2. 然後 n 創建新分區,我習慣boot在第一個,所以創建一個 1G 的分區,可以使用 +1GiB 來指定分區結束的位置,接著 Partition type 必須填 EF00

  3. 後面同樣創建 root 分區, home 分區可以是選擇性創建, swap 可以使用 swapfile 或是單獨創建 swap 分區

  4. 接著 w 儲存分區表並離開

格式化

將<>中的內容替換為對應的路徑

1
2
3
4
5
6
# # EFI分區需使用fat32
# mkfs.fat -F 32 -n Boot /dev/<efi>
# # 其他分區這裡使用ext4示範,也可以換成其他你喜歡的檔案系統,可以不加-L參數,這個只是標示
# mkfs.ext4 -L Root /dev/<root>
# mkfs.ext4 -L Home /dev/<home>
# mkswap /dev/<swap>

掛載

1
2
3
4
5
# mount /dev/<root> /mnt
# mkdir /mnt/{boot,home}
# mount /dev/<efi> /mnt/boot
# mount /dev/<home> /mnt/home
# swapon /dev/<swap>

安裝軟體

安裝基本系統

前置準備到這裡就結束了,接著是安裝基本系統到/mnt(剛剛掛載的根目錄),在這裡安裝了基本的軟體和編輯器,<intel/amd>看使用的 cpu 來選擇

1
# pacstrap -i  /mnt linux linux-headers linux-firmware base base-devel vim nano <intel/amd>-ucode

系統設定

生成 fstab

1
# genfstab -U -p /mnt >> /mnt/etc/fstab

chroot 進新的系統

1
2
# arch-chroot /mnt
# pacman -Syy

設定時區

1
2
# ln -sf /usr/share/zoneinfo/Asia/Taipei /etc/localtime
# hwclock --systohc

設定地區與語言

不需設定鍵盤,預設為美式英語,和台灣常用鍵盤相同

1
2
3
4
5
# # 找到en_US.UTF-8 UTF-8和en_US.UTF-8 UTF-8取消註解
# vim /etc/locale.gen
# locale-gen
# echo LANG=en_US.UTF-8 > /etc/locale.conf
# export LANG=en_US.UTF-8

設定 hostname

1
2
3
# # 直接填喜歡的機器名稱就好
# vim /etc/hostname
# vim /etc/hosts

/etc/hosts按照下面的格式來新增,<hostname>自行替換

1
2
3
127.0.0.1   localhost
::1 localhost
127.0.1.1 <hostname>.localdomain <hostname>

新增用戶與密碼

1
2
3
4
5
6
7
8
# # 設定root密碼
# passwd
# # 新增用戶,-m為新增家目錄,-G為設定附加群組,預設會建立與用戶名相同的組作為主群組
# useradd -m -G wheel,storage,power -s /bin/bash <username>
# # 設定用戶密碼
# passwd <username>
# 設定sudo,找到%wheel ALL=(ALL:ALL) ALL並取消註解
# visudo

設定固態硬碟修剪(垃圾回收)

如果沒有 SSD 可以跳過這裡

1
# systemctl enable fstrim.timer

設定系統引導

1
2
3
# bootctl install
# # 編輯引導設定,同樣<intel/amd>視使用的CPU來修改
# vim /boot/loader/entries/arch.conf
1
2
3
4
title Arch
linux /vmlinuz-linux
initrd /<intel/amd>-ucode.img
initrd /initramfs-linux.img
1
2
# echo "options root=PARTUUID=$(blkid -s PARTUUID -o value /dev/<root_partition>) rw" >> /boot/loader/entries/arch.conf
# mkinitcpio -P

到這一步 ArchLinux 已經安裝完成了,但為了方便,我習慣直接把需要的軟體一起安裝完,而不是等重啟後進系統再裝

設定 pacman

Mirrorlist

1
# vim /etc/pacman.d/mirrorlist

看自己習慣用哪些鏡像站,目前台灣最快的是 TWDS,但我有在維護 CCNS 的鏡像,所以優先使用

1
2
Server = https://archlinux.ccns.ncku.edu.tw/archlinux/$repo/os/$arch
Server = https://mirror.archlinux.tw/ArchLinux/$repo/os/$arch

或是可以用速度或一些條件來決定

Rate Speed
1
2
# pacman -S pacman-contrib
# rankmirrors -t /etc/pacman.d/mirrorlist
Reflector
1
2
3
# pacman -S reflector
# # 從HK、JP、TW、US的鏡像站中挑選速度前10快的,他也有其他條件可以篩選
# reflector --verbose -c HK -c JP -c TW -c US -f 10 --sort rate --save /etc/pacman.d/mirrorlist

開啟 32bit 的支持

1
2
# # 找到下面的並取消註解
# vim /etc/pacman.conf
1
2
[multilib]
Include = /etc/pacman.d/mirrorlist

開啟 Archlinux CN

開啟 Archlinux CN Repository,有一些常用的 AUR 已經被編譯好了,看你信不信任他

1
2
# vim /etc/pacman.conf
# vim /etc/pacman.d/mirrorlist.archlinuxcn
1
2
[archlinuxcn]
Include = /etc/pacman.d/mirrorlist.archlinuxcn
1
2
Server = https://archlinux.ccns.ncku.edu.tw/archlinuxcn/$arch
Server = https://mirror.twds.com.tw/archlinuxcn/$arch
1
# pacman -S archlinuxcn-keyring

安裝顯卡驅動

這部份最好看每個對應的 wiki page,這邊只是我很久以前整理出來節省時間的

Intel[3]

1
2
# pacman -S mesa lib32-mesa xf86-video-intel vulkan-intel intel-media-driver intel-gpu-tools
# # xf86-video-intel可不安裝,可能導致部分問題

Nvidia[4]

1
2
3
4
5
6
# # 或是nvidia可以換成nvidia-dkms,nvidia是針對linux這個kernel編譯的,如果想使用其他核心需改用nvidia-dkms
# pacman -S mesa nvidia nvidia-utils lib32-nvidia-utils libglvnd lib32-libglvnd opencl-nvidia lib32-opencl-nvidia nvidia-settings
# # 開啟early module load
# vim /etc/mkinitcpio.conf
# mkinitcpio -P
# vim /boot/loader/entries/arch.conf
1
MODULES=(nvidia nvidia-modeset nvidia-uvm nvidia-drm)
1
options root=... nvidia_drm.modeset=1
hooks

使用 nvidia-dkms 可跳過設定 hook

1
2
# mkdir /etc/pacman.d/hooks
# vim /etc/pacman.d/hooks/nvidia.hooks
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Trigger]
Operation=Install
Operation=Upgrade
Operation=Remove
Type=Package
Target=nvidia
Target=linux

[Action]
Description=Update Nvidia module in initcpio
Depends=mkinitcpio
When=PostTransaction
NeedsTargets
Exec=/bin/sh -c 'while read -r trg; do case $trg in linux) exit 0; esac; done; /usr/bin/mkinitcpio -P'

AMD[5]

1
# pacman -S mesa lib32-mesa xf86-video-amdgpu vulkan-radeon lib32-vulkan-radeon

安裝 AUR Helper

我習慣的 AUR Helper 是 yay,他的用法和 pacman 一模一樣

1
2
3
4
5
6
7
# su <username>
#cd
# git clone https://aur.archlinux.org/yay.git
# cd yay
# makepkg -si
# cd ..
# rm -rf yay

安裝桌面環境

基本的應該就這些吧

1
2
# pacman -S plasma xorg-xinit alsa-utils bluez-utils 
# pacman -S --asdeps xorg-server xorg-twm xterm xorg-apps pipewire-alsa pipewire pipewire-pulse pipewire-jack

安裝字體

看自己要裝哪些

1
# yay -S ttf-inconsolata nerd-fonts awesome-terminal-fonts ttf-nerd-fonts-symbols-2048-em ttf-nerd-fonts-symbols-2048-em-mono nerd-fonts-3270 noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra ttf-dejavu ttf-droid ttf-hack ttf-liberation ttf-opensans

安裝輸入法

1
# pacman -S fcitx5-im fcitx5-rime

其他

我個人還有額外裝很多東西,不過那些等到下一篇文章再說吧,這篇只是針對安裝 ArchLinux 已經夠長了

啟動服務

1
2
3
4
# systemctl enable NetworkManager
# systemctl enable avahi-daemon
# systemctl enable bluetooth
# systemctl enable sddm

重新啟動

1
2
3
4
# # 離開chroot
# exit
# umount -R /mnt
# reboot

參考


ArchLinux 安裝指北
https://www.zenwen.eu.org/how-to-install-archlinux/
作者
Zen Wen
發布於
2025年5月1日
許可協議