本篇文章將驗證「最小」的Linux發行版之一是否能作為日常桌面系統使用,包括設定中文輸入法的方法。
1. 簡介Alpine Linux#
Alpine Linux是一個社群驅動,獨立開發的Linux發行版。預設系統體積很小,跟Tiny Core Linux有得比。Alpine Linux主打給嵌入式裝置使用,例如路由器、防火牆、伺服器。系統跑起來最低只要128MB RAM,系統小到甚至可以在RAM執行,不用安裝到磁碟。目前支援x86、ARM、LoongArch、PPC64、RISC-V、S390等架構。提供32位元x86映像檔,適合老電腦使用。
誰說Linux一定要用GNU coreutils呢?不是GNU/Linux的Linux發行版,這不就來了嗎。為了追求精簡與最小化系統,Alpine Linux不使用臃腫的GNU libc (glibc) ,而是較為安全乾淨的musl libc。也因此系統工具並非常見的GNU coreutils,那太bloated啦,Alpine Linux是直接用更精簡的BusyBox替代。Busybox是位於/usr/bin/busybox的單一執行檔,用這個程式加上符號連結,就可以實現許多常用的ls、cp、mv、rm、vi指令。
由於追求最小化,Alpine Linux預設的shell是ash,使用doas而非sudo來提升使用者權限。init是OpenRC,不使用Systemd。因為系統十分精簡,預設服務很少,開機非常的快。Alpine Linux套件管理員為APK (Alpine Package Keeper),本身設計十分簡潔,回應非常迅速,安裝軟體輸入套件名稱後直接安裝,完全不廢話。
因為小體積、啟動快速的特性,Alpine Linux被應用在iOS的iSH Shell裡面當作基本系統,甚至還有讓舊款手機變身成Linux手機的衍生發行版postmarketOS。在容器應用方面,Alpine Linux作為Docker基礎映像只有3MB大小,遠比Debian小得多,因此不少開發者會選擇Alpine Linux作為基底部署應用。
那麼,將Alpine Linux當作桌面系統使用可行嗎?是可以。不過硬體需求就會大大增加了。Alpine Linux在headless模式執行之下128MB RAM都能跑,若要跑圖形界面至少也要512MB RAM吧。如果你還要用Firefox瀏覽器等主流程式的話,則是建議要有2GB以上RAM了。
大部分的GNU/Linux程式都是依賴glibc的C函式庫進行開發的,具體來說程式執行的時候會去找系統的libc.so連結檔,否則根本不能開啟。可是Alpine Linux使用比較少見的musl libc作為C函式庫,導致多語種顯示可能會出問題,執行部份依賴glibc程式會出現錯誤,頂多只有glibc相容層能用。或者得用Flatpak補充軟體,因為容器有打包自己的glibc依賴項,不會因Alpine Linux宿主機缺乏glibc而不能用。
最致命的是,如果你使用Nvidia顯示卡基本上就GG了,因為Alpine Linux使用musl libc,不能使用針對glibc編譯的閉源Nvidia驅動,只能使用效能差的開源驅動Nouveau。因此要使用Alpine Linux當桌面系統的話,顯示卡最好是使用Linux核心的開源驅動支援的Intel或AMD顯示卡。
Alpine Linux套件之間為保持簡潔,依賴性比較低。譬如安裝XFCE桌面的時候,apk只會拉最基本的桌面套件下來,其他小元件不會自動安裝,不會塞給你一大包依賴項目。所以安裝某些東西會分成很多個指令,需要自行安裝個別套件補全,無法提供開箱即用的體驗。你需要多查閱Alpine Linux Wiki瞭解特定服務的安裝方式。
我個人覺得Alpine Linux的取向比較類似OpenBSD,都是主打精簡最小化系統並追求安全性,能夠部署在各種資源受限的環境使用。但因為Alpine Linux使用Linux Kernel,所以硬體相容性比OpenBSD好很多。若跟Void Linux和Arch Linux比較,在KISS原則之外,Alpine Linux又更加強調系統最小化。
儘管如此,Alpine Linux同樣可以安裝成一個含有中文圖形環境的桌面作業系統。Alpine Linux開發者提供了一系列便捷指令稿方便我們安裝系統。
2. 測試環境#
- 主機板:ASUS K31CD-K
- CPU:Intel i5-7400
- GPU:Intel UHD 630
- GPU:Nvidia GTX1050Ti
3. 下載Alpine Linux的ISO#
Alpine Linux是固定更新的發行版,分為Stable與Edge兩個更新頻道。Stable每6個月釋出一個版本,使用linux-lts核心,通常帶有版本號碼。若要使用滾動更新幫忙測試系統就下載Edge版。
到Alpine Linux官網下載x86_64架構的ISO,選擇Standard版本。Alpine Linux預設是沒有圖形界面的,只有安裝指令稿。
下載映像檔之後,檢查檔案完整性防止檔案毀損。
使用Ventoy製作開機隨身碟。
將隨身碟插入電腦。電腦重開機,連按Delete鍵,進入UEFI。
將Secure Boot關閉,選取Disabled。
接著將開機順序調整為「USB隨身碟」優先開機。
4. 安裝Alpine Linux基本系統#
開機只會有tty畫面,輸入
root登入系統。輸入
setup-alpine執行安裝系統指令稿,此安裝系統指令稿不會安裝任何圖形界面,僅安裝可開機的最小系統。建議安裝系統的時候使用以太有線網路。接著會問一系列問題,參考選項:
# 鍵盤配置
Select keyboard layout: [us]
Select variant: [us]
# 主機名稱
Enter system hostname: [alpine]
# 啟用網路界面,通常是以太網路
Which one do you want to initialize? [eth0]
# 使用DHCP
Ip address for eth0? [dhcp]
Do you want to do any manual netowrk configuration? [n]
# 設定Root密碼
New password:
# 設定時區為臺灣臺北
Which timezone are you in? [Asia/Taipei]
#是否設定代理伺服器
HTTP/FTP proxy URL? [none]
# 啟用community套件庫
Enter mirror number: [c]
# 讓Alpine自動抓取速度最快的套件庫站點
Enter mirror number: [f]
# 新增一般使用者帳號"user"和設定密碼
Setup a user? [user]
New password for user:
# 跳過新增SSH金鑰
Enter ssh key or URL for ivon: [none]
# 安裝OpenSSH伺服器並在開機後讓OpenRC自動啟動
Which ssh server? [openssh]
# 輸入硬碟代號
Which disk would you like to use? [sda]
# 選取sys將系統安裝至硬碟,會自動設定SWAP file與安裝GRUB
How would you like to use it? [sys]
WARNING: Erase the above disk(s) and continue? [y]安裝完成之後輸入
poweroff關機,退出ISO。安裝後開機進入系統,登入
root帳號。你可以用
ip addr指令確認電腦的區域IP位址。Alpine Linux不使用NetworkManager,而是透過在/etc/network/interfaces定義連線規則來連上網路。更新APK套件庫。
apk update
apk upgrade- 安裝vim作為文字編輯器
apk add vim- Alpine Linux預設使用doas來提升使用者權限,當然你也可以自行安裝sudo。要讓一般使用者執行doas指令的話,編輯這個設定檔:
vim /etc/doas.conf- 設定如下,允許所有wheel群組的使用者執行doas指令(在執行
setup-alpine指令稿的時候應該就幫你加好了),並且自動記住密碼5分鐘
permit persist :wheel- 切換到一般使用者
su user5. 安裝顯示卡驅動#
因為Alpine Linux使用musl libc,Nvidia顯示卡的閉源驅動不用想了,根本裝不了,只有開源的Nouveau驅動能用,含在mesa-dri-gallium裡面。
Intel顯示卡,包括內顯,手動安裝以下套件,以支援OpenGL、Vulkan、VA-API。
doas apk add mesa-dri-gallium mesa-va-gallium mesa-vulkan-intel intel-media-driver linux-firmware-i9156. 安裝桌面環境#
Alpine Linux開發者製作了一系列指令稿方便我們設定圖形環境,包括GNOME、KDE Plasma、XFCE桌面等。要讓系統比較精簡一點就裝XFCE桌面。
- 用Alpine Linux內建的指令稿安裝X伺服器,Wayland的話你要手動安裝
doas setup-xorg-base- 執行以下指令,輸入
xfce,安裝XFCE桌面與LightDM顯示管理器
doas setup-desktop因為Alpine Linux把套件拆得很細,單單安裝
xfce4這個套件並不會將所有XFCE桌面組件都拉下來,你可能需要手動搜尋apk search xfce再自行補完需要的套件。安裝音訊伺服器PipeWire,相容PulseAudio。還有XFCE的PulseAudio音量控制面板。
doas apk add pipewire pipewire-pulse pipewire-alsa pipewire-jack wireplumber
doas apk add xfce4-pulseaudio-plugin- 使用
rc-update指令,將桌面環境所需的服務加入開機自動啟動。setup-desktop指令稿可能已經幫你自動設定好了不過最好還是手動檢查一下。PipeWire會在登入XFCE之後自動啟動所以不用設定。
doas rc-update add dbus
doas rc-update add udev
doas rc-update add lightdm- 生成常用的使用者目錄
doas apk add xdg-user-dirs
LANG=zh_TW.UTF-8 xdg-user-dirs-update輸入
doas reboot重開機,應該就會出現登入界面。若登入XFCE之後沒有音量控制面板,在工作列按下右鍵 → 面板,手動新增PulseAudio面板。
7. 設定中文化與Fcitx5中文輸入法#
- 安裝Noto中文字體與musl locales
doas apk add font-noto-cjk musl-locales- 用vim編輯
/etc/environment,新增以下環境變數,設定系統語言為中文
LANG=zh_TW.UTF-8
LC_CTYPE="zh_TW.UTF-8"
LC_NUMERIC="zh_TW.UTF-8"
LC_TIME="zh_TW.UTF-8"
LC_COLLATE="zh_TW.UTF-8"
LC_MONETARY="zh_TW.UTF-8"
LC_MESSAGES="zh_TW.UTF-8"
LC_PAPER="zh_TW.UTF-8"
LC_NAME="zh_TW.UTF-8"
LC_ADDRESS="zh_TW.UTF-8"
LC_TELEPHONE="zh_TW.UTF-8"
LC_MEASUREMENT="zh_TW.UTF-8"
LC_IDENTIFICATION="zh_TW.UTF-8"
LC_ALL=Alpine Linux很多軟體的多語言翻譯檔是另外打包的,通常會以
-lang結尾,例如gimp-lang,需要手動安裝。不裝的話就只會有英文界面。安裝Fcitx5與注音輸入法
doas apk add fcitx5 fcitx5-configtool fcitx5-chinese-addon fcitx5-chewing fcitx5-gtk fcitx5-qt- 編輯
/etc/environment,新增以下環境變數,啟用Fcitx5輸入法
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=ibus- 使用XDG Autostart讓Fcitx5在登入桌面後自動啟動
mkdir -p ~/.config/autostart/
cp /usr/share/applications/org.fcitx.Fcitx5.desktop ~/.config/autostart/- 重開機,點選系統匣的鍵盤圖示啟用注音鍵盤。
8. 用APK安裝軟體的方式#
Alpine Linux使用APK (Alpine Linux) 作為套件管理器。套件庫網址定義在/etc/apk/repositories
更新套件庫快取
doas apk update升級套件
doas apk upgrade搜尋套件
doas apk search firefox安裝套件
doas apk add firefox安裝套件但不使用本機快取,強制重新整理,下載最新版
doas apk add --no-cache firefox移除套件
doas apk del firefox如果遇到強制依賴glibc的軟體,通常是閉源軟體,嘗試使用glibc相容層。
或者用Flatpak補充軟體,因為容器有打包自己的glibc依賴項,不會因Alpine Linux宿主機缺乏glibc而不能用。
doas apk add flatpak9. 用OpenRC管理系統服務#
Alpine Linux使用OpenRC管理系統服務。開機後透過讀取/etc/inittab,設定runlevel,決定啟動哪些服務。
對OpenRC來說,所有服務都是一個類似Sysvinit的指令稿,放在/etc/init.d/。理論上你可以之間執行裡面的指令稿來啟動服務,例如/etc/init.d/sshd start,不過用OpenRC提供的指令管理更好。
列出所有服務
doas rc-update show將服務加入到開機自動啟動,便是將該服務加入到default的runlevel,在/etc/runlevels/default/建立符號連結。
doas rc-update add sshd刪除開機自動啟動,便是將/etc/runlevels/default/的服務移除。
doas rc-update del sshd可以手動啟動與停止服務
doas rc-service sshd stop
doas rc-service sshd start
doas rc-service sshd status

