** 切記,裝好 kernel 和 grub 後,重開機前,一定要記得更改 root 的密碼。
從 1994 左右開始,自己的桌機,就一直是安裝 Gentoo Linux,至今快 20年了。這 20年中,硬體的效能進步好幾十倍,以前完全裝好要兩三天至一個星期,現在縮短到一兩天左右。
使用 Gentoo 的特點,每個 package 都要自行編譯後,才安裝,要花很多時間。這樣做有沒有必要呢? 到後來變成單純是樂趣吧,且可以透過它在編譯的過程中,學到許多 Linux 和 Open source 的作法,在效能上並不會有太大的影響。這次 (2023年 12月) 安裝,最顯著的差異是有所謂的 Distribution Kernel,不用自己設定 kernel 的選項。自己設定 kernel,常常會設定不正確,無法開機,或某些應用程式無法安裝或使用。
首先,要找個可開機的系統來進行安裝。例如使用 Ubuntu,在進入圖形的環境下,可以一邊上網看安裝指引,一邊進行安裝。
安裝前,要先規畫安裝 Gentoo Linux 的硬碟分割。以下是目前自己在用的系統,硬碟的使用情形。
# df -h
檔案系統 容量 已用 可用 已用% 掛載點
/dev/root 98G 48G 46G 52% /
/dev/nvme1n1p4 354G 167G 169G 50% /home
使用 500GB PCIe SSD 的分割情形
Disk: /dev/nvme0n1
Size: 477 GiB, 512110190592 bytes, 1000215216 sectors
Label: gpt, identifier: FEA1EFAE-49CD-45B9-A15B-5A5EF9069055
所用裝置 Start 結束 磁區 Size 類型
/dev/nvme0n1p1 2048 6143 4096 2M BIOS boot
/dev/nvme0n1p2 6144 313343 307200 150M EFI System
/dev/nvme0n1p3 313344 21284863 20971520 10G Linux swap
/dev/nvme0n1p4 21284864 231000063 209715200 100G Linux filesystem
/dev/nvme0n1p5 231000064 1000215182 769215119 366.8G Linux filesystem
目前大部份的 Linux 都使用 systemd,使用 "eselect profile" 選擇 profile 時,可以只選擇 "systemd",儘快裝好一個空的系統,確認可以重新開機。merged-usr,是指 bin, lib, lib64, sbin 等目錄都和 usr 下的目錄合併,不再分開。
雖然現在的 SSD 很快,如 nvme ssd 更是快,但和 DRAM 比起來,仍然比較慢。為了提昇 emerge 套件的速度,並且避免頻繁寫入 SSD,在記憶體也夠大時,在安裝過程可以使用 tmpfs 。emerge 過程,檔案是放在 /var/tmp/portage 的目錄下,在 chroot 中,需手動 mount tmpfs,指令如下。注意,tmpfs 的大小,一般不宜超過一半的記憶體。
# mount -t tmpfs -o size=4G,uid=portage,gid=portage,mode=755 /var/tmp/portage
# mount -o remount,size=4G,noatime /tmp
在圖形界面,目前都用 lightdm 登入,並且在 USE flags 加上 "cjk",讓它支援中文。這時候,大概得等到裝好一個輕量級的 Xfce 桌面,才能比較方便的使用新裝好的 OS。這過程,大概要一天吧,還是先用 Ubuntu,進 chroot 繼續後面的安裝步驟,直到有 xfce 可用。
在開機前,要裝好 grub,編好 kernel,更改管理者密碼。常常忘了設定管理者密碼,又要重新 chroot 一次,設定密碼。
更改 host name 的方式如下,便於分辨在那台機器上。
hostnamectl set-hostname aj-i9裝好的系統,可以在 /etc/fstab 中,加上 tmpfs 的掛載,可以自行參考網路資料。https://wiki.gentoo.org/wiki/Portage_TMPDIR_on_tmpfs
可以安裝 app-portage/cpuid2cpuflags,來偵測 CPU_FLAGS_X86 flags,然後將其加入 /etc/portage/make.conf 中。在 /etc/portage/make.conf 中,我會加的設定。
ABI_X86="64 32";同時支援 64位元和32位元的程式庫,因為我會用 32 位元的 WINE。
GRUB_PLATFORMS="efi-64 pc";grub 同時安裝 efi 和 dos。
LINGUAS="zh_TW";中文的環境
L10N="zh-TW zh-CN"
INPUT_DEVICES="evdev keyboard mouse";X window 的設定
VIDEO_CARDS="vesa nouveau nv"
ALSA_CARDS="hda-intel"
設定時區
# echo "Asia/Taipei" > /etc/timezone
# emerge --config sys-libs/timezone-data
en_US ISO-8859-1
en_US.UTF-8 UTF-8
zh_TW.UTF-8 UTF-8
zh_TW BIG5
zh_CN.UTF-8 UTF-8
zh_CN GB2312
IP 設定
注意,要先執行 systemd-machine-id-setup,建立 machine ID,journal 才會正常運作,service 才會正常起動,網路也才會起來。
建立檔案 /etc/systemd/network/50-wired.network
[Match]
Name=eno1
[Network]
Address=10.61.86.133/20
Gateway=10.61.80.1
[Address]
Label=eno1:1
Address=10.161.86.133/20
[Match]
Name=enp*
[Network]
DHCP=yes
systemctl enable systemd-networkd.service
systemctl start systemd-networkd.service
Note that systemd-networkd does not update resolv.conf by default. To have systemd manage the DNS settings, replace resolv.conf with a symlink and start systemd-resolved.
設定時區 (使用 systemd)
# timedatectl set-timezone Asia/Taipei
# timedatectl set-ntp yes
# timedatectl set-local-rtc no
ip addr add 10.1.1.2/16 dev eth1
ip link set eth1 up
安裝 kernel 及設置 grub2
先安裝 sys-kernel/gentoo-kernel-bin,可以很快的裝系統重新開機。假如要重裝 sys-kernel/gentoo-kernel,必須要先 emerge -W gentoo-kernel-bin,再 emerge -av gentoo-kernel。這樣會先移除 gentoo-kernel-bin,因為兩者不能同時安裝。
* Messages for package sys-kernel/gentoo-kernel-6.1.60: * Your configuration for sys-kernel/gentoo-kernel-6.1.60 has been saved in * "/etc/portage/savedconfig/sys-kernel/gentoo-kernel-6.1.60" for your editing pleasure. * You can edit these files by hand and remerge this package with * USE=savedconfig to customise the configuration. * You can rename this file/directory to one of the following for * its configuration to apply to multiple versions: * ${PORTAGE_CONFIGROOT}/etc/portage/savedconfig/ * [${CTARGET}|${CHOST}|""]/${CATEGORY}/[${PF}|${P}|${PN}]
使用 BIOS 時,執行 grub-install --target=i386-pc /dev/nvme0n1 安裝 bootloader。使用 EFI 的話,有點小複雜,就先不折騰了。
產生選單前,可以設定 /etc/default/grub,我習慣的設定如下。
# 預設的開機,儲存在 /boot/grub/grubenv 中的 saved_entry
GRUB_DEFAULT=saved
# 顯示全部的開機選項
GRUB_DISABLE_SUBMENU=y
# 不要建立復原開機選項
GRUB_DISABLE_RECOVERY="true"
# Boot with systemd instead of sysvinit (openrc)
GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd"
其中,GRUB_CMDLINE_LINUX 那一行一定要設,不然使用 lightdm 登入 xfce 後,會不正常。
在 kernel 建好之後,直接下 make install 指令,即可將 kernel 的 image複製到 /boot 下。執行指令 grub-mkconfig -o /boot/grub/grub.cfg,建立開機選單。
執行 awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub/grub.cfg,列出開機時顯示的選單列表。
0 : Gentoo GNU/Linux,採用 Linux 4.9.16-gentoo
1 : Gentoo GNU/Linux,採用 Linux 4.9.16-gentoo.old
2 : Gentoo GNU/Linux,採用 Linux 4.4.52-gentoo.good
3 : Gentoo GNU/Linux,採用 Linux 4.4.52-gentoo
4 : Gentoo GNU/Linux,採用 Linux 4.4.52-gentoo.old
執行 grub-set-default 3,設定預設開機選項為 3。
執行 grub-editenv list,顯示儲存的設定如下
saved_entry=3
假如是升級 kernel,在使用 eselect 設定新的 kernel 後,要重新安裝相關的 package,不然會進不了圖形界面和 VM。
emerge -av x11-drivers/nvidia-drivers app-emulation/vmware-modules其他安裝
確定可以正常開機後,先裝個基本的圖形介面,emerge -av xorg-server xterm twm,就可以進入 X window。這樣,只需幾個小時,就有視窗可用了,然後再裝其他的 package。
若是已有可用的視窗系統,就不用急,把所有的東西都裝好,再切換過去。
常用小工具
xfce4-notes-pluginThe notes are stored as text files in $XDG_DATA_HOME/notes/ (~/.local/share/notes by default).
The settings are in $XDG_CONFIG_HOME/xfce4 (~/.config/xfce4/xfce4-notes.*).
xfce4-clipman-plugin, 要安裝 x11-themes/gnome-icon-theme, 才會出現圖示
x11-themes/gnome-icon-theme 的 icon,還被一些應用程式使用,如 smb4k 及 krusader 等,不能隨便移除。
修改 tmpfs 的大小
在 /etc/fstab 加入
tmpfs /tmp tmpfs rw,nosuid,noatime,nodev,size=4G,mode=1777 0 0
然後下指令
mount -o remount /tmp
LightDM 無法啟動
Create a new file called nvidia.conf in the /etc/modules-load.d directory. It should contain the NVIDIA module name:
nvidia nvidia_modeset nvidia_drm
連接網芳
使用 gvfs,可在 Thunar 使用 "smb://servername/share" 來連接網芳的分享磁碟。
修改 /etc/samba/smb.conf,才能連 Windows 2003 ~ 2019 的網芳,不然會出現 "Failed to mount Windows share" 的訊息
在安裝 gnome-base/gvfs,use flag 要加上 fuse (Enables fuse mount points in $HOME/.gvfs for legacy application access)。Gentoo 則是放在 $XDG_RUNTIME_DIR/gvfs 的目錄下,其中 XDG_RUNTIME_DIR=/run/user/1000。
音效
必須以普通使用者的身份,啟動 pulseaudio.service。控制界面,需安裝 media-sound/pavucontrol (Pulseaudio Volume Control, GTK based mixer for Pulseaudio)。
$ systemctl --user start pulseaudio
$ systemctl --user status pulseaudio
$ systemctl --user enable pulseaudio
Created symlink /home/ajax/.config/systemd/user/default.target.wants/pulseaudio.service → /usr/lib/systemd/user/pulseaudio.service.
Created symlink /home/ajax/.config/systemd/user/sockets.target.wants/pulseaudio.socket → /usr/lib/systemd/user/pulseaudio.socket.
VMware-Workstation
gentoo ~ # emerge --config vmware-workstation
Configuring pkg...
Traceback (most recent call last):
File "/usr/lib/python-exec/python3.12/emerge", line 57, in main
retval = emerge_main()
^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/_emerge/main.py", line 1308, in emerge_main
return run_action(emerge_config)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/_emerge/actions.py", line 3876, in run_action
return action_config(
^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/_emerge/actions.py", line 758, in action_config
retval = portage.doebuild(
^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/portage/package/ebuild/doebuild.py", line 1218, in doebuild
rval = _prepare_env_file(mysettings)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/portage/package/ebuild/doebuild.py", line 1686, in _prepare_env_file
env_extractor.start()
File "/usr/lib/python3.12/site-packages/_emerge/AsynchronousTask.py", line 34, in start
self._start()
File "/usr/lib/python3.12/site-packages/_emerge/BinpkgEnvExtractor.py", line 43, in _start
env=self.settings.environ(),
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/portage/package/ebuild/config.py", line 3378, in environ
raise AssertionError(
AssertionError: LC_ALL=zh_TW.UTF-8 for posixish locale. It seems that split_LC_ALL was not called for phase config?
gentoo ~ # unset LC_ALL
gentoo ~ # emerge --config vmware-workstation
Configuring pkg...
Network settings database seems to be invalid,configuring default settings
Configuring Bridged network vmnet0
Configuring hostonly network vmnet1, probing for unused subnet ...
Configuring NAT network vmnet8, probing for unused subnet ...
Configured default networks - Bridged, Hostonly, NAT
gentoo ~ #