2020年2月4日 星期二

2006 Core Duo MacBook 老機重生 (安裝篇)


這一篇來講在 2006 Core Duo MacBook 上安裝新作業系統的一些注意事項及我採過的坑。從我上篇文章的字裡行間可知,Windows 絕不會是我的選擇,而且我不想花錢買正版 Windows,所以剩下的問題就是挑選哪一種 Linux 的發行版。

Linux 在這十年來進展神速,當然我所在意的 "進展" 是指圖形介面。從 2006 年時綁手綁腳幾乎不可用、到處都要命令列代勞,到如今已經非常完善,甚至可以當作 Windows 或 macOS 等以圖形介面見長的系統來使用,故終於可以放心選擇 Linux 了。但 Linux 身為自由軟體組成的系統,有個問題是避不開的,就是版本眾多又紊亂。首先要澄清一件事,Linux 雖然有非常多的類型 (例如 Debian, SuSE, RedHat...),但他們是 "發行版" (distribution,常簡寫成 distro),也就是由某營利公司或非營利機構做出來的 "皮",真正的 Linux 內核是由 Linux 基金會維護的 (也就是 Linux 生父 Linus 本人及其他一堆神人),與 Windows 及 macOS 等商業系統全由單一公司一把抓有很大的不同。在近五年內,Debian 系的 Linux 發行版發展得特別迅速,尤其是其中的 Ubuntu Linux,其開發者 Canonical 公司在 Ubuntu 圖形介面的改良及推廣不遺餘力,使得 Ubuntu 幾乎成為新手口中的 Linux 代名詞,並且越來越多第三方套件也優先支援 Debian 系的套件管理系統 (port system),故不怕沒軟體用 [1],所以像我這種懶人當然選擇 Debian 系的發行版。

Debian 系的 Linux 發行版非常多,光是 Ubuntu 就有好幾個延伸版本,但我選擇另一個 Ubuntu 的近親:Mint 來作為我的主力系統。原因其實很單純,就是 Mint 看著比較清爽討喜,而且硬體需求比較低,比如說 Ubuntu desktop 18.04.3 建議的記憶體是 4 GB,處理器則要雙核心 2.0 GHz,而 Mint 19.3 只建議 2 GB 記憶體,處理器則沒有特殊要求。對於我這台舊電腦還有得挑嗎?為了兼顧易用性及流暢度,當然選擇 Linux Mint。


可是一來到 Linux Mint 的官網又矇了,這怎麼又分三種?!原因是 Linux 除了內核之外,其他的應用程式及圖形介面都可以自由搭配,Cinnamon、MATE 及 Xfce 是三種不同的桌面環境 (圖形介面),差別我就不在這裡說了,最後我選了 Cinnamon (32-bit)。一般來說 MATE 標榜的就是對硬體的要求比較低 (Xfce 太偏了,我從未考慮過),理論上比較適合老機器,但看到 "帳面上" Cinnamon 的硬體要求跟 MATE 一樣,而且又有 "特別" 的好處, 所以我還是選擇了 Linux Mint 官方推薦的 Cinnamon,至於有什麼好處,我會在下一篇文章解釋。


Linux / Mac OSX 雙系統安裝

有兩種安裝 Linux 的方案,其中一種就是在保有 Mac OSX 的情況下,另開一個磁碟分區以安裝 Linux。想起雙系統,各位應該不難想到 Intel Mac 的一個主打功能:Boot Camp,這個軟體可以在不影響磁碟現有資料的情況下,割出一個分區以安裝 Windows,並製作開機選單且提供硬體的驅動程式。驅動程式只有 Windows 版,Linux 用不上,但分割磁碟的功能提供了無痛安裝其他作業系統的可能性。

可是呢 .... Tiger 的 Boot Camp 是 "試用版",在某個日期之後就不能用 (我曾經用過 .... 現在不行了),所以 Boot Camp 對現在的我一點用也沒有。磁碟工具程式是 Mac OSX 內建的強力磁碟工具,但問題是它一旦要割硬碟也是要把整顆硬碟的資料都毀了,跟 Windows 一眾磁碟工具同樣水平。其實 Boot Camp 這個分割硬碟的功能是有內建在 Tiger 裡的,只是沒有圖形介面,於是我採用以下的步驟:
  1. diskutil list:查看硬碟分區的編號 (參考資料),你可以看到裝好 Mac OSX 的硬碟有兩個分區,第一個是 EFI,第二個才是我們的系統及資料磁區 [2],在我的例子裡,我要分割的磁區是 disk0s2。
  2. sudo diskutil resizeVolume disk0s2 30G MS-DOS Linux 80G:以管理者權限 (只有一般使用者的權限?請換到管理者帳號,可參考這篇舊文) 將 Mac OSX 的磁區減小 (參考資料),比如說我的硬碟有 120 GB,上面的指令可以將 Mac OSX 的磁區 (disk0s2) 縮小到 30 GB,剩下的部份留給下一個磁區,寫 70G 或 80G 都無所謂,只要沒有指定第三個磁區,預設就是會把空間用完。MS-DOS 代表 FAT32 的檔案格式,由於之後都要格式化成 Linux 系統的 Ext4,所以這裡就指定一個最泛用的即可。
  3. iDefrag:如果你像我一樣,使用過這台電腦的 Mac OSX 一陣子,你八成會發現上述的分割會失敗,不管怎麼調整空間都沒用 (比如資料明明不多,給個 30 GB 綽綽有餘,結果就算改成 40 GB 照樣失敗)。這個問題不少人問過,比如這篇文章,但這些老外沒有一個給出合理的解釋及像樣的解決方法,不是無效解法就是要我們備份並重裝系統。其實原因很簡單,就是 diskutil 工具找不到 "連續的空白磁區" 分割給下一個磁區,所以就失敗了。Apple 開發的 HFS+ 是非常優秀的檔案系統,每一次存檔的所有儲存區塊會集中在一起,而不是像 FAT32 亂存亂放,所以用久了也不用重組磁碟,但隨著使用時間長了,各檔之間還是會隔很遠,一分散起來就漸漸沒有連續的空白磁區了,除非全部重裝。所以分割失敗的正確解法就是重組磁碟 (其實重裝也等於重組磁碟,但要多準備一個磁碟供備份),我選用 iDefrag 這個老牌軟體,他們開放 "遠古" 版本免費授權 (見官網最下方的 "Museum" 專區),安裝之後花點時間重組 Mac OSX 的磁區,分割就會成功了。
分割完硬碟不要傻傻地重開機,diskutil 只能割硬碟,不能製作開機磁區,而且 Linux Mint 的 32 位元版本並不支援從 EFI 開機,所以插上 Linux 的 USB 碟並重開機也看不到 Live USB 分區。一般來說,使用 BIOS 的 Windows 或是不支援 EFI 的部份 Linux 無論如何都不能在用 EFI 的機器上開機,為了解決這個問題,Boot Camp 採用特殊的 Hybrid MBR 技術實現 Windows / Mac OSX 的雙系統開機選單 (參考資料),如果可以用 Boot Camp 的話,其實這個技術也可以用在 Linux 上,只是沒有 Boot Camp 提供的驅動程式而已,可是我的 Boot Camp 過期了,所以只能用第三方的 rEFItrEFInd 製作開機選單,讓它們來取代 Mac OSX 製作的 EFI (正確地說是 EFI 磁區裡的相關檔案)。

圖片來源 (當時忘記拍照)

rEFIt 是一個很老的軟體,目前已經不再維護,而 rEFInd 是它的延伸作品,不僅近年還有更新,功能也比較多,故當然優先選擇 rEFInd。可是問題又來了,rEFInd 的安裝腳本不支援 Mac OSX 10.4 Tiger (參考討論串),手動安裝實在太複雜,所以我還是安裝了 rEFIt,完全沒有任何問題。之後插入 Linux Live USB 碟並重開機,選單中就會出現 Legacy OS 的磁碟圖示,進入 Live Linux 系統後可以做些簡單的試用,若滿意就可選擇安裝在硬碟中。由於安裝過程非常直覺,在此就不贅述了,記得結束後回到 Mac OSX,編輯 rEFIt 的組態檔 ( /etc/efi/refit/refit.conf ),將 "default_selection L" 前的註解符號 # 去掉,這樣就可以讓 rEFIt 選單以 Linux 為預設值,開機後看到選單,直接按 Return / Enter 鍵就能啟動 Linux 了 (參考資料)。


Linux 單系統安裝

相較於雙系統的安裝,Linux 單系統確實比較複雜,但可以省下 Mac OSX 浪費的 25~30 GB 空間,對於小儲存碟來說還是值得的。由於某個原因 (我下一篇文章會說),我在安裝完前一段介紹的雙系統後,決定將這台 MacBook 的儲存碟升級為 SSD [3],故我要從一個空白磁碟開始,重新安裝系統並用它開機。上述兩句不起眼的話聽起來很笨,但請記得這是一台 Mac,沒有 BIOS,而空白磁碟又沒有 EFI 磁區,且 32 位元的 Linux Mint 安裝檔不支援 EFI 開機 [4],上一段的雙系統至少還有 Mac OSX 可以安裝 rEFIt,現在什麼都沒有,該怎麼辦?

這一部份參考了網友 AstroFloyd 的兩篇網誌,我會融合兩篇文章的重點並附上文章來源。

1. 製作修改版開機 USB 碟 (參考資料):首先下載 ISO 2 USB EFI Booter for Mac,解壓縮後取出 bootIA32.efi 檔案備用 [5]。再來,找出一個閒置的 USB 碟,大小比 Linux 的映像檔 (*.iso) 大就好,把它整塊格式化成 FAT32 的檔案格式,之後依序在內建立兩個資料夾,結構為 efi/boot/,比如說如果 USB 碟 "unknown" 掛載在 /mnt/ 之下,那這兩個資料夾的路徑就是 /mnt/unknown/efi/boot/。最後,將 bootIA32.efi 檔放入 boot 資料夾,並改名為 boot.efi;將 Linux 的安裝映像檔也放入 boot 資料夾,並改名為 boot.iso,這樣的改版 USB 碟即可用以 EFI 開機。開機後按 Option 鍵不再一片白,會看到 "EFI Boot" 的選項,點擊後即可啟動 Live USB 的 Linux。


2. 使用 rEFInd 自製 EFI 開機選單 (參考資料):如果發現上一步做完能用 Linux 開機就喜孜孜地開始安裝,你會發現裝完還是不能開機,因為沒有 EFI 開機選單,開機後電腦找不到你安裝的系統,所以這時候我們要用 Live Linux 做一些準備工作再開始安裝。首先啟動 GParted (程式選單 Administration > GParted),這個軟體是開源的硬碟分割工具,我們要用它建立磁碟的第一個主開機磁區 (Primary Partition),容量大小為 50 ~ 200 MB (Mac OSX 建立的 EFI 磁區有 200 MB,但根本不需要那麼大)、名稱為 ESI、檔案格式為 FAT32。如果喜歡用命令列也可以像參考資料的作者使用 parted 指令,不過我是能不用命令列就不用 (懶)。

分割 EFI 磁區示範圖片 (來源網站)

分割好了之後啟動瀏覽器,到 rEFInd 官網 "Getting rEFInd from Sourceforge" 下載 rEFInd 的 zip 檔,之後解壓縮備用。請記住現在我們使用的是 Live 系統,下載的檔案都存在記憶體裡,重開機之後就都沒了,所以隨便放沒關係。現在於 /boot/ 目錄下建立一個自訂的 efi 資料夾,比如說 temp-efi (避免與原系統內建 efi 資料夾的搞混),再將 EFI 磁區掛載在其下面,使用的指令為:

sudo mount /dev/sda1 /boot/temp-efi

注意:1. mount 需要管理者權限,不過 Live 系統不用打密碼;2. sda1 是我的 EFI 磁區編號,請在 GParted 裡看清楚編號。掛載好了之後,在 rEFInd 的資料夾裡找到安裝腳本 "refind-install" 並在終端機內執行,忽略安裝時看到的警示訊息 (比如說 32 位元的 EFI 電腦很稀有啦之類的屁話),安裝結束後就會發現 EFI 磁區內多了 EFI/refind/ 兩個資料夾 (完整路徑為 /boot/temp-efi/EFI/refind/),以及裏面的一堆檔案。修改 refind 檔案夾的名稱為 boot,以及裏面的 refind_ia32.efi 檔案名稱也修改為 boot.efi (發現了嗎?跟上一步自製安裝碟的目錄一樣,此例 EFI 檔案的完整路徑為 /boot/temp-efi/EFI/boot/boot.efi),如此準備工作完成了,關機並移除改造版的 Linux liveUSB。


現在插入一般的 Linux liveUSB 並開機,rEFInd 將會給出選單以進入 Live Linux 系統,之後就可以安裝 Linux 了!請記住千萬不要格式化第一個磁區 (此例為 /dev/sda1),其他的分區就按照一般安裝 Linux 的基本操作就可以了 [6]。

以上是我安裝 Linux Mint 的詳細步驟,我看到 AstroFloyd (參考資料的作者) 遇到很多問題,但我都沒遇到,或許是安裝的 Linux 發行版不同而導致 (呵呵,我才不會裝 Arch Linux 去累自己),總之給各位做個參考。下一篇文章中,我會介紹我對系統做了哪些調教,以及裝了哪些好用的工具軟體,下次見~


2006 CoreDuo MacBook 老機重生系列:
2006 Core Duo MacBook 老機重生 1 (前言)
2006 Core Duo MacBook 老機重生 2 (安裝篇)
2006 Core Duo MacBook 老機重生 3 (調教篇)

附註
1. 當然,套件管理系統的虛擬化是目前的趨勢之一,像是 FlatpakSnap,都標榜其軟體包可以在所有 Linux 發行版上運行,但實作後的缺點也很明顯:為了這一層虛擬環境 (runtime),軟體包會變得巨大。我沒試過 Snap (參考資料),但依我的使用經驗,每個 Flatpak 軟體包的體積都要超過 2 GB,對於小型的軟體 (小於 10 MB) 來說是原有大小的數百倍,是的你沒有看錯,我是智商稅繳不夠才去用這種東西?還是儘量用原生的軟體包吧!
2. macOS Catalina 中系統跟個人資料完全分成兩個磁區,再用 Volume group 及 firmlink 技術將其串聯在一起,讓用戶根本發現不出其中的改變,對細節有興趣可以看少數派的文章 "当 Mac 升级到 Catalina 时,苹果在硬盘里施了点魔法"。
3. 對於一台十多歲的老電腦,買高價的 SSD 實在有點蠢,反正是備用機,所以我只買了小容量 (120 GB) 的 SSD,大概就幾百塊台幣 ....
4. 如果支援 EFI 開機,比如 64 位元的 Linux Mint 安裝檔 (*.iso),理論上可以像 Mac OSX 一樣直接開機,並從零製作 EFI 磁區,但我沒試過。
5. 如果是 64 位元的機器就使用 bootX64.efi,但如我文中所說,理論上支援 EFI 開機的 64 位元 Linux Mint 是不用折騰修改版開機碟的。
6. 照片中可以看出我將系統檔案 (掛載於根目錄 /) 及個人檔案 (掛載於 /home) 分開成兩個磁區,這是因為過去 Linux 要升級系統時必須格式化整個磁區,這樣做就不會傷到自己的個人資料,只是會浪費一些空間給沒用到的系統磁區。不過這種作法漸漸沒有必要了,因為最近的 Linux Mint (例如 19.1) 已經支援 In-plane upgrade,能夠像 macOS 一樣直接升級系統 (如下圖),但發行版及桌面環境不可變,所以若要從 MATE 換 Cinnamon 還是得用以前的升級方法。


沒有留言:

張貼留言