為何我會選擇用debootstrap安裝系統?有很多原因,容許我逐一展開。第一,Ubuntu的官方安裝器無法分配LVM或是Btrfs的掛載點(當然,你也可以用其他風味版,例如Kubuntu,來獲得不同的安裝器以分配LVM或是Btrfs的掛載點,但這樣就不是GNOME桌面就是了),這或許是因為新手易用所做的取捨吧,但我覺得我都選擇了手動分配掛載點,應該要有彈性給我選擇才是,而且在22.04以前(再次強調,「以」有「包含」的意思),舊版的安裝器是可以分配LVM掛載點,開倒車有些不好;第二,我覺得Ubuntu預設安裝有些臃腫,為了方便開箱即用,因此打包了很多,加上我的電腦強制需要安全啓動(Secure Boot),因此我選擇Ubuntu/Debian、Fedora/RHEL系列,方便處理安全啓動的發行版;第三,我可以體驗像是Arch Linux安裝方式,而且最小安裝的Ubuntu是沒有snap,這對於某些人是福音吧,說來也有趣,我一開始是相對支持snap的,但後來Debian用久了,掌握了backports倉庫作為補充的技巧,所以也沒有那麼想要依賴snap了(你應該參考:〈修正Debian上Telegram鼠標變小的問題〉來知道為什麼),經過實測,系統開機速度5秒不到(從GRUB選單按下enter開始計算),夠輕量了吧?
我將會先簡單提一下我的分區情形,闡述一些步驟的原理(比較像是Ivon文章教學在我這裡情況的修改,原諒我沒有創新)。還有,我會着重一下關於最小安裝GNOME以及軟體的選擇,這裡我想展現我的哲學和品味。順帶一提,你應該要先準備好Ubuntu安裝ISO,本文是用Ubuntu 26.04。
分區介紹和簡單分析
如果你是已經有Linux,則可以先看自己的分區結構,若沒有,請先進入Ubuntu的LiveCD,並打開終端機,後面的操作和終端機是無法脫鉤的。還有,你可以不用關掉安全啓動,因為我這裏的做法會順便解決這個問題。
- 開啓終端機,查看分區。這個語法是「List Block」的縮寫。
$ lsblk - 你應該得到下列訊息
xiong@Ubuntu:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 476.9G 0 disk
├─nvme0n1p1 259:1 0 512M 0 part /boot/efi
├─nvme0n1p2 259:2 0 16M 0 part
├─nvme0n1p3 259:3 0 128.2G 0 part
├─nvme0n1p4 259:4 0 46G 0 part
├─nvme0n1p5 259:5 0 954M 0 part /boot
├─nvme0n1p6 259:6 0 1G 0 part
└─nvme0n1p7 259:7 0 149G 0 part
├─Linux-debian 252:0 0 55.9G 0 lvm /
└─Linux-home 252:1 0 93.1G 0 lvm /home
- 我們來一一介紹我的分區結構。不過,在此之前,我先講一下父目錄和子目錄,這二者是相對關係的,舉例來說,「下載」資料夾裡面還有一個叫做「學習資料」的資料夾,那麼「下載」是「學習資料」的父目錄,「學習資料」是「下載」的子目錄。
- 我的這臺筆電是NVMe硬碟,裝置代號是nvme0n1,0表示這是第一顆NVMe硬碟,因為NVMe硬碟支持硬體分割成多個不同的磁碟(電腦看起來像是多顆不同硬碟,是命名空間的應用),因此n1表示這是第一個命名空間(一般家用一顆硬碟就是一個命名空間)。
- 後面的p1是指這個硬碟的第一個分割區,以此類推。並且,分割區都是掛載在/dev目錄下的一個裝置,畢竟「萬物皆文件」。
- /dev/nvme0n1p1是這臺電腦的ESP分區,大小是512MB,用來作為UEFI開機引導的分區。我這臺電腦是Windows雙系統(還是有不得已的時候,像是LINE),因此這個ESP分區務必小心,以免開不了機。在Linux中,是掛載在/boot/efi。
- /dev/nvme0n1p5是我的/boot分區,如果你是用LVM或是Btrfs,建議獨立出一個/boot分區,方便開機。像是Ubuntu在Ubuntu 26.04精簡了GRUB(為了安全),這個分區獨立出來還是很必要的。Ubuntu/Debian系列大概1GB就夠了,Fedora/RHEL和SUSE系列建議2GB以上。
- Linux-debian是我的LVM裡面的根目錄(/)的分區,分區代號是/dev/Linux/debian,也可以用/dev/mapper/Linux-debian表示。Linux是我的LVM的Volume Group的名稱,debian是我的LVM的Volume Group裡面的Logic Volume的名稱
(小知識:「/」是一個分區,表示根目錄) - Linux-home是我的家目錄(/home)的分區,分區代號是/dev/Linux/home或是/dev/mapper/Linux-home。
進入liveCD掛載分區
有了上一節的概念,我們來開始掛載分區。當然,你得要先進入LiveCD,並打開終端機。我們會把硬碟的分區掛載在/mnt下面(mnt是mount的縮寫,其實你掛載在別的位置也不是不行,但我這裡依循使用習慣,以及潛在DAC權限的分配,你可以看看:〈AppArmor和簡單的電腦安全採取行動〉)。如果你是用Btrfs,你應該參考:〈Ubuntu 22.04 LTS debootstrap install.md - GitHub〉、〈Debian + btrfs安裝指南(Windows雙系統指南)〉,來看看btrfs怎麽掛載。務必依序操作。
- 讓系統讀取現在LVM的狀態
sudo pvscan
sudo vgscan
sudo lvscan - 格式化舊的根目錄的分區和舊的/boot分區。mkfs是make filesystem的縮寫,ext4是檔案系統的種類,你也可以用btrfs之類的。我沒有強烈的快照要求以及為了成熟性的考量,而且LVM可以用簡單卷(Thin Volume)來做快照(snapshot)
sudo mkfs.ext4 /dev/Linux/debian
sudo mkfs.ext4 /dev/nvme0n1p5 - 掛載根目錄到/mnt
sudo mount /dev/Linux/debian /mnt - 建立boot資料夾在/mnt下方,-p表示不論父子目錄關係
sudo mkdir -p /mnt/boot - 掛載/boot分區
sudo mount /dev/nvme0n1p5 /mnt/boot - 建立efi資料夾在boot下方,用來掛載ESP
sudo mkdir -p /mnt/boot/efi - 掛載ESP到/boot/efi下方
sudo mount /dev/nvme0n1p1 /mnt/boot/efi - 建立home資料夾在根目錄下方,掛載家目錄分區
sudo mkdir -p /mnt/home - 掛載家目錄
sudo mount /dev/Linux/home /mnt/home
準備工具
建議LiveCD先連網,我們需要下載一些套件,但安裝時可以不連網。我們需要的工具是debootstrap、arch-chroot(手動傳統chroot很麻煩,所以我用arch的chroot工具來方便)
- 安裝所需工具
sudo apt install debootstrap arch-install-scripts
安裝基本系統
如果你有用過Debian的GUI安裝界面,我相信你對於「安裝基本系統」這個步驟應該不陌生,沒錯,debootstrap是用來安裝基本系統的,主要是把一些系統運作所需的工具解壓縮到分區裡面(這也為何我們需要格式化部分分區)
- 安裝基本系統,Ubuntu 26.04的代號是resolute。這個步驟不會動到/boot、/boot/efi、/home,會建立/etc、/usr等目錄存放關鍵元件
sudo debootstrap resolute /mnt - 將分區狀況寫入fstab。fstab是系統用來識別掛載點和分區關係的文件,存在於/etc/fstab
genfstab -U -p /mnt | sudo tee /mnt/etc/fstab - 我們進入實體機的系統裡面,並且獲取root身份來完成後續系統安裝和設定,這個步驟是chroot(Change Root)。注意,此時的基本系統是沒有Linux內核的。
sudo arch-chroot /mnt
安裝內核
Ubuntu針對LTS有兩種內核,一種是GA,另一種是HWE(Hardware Enablement)內核。前者是這個版本發佈哪一版的內核,這個內核的版本就是固定的,只會發佈安全補丁,後者是類似Debian的backports倉庫的內核,半年升級一次,跟著最新版本的Ubuntu內核走,舉例來說,Ubuntu 26.10發佈了,我要是用Ubuntu的HWE內核,我的Ubuntu 26.04就可以使用26.10的Linux內核。對於一般桌面用戶,如果你是打算使用Ubuntu LTS、兩年升級一次系統,我會很推薦用HWE內核,以獲得最新的驅動、較好的效能提升
- 安裝nano編輯器
sudo apt update
sudo apt install nano - 修改source,先使用nano編輯器打開
sudo nano /etc/apt/sources.list - 輸入下列內容
deb [trusted=yes] http://tw.archive.ubuntu.com/ubuntu resolute main restricted universe
deb [trusted=yes] http://tw.archive.ubuntu.com/ubuntu resolute-security main restricted universe
deb [trusted=yes] http://tw.archive.ubuntu.com/ubuntu resolute-updates main restricted universe - 【可選】我比較喜歡DEB22格式的source,因此我們還可以執行下列指令
sudo apt modernize-sources - 保存並離開nano編輯器,更新一下源和基本系統的一些元件
sudo apt update && sudo apt full-upgrade - 安裝內核、必要組件(像是LVM管理器、EFI管理工具)。「--no-install-recommends」參數表示不安裝其他建議的依賴,採取最小安裝依賴、僅安裝必要依賴
apt install --no-install-recommends linux-image-generic-hwe-26.04 linux-headers-generic-hwe-26.04 linux-firmware initramfs-tools efibootmgr lvm2
安裝桌面環境和我推薦的日常使用的基本軟體
如果你要省事一點,可以安裝ubuntu-desktop(Ubuntu定製的GNOME桌面)或是原生GNOME(vanilla-gnome-desktop),但我想要最小安裝GNOME桌面,因此這一步就很重要了。
- 安裝最基本的GNOME桌面。得益於GNOME是一套完整的桌面環境,基本功能都是有的,如果你是用KDE,可能連螢幕截圖工具都沒有(這主要是開發者的依賴打包的選擇,KDE的模組化程度高,這也是優點)
apt install --no-install-recommends gnome-core - 安裝網路管理工具。預設的Ubuntu是使用netplan,但這個不好用且桌面環境對於NetwokManager的支援度比較好。
apt install network-manager network-manager-gnome - 安裝藍牙和音效模組
apt install pipewire wireplumber bluez gnome-bluetooth-common - 安裝安全工具
apt install xdg-desktop-portal-gnome polkitd apparmor ufw apparmor-profiles-extra apparmor-profiles - 安裝閉源解碼器。你應該參考:〈Linux優化雜談:主要面向Debian和Fedora〉
apt install intel-media-va-driver-non-free - 安裝tuned電源管理器。如果你安裝TLP,可以參考:〈Linux的電源管理TLP(for tlp 1.9)〉
apt install tuned tuned-ppd - 安裝中文字型和系統中文語言包
apt install fonts-noto-cjk language-pack-zh-hant - 安裝輸入法,我推薦ibus-rime(開機後再裝也可以)
apt install ibus-rime - 安裝推薦的軟體(個人喜好),依序是終端模擬器、文書處理、看圖軟體、影片播放軟體、郵件客戶端、GNOME Tweaks、GNOME插件管理器
apt install gnome-console libreoffice nomacs vlc evolution gnome-tweaks gnome-shell-extension-manager
此時的系統是沒有瀏覽器和snap,而firefox使用apt安裝會跳轉去安裝snap。我選擇使用deb安裝,因此你應該參考Mozilla官方的說明,複製貼上指令,並且安裝Firefox,這部分我就不贅述。如果你不排斥snap,可以直接執行apt install firefox即可。請參考:〈在 Linux 安裝 Firefox - Mozilla〉
用戶設定、個人化設定
我的家目錄的資料夾是xiong,下列步驟攸關我們怎麽取回家目錄的使用權限,以恢復絕大多數的資料。
- 設定主機名稱
echo "Ubuntu" > /etc/hostname
echo "127.0.0.1 localhost" >> /etc/hosts
echo "::1 localhost" >> /etc/hosts
echo "127.0.1.1 Ubuntu" >> /etc/hosts - 設定時區,我是選擇Asia/Taipei
dpkg-reconfigure tzdata - 設定區域和語言。用空白鍵選取語言編碼,我是勾選en_US.UTF-8 UTF-8、zh_TW.UTF-8 UTF-8,因爲我偏好英文界面,因此第二步的展示語言我選擇en_US.UTF-8,如果你要中文,就選擇zh_TW.UTF-8
dpkg-reconfigure locales - 新增使用者。-d 指定家目錄路徑,-m 若不存在才建立,-s 指定預設 Shell。
useradd -d /home/xiong -m -s /bin/bash xiong - 設定密碼,應該要和舊密碼一致。其實沒有也沒關係,下一步就有奪權的步驟。
passwd xiong - 家目錄所有權轉移(奪權)。chown是Change Owner的縮寫
chown -R xiong:xiong /home/xiong - 將該使用者加入sudo群組,以便使用sudo指令
usermod -aG sudo xiong
啓動必須服務
- 啓用GDM顯示管理器、網路管理器
systemctl enable gdm.service
systemctl enable NetworkManager.service - 啓動Apparmor
systemctl enable apparmor - 設定防火牆,我們允許kde-connect的端口(1714~1764)、ssh、https服務
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw allow http
ufw allow https
ufw allow 1714:1764/tcp
ufw allow 1714:1764/udp
ufw enable - 下載帶有簽章的GRUB和安全啓動的密鑰管理器
apt install grub-efi-amd64-signed shim-signed - 安裝GRUB到系統中
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck - 更新GRUB設定
grub-mkconfig -o /boot/grub/grub.cfg - 刪掉舊的啓動選項,以我來說是debian
sudo rm -rf /boot/efi/EFI/debian - 列出NVRAM裡面的開機選項,我們要刪掉多餘的開機選項,以免主機板的開機選項被塞滿
efibootmgr - 會有下列結果
BootCurrent: 0001
BootOrder: 0001,0002,0000
Boot0001* ubuntu
Boot0002* debian <-- 這是舊的、想刪掉的
Boot0000* Windows Boot Manager
... - 執行下列命令,刪掉舊的開機選項。-B是指刪除的意思。
efibootmgr -b 0002 -B
收尾
- 退出chroot
exit - 逐步卸載分區
sudo umount /mnt/boot/efi
sudo umount /mnt/boot
sudo umount /mnt/home
sudo umount /mnt - 重新啓動電腦,選擇ubuntu開機。
我的碎碎唸
我第一次用debootstrap安裝系統,花了我兩個小時,因為電腦有重要資料,因此花了點時間確認這些指令、掛載順序是否有問題。裝完系統占用不到6GB,啓動超快,系統組件精簡的像是毛坯屋,這我很尬意。我這次安裝主要是我想征服debootstrap和嘗試掛載LVM、嘗試最小安裝系統。我寫這篇文章最主要的目的是記錄我的征服歷程,方便日後回顧,我也打算在Telegram上的Ubuntu社群分享這篇文章,作為回報,因為我有從上面得到一些解答。
不過,最麻煩的是,Thunderbord只支援snap安裝,Mozilla不打算釋出deb包,Debian上的是社群打包,所以我改用evolution。還有,之前用Ubuntu Server安裝Ubuntu,GNOME桌面會有動畫缺失,這次沒有,真是可喜可賀,而且也沒有Server版開啓的一些服務占用到啓動時間。
參考資料
- Installing Ubuntu 24.04 LTS Using Debootstrap. Let's pretend it's Arch!。YouTube。網址:https://youtu.be/X5EbVbwsSxw?si=VHjOAxPkqGjKewKt
- 打造精簡的Ubuntu Linux!用Debootstrap安裝系統。Ivon部落格。網址:https://ivonblog.com/posts/install-ubuntu-with-debootstrap/
- Google Gemini。用來討論技術細節。切記,不要完全相信AI,不然資料可能不見,你應該對於任何指令、參數都要抱持興趣與懷疑!
- VMware vSAN 及 NVMe 命名空間魔法。Micron美光。https://tw.micron.com/about/blog/storage/ssd/vmware-vsan-and-nvme-namespace-magic
- Ubuntu 硬碟和裝置名稱說明 。Dell Tecknology。https://www.dell.com/support/kbdoc/zh-tw/000132092/ubuntu-%E7%A1%AC%E7%A2%9F%E5%92%8C%E8%A3%9D%E7%BD%AE%E5%90%8D%E7%A8%B1%E8%AA%AA%E6%98%8E
沒有留言:
張貼留言