- 版權宣告:原創文章,未經博主允許不得轉載
CutefishOS 是一個可愛好看的新 Linux 發行版,當前最新版本為 0.8beta 。這是一個基於 Debian 的發行版,從其映象源配置就可以明顯地看出來。它和 Debian 的關係看起來就像 Linux Mint 和 Ubuntu 的關係。
為啥要寫這一篇呢,因為 CutefishOS 雖然基於 Debian ,但是隻提供 AMD64 體系結構的官方支援。如果你的裝置恰好不是 x86 的(比如 ARM 或 MIPS),那麼你不能使用 CutefishOS 來體驗 Cutefish 桌面環境;反之如果你恰好使用 AMD64 體系結構的 Debian bullseye ,那麼你可以心安理得地使用 CutefishOS 的軟體源,這在後面會再次提到。
CutefishOS 官方在其 github 專案的所有倉庫裡都提供了構建 deb 包所需的配置檔案,我們可以輕鬆地使用 dpkg-buildpackage 來構建其二進位制軟體包。
我在 Debian11 bullseye 和 Ubuntu 21.10 及以上進行了測試,都是可以正常編譯通過的;在 Debian10 和 Ubuntu20.04 都出現了一些問題,主要是 Qt 版本太低導致的。在 Debian11 上, mips64el (龍芯)和 aarch64 (樹莓派)也都是好的。另外在 Loongarch64 上,你可以選擇在 Loongnix20 上編譯,雖然並沒有測試過(沒有裝置);至於 mips64el 的 Loongnix20 ,已經測試過 Qt 版本過低(和 Debian10 的情況一致)。
由於這是一個非常年輕的桌面環境,只完成了最基本的桌面功能,對於一些複雜的配置並不支援,所以暫時只建議嚐鮮,不太建議日常使用(不過你也可以在每次倉庫出現新的 commit 時重新構建追新)。
使用官方源安裝
如果你恰好使用 AMD64 體系結構的 Debian bullseye ,那麼官方源是可以使用的。
這個部分並沒有被充分測試(並沒有可供測試的機器),特別是在 bullseye 以上版本中,所以只作為一個可行的思路。
新增映象源和金鑰
只需要將其新增到你的 /etc/apt/sources.list 中:
deb http://packages.cutefishos.com bullseye main
然後新增 cutefishos 的 gpg key 即可,這裡給出連結: http://packages.cutefishos.com/key/cutefishos.gpg.key
更新包快取並安裝
$ sudo apt-get update
$ sudo apt-get install cutefish
原始碼編譯安裝
正篇開始,這裡預設你會使用 git 和 apt 包管理器。
配置網路
如果你的網路狀態不佳,那麼可能需要藉助一些工具。在瀏覽器,你可以通過 SwitchyOmega 來管理你的網路連線;而對於 git ,你可以考慮設定 HTTP_PROXY
或 HTTPS_PROXY
環境變數,這裡給出一個示例,注意這個設定是臨時的:
export HTTPS_PROXY=http://127.0.0.1:7890
需要編譯的包
在 CutefishOS 的專案倉庫列表,可以看到所有的軟體包倉庫,其中大部分都是需要我們編譯的,這裡列表如下:
- statusbar
- terminal
- updator
- fishui
- libcutefish
- screenshot
- screenlocker
- settings
- core
- launcher
- icons
- daemon
- filemanager
- kwin-plugins
- dock
- sddm-theme
- debinstaller
- texteditor
- appmotor
- qt-plugins
- gtk-themes
- cursor-themes
- calculator
- videoplayer
- calamares
- plymouth-theme
- wallpapers
他們的編譯過程全部都是一樣的,所以下面將以 core 為例。
準備必要的編譯工具
對於 Debian ,需要安裝 build-essential
和 devscripts
兩個軟體包:
$ sudo apt-get install build-essential devscripts
對於 Ubuntu ,除了上面的兩個包,還需要安裝 equivs
:
$ sudo apt-get install equivs
build-essential
在 Debian 和 Ubuntu 上,該包包含了 libc6-dev 、 gcc 、 g++ 、 make 、 dpkg-dev 等編譯 deb 包所必須的軟體包。不過不包含 cmake 、 pkg-config 等同樣常用的工具。
devscripts
正如其包名所示的,它包含了一些用於輔助進行軟體包構建的指令碼。之後需要用到的 mk-build-deps
命令就出自該軟體包。
mk-build-deps
是一個輔助安裝編譯依賴的指令碼,它讀取 debian/control 並安裝其中列出的編譯依賴。它並不會直接安裝這些依賴包,因為直接安裝會導致它們被標記為手動安裝,編譯完成以後無法方便地解除安裝(畢竟只在編譯時需要,軟體包執行時大概率不需要它們),而是生成一個引用這些編譯依賴包的名為 *-build-deps
空軟體包並安裝。這樣做的結果是所有編譯依賴包被標記為自動安裝,只要解除安裝這個 *-build-deps
,其他軟體包通過 apt-get autoremove
就可以方便地解除安裝,還給我們一個乾淨的系統環境。
equivs
在 Debian 下,這個軟體包被 devscripts 依賴,但是清楚為啥, Ubuntu 的 devscripts 並沒有依賴這個包並導致了後面的工作出錯,所以我們只好手動安裝之。
以 core 為例
以 core 為例,編譯 deb 包,其他包的過程與此相同。
克隆軟體倉庫
我們克隆該倉庫, --depth=1
的作用是隻克隆最近一次 commit ,這樣需要拉取的資料不會過多。克隆完成後進入到克隆的目錄,此時目錄名為 core
。
$ git clone --depth=1 https://github.com/cutefishos/core.git
$ cd core
安裝編譯依賴包
通過前面介紹過的 mk-build-deps
來完成依賴包的安裝。 --install
選項的涵義是生成軟體包後安裝, --remove
的涵義是安裝軟體包後自動解除安裝, --root-cmd sudo
的涵義是提權使用 sudo
命令。但是不知道是不是我理解錯了(但是 man 是這麼寫的呀),安裝生成的軟體包後並沒有自動解除安裝,需要手動解除安裝 *-build-deps
。
$ mk-build-deps --install --remove --root-cmd sudo
編譯軟體包
使用 dpkg-buildpackage
來自動編譯和構建, -b
的涵義是隻生成二進位制包:
$ dpkg-buildpackage -b -uc -us
如果出現了奇怪的編譯錯誤,可以試著關閉多執行緒:
$ dpkg-buildpackage -b -uc -us -J1
之前出現了奇怪的連結錯誤,在 Debian11 穩定復現,不知道原理,也不知道為啥關閉多執行緒就正常了。 Debian sid 沒發現報這個錯。
在構建完成後,你應該在上級目錄看到多出來類似如下的四個檔案,將檔名中的 mips64el 替換成你自己的體系結構如 amd64 或 arm64 應該就是你得到的檔案的名稱:
- cutefish-core_0.8_mips64el.deb
- cutefish-core-dbgsym_0.8_mips64el.deb
- cutefish-core_0.8_mips64el.changes
- cutefish-core_0.8_mips64el.buildinfo
其中 cutefish-core_0.8_mips64el.deb
是你需要的軟體包, cutefish-core-dbgsym_0.8_mips64el.deb
是軟體包的 debug symbol ,另外兩個可以忽略。我們通常只需要保留第一個即可,其他東西包括克隆下來的程式碼都可以刪除了。
解除安裝編譯依賴
對於編譯 core ,你可以通過下面的命令來解除安裝編譯依賴:
$ sudo apt-get remove cutefish-core-build-deps
$ sudo apt-get autoremove
如果你編譯了所有軟體包,希望解除安裝全部依賴,首先參考下面的命令搜尋所有 mk-build-deps
生成的軟體包名:
$ apt-cache search --names-only "^.*?-build-deps$"
檢查確認包名後解除安裝他們:
$ sudo apt-get remove <package_name>
$ sudo apt-get autoremove
安裝軟體包
由於你不清楚他們之間的依賴關係,我不推薦你逐個安裝他們,所以將所有生成的軟體包一起安裝:
$ sudo apt-get install ./xxx1.deb ./xxx2.deb ./xxx3.deb ...
或者將他們放到一個目錄中然後一起安裝:
$ sudo apt-get install ./*.deb
注意如果安裝 cutefish-sddm-theme 時提示配置檔案是選擇打包者提供的版本還是已經存在的版本時,請選擇打包者提供的版本,這樣你的 sddm 會被設定成 Cutefish 的主題。
自動化的編譯指令碼
我為了方便自己使用,編寫了自動化的編譯指令碼。這個相對比較自動化,會從 github 逐個拉取需要構建的倉庫並構建軟體包,構建完成後記錄已經編譯的包並清理工作區。因此,如果編譯出現錯誤,你可以解決錯誤後重新執行指令碼,指令碼會從上次出錯的軟體包開始繼續構建。對於需要單執行緒構建的情況,也有 --noparallel
選項實現,具體可以檢視指令碼的原始碼:
https://github.com/weilinfox/miscfiles/blob/master/build_script/cutefish_desktop.sh
使用方法:
$ mkdir cutefish
$ cd cutefish
$ wget https://github.com/weilinfox/miscfiles/raw/master/build_script/cutefish_desktop.sh
$ chmod +x cutefish_desktop.sh
$ ./cutefish_desktop.sh
預設多執行緒以加快編譯速度,如果需要以單執行緒的方式:
$ ./cutefish_desktop.sh --noparallel
全部構建完成後,可以在 debs 目錄中找到構建的軟體包。
注意這個指令碼並不會幫你安裝這些軟體包和解除安裝編譯依賴,請參考上面一節中的“解除安裝編譯依賴”和“安裝軟體包”手動操作。
Loongnix20 for loongarch64 的特別說明
在指令碼的第 124 行有一行註釋:# package on Loongnix is too old to build cutefish
。但如果你恰好是 loongarch64 版本的 Loongnix20 ,興許你可以嘗試一下編譯。請取消第 125-127 行的註釋(去除行首的 #
),然後執行指令碼。
從 Cutefish 啟動
Cutefish 建議從 SDDM 啟動。在 SDDM 的啟動介面,選擇 Cutefish 作為啟動的桌面環境,直接登陸即可。
不出意外,你會得到如下圖的桌面環境。
by SDUST weilinfox