說明#
本文是 Gentoo Linux 安裝指南 系列的第一部分:基礎安裝。
系列導覽:
- 基礎安裝(本文):從零開始安裝 Gentoo 基礎系統
- 桌面配置:顯示卡驅動、桌面環境、輸入法等
閱讀順序:
- 基礎安裝(第 0–11 節)→ 桌面配置(第 12 節)
指南說明#
本文示範完整的 Gentoo 安裝流程,並提供官方 Wiki 與技術文件連結,供查閱各步驟的原理與設定細節。
本文以官方手冊為準,並附上參考連結。安裝 Gentoo 時,仍須自行查閱 Wiki 並排除問題;可使用搜尋引擎或 AI 工具尋找資料。
如有疑問或發現問題,可透過以下管道提出:
- Gentoo 中文社群:Telegram 群組 | Telegram 頻道 | GitHub
- 官方社群:Gentoo Forums | IRC: #gentoo @ Libera.Chat
請以官方手冊為準:
內容已驗證至 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 分鐘 |
| 下載並解壓 Stage3 | 5–10 分鐘 |
| 設定 Portage 與 Profile | 15–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-setupwpa_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 | /efi | vfat | EFI 系統分割區(ESP) |
/dev/nvme0n1p2 | swap | swap | 交換分割區 |
/dev/nvme0n1p3 | / | xfs | 根分割區 |
cfdisk 分割區範例#
cfdisk 是圖形化分割區工具,操作直觀。
cfdisk /dev/nvme0n1操作:
- 選擇 GPT 標籤類型。
- 建立 ESP:新增分割區 → 大小
1G→ 類型選擇EFI System。 - 建立 Swap:新增分割區 → 大小
4G→ 類型選擇Linux swap。 - 建立 Root:新增分割區 → 剩餘空間 → 類型選擇
Linux filesystem(預設)。 - 選擇 Write 寫入變更,輸入
yes確認。 - 選擇 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/nvme0n11. 檢視當前分割槽佈局
使用 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. 建立檔案系統並掛載#
可參考:Gentoo Handbook: AMD64 - 準備磁碟 · Ext4 · XFS · Btrfs
目的
磁碟分割區只劃分空間,尚不能儲存資料。建立檔案系統(如 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/nvme0n1p33.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/gentoo3. 掛載子卷
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/nvme0n1p24. 驗證掛載
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/gentooBtrfs 快照
可使用 Snapper 管理快照。將 @ 與 @home 分開可簡化系統回復。
進階設定:加密分割區(LUKS)(點選展開)
LUKS 專用分割區配置
| 裝置 | 掛載點 | 檔案系統 | 說明 |
|---|---|---|---|
/dev/nvme0n1p1 | /efi | vfat | EFI 系統分割區(ESP),1G |
/dev/nvme0n1p2 | /boot | ext4 | 未加密,存放核心與 initramfs,1G |
/dev/nvme0n1p3 | swap | swap | 交換分割區 |
/dev/nvme0n1p4 | / | btrfs | LUKS 加密的根分割區 |
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 cryptroot3. 格式化
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/nvme0n1p35. 驗證掛載
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#
- OpenRC:
stage3-amd64-openrc-*.tar.xz - systemd:
stage3-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,可使用 openssl 或 gpg 驗證。
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.conf5.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 提供 systemd 與 udev;desktop profile 提供 dbus、policykit 與 bluetooth;desktop/plasma profile 提供 networkmanager,並強制啟用 policykit。profile 是 USE 的主要來源,因此 make.conf 的 USE 只應列出與 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 = truesync-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-64 與 x86-64-v3 兩個層級,不含 v2 與 v4。若輸出含有 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-v3arm64 只有一個層級,路徑為 /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/systemddefault/linux/amd64/23.0/desktop/gnome/systemddefault/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,可選擇以下輕量工具:
- 有線網路(dhcpcd)
可參考:dhcpcd
emerge --ask net-misc/dhcpcd
# OpenRC:
rc-update add dhcpcd default
# systemd:
systemctl enable dhcpcd- 無線網路(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
genfstab 由 sys-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 分割區 PARTUUID | GPT 專用 |
| 無參數 | 使用裝置路徑(/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/fstabchroot 環境下的替代方案
若已 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)
- 按
Ctrl+Alt+F2切換到新 TTY(Live 環境) - 安裝並執行:
emerge --ask sys-fs/genfstab genfstab -U /mnt/gentoo >> /mnt/gentoo/etc/fstab - 按
Ctrl+Alt+F1切回 chroot 環境
方法 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 1fstab 欄位
| 欄位 | 說明 |
|---|---|
| UUID | 分割區的唯一識別碼(透過 blkid 取得) |
| 掛載點 | 檔案系統掛載位置(swap 使用 none) |
| 類型 | 檔案系統類型:vfat、ext4、xfs、btrfs、swap |
| 選項 | 掛載選項,多個以逗號分隔 |
| 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 2Btrfs 掛載選項
| 選項 | 說明 |
|---|---|
compress=zstd:3 | zstd 壓縮,等級 3(建議,兼顧效能與壓縮率) |
discard=async | 非同步 TRIM(建議用於 SSD) |
space_cache=v2 | v2 版空間快取(預設啟用,效能較佳) |
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/installkernelpackage.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 default2. 排程工作
emerge --ask sys-process/cronie
rc-update add cronie default3. 時間同步
emerge --ask net-misc/chrony
rc-update add chronyd defaultsystemd 使用者設定(點選展開)
systemd 已內建日誌與排程工作服務,無須額外安裝。
時間同步
systemctl enable --now systemd-timesyncd8.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 # Btrfs9. 建立使用者與權限#
目的
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 時,可依需求將使用者加入 network、lp 等群組。
10. 安裝引導程式#
重要警告:Windows 雙系統使用者
Windows 更新常會掃描並強制覆寫預設引導路徑
/EFI/BOOT/bootx64.efi。 後果:使用此預設路徑會使 Linux 無法啟動。 因應方式:
- 使用獨立檔名或目錄:不要只將引導程式安裝為
bootx64.efi。- 手動註冊引導項目:使用
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=Gentoo2. 多系統設定(Windows/Linux/其他)
若已安裝 Windows 或其他 Linux 發行版,須啟用 os-prober 自動偵測:
emerge --ask sys-boot/os-prober
# 啟用 os-prober(預設停用以維護安全)
echo 'GRUB_DISABLE_OS_PROBER=false' >> /etc/default/grub3. 產生設定
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 時,必須啟用
bootUSE 標誌才能使用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 listOpenRC 使用者設定(systemd-utils)— 點選展開
OpenRC 使用者須安裝
sys-apps/systemd-utils,並啟用boot與kernel-installUSE 標誌: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 auto3. 使用 installkernel 管理 Gentoo 引導項目
在首次安裝核心前,systemd-boot 使用者必須在第 7.1 節選擇 sys-kernel/installkernel dracut systemd systemd-boot,並將根分割區參數寫入 /etc/kernel/cmdline。installkernel 會建立 ${ESP}/gentoo/<actual-release>/linux、initrd 及對應的 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.efi10.3 方案 C:Limine(可自訂)#
Limine 支援動態選單,設定彈性高。
可參考:Limine
1. 安裝
echo 'sys-boot/limine ~amd64' >> /etc/portage/package.accept_keywords/limine
emerge --ask sys-boot/limine2. 部署引導檔案(關鍵步驟)
為避免 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_path 與 module_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改為xfs或ext4。
# 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:請依實際情況修改,例如 xfs、ext4。
修改後執行 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:請依實際情況修改,例如 xfs、ext4。
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:請依實際情況修改,例如xfs、ext4。
僅在第 3 節的加密分割區流程中選擇 LUKS 時,才需要執行此步驟。
11. 完成安裝#
11.1 最終檢查清單#
emerge --info正常執行,沒有錯誤。/etc/fstab中的 UUID 正確(使用blkid再次確認)。- 已設定 root 與一般使用者密碼。
- 已執行
grub-mkconfig或完成bootctl/Limine 設定。 - 若使用 LUKS,確認 initramfs 包含
cryptsetup。
11.2 離開 chroot 並重新啟動#
確認無誤後,離開 chroot 並卸載掛載點:
exit
umount -l /mnt/gentoo/dev{/shm,/pts,}
umount -R /mnt/gentoo
swapoff -a
reboot下一步:桌面配置






