快轉到主要內容

桌上電腦安裝Gentoo Linux筆記 (OpenRC + KDE)

分類   Linux系統 Linux系統安裝教學
標籤   Gentoo
🗓️ 民國111年 壬寅年
✍ 切換正體/簡體字
目錄

這篇文章紀錄在桌上電腦安裝Gentoo系統的過程,使用Gentoo官方預先編譯的核心,init系統為OpenRC,桌面環境為KDE,並使用Flatpak技術減少部份軟體的安裝時間。

(KDE Plasma-Overdose + Oxygen主題)

建議至少手動安裝過Arch Linux再來嘗試安裝Gentoo。(相關文章: 在主力電腦安裝Arch Linux)

安裝Gentoo至少會花上2小時~半天不等,請做好心理準備。

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

0. Gentoo硬體需求
#

Gentoo跟Arch Linux很像,都是滾動更新的系統,然而Arch Linux安裝軟體多半是下載二進位檔,Gentoo則是要編譯軟體套件後安裝。儘管Gentoo的套件管理員Portage會在下載原始碼後自動編譯安裝,仍免不了要花時間等其編譯完成。因此CPU建議為intel i5以上4核心,RAM至少8GB,硬碟要有64GB。

就算是用虛擬機練習,也是建議把所有核心都分配給Gentoo並啟用KVM等hypervisor技術,加快編譯速度。

我的硬體規格:

  • CPU: Intel i5-7400
  • GPU: Nvidia GTX 1050 Ti
  • RAM: 16GB DDR4
  • SSD: 500GB

1. 製作Gentoo安裝隨身碟
#

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

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

2. 安裝Gentoo系統
#

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

  1. 用隨身碟開機。

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

2.1. 設定網路
#

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

2.2. 分割硬碟
#

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

  1. 用fdisk查看硬碟列表,SSD應該是顯示為/dev/sda
fdisk -l
  1. 用fdisk分割硬碟。此分割表是給UEFI系統使用,含有SWAP分區。
fdisk /dev/sda
# 使用GPT硬碟分割表
g
#輸入d刪除全部分區
d
#寫入
w
fdisk /dev/sda
#新增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/sda -l,分割表應該會長這樣:
/dev/sda1  512MB  EFI
/dev/sda2  32GB   SWAP
/dev/sda3  450GB  Linux
  1. 格式化並建立檔案系統
mkfs.vfat -F32 /dev/sda1
mkswap /dev/sda2
mkfs.ext4 /dev/sda3
  1. 啟用Swap
swapon /dev/sda2
  1. 掛載root分區
mount /dev/sda3 /mnt/gentoo
cd /mnt/gentoo

2.3. 安裝stage3檔案系統
#

  1. 下載前先校時
ntpd -q -g
  1. 下載stage3 Gentoo檔案系統,這裡採用openRC當init系統(你也可以選擇現代一點的Systemd)。到 Gentoo官網,下載"Stage3"的檔案,選擇desktop profile | openrc版,按右鍵取得網址。例如:
wget https://bouncer.gentoo.org/fetch/root/all/releases/amd64/autobuilds/20220828T170542Z/stage3-amd64-desktop-openrc-20220828T170542Z.tar.xz
  1. 解壓縮檔案系統:
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
  1. 用nano編輯/etc/portage/make.conf,加入以下參數讓Gentoo使用更多CPU執行緒編譯套件。
MAKEOPTS="-j8"
  1. 設定鏡像站點,選單用上下鍵移動,用空白鍵選取台灣NCHC的鏡像(twaren)後按下Enter。
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
  1. 複製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
  1. 複製DNS設定
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
  1. 掛載系統目錄,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}"
  1. 掛載EFI分區
mount /dev/sda1 /boot
  1. 更新Gentoo的ebuild儲存庫至最新版:
emerge-webrsync
  1. 用Portage更新套件,輸入yes,會花點時間編譯安裝。
emerge --ask --verbose --update --deep --newuse @world
  1. 設定時區為亞洲/台北
echo "Asia/Taipei" > /etc/timezone
emerge --config sys-libs/timezone-data
  1. 用nano編輯/etc/locale.gen,將英文en_US.UTF-8 UTF-8取消註解

  2. 產生語言設定檔

locale-gen
  1. 重新載入設定
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,加入以下參數,同意所有授權條款。
ACCEPT_LICENSE="*"
  1. 接著安裝Linux專有韌體和Intel microcode更新程式:
emerge --ask sys-kernel/linux-firmware  sys-firmware/intel-microcode
  1. 編譯安裝Linux核心,約20分鐘。
emerge --ask sys-kernel/installkernel-gentoo  sys-kernel/gentoo-kernel-bin

2.5. 安裝KDE桌面環境
#

這是最耗時的階段。等編譯的時候可以去看部電影再回來,因為Intel i5-7400光是編譯「KDE桌面」就花了4小時。

  1. 選取profile鎖定套件版本。列出可用的profile列表:
eselect profile list
  1. 因為我是以裝KDE桌面為目標,選取"desktop/plasma (stable)“的profile,使用OpenRC:
eselect profile set 8
  1. 用nano編輯/etc/portage/make.conf,加入以下參數。
# `USE`代表編譯軟體用的全域FLAG,不寫就是按照軟體預設值編譯
USE="nls cjk font pulseaudio alsa vaapi X elogind udev dbus polkit udisks colord display-manager firewall grub gtk kwallet plymouth sddm sdk smart accessibility bluetooth networkmanager"

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

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

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

# 指定安裝amd64架構的穩定版軟體,「~amd64」代表不穩定
ACCEPT_KEYWORDS="amd64"

# 設定要安裝的顯示卡驅動
VIDEO_CARDS="nvidia intel"
  1. 最長的編譯到來了,來安裝KDE桌面環境吧。plasma-meta套件包含基本的KDE桌面、X Server、Xorg顯示卡驅動程式(核心模组)、SDDM顯示管理器。除此之外再安裝KDE終端機模擬器和顯示管理器啟動程式。
emerge --ask kde-plasma/plasma-meta  kde-apps/konsole  gui-libs/display-manager-init
  1. 用nano編輯/etc/conf.d/display-manager,設定SDDM為顯示管理器
CHECKVT=7
DISPLAYMANAGER="sddm"
  1. 設定開機啟動Display manager
rc-update add display-manager default
usermod -a -G video sddm

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

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

3. Gentoo後續安裝優化
#

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

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

  2. 產生語言設定檔

sudo locale-gen
  1. 編輯/etc/environment,加入以下內容設定語言為正體中文
export LANG=zh_TW.UTF-8
export LC_CTYPE="zh_TW.UTF-8"
export LC_NUMERIC="zh_TW.UTF-8"
export LC_TIME="zh_TW.UTF-8"
export LC_COLLATE="zh_TW.UTF-8"
export LC_MONETARY="zh_TW.UTF-8"
export LC_MESSAGES="zh_TW.UTF-8"
export LC_PAPER="zh_TW.UTF-8"
export LC_NAME="zh_TW.UTF-8"
export LC_ADDRESS="zh_TW.UTF-8"
export LC_TELEPHONE="zh_TW.UTF-8"
export LC_MEASUREMENT="zh_TW.UTF-8"
export LC_IDENTIFICATION="zh_TW.UTF-8"
  1. 安裝Google Noto Fonts中文字體。
sudo emerge --ask media-fonts/noto-cjk
  1. Gentoo可能會自動安裝楷體(KaiTi)字體,某些軟體會預設採用楷體顯示,這樣實在不好看。因此到KDE系統設定→外觀→Fonts,將楷體全部刪除。

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

sudo emerge --ask app-i18n/fcitx app-i18n/fcitx-chewing app-i18n/kcm-fcitx
  1. ~/.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
  1. 從系統選單找到Fcitx輸入法設定工具,啟用新酷音。重新開機,按CTRL+空白鍵切換新酷音輸入法。

3.2. 安裝Flatpak
#

Flatpak是額外的套件管理員,可以確保每個發行版都安裝版本一致的軟體,我主要是用於安裝LibreOffice、瀏覽器這類求穩定的工作軟體。

儘管軟體很肥,但你會體會到不用每個軟體都編譯安裝是多麼美好的事情…例如Chromium編譯要10小時,Flatpak不到十分鐘就裝完了。

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

3.3. 設定防火牆
#

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

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

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

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

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

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

# 針對plasma-meta的設定
kde-plasma/plasma-meta X elogind pulseaudio udev dbus polkit udisks colord display-manager firewall grub gtk kwallet plymouth sddm sdk smart accessibility bluetooth networkmanager

# 針對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重新編譯需要變更的部份。此指令也等同更新和安裝系統套件。
# 更新系統變數,輸入-3自動合併設定檔
sudo etc-update
# 更新系統套件,會自動安裝或刪除套件
sudo emerge --ask --verbose --update --deep --newuse @world
# 更新系統套件,短一點的版本
sudo emerge -avuDN world
# 自動清理不需要的依賴套件
sudo emerge --ask --depclean
  1. 安裝套件時臨時要用到FLAG,也可以在指令中使用。例如:
sudo USE="abi_x86_32 -gpm" emerge dev-util/android-sdk-update-manager
  1. 若要解除安裝套件,先取消選取,再刪除用不到的依賴套件
# 先取消選擇個別套件
sudo emerge --deselect kde-apps/kmix
# 更新系統套件,會自動解除安裝
sudo emerge --ask --verbose --update --deep --newuse @world
# 自動清理不需要的依賴套件
sudo emerge --ask --depclean
  1. 最後是更新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.confMAKEOPTS的「-j+執行緒數」
  • 安裝 CCache設定快取,這樣以後重新編譯就會利用快取中的obj檔案加快編譯速度。
  • 設定 DistCC,利用多部電腦合作編譯套件。
  • 掛載 TMPFS充當虛擬記憶體。
  • Portage下載套件時直接選取二進位版本,就不需要等編譯了。

Gentoo安裝後記
#

目前Gentoo系統約安裝了800個套件,光是編譯這些套件就花了半天以上時間。

USE使用仍需要注意,用錯FLAG會導致預期外的行為。

或許電腦規格不好的人要更熟練調整套件的編譯參數,不然的話會想到這張圖:CPU不好跟人玩什麼Gentoo!?

相關文章

如何在已裝有Ubuntu的電腦安裝Windows 10雙系統
分類   Linux系統 Linux系統安裝教學
標籤   Ubuntu Windows
安裝Alpine Linux為桌面系統教學 (XFCE4 + 中文輸入法)
分類   Linux系統 Linux系統安裝教學
標籤   Alpine Linux
初探GNU Guix System安裝
分類   Linux系統 Linux系統安裝教學
標籤   Linux

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。