在 Debian 和 Ubuntu 上安裝 Cutefish 可愛魚

八衛門狸發表於2022-03-12
  • 版權宣告:原創文章,未經博主允許不得轉載

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_PROXYHTTPS_PROXY 環境變數,這裡給出一個示例,注意這個設定是臨時的:

export HTTPS_PROXY=http://127.0.0.1:7890

需要編譯的包

在 CutefishOS 的專案倉庫列表,可以看到所有的軟體包倉庫,其中大部分都是需要我們編譯的,這裡列表如下:

他們的編譯過程全部都是一樣的,所以下面將以 core 為例。

準備必要的編譯工具

對於 Debian ,需要安裝 build-essentialdevscripts 兩個軟體包:

$ 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 作為啟動的桌面環境,直接登陸即可。

不出意外,你會得到如下圖的桌面環境。

Cutefish

by SDUST weilinfox

相關文章