筆電Gentoo Linux 安裝紀錄 (Systemd + Gnome)

這篇文章紀錄在筆電安裝Gentoo系統的過程,使用Gentoo官方預先編譯的核心,init系統為Systemd,桌面環境為GNOME。

為什麼要選擇GNOME呢?因為對筆電的觸控板支援較好,界面和字體大小簡單明瞭。

實際上Gentoo的GNOME支援使用OpenRC當init系統,但有越來越多的程式以systemd為中心撰寫,要使用GNOME的最新功能還是使用systemd比較保險。

以下資訊可能會過時,請自行到Gentoo Wiki AMD64安裝手冊Gentoo Wiki GNOME指南查詢細節設定。

0. Gentoo硬體需求

4核心以上處理器,8GB RAM,64GB儲存空間。

以上為建議值,因為Gentoo安裝套件是用編譯的,CPU性能至關重要。

我的筆電硬體規格:

  • CPU: Intel i5-10210U
  • GPU: Nvidia MX350
  • RAM: 8GB
  • SSD: 512GB

1. 製作Gentoo安裝隨身碟

  1. 前往Gentoo官網下載AMD64架構"Minimal Installation CD"的ISO。

  2. 使用balenaEtcher或DD將Gentoo ISO製作成開機隨身碟。

2. 安裝Gentoo系統

此步驟會安裝GNOME桌面環境的Gentoo系統。

  1. 用隨身碟開機。

  2. 輸入數字,設定鍵盤配置為us

2.1. 設定網路

  1. net-setup eth0設定有線網路,再測試有線網路連線狀況,收到Bytes…的訊息代表有連上網路。
1
ping -c 3 google.com
  1. 如果要使用內建網卡的Wifi,輸入ifconfig查看Wifi裝置名稱,再使用指令net-setup 裝置名稱自動設定網路連線,例如:
1
2
ifconfig wlo1 up
net-setup wlo1

2.2. 分割硬碟

安裝時候為了避免誤傷資料碟,我會把其他硬碟的線條拔掉,只留下安裝系統的SSD。

  1. 用fdisk查看硬碟列表,筆電的硬碟應該是顯示為/dev/nvme0n1/dev/sda
1
fdisk -l
  1. 用fdisk分割硬碟。此分割表是給UEFI系統使用,沒有做SWAP。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
fdisk /dev/nvme0n1
# 使用GPT硬碟分割表
g
#輸入d刪除全部分區
d
#寫入
w
fdisk /dev/nvme0n1
#新增EFI分區
n
1
Fisrt sector: Enter
Last Sector: +512M
t
#修改標籤為EFI
uefi
#新增Swap分區, 建議為RAM大小X2
n
2
Fisrt sector: Enter
Last Sector: +32GB
t
2
#修改標籤為Swap
swap
#新增root分區
n
3
Fisrt sector: Enter
Last Sector: Enter
# 寫入變更
w
  1. 輸入fdisk /dev/nvme0n1 -l,分割表應該會長這樣:
1
2
3
/dev/nvme0n1p1  512MB  EFI
/dev/nvme0n1p2  32GB   SWAP
/dev/nvme0n1p3  450GB  Linux
  1. 格式化並建立檔案系統
1
2
3
mkfs.vfat -F32 /dev/nvme0n1p1
mkswap /dev/nvme0n1p2
mkfs.ext4 /dev/nvme0n1p3
  1. 啟用Swap
1
swapon /dev/nvme0n1p2
  1. 掛載root分區
1
2
mount /dev/nvme0n1p3 /mnt/gentoo
cd /mnt/gentoo

2.3. 安裝stage3檔案系統

  1. 下載前先校時
1
ntpd -q -g
  1. 下載stage3 Gentoo檔案系統,到Gentoo官網下載"Stage3"的檔案,選擇desktop profile | systemd版,按右鍵取得網址。例如:
1
wget https://bouncer.gentoo.org/fetch/root/all/releases/amd64/autobuilds/20220828T170542Z/stage3-amd64-desktop-systemd-20220828T170542Z.tar.xz
  1. 解壓縮檔案系統:
1
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
  1. 用nano編輯/etc/portage/make.conf,加入以下參數,讓Gentoo使用更多CPU執行緒編譯套件。
1
MAKEOPTS="-j8"
  1. 設定鏡像站點,選單用上下鍵移動,用空白鍵選取台灣NCHC的鏡像(twaren)後按下Enter。
1
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
  1. 複製Portage軟體庫設定
1
2
mkdir -p /mnt/gentoo/etc/portage/repos.conf
cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
  1. 複製DNS設定
1
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
  1. 掛載系統目錄,chroot到系統
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev
mount --bind /run /mnt/gentoo/run
mount --make-slave /mnt/gentoo/run
chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) ${PS1}"
  1. 掛載EFI分區
1
mount /dev/nvme0n1p1 /boot
  1. 更新Gentoo的ebuild儲存庫至最新版:
1
emerge-webrsync
  1. 用Portage更新套件,輸入yes合併,會花點時間編譯安裝。
1
emerge --ask --verbose --update --deep --newuse @world
  1. 設定時區為亞洲/台北
1
2
ln -sf ../usr/share/zoneinfo/Asia/Taipei /etc/localtime
emerge --config sys-libs/timezone-data
  1. 用nano編輯/etc/locale.gen,將英文en_US.UTF-8 UTF-8取消註解

  2. 產生語言設定檔

1
locale-gen
  1. 重新載入設定
1
2
3
env-update
source /etc/profile
export PS1="(chroot) ${PS1}"

2.4. 安裝Linux核心

Gentoo官方提供三種安裝核心的方法:

  • 下載核心原始碼,自行調整核心功能後編譯安裝 (sys-kernel/gentoo-sources)
  • 下載預先設定好的核心,編譯安裝 (sys-kernel/gentoo-kernel)
  • 下載預先編譯好的核心,直接安裝 (sys-kernel/gentoo-kernel-bin)

後二者稱作distribution kernel,適合給新手使用。我選擇下載Gentoo預先編譯好的核心,直接安裝。

  1. 在那之前,用nano編輯/etc/portage/make.conf,加入以下參數,同意所有授權條款。
1
ACCEPT_LICENSE="*"
  1. 接著安裝Linux專有韌體和Intel microcode更新程式:
1
emerge --ask sys-kernel/linux-firmware  sys-firmware/intel-microcode
  1. 編譯安裝Linux核心,約20分鐘。
1
emerge --ask sys-kernel/installkernel-gentoo  sys-kernel/gentoo-kernel-bin

2.5. 安裝GNOME桌面環境

這是最耗時的階段。等編譯的時候可以去睡個一覺再回來。

  1. 選取profile鎖定套件版本。列出可用的profile列表:
1
eselect profile list
  1. 選取"gnome/systemd (stable)“的profile:
1
eselect profile set 7
  1. 用nano編輯/etc/portage/make.conf,加入以下參數。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# `USE`代表編譯軟體用的全域FLAG,不寫就是按照軟體預設值編譯
USE="nls cjk"

# 設定輸入裝置,libinput是滑鼠+鍵盤,synaptics是觸控板,wacom是繪圖板
INPUT_DEVICES="libinput synaptics wacom"

# 自動同意所有授權條款
ACCEPT_LICENSE="*"

# 指定安裝正體中文的軟體
L10N="zh-TW"

# 指定安裝amd64架構的穩定版軟體,「~amd64」不穩定但會獲得最新版軟體
ACCEPT_KEYWORDS="amd64"

# 設定要安裝的顯示卡驅動
VIDEO_CARDS="intel nvidia"
  1. 因為Profile已經設定好USE所以不需要額外設定,直接安裝GNOME完整桌面和GNOME擴充套件,內含Xorg的圖形驅動程式。
1
emerge --ask  gnome-base/gnome  gnome-extra/gnome-shell-extensions  gnone-extra/gnome-browser-connector
  1. 安裝完成後更新系統變數
1
2
env-update
source /etc/profile
  1. 設定開機啟動GDM
1
systemctl enable gdm.service
  1. 編輯/etc/pulse/client.conf,編輯以下參數,設定自動啟動PulseAUdio:
1
autospawn=yes

2.6. 設定使用者和開機服務

  1. 用nano編輯/etc/fstab,設定開機硬碟自動掛載,例如:
1
2
3
/dev/nvme0n1p1  /boot  vfat  defaults,noatime  0  2
/dev/nvme0n1p2  none  swap  sw  0  0
/dev/nvme0n1p3  /  ext4    noatime  0  1
  1. 給自己的主機取名:
1
hostnamectl set-hostname "Gentoo"
  1. 編輯/etc/hosts,加入以下內容:
1
2
127.0.0.1 localhost Gentoo localhost
::1 localhost Gentoo localhost
  1. 修改root密碼。此密碼要求至少3個字元,並且要數字+大小寫+特殊符號混合。
1
passwd
  1. 安裝GRUB、sudo、Wifi連網工具、Chrony同步時間。
1
emerge --ask sys-boot/grub  app-admin/sudo net-wireless/iwd  net-misc/chrony
  1. 將SSH、iwd、NetworkManager、Chrony加入開機服務
1
2
3
4
systemctl enable sshd
systemctl enable iwd
systemctl enable NetworkManager
systemctl enable chronyd
  1. 初始化systmed
1
2
systemd-firstboot --prompt --setup-machine-id
systemctl preset-all
  1. 新增一般使用者"ivon”
1
2
useradd -m -g users -G wheel,audio,video,storage -s /bin/bash ivon
passwd ivon
  1. 用nano編輯/etc/sudoers,給予一般使用者root權限
1
2
#在"root ALL=(ALL) ALL"的下一行加入以下內容:
ivon ALL=(ALL) ALL
  1. 將root和一般使用者加入plugdev群組
1
2
gpasswd -a root plugdev
gpasswd -a ivon plugdev
  1. 安裝GRUB至系統
1
2
grub-install --target=x86_64-efi --efi-directory=/boot
grub-mkconfig -o /boot/grub/grub.cfg
  1. 自動刪除用不到的套件
1
emerge --ask --depclean
  1. 刪除剛剛下載的stage3檔案系統
1
rm /stage3*
  1. 退出chroot,關機,拔掉隨身碟重開機。
1
2
3
4
5
exit
cd
umount -l /mnt/gentoo/dev{/shm,/pts,}
umount -R /mnt/gentoo
poweroff

3. Gentoo後續安裝優化

GNOME預設的視窗系統是Wayland,某些軟體可能會有bug,請適時在GNOME的登入畫面右下角切換至X11視窗系統。

筆電有雙顯卡要設定NVIDIA/Optimus來啟用Nvidia顯卡。

3.1. Gentoo中文化和安裝輸入法

  1. 編輯/etc/locale.gen,加入zh_TW.UTF-8

  2. 產生語言設定檔

1
sudo locale-gen
  1. 設定語言為正體中文
1
sudo localectl set-locale zh_TW.UTF-8
  1. 安裝Google Noto Fonts中文字體。
1
sudo emerge --ask media-fonts/noto-cjk
  1. Gentoo可能會自動安裝楷體(KaiTi)字體,某些軟體會預設採用楷體顯示,這樣實在不好看。因此到/usr/share/fonts/arphicfonts目錄,將楷體字型檔案全部刪除。

  2. 安裝Fcitx輸入法框架。Gentoo的新酷音有點舊但堪用。

sudo emerge --ask app-i18n/fcitx app-i18n/fcitx-chewing app-i18n/fcitx-configtool
  1. ~/.xprofile填入以下內容:
1
2
3
4
5
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export SDL_IM_MODULE=fcitx
export GLFW_IM_MODULE=ibus
  1. 從系統選單找到Fcitx輸入法設定工具,啟用新酷音。重新開機,按CTRL+空白鍵切換新酷音輸入法。如果Fcitx怎麼都喚不出來,試試在GDM的登入畫面改成X11登入。

3.2. 安裝Flatpak

Flatpak是額外的套件管理員,可以確保每個發行版都安裝版本一致的軟體。並且能繞過Gentoo幾乎每個軟體都要編譯的不便,尤其瀏覽器這種編譯8小時以上的。

  1. 安裝Flatpak:
1
sudo emerge --ask sys-apps/flatpak
  1. 加入Flathub軟體庫:
1
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
  1. 安裝Flatpak版的Chromium瀏覽器
1
flatpak install flathub org.chromium.Chromium

3.3. 設定防火牆

  1. 安裝UFW:
1
sudo emerge --ask net-firewall/ufw
  1. 設定開機啟動防火牆
1
2
sudo systemctl enable ufw
sudo systemctl ufw start
  1. 開放SSH通訊埠
1
sudo ufw allow ssh

3.4. Portage套件管理員的使用方式

不同於其他發行版,Portage「安裝」軟體是稱作「合併」(merge),解除安裝則是「取消選取」(deselect)。

  1. 在安裝好系統後,/etc/portage/make.conf裡面的全域USE,應該減少到只剩下"nls cjk pulseaudio"等最基本的FLAG。加上「-」則是停用該FLAG,例如"-qt5"。

  2. 個別套件若有需要,安裝前先到Wiki搜尋各個FLAG的用途。例如VLC影片播放器,網頁Version顯示黃色的是測試版,跟ACCEPT_KEYWORDS=~amd64"有關。點進去看Ebuild可得知預設會啟用哪些FLAG。

  3. 接著在/etc/portage/package.use/目錄下新增一個custom檔案,為有需要的套件獨立設定FLAG:

1
2
3

# 針對VLC的設定
media-video/vlc truetype fontconfig libnotify opus libass qt5 gnutls live lua matroska rtsp theora upnp vcdx aom x265 skins encode live dav1d vaapi vdapu vorbis vpx mpeg mtp
  1. 一旦make.conf發生變化,就讓Portage重新編譯需要變更的部份。此指令也等同更新和安裝系統套件。
1
2
3
4
5
6
7
8
# 更新系統變數,輸入-3自動合併設定檔
sudo etc-update
# 更新系統套件,會自動安裝或刪除套件
sudo emerge --ask --verbose --update --deep --newuse @world
# 更新系統套件,短一點的版本
sudo emerge -avuDN world
# 自動清理不需要的依賴套件
sudo emerge --ask --depclean
  1. 安裝套件時臨時要用到FLAG,也可以在指令中使用。例如:
1
sudo USE="abi_x86_32 -gpm" emerge dev-util/android-sdk-update-manager
  1. 若要解除安裝套件,先取消選取,再刪除用不到的依賴套件
1
2
3
4
5
6
# 先取消選擇個別套件
sudo emerge --deselect kde-apps/kmix
# 更新系統套件,會自動解除安裝
sudo emerge --ask --verbose --update --deep --newuse @world
# 自動清理不需要的依賴套件
sudo emerge --ask --depclean
  1. 最後是更新Gentoo的ebuild儲存庫至最新版,再更新系統套件的指令。
1
2
3
sudo emerge-webrsync
sudo emerge --ask --verbose --update --deep --newuse @world
sudo emerge --ask --depclean

其餘常用指令請到官方Wiki的Gentoo Cheat Sheet查詢。

3.5. 加快Gentoo編譯速度

如果要加快編譯速度,可採取以下措施:

  • 依CPU核心數,調高/etc/portage/make.confMAKEOPTS的「-j+執行緒數」
  • 安裝CCache設定快取,這樣以後重新編譯就會利用快取中的obj檔案加快編譯速度。
  • 設定DistCC,利用多部電腦合作編譯套件。
  • 掛載TMPFS充當虛擬記憶體。
  • Portage下載套件時直接選取二進位版本,就不需要等編譯了。

感謝您的閱讀。歡迎分享Ivon的部落格(ivonblog.com)的文章,引用或轉載請註明文章網址,並遵守創用CC-姓名標示-非商業性-禁止改作 4.0 國際授權條款。如需商業使用請來信告之。

written by human, not by AI

如果本網站文章對您有幫助,歡迎請我喝杯珍珠奶茶。

留言板

點選按鈕,選擇您覺得方便的留言系統。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要登入Github帳號才能留言。支援markdown語法,方便您張貼程式碼,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus投放的廣告。無論有無登入皆可留言。此處留言只有本站參與者看得到。若您選擇以訪客身份匿名留言,就不會收到後續回覆通知。