- 版權聲明:原創文章,未經博主允許不得轉載
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