跳至主內容
  1. 文章/

Gentoo Linux 安裝指南(基礎篇)

··約 34 分鐘· loading · ·
Zakk
作者
Zakk
在澳洲念藝術,和 Paper 一起(她後來也到澳洲念大學),家裡一窩天竺鼠,同時寫 Linux 與日常隨筆。
本頁導覽

說明
#

本文是 Gentoo Linux 安裝指南 系列的第一部分:基礎安裝

系列導覽

  1. 基礎安裝(本文):從零開始安裝 Gentoo 基礎系統
  2. 桌面配置:顯示卡驅動、桌面環境、輸入法等

閱讀順序

  • 基礎安裝(第 0–11 節)→ 桌面配置(第 12 節)

指南說明
#

本文示範完整的 Gentoo 安裝流程,並提供官方 Wiki 與技術文件連結,供查閱各步驟的原理與設定細節。

本文以官方手冊為準,並附上參考連結。安裝 Gentoo 時,仍須自行查閱 Wiki 並排除問題;可使用搜尋引擎或 AI 工具尋找資料。

如有疑問或發現問題,可透過以下管道提出:

請以官方手冊為準

內容已驗證至 2025 年 11 月 25 日

Gentoo 簡介
#

Gentoo Linux 是以原始碼為基礎的 Linux 發行版,支援高度客製與效能最佳化。Gentoo 與其他發行版不同,使用者會從原始碼編譯所有軟體,因此:

  • 硬體最佳化:軟體會依硬體編譯
  • 系統組成:可決定系統包含及不包含的內容
  • 系統理解:透過親自建置系統理解 Linux
  • 編譯時間:首次安裝需要較長時間(建議預留 3–6 小時)
  • 學習曲線:需要一定程度的 Linux 基礎知識

適合的讀者

  • 想深入學習 Linux 的技術愛好者
  • 追求系統效能與客製化的使用者
  • 喜歡 DIY 過程的使用者

不適合的讀者

  • 需要快速安裝並使用系統的新手(建議先嘗試 Ubuntu、Fedora 等)
  • 沒有時間設定及維護系統的使用者
核心概念(點選展開)

安裝前須了解以下概念:

Stage3 (Wiki) 最小化的 Gentoo 基礎系統壓縮檔,包含建置完整系統所需的基礎工具鏈,例如編譯器及函式庫。解壓至硬碟後,它會成為新系統的基礎。

Portage (Wiki) Gentoo 的套件管理系統。它不會直接安裝預編譯套件,而是下載原始碼、依設定編譯後再安裝。核心指令是 emerge

USE Flags (Wiki) 控制軟體功能的開關。例如,USE="bluetooth" 會讓所有支援藍牙的軟體在編譯時啟用藍牙功能。這是 Gentoo 客製化的核心。

Profile (Wiki) 預設的系統設定範本。例如,desktop/plasma/systemd profile 會自動啟用適合 KDE Plasma 桌面的預設 USE flags。

Emerge (Wiki) Portage 的命令列工具。常用指令:

  • emerge --ask <套件名> - 安裝軟體
  • emerge --sync - 同步軟體倉庫
  • emerge -avuDN @world - 更新整個系統
安裝時間估算(點選展開)
步驟預計時間
準備安裝媒介10–15 分鐘
磁碟分割與格式化15–30 分鐘
下載並解壓 Stage35–10 分鐘
設定 Portage 與 Profile15–20 分鐘
編譯核心(最耗時)30 分鐘–2 小時
安裝系統工具20–40 分鐘
設定引導程式10–15 分鐘
安裝桌面環境(可選)1–3 小時
總計3–6 小時(取決於硬體效能)

提示

預編譯核心與二進位套件可大幅縮短安裝時間,但會犧牲部分客製性。

磁碟空間需求與開始前檢查清單(點選展開)

磁碟空間需求
#

  • 最小安裝:10 GB(無桌面環境)
  • 建議空間:30 GB(輕量桌面)
  • 完整桌面:80 GB+(完整桌面 + 編譯快取)

開始前的檢查清單
#

  • 已備份所有重要資料
  • 準備 8 GB+ 的 USB 隨身碟
  • 建議使用穩定的有線網路
  • 預留充足時間(建議完整的半天)
  • 具備基本的 Linux 命令列知識
  • 準備另一台裝置查閱文件(或使用 GUI LiveCD)

內容概覽
#

本文說明如何在 x86_64 UEFI 平台安裝 Gentoo Linux。

涵蓋內容

  • 從零開始安裝 Gentoo 基礎系統(分割、Stage3、核心、引導程式)
  • 設定 Portage 並最佳化編譯參數(make.conf、USE flags、CPU flags)
  • 可選進階設定(LUKS 根檔案系統加密)
  • 桌面配置 涵蓋桌面環境、locale、字型、Fcitx5 輸入法、Flatpak 和系統維護

重要提醒

關閉 Secure Boot
開始安裝前,請在 BIOS 中暫時關閉 Secure Boot。啟用 Secure Boot 可能使安裝媒介無法啟動,或使安裝後的系統無法引導。系統安裝完成並成功啟動後,可參考本指南後續章節重新設定並啟用 Secure Boot。

資料備份
本指南包含磁碟分割操作。開始前請備份所有重要資料。


0. 準備安裝媒介
#

0.1 下載 Gentoo ISO
#

下載頁面提供的方式取得下載連結。

注意

以下指令會從官方 current-install-amd64-minimal 目錄讀取目前的 ISO 檔名。

下載 Minimal ISO:

ISO_DIR=https://distfiles.gentoo.org/releases/amd64/autobuilds/current-install-amd64-minimal
ISO=$(wget -qO- "$ISO_DIR/latest-install-amd64-minimal.txt" | grep -E '^install-amd64-minimal-[0-9]{8}T[0-9]{6}Z[.]iso ' | cut -d' ' -f1)
test -n "$ISO" || exit 1
wget "$ISO_DIR/$ISO" "$ISO_DIR/$ISO.asc"

新手可選:LiveGUI USB Image

安裝時若需直接使用瀏覽器,或想更方便地連線 Wi-Fi,可選擇 LiveGUI USB Image

建議新手從 Gentoo 官方下載頁面 選擇 LiveGUI USB Image。

Live ISO 登入憑據

  • 帳號:live
  • 密碼:live
  • Root 密碼:live

系統支援

  • 支援中文顯示、Fcitx5 輸入法與 flclash 等

驗證簽名(推薦):

# 匯入 Gentoo 官方發布簽名公鑰。
# 建議方式:使用 Live media 或 sec-keys/openpgp-keys-gentoo-release 提供的本機副本
gpg --import /usr/share/openpgp-keys/gentoo-release.asc
# 備用方式:autobuild 由每週自動發布金鑰簽署;沒有本機副本時,從 keyserver 取得:
#   gpg --keyserver hkps://keys.gentoo.org --recv-keys 13EBBDBEDE7A12775DFDB1BABB572E0E2D182910

# 驗證 ISO 檔案的數位簽名
gpg --verify "$ISO.asc" "$ISO"
# "$ISO.asc":簽名檔案(ASCII armored)
# "$ISO":待驗證的 ISO 檔案

0.2 製作 USB 安裝盤
#

Linux:

sudo dd if="$ISO" of=/dev/sdX bs=4M status=progress oflag=sync
# if=輸入檔案;of=輸出裝置;bs=區塊大小;status=顯示進度

提示

請將 sdX 替換為 USB 裝置名稱,例如 /dev/sdb

**Windows:**建議使用 Rufus → 選擇 ISO → 寫入時選擇 DD 模式。


1. 進入 Live 環境並連線網路
#

目的

Gentoo 安裝需要透過網路下載原始碼套件(Stage3)及軟體倉庫(Portage)。因此,先在 Live 環境設定網路。

Gentoo Live media 預設啟用 NetworkManager。有線網路通常會透過 DHCP 自動連線;無線網路可透過 TUI 設定。

NetworkManager(Live media 預設):

nmtui   # 互動式:選擇「Activate a connection」或「Edit a connection」

確認連線:

ping -c3 gentoo.org

如需手動設定,或使用未提供 NetworkManager 的舊版 Minimal ISO,請參考下列兩節。

1.1 有線網路(手動)
#

ip link              # 檢視網路介面名稱 (如 eno1, wlan0)
dhcpcd eno1          # 對有線網路介面啟用 DHCP 自動取得 IP
ping -c3 gentoo.org  # 測試網路連線

1.2 無線網路(手動)
#

互動式設定:

net-setup

wpa_supplicant(替換為實際介面、SSID 與密碼):

wpa_passphrase "SSID" "PASSWORD" | tee /etc/wpa_supplicant/wpa_supplicant.conf
wpa_supplicant -B -i wlp0s20f3 -c /etc/wpa_supplicant/wpa_supplicant.conf
dhcpcd wlp0s20f3

注意

若 WPA3 不穩定,請先改用 WPA2。

進階設定:啟動 SSH,以便遠端操作(點選展開)
passwd                      # 設定 root 密碼 (遠端登入需要)
rc-service sshd start       # 啟動 SSH 服務
rc-update add sshd default  # 設定 SSH 開機自動啟動 (Live 環境中可選)
ip a | grep inet            # 檢視目前 IP 位址
# 在另一部裝置上執行:ssh root@<IP>

2. 規劃磁碟分割區
#

目的

Linux 系統需要獨立的儲存空間。UEFI 系統通常需要一個 ESP 分割區供引導,以及一個根分割區供系統使用。妥善規劃可簡化後續維護。

EFI 系統分割區(ESP)
#

在由 UEFI(非 BIOS)啟動的作業系統上安裝 Gentoo 時,必須建立 EFI 系統分割區(ESP)。ESP 必須使用 FAT 檔案系統,在 Linux 中可能顯示為 vfat。UEFI 規範指出韌體可辨識 FAT12、FAT16 或 FAT32,建議使用 FAT32。

警告
若 ESP 未以 FAT 檔案系統格式化,UEFI 韌體會找不到引導程式或 Linux 核心,系統很可能無法引導。

建議分割區配置(UEFI)
#

下表提供 Gentoo 試用安裝的預設分割區配置。

裝置路徑掛載點檔案系統說明
/dev/nvme0n1p1/efivfatEFI 系統分割區(ESP)
/dev/nvme0n1p2swapswap交換分割區
/dev/nvme0n1p3/xfs根分割區

cfdisk 分割區範例
#

cfdisk 是圖形化分割區工具,操作直觀。

cfdisk /dev/nvme0n1

操作

  1. 選擇 GPT 標籤類型。
  2. 建立 ESP:新增分割區 → 大小 1G → 類型選擇 EFI System
  3. 建立 Swap:新增分割區 → 大小 4G → 類型選擇 Linux swap
  4. 建立 Root:新增分割區 → 剩餘空間 → 類型選擇 Linux filesystem(預設)。
  5. 選擇 Write 寫入變更,輸入 yes 確認。
  6. 選擇 Quit 離開。
                                                                 Disk: /dev/nvme0n1
                                              Size: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
                                            Label: gpt, identifier: 9737D323-129E-4B5F-9049-8080EDD29C02

    裝置                                       Start                   終點                  扇區               Size 型別
    /dev/nvme0n1p1                                34                  32767                 32734                16M Microsoft reserved
    /dev/nvme0n1p2                             32768              879779839             879747072             419.5G Microsoft basic data
    /dev/nvme0n1p3                        1416650752             1418747903               2097152                 1G EFI System
    /dev/nvme0n1p4                        1418747904             1437622271              18874368                 9G Linux swap
    /dev/nvme0n1p5                        1437622272             1953523711             515901440               246G Linux filesystem
>>  /dev/nvme0n1p6                         879779840             1416650751             536870912               256G Linux filesystem

 ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 │  Partition UUID: F2F1EF58-82EA-46A6-BF49-896AA40C6060                                                                                           │
 │  Partition type: Linux filesystem (0FC63DAF-8483-4772-8E79-3D69D8477DE4)                                                                        │
 │ Filesystem UUID: b4b0b42d-20be-4cf8-be81-9775efa6c151                                                                                           │
 │Filesystem LABEL: crypthomevar                                                                                                                   │
 │      Filesystem: crypto_LUKS                                                                                                                    │
 └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
                                   [ 刪除 ]  [Resize]  [ 退出 ]  [ 型別 ]  [ 幫助 ]  [ 排序 ]  [ 寫入 ]  [ 匯出 ]


                                                        Quit program without writing changes
進階設定:fdisk 指令列分割槽教學(點選展開)

fdisk 是一個功能強大的指令列分割槽工具。

fdisk /dev/nvme0n1

1. 檢視當前分割槽佈局

使用 p 鍵來顯示磁碟當前的分割槽配置。

Command (m for help): p
Disk /dev/nvme0n1: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: NVMe SSD
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 3E56EE74-0571-462B-A992-9872E3855D75

Device           Start        End    Sectors   Size Type
/dev/nvme0n1p1    2048    2099199    2097152     1G EFI System
/dev/nvme0n1p2 2099200   10487807    8388608     4G Linux swap
/dev/nvme0n1p3 10487808 1953523711 1943035904 926.5G Linux root (x86-64)

2. 建立一個新的磁碟標籤

按下 g 鍵將立即刪除所有現有的磁碟分割槽並建立一個新的 GPT 磁碟標籤:

Command (m for help): g
Created a new GPT disklabel (GUID: ...).

或者,要保留現有的 GPT 磁碟標籤,可以使用 d 鍵逐個刪除現有分割槽。

3. 建立 EFI 系統分割槽 (ESP)

輸入 n 建立一個新分割槽,選擇分割槽號 1,起始扇區預設(2048),結束扇區輸入 +1G

Command (m for help): n
Partition number (1-128, default 1): 1
First sector (2048-..., default 2048): <Enter>
Last sector, +/-sectors or +/-size{K,M,G,T,P} (...): +1G

Created a new partition 1 of type 'Linux filesystem' and of size 1 GiB.
Partition #1 contains a vfat signature.

Do you want to remove the signature? [Y]es/[N]o: Y
The signature will be removed by a write command.

將分割槽標記為 EFI 系統分割槽(型別程式碼 1):

Command (m for help): t
Selected partition 1
Partition type or alias (type L to list all): 1
Changed type of partition 'Linux filesystem' to 'EFI System'.

4. 建立 Swap 分割槽

建立 4GB 的 Swap 分割槽:

Command (m for help): n
Partition number (2-128, default 2): 2
First sector (...): <Enter>
Last sector (...): +4G

Created a new partition 2 of type 'Linux filesystem' and of size 4 GiB.

Command (m for help): t
Partition number (1,2, default 2): 2
Partition type or alias (type L to list all): 19
Changed type of partition 'Linux filesystem' to 'Linux swap'.

(註:類型程式碼 19 是 Linux swap)

5. 建立根分割區

將剩餘空間分配給根分割區:

Command (m for help): n
Partition number (3-128, default 3): 3
First sector (...): <Enter>
Last sector (...): <Enter>

Created a new partition 3 of type 'Linux filesystem' and of size 926.5 GiB.

注意

將根分割區設為 "Linux root (x86-64)" 並非必要;設為 "Linux filesystem" 時,系統也能正常運作。只有使用支援此類型的引導程式(即 systemd-boot),且不需要 fstab 檔案時,才需要此檔案系統類型。

將分割區類型設為 "Linux root (x86-64)"(類型程式碼 23):

Command (m for help): t
Partition number (1-3, default 3): 3
Partition type or alias (type L to list all): 23
Changed type of partition 'Linux filesystem' to 'Linux root (x86-64)'.

6. 寫入變更

確認無誤後,按 w 寫入變更並離開:

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

3. 建立檔案系統並掛載
#

目的

磁碟分割區只劃分空間,尚不能儲存資料。建立檔案系統(如 ext4、Btrfs)後,作業系統才能管理及存取這些空間。掛載則將檔案系統接入 Linux 檔案樹的指定位置。

3.1 格式化
#

mkfs.fat -F 32 /dev/nvme0n1p1  # 將 ESP 分割區格式化為 FAT32
mkswap /dev/nvme0n1p2          # 將 Swap 分割區格式化
mkfs.xfs /dev/nvme0n1p3        # 將 Root 分割區格式化為 XFS

若使用 Btrfs:

mkfs.btrfs -L gentoo /dev/nvme0n1p3

若使用 ext4:

mkfs.ext4 /dev/nvme0n1p3

其他檔案系統

其他如 F2FSZFS 請參考相關 Wiki。

3.2 掛載(以 XFS 為例)
#

mount /dev/nvme0n1p3 /mnt/gentoo        # 掛載根分割區
mkdir -p /mnt/gentoo/efi                # 建立 ESP 掛載點
mount /dev/nvme0n1p1 /mnt/gentoo/efi    # 掛載 ESP 分割區
swapon /dev/nvme0n1p2                   # 啟用 Swap 分割區
進階設定:Btrfs 子卷範例(點選展開)

1. 格式化

mkfs.fat -F 32 /dev/nvme0n1p1  # 將 ESP 格式化
mkswap /dev/nvme0n1p2          # 將 Swap 格式化
mkfs.btrfs -L gentoo /dev/nvme0n1p3 # 格式化 Root (Btrfs)

2. 建立子卷

mount /dev/nvme0n1p3 /mnt/gentoo
btrfs subvolume create /mnt/gentoo/@
btrfs subvolume create /mnt/gentoo/@home
umount /mnt/gentoo

3. 掛載子卷

mount -o compress=zstd,subvol=@ /dev/nvme0n1p3 /mnt/gentoo
mkdir -p /mnt/gentoo/{efi,home}
mount -o subvol=@home /dev/nvme0n1p3 /mnt/gentoo/home
mount /dev/nvme0n1p1 /mnt/gentoo/efi    # 注意:ESP 必須採用 FAT32
swapon /dev/nvme0n1p2

4. 驗證掛載

lsblk

輸出範例:

NAME             MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
nvme0n1          259:1    0 931.5G  0 disk  
├─nvme0n1p1      259:7    0     1G  0 part  /mnt/gentoo/efi
├─nvme0n1p2      259:8    0     4G  0 part  [SWAP]
└─nvme0n1p3      259:9    0 926.5G  0 part  /mnt/gentoo/home
                                            /mnt/gentoo

Btrfs 快照

可使用 Snapper 管理快照。將 @@home 分開可簡化系統回復。

進階設定:加密分割區(LUKS)(點選展開)

LUKS 專用分割區配置

裝置掛載點檔案系統說明
/dev/nvme0n1p1/efivfatEFI 系統分割區(ESP),1G
/dev/nvme0n1p2/bootext4未加密,存放核心與 initramfs,1G
/dev/nvme0n1p3swapswap交換分割區
/dev/nvme0n1p4/btrfsLUKS 加密的根分割區

GRUB 必須在解密前讀取核心與 initramfs,因此它們必須存放於未加密的 /boot;根分割區仍受 LUKS 加密。

1. 建立加密容器

cryptsetup luksFormat --type luks2 --pbkdf argon2id --hash sha512 --key-size 512 /dev/nvme0n1p4

此流程僅加密根分割區 /dev/nvme0n1p4。ESP、獨立的 /boot 分割區與獨立的 Swap 分割區未受 LUKS 保護;記憶體換出的頁面會寫入未加密的 Swap。

2. 開啟加密容器

映射名稱 cryptroot 會在後續 dracut、fstab 與引導程式章節中重複使用。若改名,請保持一致。

cryptsetup luksOpen /dev/nvme0n1p4 cryptroot

3. 格式化

mkfs.fat -F 32 /dev/nvme0n1p1                   # 將 ESP 格式化
mkfs.ext4 /dev/nvme0n1p2                        # 將未加密的 /boot 格式化
mkswap /dev/nvme0n1p3                           # 將 Swap 格式化
mkfs.btrfs --label root /dev/mapper/cryptroot   # 在 LUKS 之上格式化 Root(Btrfs)

4. 掛載

mount /dev/mapper/cryptroot /mnt/gentoo
btrfs subvolume create /mnt/gentoo/@
btrfs subvolume create /mnt/gentoo/@home
umount /mnt/gentoo
mount -o compress=zstd,subvol=@ /dev/mapper/cryptroot /mnt/gentoo
mkdir -p /mnt/gentoo/boot
mount /dev/nvme0n1p2 /mnt/gentoo/boot
mkdir -p /mnt/gentoo/{efi,home}
mount -o subvol=@home /dev/mapper/cryptroot /mnt/gentoo/home
mount /dev/nvme0n1p1 /mnt/gentoo/efi
swapon /dev/nvme0n1p3

5. 驗證掛載

lsblk

輸出範例:

NAME             MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
nvme0n1          259:1    0 931.5G  0 disk
├─nvme0n1p1      259:7    0     1G  0 part  /mnt/gentoo/efi
├─nvme0n1p2      259:8    0     1G  0 part  /mnt/gentoo/boot
├─nvme0n1p3      259:9    0     4G  0 part  [SWAP]
└─nvme0n1p4      259:10   0 925.5G  0 part
  └─cryptroot    253:0    0 925.5G  0 crypt /mnt/gentoo

驗證掛載

掛載完成後,執行 lsblk 確認掛載點。

lsblk

輸出範例(類似如下):

NAME             MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
 nvme0n1          259:1    0 931.5G  0 disk  
├─nvme0n1p1      259:7    0     1G  0 part  /efi
├─nvme0n1p2      259:8    0     4G  0 part  [SWAP]
└─nvme0n1p3      259:9    0 926.5G  0 part  /

4. 下載 Stage3 並進入 chroot
#

目的

Stage3 是最小化的 Gentoo 基礎系統環境。解壓至硬碟後,透過 chroot 進入此環境進行後續設定。

4.1 選擇 Stage3
#

  • OpenRCstage3-amd64-openrc-*.tar.xz
  • systemdstage3-amd64-systemd-*.tar.xz
  • Desktop 變體預設啟用部分 USE,標準版較具彈性。

4.2 下載與展開
#

cd /mnt/gentoo
# OpenRC:
BASE=https://distfiles.gentoo.org/releases/amd64/autobuilds
STAGE3=$(wget -qO- "$BASE/latest-stage3-amd64-openrc.txt" | grep -E '^[0-9]{8}T[0-9]{6}Z/stage3-amd64-openrc-[0-9]{8}T[0-9]{6}Z[.]tar[.]xz ' | cut -d' ' -f1)
# systemd:將上一行中的兩個 openrc 替換為 systemd。
test -n "$STAGE3" || exit 1
wget "$BASE/$STAGE3"
wget "$BASE/$STAGE3.asc"
gpg --verify "${STAGE3##*/}.asc" "${STAGE3##*/}"
tar xpvf "${STAGE3##*/}" --xattrs-include='*.*' --numeric-owner

若同時下載 .DIGESTS.CONTENTS,可使用 opensslgpg 驗證。

4.3 複製 DNS 並掛載偽檔案系統
#

cp --dereference /etc/resolv.conf /mnt/gentoo/etc/ # 複製 DNS 設定
mount --types proc /proc /mnt/gentoo/proc          # 掛載程序資訊
mount --rbind /sys /mnt/gentoo/sys                 # 繫結掛載系統資訊
mount --rbind /dev /mnt/gentoo/dev                 # 繫結掛載裝置節點
mount --rbind /run /mnt/gentoo/run                 # 繫結掛載執行期資訊
mount --make-rslave /mnt/gentoo/sys                # 設為從屬掛載 (避免卸載時影響主機)
mount --make-rslave /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/run

使用 OpenRC 時可省略 /run

4.4 進入 chroot
#

chroot /mnt/gentoo /bin/bash    # 將根目錄切換至新系統
source /etc/profile             # 載入環境變數
export PS1="(chroot) ${PS1}"    # 修改提示符以區別環境

5. 初始化 Portage 與 make.conf
#

目的

Portage 是 Gentoo 的套件管理系統。初始化 Portage 並設定 make.conf 後,可決定軟體的編譯方式、啟用功能與下載來源。

5.1 同步倉庫
#

emerge-webrsync   # 取得最新 Portage 快照 (比 rsync 快)
emerge --sync     # 同步 Portage 樹 (取得最新 ebuild)
emerge --ask app-editors/vim # 安裝 Vim 編輯器 (建議)
eselect editor list          # 列出可用編輯器
eselect editor set vi        # 將 Vim 設為預設編輯器 (vi 通常是 vim 的符號連結)

設定鏡像(擇一):

emerge --ask --verbose --oneshot app-portage/mirrorselect
mirrorselect -i -o >> /etc/portage/make.conf
# 或手動:
# 以 BFSU 鏡像站為例
echo 'GENTOO_MIRRORS="https://mirrors.bfsu.edu.cn/gentoo/"' >> /etc/portage/make.conf

5.2 make.conf 範例
#

編輯 /etc/portage/make.conf

vim /etc/portage/make.conf

新手設定(可直接複製)

提示

請依 CPU 核心數修改 MAKEOPTS 中的 -j 參數,例如 8 核 CPU 使用 -j8

# ========== 編譯最佳化參數 ==========
# -march=native:針對目前 CPU 架構最佳化,以取得最佳效能
# -O2:建議的最佳化等級,兼顧效能與編譯時間
# -pipe: 使用管道加速編譯過程
COMMON_FLAGS="-march=native -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"    # C 編譯器選項
CXXFLAGS="${COMMON_FLAGS}"  # C++ 編譯器選項
FCFLAGS="${COMMON_FLAGS}"   # Fortran 編譯器選項
FFLAGS="${COMMON_FLAGS}"    # Fortran 77 編譯器選項

# ========== 並行編譯設定 ==========
# -j 後面的數字 = CPU 執行緒數(執行 `nproc` 檢視)
# 記憶體不足時可適度減少,例如 `-j4`
MAKEOPTS="-j8"

# ========== 語言與本地化 ==========
# LC_MESSAGES=C: 保持編譯輸出為英文,便於搜尋錯誤資訊
LC_MESSAGES=C
# L10N/LINGUAS:支援的語言(影響軟體翻譯與文件)
L10N="en en-US zh zh-CN zh-TW"
LINGUAS="en en_US zh zh_CN zh_TW"

# ========== 鏡像來源設定 ==========
# 建議使用 BFSU、TUNA、USTC 等鏡像站
GENTOO_MIRRORS="https://mirrors.bfsu.edu.cn/gentoo/"

# ========== USE 標誌 ==========
# 僅列出 profile 預設值以外的部分,其餘由 profile 提供
USE="git dist-kernel"

# ========== 授權條款設定 ==========
# "*" 接受所有授權條款;"@FREE" 僅接受自由軟體
ACCEPT_LICENSE="*"

確認 profile 提供的 USE 標誌

systemd profile 提供 systemdudevdesktop profile 提供 dbuspolicykitbluetoothdesktop/plasma profile 提供 networkmanager,並強制啟用 policykit。profile 是 USE 的主要來源,因此 make.confUSE 只應列出與 profile 預設值不同的部分。以下指令可確認目前的 USE 集合與套件 USE 標誌:

emerge --info | grep '^USE='
emerge -pv <package>
詳細設定範例(點選展開)
# vim: set filetype=bash  # 指示 Vim 使用 bash 語法醒目提示

# ========== 系統架構(勿手動修改) ==========
# Stage3 預設設定,表示目標系統架構
CHOST="x86_64-pc-linux-gnu"

# ========== 編譯最佳化參數 ==========
# -march=native    針對目前 CPU 架構最佳化,以取得最佳效能
#                  注意:編譯出的程式可能無法在其他 CPU 上執行
# -O2              建議的最佳化等級,兼顧效能與穩定性
#                  避免使用 -O3,部分軟體可能編譯失敗
# -pipe            以管道取代暫存檔傳遞資料,加速編譯
COMMON_FLAGS="-march=native -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"      # C 編譯器選項
CXXFLAGS="${COMMON_FLAGS}"    # C++ 編譯器選項
FCFLAGS="${COMMON_FLAGS}"     # Fortran 編譯器選項
FFLAGS="${COMMON_FLAGS}"      # Fortran 77 編譯器選項

# CPU 指令集最佳化(執行 `cpuid2cpuflags` 自動產生,見下文 5.3)
# CPU_FLAGS_X86="aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt sse sse2 ..."

# ========== 並行編譯設定 ==========
# MAKEOPTS:控制 make 的平行工作數
#   -j<N>   同時執行的編譯工作數,建議 = CPU 執行緒數(`nproc`)
#   -l<N>   系統負載限制,避免系統過載(可選)
MAKEOPTS="-j8"  # 請依實際 CPU 執行緒數調整

# 記憶體不足時的替代設定(例如 16 GB 記憶體 + 8 核 CPU):
# MAKEOPTS="-j4 -l8"  # 減少並行數,限制負載

# ========== 語言與本地化設定 ==========
# 保持建置輸出為英文,便於搜尋錯誤資訊及求助
LC_MESSAGES=C

# L10N:本地化語言支援(影響軟體翻譯、文件等)
L10N="en en-US zh zh-CN zh-TW"

# LINGUAS:舊式本地化變數(部分軟體仍需要)
LINGUAS="en en_US zh zh_CN zh_TW"

# ========== 鏡像來源設定 ==========
# 常用鏡像(擇一):
#   BFSU:  https://mirrors.bfsu.edu.cn/gentoo/
#   TUNA:  https://mirrors.tuna.tsinghua.edu.cn/gentoo/
#   USTC:  https://mirrors.ustc.edu.cn/gentoo/
#   SJTU:  https://mirrors.sjtug.sjtu.edu.cn/gentoo/
GENTOO_MIRRORS="https://mirrors.bfsu.edu.cn/gentoo/"

# ========== Emerge 預設選項 ==========
# --ask              執行前詢問確認
# --verbose          顯示詳細資訊(USE 標誌變動等)
# --with-bdeps=y     包含建置時相依性(更新時也檢查)
# --complete-graph=y 完整相依圖分析(避免相依問題)
EMERGE_DEFAULT_OPTS="--ask --verbose --with-bdeps=y --complete-graph=y"

# 可選的額外選項:
# --jobs=N           平行編譯多個套件(記憶體充足時可用)
# --load-average=N   系統負載限制
# EMERGE_DEFAULT_OPTS="--ask --verbose --jobs=2 --load-average=8"

# ========== USE 標誌(全域功能開關) ==========
# 這些標誌影響所有套件的編譯選項
#
# 系統基礎:
#   systemd        使用 systemd init(若用 OpenRC 改為 -systemd)
#   udev           裝置管理支援
#   dbus           程式間通訊(桌面環境必需)
#   policykit      權限管理(桌面環境必需)
#
# 網路與硬體:
#   networkmanager 網路管理器(桌面使用者推薦)
#   bluetooth      藍牙支援
#
# 開發工具:
#   git            Git 版本控制
#
# 核心:
# ========== USE 標誌(全域功能開關) ==========
# 僅列出 profile 預設值以外的部分;此處僅啟用 git 與 dist-kernel。
USE="git dist-kernel"

# 常用的可選 USE 標誌:
#   pulseaudio / pipewire  音訊伺服器
#   wayland / X            顯示伺服器
#   vulkan                 Vulkan 圖形 API
#   vaapi / vdpau          硬體影片解碼
#   cups                   列印支援
#   flatpak                Flatpak 應用支援

# ========== 許可證設定 ==========
# "*"     接受所有許可證(包括閉源軟體)
# "@FREE" 僅接受自由軟體許可證
ACCEPT_LICENSE="*"

# ========== 顯示卡設定(可選) ==========
# 依顯示卡選擇:
#   intel      Intel 內建顯示卡
#   amdgpu     AMD 顯示卡(GCN 1.2+)
#   radeonsi   AMD 顯示卡(OpenGL)
#   nvidia     NVIDIA 顯示卡(閉源驅動)
#   nouveau    NVIDIA 顯示卡(開源驅動)
# VIDEO_CARDS="intel"
# VIDEO_CARDS="amdgpu radeonsi"
# VIDEO_CARDS="nvidia"

# ========== 輸入裝置設定(可選) ==========
# libinput 是現代桌面的建議選擇
# INPUT_DEVICES="libinput"

# ========== Portage 功能設定(可選) ==========
# 啟用拆分除錯資訊
# FEATURES="${FEATURES} splitdebug"

# ========== 編譯日誌配置(推薦) ==========
# PORTAGE_ELOG_CLASSES: 要記錄的日誌級別
#   info     一般資訊
#   warn     警告資訊(重要)
#   error    錯誤資訊(重要)
#   log      普通日誌
#   qa       品質保證警告
PORTAGE_ELOG_CLASSES="warn error log"

# PORTAGE_ELOG_SYSTEM:日誌輸出方式
#   save          儲存至 /var/log/portage/elog/(建議)
#   echo          編譯後直接顯示
#   mail          透過電子郵件傳送
#   syslog        傳送至系統日誌
#   custom        自訂處理
PORTAGE_ELOG_SYSTEM="save"

# 檔案末尾保留換行符

提示

  • MAKEOPTS="-j32" 的數字應為 CPU 執行緒數,可透過 nproc 檢視。
  • 編譯時記憶體不足可減少平行工作數,例如改為 -j16
  • USE 標誌決定軟體在編譯時包含的功能。
進階設定:CPU 指令集設定(CPU_FLAGS_X86)(點選展開)

可參考CPU_FLAGS_*

設定 CPU_FLAGS_X86,讓 Portage 知道 CPU 支援的指令集,例如 AES、AVX 與 SSE4.2。

安裝檢測工具:

emerge --ask app-portage/cpuid2cpuflags # 安裝檢測工具

執行檢測並寫入設定:

cpuid2cpuflags >> /etc/portage/make.conf # 將檢測結果追加至設定檔

檢查 /etc/portage/make.conf 末尾,應有類似的一行:

CPU_FLAGS_X86="aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt rdrand sse sse2 sse3 sse4_1 sse4_2 ssse3"

5.3 二進位套件(binhost)[可選]
#

目的

Gentoo 從原始碼編譯軟體,安裝流程中最耗時的工作通常是編譯。官方 binhost 提供已簽署的預編譯二進位套件。設定相符時,Portage 會直接安裝;不相符時,仍會從原始碼編譯。binhost 只改變套件來源,不會改變系統結構,因此可隨時啟用或停用。

確認倉庫設定
#

Stage3 已在 /etc/portage/binrepos.conf/gentoo.conf 預先設定官方 binhost,可先檢視現有內容:

cat /etc/portage/binrepos.conf/gentoo.conf

典型設定:

[gentoo]
priority = 1
sync-uri = https://distfiles.gentoo.org/releases/amd64/binpackages/23.0/x86-64
location = /var/cache/binhost/gentoo
verify-signature = true

sync-uri 應指向含有 Packages 索引的目錄。更換鏡像時只修改主機部分,路徑維持不變。可用位址見 gentoo-zh 鏡像列表

選擇指令集層級
#

sync-uri 路徑末段是指令集層級。Stage3 預設使用通用的 x86-64。改用較高層級,便可取得針對較新指令集最佳化的套件。

先檢查本機支援的層級:

ld.so --help

在輸出中尋找 Subdirectories of glibc-hwcaps directories 區段。標為 supported, searched 的層級即為本機可用層級:

Subdirectories of glibc-hwcaps directories, in priority order:
  x86-64-v4 (supported, searched)
  x86-64-v3 (supported, searched)
  x86-64-v2 (supported, searched)

官方 amd64 binhost 僅建置 x86-64x86-64-v3 兩個層級,不含 v2v4。若輸出含有 x86-64-v3 (supported, searched),便使用 x86-64-v3;否則保留 x86-64。上例的機器雖支援 v4,可用的仍是 v3

確認後,修改 sync-uri 的末段:

# /etc/portage/binrepos.conf/gentoo.conf
sync-uri = https://distfiles.gentoo.org/releases/amd64/binpackages/23.0/x86-64-v3

arm64 只有一個層級,路徑為 /releases/arm64/binpackages/23.0/arm64,無須選擇。

注意

層級只決定二進位套件使用的指令集,與本機編譯無關。CPU 不支援所填層級時,取得的套件會因非法指令而當機。因此應以 ld.so --help 的輸出為準,不應依 CPU 型號猜測。

自動啟用
#

讓 emerge 在有合適的二進位套件時自動使用:

# 追加至 /etc/portage/make.conf
FEATURES="${FEATURES} getbinpkg"

只在單次指令中使用:

emerge --ask --getbinpkg sys-kernel/gentoo-kernel

-bin 套件與二進位套件不同

sys-kernel/gentoo-kernel-bin 等以 -bin 結尾的套件使用上游發布的預編譯產物。ebuild 只負責下載及解壓,仍遵循一般 ebuild 流程,emerge -pv 顯示為 [ebuild]。本節的二進位套件由 Portage 封裝並透過 binhost 發布,格式為 .gpkg.tar,顯示為 [binary]

因此,第 7 章的 gentoo-kernel-bin 本身不會編譯,也不使用 binhost;從原始碼建置的 sys-kernel/gentoo-kernel,以及桌面篇的瀏覽器、LLVM、Rust 等大型軟體,才可透過 binhost 節省編譯時間。

確認是否已使用
#

emerge -pv 輸出的前綴為 [binary],才表示該項目使用二進位套件;[ebuild] 表示必須從原始碼編譯:

emerge -pv sys-kernel/gentoo-kernel

設定正確但仍顯示 [ebuild] 時,常見原因有三項:

  • USE 不相符。--binpkg-respect-use 預設啟用。二進位套件的 USE 與目前設定不一致時,會被略過。官方 binhost 依 profile 的預設 USE 建置,因此在 make.conf 中變更越多 USE,命中率越低。
  • 相依性變動。--binpkg-changed-deps 預設啟用。ebuild 的相依性在封裝後變動時,會略過該套件。
  • **版本不在索引中。**binhost 只提供已建置的版本;同步樹上的較新版本會從原始碼編譯。

CFLAGS 不參與比對,因此 make.conf 中的 -march=native 不會使官方二進位套件失效。本機編譯的套件會依 native 最佳化,來自 binhost 的套件使用通用指令集,兩者可以共存。

相關選項
#

選項作用
-k / --usepkg本機 PKGDIR 有套件就使用
-g / --getbinpkg從遠端 binhost 取得,隱含 -k
-K / --usepkgonly只使用本機二進位套件;沒有就報錯
-G / --getbinpkgonly只使用二進位套件,遠端優先於本機

安裝時使用 -g 即可。-K-G 會關閉 --binpkg-respect-use--binpkg-changed-deps,安裝的套件可能與 make.conf 中的 USE 不一致,因此不建議在此步驟使用。

簽名驗證
#

verify-signature = true 表示此倉庫的套件必須帶有可信任簽名。新版 Portage 預設驗證遠端二進位套件,首次下載時會自動執行 getuto,並在 /etc/portage/gnupg 建立信任金鑰環。官方 binhost 使用者無須再設定 FEATURES="binpkg-request-signature"。取得的套件會快取在 location 指定的目錄,並與本機 FEATURES="buildpkg" 產生的套件分開存放。這兩項變更見 2026-05-03 的新聞條目。系統安裝完成後,也可使用 eselect news read 檢視。

進階:gentoo-zh 二進位套件、自行建置與區域網路共享(點選展開)

gentoo-zh binhost

gentoo-zh overlay 為瀏覽器、辦公套件及 Electron 應用程式等編譯時間較長的軟體提供預編譯版本。目前只支援 amd64,分為 stable 與 unstable 兩個頻道,須另行匯入社群簽名公鑰。這是附加倉庫,不會取代官方 binhost。設定見 gentoo-zh Overlay 頁面。overlay 的設定步驟在桌面配置篇第 12.9 節,請在完成該步驟後再設定。

自行建置二進位套件

編譯時同時產生二進位套件,重新安裝或安裝第二台電腦時便可直接重複使用:

# 追加至 /etc/portage/make.conf
FEATURES="${FEATURES} buildpkg"
PKGDIR="/var/cache/binpkgs"

可為已安裝的套件補充封裝:

emerge --ask app-portage/gentoolkit
quickpkg --include-config=y sys-apps/portage

分享給其他電腦

可透過任意 HTTP 伺服器發布 PKGDIR。用戶端在 /etc/portage/binrepos.conf/ 中新增一個指向此目錄的倉庫。須處理以下兩項:

  • -march=native 編譯的套件只能在相同型號的 CPU 上執行。若要分享,請將建置機的 COMMON_FLAGS 改為明確架構,例如 -march=x86-64-v3
  • 自行建置的套件預設沒有簽名,因此用戶端應為此倉庫設定 verify-signature = false,或在建置機啟用 FEATURES="binpkg-signing",並將公鑰匯入用戶端的 /etc/portage/gnupg

清理

二進位套件會持續占用磁碟空間:

eclean-pkg -p       # 先查看會刪除哪些項目
eclean-pkg          # 刪除已由新版本取代的套件
eclean-pkg -d       # 只保留重新安裝所需的最小集合

6. Profile、系統設定與本地化
#

目的

Profile 定義系統的基礎設定與預設 USE 標誌。設定時區、語言及網路等基本參數後,Gentoo 系統才能正常運作,並符合個人使用習慣。

6.1 選擇 Profile
#

eselect profile list          # 列出所有可用 Profile
eselect profile set <編號>    # 設定選定的 Profile
emerge -avuDN @world          # 更新系統以匹配新 Profile (a:詢問 v:詳細 u:升級 D:深層依賴 N:新USE)

常見 profile:

  • default/linux/amd64/23.0/desktop/plasma/systemd
  • default/linux/amd64/23.0/desktop/gnome/systemd
  • default/linux/amd64/23.0/desktop(OpenRC 桌面)

6.2 時區與語言
#

echo "Asia/Taipei" > /etc/timezone
emerge --config sys-libs/timezone-data

echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen                      # 產生選定的語言環境
eselect locale set en_US.utf8   # 設定系統預設語言 (建議使用英文以免亂碼)

# 重新載入環境
env-update && source /etc/profile && export PS1="(chroot) ${PS1}"

6.3 主機名稱與網路設定
#

設定主機名稱

echo "gentoo" > /etc/hostname

選擇網路管理工具

方案 A:NetworkManager(通用)

可參考NetworkManager

適用於大多數桌面使用者,支援 OpenRC 與 systemd。

emerge --ask net-misc/networkmanager
# OpenRC:
rc-update add NetworkManager default
# systemd:
systemctl enable NetworkManager

設定

圖形介面:執行 nm-connection-editor
命令列:使用 nmtui(TUI)或 nmcli

進階提示:使用 iwd 後端(點選展開)

NetworkManager 支援以 iwd 作為後端,速度快於 wpa_supplicant。

echo "net-misc/networkmanager iwd" >> /etc/portage/package.use/networkmanager
emerge --ask --newuse net-misc/networkmanager

接著編輯 /etc/NetworkManager/NetworkManager.conf,在 [device] 下新增 wifi.backend=iwd

方案 B:輕量網路工具(點選展開)

如不使用 NetworkManager,可選擇以下輕量工具:

  1. 有線網路(dhcpcd)

可參考dhcpcd

emerge --ask net-misc/dhcpcd
# OpenRC:
rc-update add dhcpcd default
# systemd:
systemctl enable dhcpcd
  1. 無線網路(iwd)

可參考iwd

emerge --ask net-wireless/iwd
# OpenRC:
rc-update add iwd default
# systemd:
systemctl enable iwd

提示:iwd 是輕量無線守護程式。

方案 C:原生網路服務(點選展開)

使用 init 系統內建的網路管理功能,適合伺服器或極簡環境。

OpenRC 網路卡服務

vim /etc/conf.d/net

注意

請將下文的 enp5s0 替換為實際網路卡介面名稱,可透過 ip link 檢視。

新增以下內容:

config_enp5s0="dhcp"
ln -s /etc/init.d/net.lo /etc/init.d/net.enp5s0 # 建立網路卡服務符號連結
rc-update add net.enp5s0 default                # 設定開機自動啟動

systemd 原生網路卡服務

systemd 內建網路管理功能,適合伺服器或極簡環境:

systemctl enable systemd-networkd
systemctl enable systemd-resolved

注意:須手動編寫 .network 設定檔。

6.4 設定 fstab
#

目的

系統啟動時需要知道要掛載哪些分割區。/etc/fstab 定義:

  • 啟動時自動掛載的分割區
  • 每個分割區的掛載目錄
  • 檔案系統類型

使用 UUID:裝置路徑(如 /dev/sda1)可能因硬體變動而改變;UUID 是檔案系統的唯一識別碼,不會因磁碟順序變動而改變。


方法 A:使用 genfstab 自動產生
#

點選展開檢視步驟

安裝 genfstab

genfstabsys-fs/genfstab 提供,源自 Arch Linux 的 arch-install-scripts

  • Gig-OS / Arch LiveISO:已預先安裝,可直接使用
  • Gentoo Minimal ISO:須先安裝 emerge --ask sys-fs/genfstab
genfstab 參數說明
參數說明建議程度
-U使用檔案系統 UUID 識別建議
-L使用檔案系統 LABEL 識別須預設標籤
-t PARTUUID使用 GPT 分割區 PARTUUIDGPT 專用
無參數使用裝置路徑(/dev/sdX不建議

建議使用 -U 參數。UUID 是檔案系統的唯一識別碼,不會因磁碟順序改變而變動。

標準用法(在 chroot 外執行):

# 1. 確認所有分割區已正確掛載
lsblk
mount | grep /mnt/gentoo

# 2. 產生 fstab(使用 UUID)
genfstab -U /mnt/gentoo >> /mnt/gentoo/etc/fstab

# 3. 檢查產生的檔案
cat /mnt/gentoo/etc/fstab
chroot 環境下的替代方案

若已 chroot 進入新系統(/mnt/gentoo 變為 /),可使用下列方式:

方法一:在 chroot 內執行

# 在 chroot 內安裝
emerge --ask sys-fs/genfstab

# 直接對根目錄產生
genfstab -U / >> /etc/fstab

# 檢查並清理多餘項目,可能包含 /proc、/sys、/dev 等
vim /etc/fstab

方法二:開啟新終端視窗(LiveGUI)

使用 Gig-OS 等帶圖形介面的 Live 環境時,可直接開啟新終端機視窗;預設處於 Live 環境。

genfstab -U /mnt/gentoo >> /mnt/gentoo/etc/fstab

方法三:使用 TTY 切換(Minimal ISO)

  1. Ctrl+Alt+F2 切換到新 TTY(Live 環境)
  2. 安裝並執行:
    emerge --ask sys-fs/genfstab
    genfstab -U /mnt/gentoo >> /mnt/gentoo/etc/fstab
  3. Ctrl+Alt+F1 切回 chroot 環境

genfstab 相容性

genfstab 會自動偵測目前掛載點下的所有檔案系統。其原始碼明確支援:

  • Btrfs 子卷:自動識別 subvol= 參數(不會誤判為 bind mount)
  • LUKS 加密分割區:自動使用解密後裝置(/dev/mapper/xxx)的 UUID
  • 一般分割區:ext4、xfs、vfat 等一般檔案系統

前提條件:執行 genfstab 前,必須確認所有分割區都已正確掛載,包括 Btrfs 子卷與已解密的 LUKS 分割區。


方法 B:手動設定
#

點選展開檢視手動設定方式

不使用 genfstab 時,可手動編輯 /etc/fstab

1. 取得分割區 UUID

blkid

輸出範例:

/dev/nvme0n1p1: UUID="7E91-5869" TYPE="vfat" PARTLABEL="EFI"
/dev/nvme0n1p2: UUID="7fb33b5d-..." TYPE="swap" PARTLABEL="swap"
/dev/nvme0n1p3: UUID="8c08f447-..." TYPE="xfs" PARTLABEL="root"

2. 編輯 fstab

vim /etc/fstab

基本設定範例(ext4/XFS):

# <UUID>                                   <掛載點>     <類型> <選項>            <dump> <fsck>
UUID=7E91-5869                             /efi         vfat   umask=0077,tz=UTC  0      2
UUID=7fb33b5d-4cff-47ff-ab12-7b461b5d6e13  none         swap   sw                0      0
UUID=8c08f447-c79c-4fda-8c08-f447c79ce690  /            xfs    defaults,noatime  0      1

fstab 欄位

欄位說明
UUID分割區的唯一識別碼(透過 blkid 取得)
掛載點檔案系統掛載位置(swap 使用 none
類型檔案系統類型:vfatext4xfsbtrfsswap
選項掛載選項,多個以逗號分隔
dump備份標誌,通常為 0
fsck啟動時檢查順序:1 = 根分割區,2 = 其他,0 = 不檢查

Btrfs 子卷

genfstab 自動產生:

Btrfs 子卷正確掛載後,genfstab -U 會自動識別並產生包含 subvol= 的設定。

# 確認子卷掛載情形
mount | grep btrfs
# 輸出範例:/dev/nvme0n1p3 on /mnt/gentoo type btrfs (rw,noatime,compress=zstd:3,subvol=/@)

# 自動產生
genfstab -U /mnt/gentoo >> /mnt/gentoo/etc/fstab

手動設定範例:

# Root 子卷
UUID=7b44c5eb-caa0-413b-9b7e-a991e1697465  /       btrfs  defaults,noatime,compress=zstd:3,discard=async,space_cache=v2,subvol=@       0 0

# Home 子卷(同一 UUID,不同子卷)
UUID=7b44c5eb-caa0-413b-9b7e-a991e1697465  /home   btrfs  defaults,noatime,compress=zstd:3,discard=async,space_cache=v2,subvol=@home   0 0

# Swap(獨立分割區)
UUID=7fb33b5d-4cff-47ff-ab12-7b461b5d6e13  none    swap   sw                                                                            0 0

# EFI 分割區
UUID=7E91-5869                             /efi    vfat   defaults,noatime,fmask=0022,dmask=0022                                        0 2

Btrfs 掛載選項

選項說明
compress=zstd:3zstd 壓縮,等級 3(建議,兼顧效能與壓縮率)
discard=async非同步 TRIM(建議用於 SSD)
space_cache=v2v2 版空間快取(預設啟用,效能較佳)
subvol=@指定掛載的子卷
noatime不記錄存取時間(提升效能)

注意

  • 同一 Btrfs 分割區的所有子卷使用相同 UUID
  • 使用 blkid 取得實際 UUID
LUKS 加密分割區設定

要點

fstab 必須使用解密後映射裝置的 UUID(/dev/mapper/xxx),而非 LUKS 容器的 UUID。

genfstab 自動產生:

genfstab 會自動檢測解密後的裝置並使用正確的 UUID:

# 確認 LUKS 已解密
lsblk
# 應看到類似:nvme0n1p4 → cryptroot → 掛載點

# 自動產生(會使用 /dev/mapper/cryptroot 的 UUID)
genfstab -U /mnt/gentoo >> /mnt/gentoo/etc/fstab

手動配置:區分兩種 UUID

blkid
# LUKS 容器(TYPE="crypto_LUKS")- 不要用這個!
/dev/nvme0n1p4: UUID="562d0251-..." TYPE="crypto_LUKS"

# 解密後裝置(TYPE="btrfs")- 使用這個
/dev/mapper/cryptroot: UUID="7b44c5eb-..." TYPE="btrfs"

手動設定範例(Btrfs on LUKS):

# Root(使用解密後裝置 /dev/mapper/cryptroot 的 UUID)
UUID=7b44c5eb-caa0-413b-9b7e-a991e1697465  /       btrfs  defaults,noatime,compress=zstd:3,discard=async,space_cache=v2,subvol=@       0 0

# Boot(未加密)
UUID=9a856e43-a0be-4477-8647-e6ab51cf80ef  /boot   ext4   defaults,noatime                                                                        0 2

# Home(同一加密分割區的不同子卷,UUID 相同)
UUID=7b44c5eb-caa0-413b-9b7e-a991e1697465  /home   btrfs  defaults,noatime,compress=zstd:3,discard=async,space_cache=v2,subvol=@home   0 0

# Swap(獨立分割區或加密 swap)
UUID=7fb33b5d-4cff-47ff-ab12-7b461b5d6e13  none    swap   sw                                                                            0 0

# EFI(不加密)
UUID=7E91-5869                             /efi    vfat   defaults,noatime,fmask=0022,dmask=0022                                        0 2

常見問題

Q:為何不能使用 LUKS 容器的 UUID?
A:LUKS 容器保存加密的原始資料,系統無法讀取其中的檔案系統。必須先解密;解密後的 /dev/mapper/xxx 才有可辨識的檔案系統與 UUID。

Q:discard=async 用於 LUKS 是否安全?
A:LUKS2 + discard 是安全的。若極度重視安全性,可移除此選項,但 SSD 效能會降低。


7. 核心與韌體
#

目的

核心負責管理硬體。Gentoo 支援手動裁減核心,只保留所需驅動,以最佳化效能並縮小核心體積。新手也可選擇預編譯核心快速開始。

7.1 安裝韌體與微碼
#

mkdir -p /etc/portage/package.license
# 同意 Linux 韌體的授權條款
echo 'sys-kernel/linux-firmware linux-fw-redistributable no-source-code' > /etc/portage/package.license/linux-firmware
# installkernel USE flag 須與所用引導程式對應。擇一:
#   GRUB           → 'sys-kernel/installkernel dracut grub'
#   systemd-boot   → 'sys-kernel/installkernel dracut systemd systemd-boot'
#   Limine / 其他  → 'sys-kernel/installkernel dracut'(引導程式手動維護)
echo 'sys-kernel/installkernel dracut grub' > /etc/portage/package.use/installkernel
# systemd-boot 使用者還須在首次安裝核心前設定核心命令列:
# printf 'root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw quiet\n' > /etc/kernel/cmdline
emerge --ask sys-kernel/linux-firmware
emerge --ask sys-firmware/intel-microcode  # Intel CPU
emerge --ask sys-kernel/installkernel

package.license 說明

前文的 make.conf 範例已設定 ACCEPT_LICENSE="*"。仍為 linux-firmware 建立獨立的 package.license 檔案,原因如下:

  • make.conf 是範例:許多使用者會依需求修改 ACCEPT_LICENSE,例如設為 @FREE,只接受自由軟體授權條款。
  • 獨立宣告便於維護:package.license 檔案會明確記錄需要特殊授權條款的套件,便於後續維護及稽核。
  • 保留套件專用設定:即使全域設定為 ACCEPT_LICENSE="*",Gentoo 社群仍建議為特定套件建立 license 檔案。日後調整全域授權條款策略時,這可避免意外阻止關鍵套件安裝。

7.2 快速方案:預編譯核心
#

emerge --ask sys-kernel/gentoo-kernel-bin
# 若已依舊流程安裝核心,執行以下指令重新套用 installkernel 設定:
emerge --ask sys-kernel/installkernel && emerge --ask --config sys-kernel/gentoo-kernel-bin

核心升級後,須重新產生引導程式設定。

進階設定:手動編譯核心(點選展開)

提示

編譯核心較複雜且耗時。若希望盡快使用 Gentoo,可先跳過本節,使用第 7.2 節的預編譯核心。

手動編譯核心可自行控制系統功能與驅動,取得更精簡、高效的核心。

快速開始(使用 Genkernel 自動化):

emerge --ask sys-kernel/gentoo-sources sys-kernel/genkernel
eselect kernel list
eselect kernel set <gentoo-sources 對應編號>
genkernel --install all  # 自動編譯並安裝核心、模組及 initramfs
# --install:編譯完成後自動安裝至 /boot 目錄
# all:完整建置(核心 + 模組 + initramfs)

8. 基礎工具
#

目的

Stage3 僅包含最基礎的指令。須安裝系統日誌、網路管理與檔案系統工具等元件,系統才能在重新啟動後正常運作。

8.1 系統服務工具
#

OpenRC 使用者設定(點選展開)

1. 系統日誌

可參考Syslog-ng

emerge --ask app-admin/syslog-ng
rc-update add syslog-ng default

2. 排程工作

emerge --ask sys-process/cronie
rc-update add cronie default

3. 時間同步

emerge --ask net-misc/chrony
rc-update add chronyd default
systemd 使用者設定(點選展開)

systemd 已內建日誌與排程工作服務,無須額外安裝。

時間同步

systemctl enable --now systemd-timesyncd

8.2 檔案系統工具
#

依所用檔案系統安裝對應工具(必選):

emerge --ask sys-fs/e2fsprogs  # ext4
emerge --ask sys-fs/xfsprogs   # XFS
emerge --ask sys-fs/dosfstools # FAT/vfat (EFI 分割區需要)
emerge --ask sys-fs/btrfs-progs # Btrfs

9. 建立使用者與權限
#

目的

Linux 不建議日常使用 root 帳戶。請建立一般使用者,並授予使用 sudo 的權限,以提高系統安全性。

將下方的佔位符替換為實際使用者名稱;兩個指令必須使用相同的名稱:

passwd root # 設定 root 密碼
useradd -m -G wheel,video,audio,plugdev <使用者名稱> # 建立使用者並加入常用群組
passwd <使用者名稱> # 設定使用者密碼
emerge --ask app-admin/sudo

編輯 sudoers 檔案,允許 wheel 群組使用者以 root 身分執行指令:

visudo

取消註解以下行(刪除開頭的 # ):

%wheel ALL=(ALL:ALL) ALL

使用 systemd 時,可依需求將使用者加入 networklp 等群組。


10. 安裝引導程式
#

重要警告:Windows 雙系統使用者

Windows 更新常會掃描並強制覆寫預設引導路徑 /EFI/BOOT/bootx64.efi後果:使用此預設路徑會使 Linux 無法啟動。 因應方式

  1. 使用獨立檔名或目錄:不要只將引導程式安裝為 bootx64.efi
  2. 手動註冊引導項目:使用 efibootmgr 將新檔案註冊至 UEFI 啟動清單。

下文的 GRUB、systemd-boot 與 Limine 均設定為使用獨立路徑,可避免此問題。

註:Windows 更新有時也會變更 UEFI 啟動順序(Boot Order),並將 Windows 排在第一位。發生此情況時,進入 BIOS 重新調整順序。

10.1 方案 A:GRUB(標準)
#

GRUB 功能完整且相容性佳,支援自動偵測 Windows。 使用 LUKS 時,必須採用第 3 章 LUKS 分割區配置中的未加密獨立 /boot;否則 GRUB 無法讀取核心。

可參考GRUB

1. 安裝與設定

emerge --ask sys-boot/grub:2
# 安裝至 ESP。--bootloader-id=Gentoo 會自動建立獨立目錄,以避免衝突
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=Gentoo

2. 多系統設定(Windows/Linux/其他)

若已安裝 Windows 或其他 Linux 發行版,須啟用 os-prober 自動偵測:

emerge --ask sys-boot/os-prober
# 啟用 os-prober(預設停用以維護安全)
echo 'GRUB_DISABLE_OS_PROBER=false' >> /etc/default/grub

3. 產生設定

grub-mkconfig -o /boot/grub/grub.cfg

僅限多系統使用者:請確認輸出包含 "Found Windows Boot Manager……" 或其他系統的引導項目。


10.2 方案 B:systemd-boot(簡潔)
#

systemd-boot(前身為 Gummiboot)輕量且設定簡單,適用於 UEFI 系統。

可參考systemd-boot

1. 安裝

  • systemd 使用者: 使用 systemd 版本 >= 254 時,必須啟用 boot USE 標誌才能使用 bootctl

    mkdir -p /etc/portage/package.use
    echo "sys-apps/systemd boot" >> /etc/portage/package.use/systemd
    emerge --ask --oneshot --verbose sys-apps/systemd

    接著安裝引導程式並檢查引導項目:

    bootctl --esp-path=/efi install
    bootctl --esp-path=/efi list
    OpenRC 使用者設定(systemd-utils)— 點選展開

    OpenRC 使用者須安裝 sys-apps/systemd-utils,並啟用 bootkernel-install USE 標誌:

    mkdir -p /etc/portage/package.use
    echo "sys-apps/systemd-utils boot kernel-install" >> /etc/portage/package.use/systemd-utils
    emerge --ask --oneshot --verbose sys-apps/systemd-utils
    bootctl --esp-path=/efi install
    bootctl --esp-path=/efi list

2. 設定載入器

編輯 /efi/loader/loader.conf

timeout 3
console-mode auto

3. 使用 installkernel 管理 Gentoo 引導項目

在首次安裝核心前,systemd-boot 使用者必須在第 7.1 節選擇 sys-kernel/installkernel dracut systemd systemd-boot,並將根分割區參數寫入 /etc/kernel/cmdlineinstallkernel 會建立 ${ESP}/gentoo/<actual-release>/linuxinitrd 及對應的 BLS 引導項目。

若已依舊流程安裝核心,執行 emerge --ask sys-kernel/installkernel && emerge --ask --config sys-kernel/gentoo-kernel-bin

4. 多系統設定(Windows)

systemd-boot 會自動偵測同一 ESP 分割區中的 Windows 引導管理器(/efi/EFI/Microsoft/Boot/bootmgfw.efi),通常無須額外設定。

若 Windows 位於另一個硬碟的 ESP,或自動偵測失敗,才需手動建立 /efi/loader/entries/windows.conf

title      Windows 11
efi        /EFI/Microsoft/Boot/bootmgfw.efi

10.3 方案 C:Limine(可自訂)
#

Limine 支援動態選單,設定彈性高。

可參考Limine

1. 安裝

echo 'sys-boot/limine ~amd64' >> /etc/portage/package.accept_keywords/limine
emerge --ask sys-boot/limine

2. 部署引導檔案(關鍵步驟)

為避免 Windows 覆寫,將 Limine 部署為 Gentoo 專用引導項目,而非預設的 BOOTX64.EFI

# 先將已安裝的核心與 initramfs 複製到 ESP;隨後 ESP 會掛載至 /boot。
ls -1 /boot/vmlinuz-* /boot/initramfs-*
cp -v /boot/vmlinuz-* /boot/initramfs-* /efi/
# 將 /etc/fstab 中 ESP 的掛載點從 /efi 改為 /boot。
vim /etc/fstab
umount /efi
mount /boot
mkdir -p /boot/EFI/Gentoo
cp -v /usr/share/limine/BOOTX64.EFI /boot/EFI/Gentoo/limine.efi
cp -v /usr/share/limine/limine-bios.sys /boot/ # (可選)僅 BIOS 需要

3. 設定 Limine

編輯 ESP 上的 /boot/limine.conf。將下列兩個佔位符替換為前面 ls 輸出中屬於同一核心版本的完整檔名:

timeout: 5

/Gentoo Linux
    protocol: linux
    kernel_path: boot():/<vmlinuz-檔名>
    module_path: boot():/<initramfs-檔名>
    cmdline: root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw

/Windows 11
    protocol: efi
    path: boot():/EFI/Microsoft/Boot/bootmgfw.efi

核心更新後,新的核心與 initramfs 會寫入掛載至 /boot 的 ESP。每次更新後、重新啟動前,執行 ls -1 /boot/vmlinuz-* /boot/initramfs-*,並將 kernel_pathmodule_path 更新為相符的新檔名。

4. 註冊 UEFI 引導項目

由於未使用預設路徑,必須透過 efibootmgr 告知主機板從何處啟動 Limine:

emerge --ask sys-boot/efibootmgr
# 建立名為 "Gentoo Limine" 的啟動項目
# -d:磁碟裝置,例如 /dev/nvme0n1
# -p:分割區號,例如 1
# -L:標籤名稱
# -l:loader 路徑,使用 Windows 風格斜線
efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "Gentoo Limine" --loader '\EFI\Gentoo\limine.efi'

進階設定:加密支援(僅限加密使用者)— 點選展開

步驟 1:依 init 系統安裝 LUKS 相依套件

# systemd profile:
mkdir -p /etc/portage/package.use
echo "sys-apps/systemd cryptsetup" >> /etc/portage/package.use/fde
emerge --ask --oneshot sys-apps/systemd sys-kernel/dracut

# OpenRC profile:
emerge --ask sys-fs/cryptsetup sys-kernel/dracut

步驟 2:產生含 crypt 模組的 initramfs

編輯 /etc/dracut.conf.d/luks.conf

注意:請依根檔案系統將 btrfs 改為 xfsext4

# systemd profile:
add_dracutmodules+=" btrfs systemd crypt dm "
# OpenRC profile:
add_dracutmodules+=" btrfs crypt dm "

重新產生 initramfs:

# gentoo-kernel-bin:
emerge --ask --config sys-kernel/gentoo-kernel-bin

# Genkernel 或手動核心:
dracut --kver $(make -C /usr/src/linux -s kernelrelease) --force

步驟 3:取得 LUKS 分割區的 UUID

# 取得 LUKS 加密容器的 UUID,不是其中檔案系統的 UUID
blkid /dev/nvme0n1p4

輸出範例(尋找 TYPE="crypto_LUKS" 所在行):

/dev/nvme0n1p4: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="crypto_LUKS" ...

上方 blkid 輸出中的 LUKS UUID 要填入後續各設定檔;請使用自己機器的實際輸出,不要照抄範例值。

步驟 4:設定核心引導參數

  • GRUB(/etc/default/grub

    編輯 /etc/default/grub,將 GRUB_CMDLINE_LINUX 設為:

    # 完整範例,將 UUID 替換為實際 UUID
    GRUB_CMDLINE_LINUX="rd.luks.uuid=<LUKS-加密分割區UUID> rd.luks.allow-discards root=UUID=<解密後根檔案系統UUID> rootfstype=btrfs"

參數: * rd.luks.uuid=<UUID>:LUKS 加密分割區的 UUID(使用 blkid /dev/nvme0n1p4 取得)。 * rd.luks.allow-discards:允許 SSD TRIM 指令穿透加密層(提升 SSD 效能)。 * root=UUID=<UUID>:解密後根檔案系統的 UUID(使用 blkid /dev/mapper/cryptroot 取得)。 * rootfstype=btrfs請依實際情況修改,例如 xfsext4

修改後執行 grub-mkconfig -o /boot/grub/grub.cfg

  • systemd-boot

    printf 'rd.luks.name=<LUKS-加密分割區UUID>=cryptroot root=/dev/mapper/cryptroot rootfstype=btrfs rd.luks.allow-discards\n' > /etc/kernel/cmdline
    emerge --ask --config sys-kernel/gentoo-kernel-bin

參數: * rd.luks.name=<LUKS-UUID>=cryptroot:指定 LUKS 分割區 UUID,並映射為 cryptroot。 * root=/dev/mapper/cryptroot:指定解密後的根分割區裝置。 * rootfstype=btrfs請依實際情況修改,例如 xfsext4

  • Limine(limine.conf

    /Gentoo Linux
        protocol: linux
        kernel_path: boot():/<vmlinuz-檔名>
        module_path: boot():/<initramfs-檔名>
        cmdline: rd.luks.name=<LUKS-加密分割區UUID>=cryptroot root=/dev/mapper/cryptroot rootfstype=btrfs rd.luks.allow-discards

參數:

  • rd.luks.name:同上,指定 LUKS 分割區 UUID。
  • root:指定解密後的根分割區裝置。
  • rootfstype=btrfs請依實際情況修改,例如 xfsext4

僅在第 3 節的加密分割區流程中選擇 LUKS 時,才需要執行此步驟。


11. 完成安裝
#

11.1 最終檢查清單
#

  1. emerge --info 正常執行,沒有錯誤。
  2. /etc/fstab 中的 UUID 正確(使用 blkid 再次確認)。
  3. 已設定 root 與一般使用者密碼。
  4. 已執行 grub-mkconfig 或完成 bootctl/Limine 設定。
  5. 若使用 LUKS,確認 initramfs 包含 cryptsetup

11.2 離開 chroot 並重新啟動
#

確認無誤後,離開 chroot 並卸載掛載點:

exit
umount -l /mnt/gentoo/dev{/shm,/pts,}
umount -R /mnt/gentoo
swapoff -a
reboot

下一步桌面配置

延伸閱讀

時間軸

··約 2 分鐘· loading

關於我

··約 3 分鐘· loading