這篇文章紀錄在筆電安裝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安裝隨身碟#
前往 Gentoo官網下載AMD64架構"Minimal Installation CD"的ISO。
使用 balenaEtcher或DD將Gentoo ISO製作成開機隨身碟。
2. 安裝Gentoo系統#
此步驟會安裝GNOME桌面環境的Gentoo系統。
用隨身碟開機。
輸入數字,設定鍵盤配置為us
2.1. 設定網路#
- 用
net-setup eth0
設定有線網路,再測試有線網路連線狀況,收到Bytes…的訊息代表有連上網路。
ping -c 3 google.com
- 如果要使用內建網卡的Wifi,輸入
ifconfig
查看Wifi裝置名稱,再使用指令net-setup 裝置名稱
自動設定網路連線,例如:
ifconfig wlo1 up
net-setup wlo1
2.2. 分割硬碟#
安裝時候為了避免誤傷資料碟,我會把其他硬碟的線條拔掉,只留下安裝系統的SSD。
- 用fdisk查看硬碟列表,筆電的硬碟應該是顯示為
/dev/nvme0n1
或/dev/sda
。
fdisk -l
- 用fdisk分割硬碟。此分割表是給UEFI系統使用,沒有做SWAP。
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
- 輸入
fdisk /dev/nvme0n1 -l
,分割表應該會長這樣:
/dev/nvme0n1p1 512MB EFI
/dev/nvme0n1p2 32GB SWAP
/dev/nvme0n1p3 450GB Linux
- 格式化並建立檔案系統
mkfs.vfat -F32 /dev/nvme0n1p1
mkswap /dev/nvme0n1p2
mkfs.ext4 /dev/nvme0n1p3
- 啟用Swap
swapon /dev/nvme0n1p2
- 掛載root分區
mount /dev/nvme0n1p3 /mnt/gentoo
cd /mnt/gentoo
2.3. 安裝stage3檔案系統#
- 下載前先校時
ntpd -q -g
- 下載stage3 Gentoo檔案系統,到 Gentoo官網下載"Stage3"的檔案,選擇desktop profile | systemd版,按右鍵取得網址。例如:
wget https://bouncer.gentoo.org/fetch/root/all/releases/amd64/autobuilds/20220828T170542Z/stage3-amd64-desktop-systemd-20220828T170542Z.tar.xz
- 解壓縮檔案系統:
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
- 用nano編輯
/etc/portage/make.conf
,加入以下參數,讓Gentoo使用更多CPU執行緒編譯套件。
MAKEOPTS="-j8"
- 設定鏡像站點,選單用上下鍵移動,用空白鍵選取台灣NCHC的鏡像(twaren)後按下Enter。
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
- 複製Portage軟體庫設定
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
- 複製DNS設定
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
- 掛載系統目錄,chroot到系統
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}"
- 掛載EFI分區
mount /dev/nvme0n1p1 /boot
- 更新Gentoo的ebuild儲存庫至最新版:
emerge-webrsync
- 用Portage更新套件,輸入yes合併,會花點時間編譯安裝。
emerge --ask --verbose --update --deep --newuse @world
- 設定時區為亞洲/台北
ln -sf ../usr/share/zoneinfo/Asia/Taipei /etc/localtime
emerge --config sys-libs/timezone-data
用nano編輯
/etc/locale.gen
,將英文en_US.UTF-8 UTF-8
取消註解產生語言設定檔
locale-gen
- 重新載入設定
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預先編譯好的核心,直接安裝。
- 在那之前,用nano編輯
/etc/portage/make.conf
,加入以下參數,同意所有授權條款。
ACCEPT_LICENSE="*"
- 接著安裝Linux專有韌體和Intel microcode更新程式:
emerge --ask sys-kernel/linux-firmware sys-firmware/intel-microcode
- 編譯安裝Linux核心,約20分鐘。
emerge --ask sys-kernel/installkernel-gentoo sys-kernel/gentoo-kernel-bin
2.5. 安裝GNOME桌面環境#
這是最耗時的階段。等編譯的時候可以去睡個一覺再回來。
- 選取profile鎖定套件版本。列出可用的profile列表:
eselect profile list
- 選取"gnome/systemd (stable)“的profile:
eselect profile set 7
- 用nano編輯
/etc/portage/make.conf
,加入以下參數。
# `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"
- 因為Profile已經設定好USE所以不需要額外設定,直接安裝GNOME完整桌面和GNOME擴充套件,內含Xorg的圖形驅動程式。
emerge --ask gnome-base/gnome gnome-extra/gnome-shell-extensions gnone-extra/gnome-browser-connector
- 安裝完成後更新系統變數
env-update
source /etc/profile
- 設定開機啟動GDM
systemctl enable gdm.service
2.6. 設定使用者和開機服務#
- 用nano編輯
/etc/fstab
,設定開機硬碟自動掛載,例如:
/dev/nvme0n1p1 /boot vfat defaults,noatime 0 2
/dev/nvme0n1p2 none swap sw 0 0
/dev/nvme0n1p3 / ext4 noatime 0 1
- 給自己的主機取名:
hostnamectl set-hostname "Gentoo"
- 編輯
/etc/hosts
,加入以下內容:
127.0.0.1 localhost Gentoo localhost
::1 localhost Gentoo localhost
- 修改root密碼。此密碼要求至少3個字元,並且要數字+大小寫+特殊符號混合。
passwd
- 安裝GRUB、sudo、Wifi連網工具、Chrony同步時間。
emerge --ask sys-boot/grub app-admin/sudo net-wireless/iwd net-misc/chrony
- 將SSH、iwd、NetworkManager、Chrony加入開機服務
systemctl enable sshd
systemctl enable iwd
systemctl enable NetworkManager
systemctl enable chronyd
- 初始化systemd
systemd-firstboot --prompt --setup-machine-id
systemctl preset-all
- 新增一般使用者"user”
useradd -m -g users -G wheel,audio,video,storage -s /bin/bash user
passwd user
- 用nano編輯
/etc/sudoers
,給予一般使用者root權限
#在"root ALL=(ALL) ALL"的下一行加入以下內容:
user ALL=(ALL) ALL
- 將root和一般使用者加入plugdev群組
gpasswd -a root plugdev
gpasswd -a user plugdev
- 安裝GRUB至系統
grub-install --target=x86_64-efi --efi-directory=/boot
grub-mkconfig -o /boot/grub/grub.cfg
- 自動刪除用不到的套件
emerge --ask --depclean
- 刪除剛剛下載的stage3檔案系統
rm /stage3*
- 退出chroot,關機,拔掉隨身碟重開機。
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中文化和安裝輸入法#
編輯
/etc/locale.gen
,加入zh_TW.UTF-8
產生語言設定檔
sudo locale-gen
- 設定語言為正體中文
sudo localectl set-locale zh_TW.UTF-8
- 安裝Google Noto Fonts中文字體。
sudo emerge --ask media-fonts/noto-cjk
Gentoo可能會自動安裝楷體(KaiTi)字體,某些軟體會預設採用楷體顯示,這樣實在不好看。因此到
/usr/share/fonts/arphicfonts
目錄,將楷體字型檔案全部刪除。安裝Fcitx輸入法框架。Gentoo的新酷音有點舊但堪用。
sudo emerge --ask app-i18n/fcitx app-i18n/fcitx-chewing app-i18n/fcitx-configtool
- 在
~/.xprofile
填入以下內容:
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export SDL_IM_MODULE=fcitx
export GLFW_IM_MODULE=ibus
- 從系統選單找到Fcitx輸入法設定工具,啟用新酷音。重新開機,按CTRL+空白鍵切換新酷音輸入法。如果Fcitx怎麼都喚不出來,試試在GDM的登入畫面改成X11登入。
3.2. 安裝Flatpak#
Flatpak是額外的套件管理員,可以確保每個發行版都安裝版本一致的軟體。並且能繞過Gentoo幾乎每個軟體都要編譯的不便,尤其瀏覽器這種編譯8小時以上的。
- 安裝Flatpak:
sudo emerge --ask sys-apps/flatpak
- 加入Flathub軟體庫:
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
- 安裝Flatpak版的Chromium瀏覽器
flatpak install flathub org.chromium.Chromium
3.3. 設定防火牆#
- 安裝UFW:
sudo emerge --ask net-firewall/ufw
- 設定開機啟動防火牆
sudo systemctl enable ufw
sudo systemctl ufw start
- 開放SSH通訊埠
sudo ufw allow ssh
3.4. Portage套件管理員的使用方式#
不同於其他發行版,Portage「安裝」軟體是稱作「合併」(merge),解除安裝則是「取消選取」(deselect)。
在安裝好系統後,
/etc/portage/make.conf
裡面的全域USE,應該減少到只剩下"nls cjk pulseaudio"等最基本的FLAG。加上「-」則是停用該FLAG,例如"-qt5"。個別套件若有需要,安裝前先到Wiki搜尋各個FLAG的用途。例如VLC影片播放器,網頁Version顯示黃色的是測試版,跟
ACCEPT_KEYWORDS=~amd64"
有關。點進去看Ebuild可得知預設會啟用哪些FLAG。接著在
/etc/portage/package.use/
目錄下新增一個custom
檔案,為有需要的套件獨立設定FLAG:
# 針對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
- 一旦make.conf發生變化,就讓Portage重新編譯需要變更的部份。此指令也等同更新和安裝系統套件。
# 更新系統變數,輸入-3自動合併設定檔
sudo etc-update
# 更新系統套件,會自動安裝或刪除套件
sudo emerge --ask --verbose --update --deep --newuse @world
# 更新系統套件,短一點的版本
sudo emerge -avuDN world
# 自動清理不需要的依賴套件
sudo emerge --ask --depclean
- 安裝套件時臨時要用到FLAG,也可以在指令中使用。例如:
sudo USE="abi_x86_32 -gpm" emerge dev-util/android-sdk-update-manager
- 若要解除安裝套件,先取消選取,再刪除用不到的依賴套件
# 先取消選擇個別套件
sudo emerge --deselect kde-apps/kmix
# 更新系統套件,會自動解除安裝
sudo emerge --ask --verbose --update --deep --newuse @world
# 自動清理不需要的依賴套件
sudo emerge --ask --depclean
- 最後是更新Gentoo的ebuild儲存庫至最新版,再更新系統套件的指令。
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.conf
中MAKEOPTS
的「-j+執行緒數」 - 安裝 CCache設定快取,這樣以後重新編譯就會利用快取中的obj檔案加快編譯速度。
- 設定 DistCC,利用多部電腦合作編譯套件。
- 掛載 TMPFS充當虛擬記憶體。
- 讓 Portage下載套件時直接選取二進位版本,就不需要等編譯了。