嘗試在 Debian 和 Ubuntu 上安裝 Cutefish 可愛魚
CutefishOS
https://en.cutefishos.com/
CutefishOS · GitHub (kgithub.com)

Cutefish是一個(gè)可愛好看的新 Linux 發(fā)行版,當(dāng)前最新版本為 0.8beta 。這是一個(gè)基于 Debian 的發(fā)行版,從其鏡像源配置就可以明顯地看出來(lái)。它和 Debian 的關(guān)系看起來(lái)就像 Linux Mint 和 Ubuntu 的關(guān)系。
?CutefishOS 雖然基于 Debian ,但是只提供 AMD64 體系結(jié)構(gòu)的官方支持。如果你的設(shè)備恰好不是 x86 的(比如 ARM 或 MIPS),那么你不能使用 CutefishOS 來(lái)體驗(yàn) Cutefish 桌面環(huán)境;反之如果你恰好使用 AMD64 體系結(jié)構(gòu)的 Debian bullseye ,那么你可以心安理得地使用 CutefishOS 的軟件源,這在后面會(huì)再次提到。
CutefishOS 官方在其
github 項(xiàng)目
https://github.com/cutefishos
CutefishOS · GitHub (kgithub.com)

所有倉(cāng)庫(kù)里都提供了構(gòu)建 deb 包所需的配置文件,我們可以輕松地使用 dpkg-buildpackage 來(lái)構(gòu)建其二進(jìn)制軟件包。
我在 Debian12 bookworm
和 Ubuntu 22.04?及以上進(jìn)行了測(cè)試,都是可以正常編譯通過的;在 Debian10 和 Ubuntu20.04 都出現(xiàn)了一些問題,主要是 Qt 版本太低導(dǎo)致的。在 Debian11 上, mips64el (龍芯)和 aarch64 (樹莓派)也都是好的。另外在 Loongarch64 上,你可以選擇在 Loongnix20 上編譯,雖然并沒有測(cè)試過(沒有設(shè)備);至于 mips64el 的 Loongnix20 ,已經(jīng)測(cè)試過 Qt 版本過低(和 Debian10 的情況一致)。
由于這是一個(gè)非常年輕的桌面環(huán)境,只完成了最基本的桌面功能,對(duì)于一些復(fù)雜的配置并不支持,所以暫時(shí)只建議嘗鮮,不太建議日常使用(不過你也可以在每次倉(cāng)庫(kù)出現(xiàn)新的 commit 時(shí)重新構(gòu)建追新)。
使用官方源安裝
如果你恰好使用 AMD64 體系結(jié)構(gòu)的 Debian bookworm
,那么官方源是可以使用的。
這個(gè)部分并沒有被充分測(cè)試(并沒有可供測(cè)試的機(jī)器),特別是在bookworm
以上版本中,所以只作為一個(gè)可行的思路。
添加鏡像源和密鑰
只需要將其添加到你的 /etc/apt/sources.list 中:
deb http://packages.cutefishos.com
bookworm
main
然后添加 cutefishos 的 gpg key 即可,這里給出鏈接:
http://packages.cutefishos.com/key/cutefishos.gpg.key
http://packages.cutefishos.com/key/cutefishos.gpg.key
更新包緩存并安裝
$ sudo apt-get update$ sudo apt-get install cutefish
源碼編譯安裝
正篇開始,這里默認(rèn)你會(huì)使用 git 和 apt 包管理器。
配置網(wǎng)絡(luò)
如果你的網(wǎng)絡(luò)狀態(tài)不佳,那么可能需要借助一些工具。在瀏覽器,你可以通過 SwitchyOmega 來(lái)管理你的網(wǎng)絡(luò)連接;而對(duì)于 git ,你可以考慮設(shè)置?HTTP_PROXY
?或?HTTPS_PROXY
?環(huán)境變量,這里給出一個(gè)示例,注意這個(gè)設(shè)置是臨時(shí)的:
export HTTPS_PROXY=http://127.0.0.1:7890
需要編譯的包
在 CutefishOS 的
項(xiàng)目倉(cāng)庫(kù)列表
https://kgithub.com/orgs/cutefishos/repositories
,可以看到所有的軟件包倉(cāng)庫(kù),其中大部分都是需要我們編譯的,這里列表如下:
statusbar
https://kgithub.com/cutefishos/statusbarterminal
https://kgithub.com/cutefishos/terminalupdator
https://kgithub.com/cutefishos/updatorfishui
https://kgithub.com/cutefishos/fishuilibcutefish
https://kgithub.com/cutefishos/libcutefishscreenshot
https://kgithub.com/cutefishos/screenshotscreenlocker
https://kgithub.com/cutefishos/screenlockersettings
https://kgithub.com/cutefishos/settingscore
https://kgithub.com/cutefishos/corelauncher
https://kgithub.com/cutefishos/launchericons
https://kgithub.com/cutefishos/iconsdaemon
https://kgithub.com/cutefishos/daemonfilemanager
https://kgithub.com/cutefishos/filemanagerkwin-plugins
https://kgithub.com/cutefishos/kwin-pluginsdock
https://kgithub.com/cutefishos/docksddm-theme
https://kgithub.com/cutefishos/sddm-themedebinstaller
https://kgithub.com/cutefishos/debinstallertexteditor
https://kgithub.com/cutefishos/texteditorappmotor
https://kgithub.com/cutefishos/appmotorqt-plugins
https://kgithub.com/cutefishos/qt-pluginsgtk-themes
https://kgithub.com/cutefishos/gtk-themescursor-themes
https://github.com/cutefishos/cursor-themescalculator
https://kgithub.com/cutefishos/calculatorvideoplayer
https://kgithub.com/cutefishos/videoplayercalamares
https://kgithub.com/cutefishos/calamaresplymouth-theme
https://kgithub.com/cutefishos/plymouth-themewallpapers
https://kgithub.com/cutefishos/wallpapers
以上組件的編譯過程全部都是一樣的,所以下面將以 core 為例。
準(zhǔn)備必要的編譯工具
對(duì)于 Debian ,需要安裝?build-essential
?和?devscripts
?兩個(gè)軟件包:
$ sudo apt-get install build-essential devscripts
對(duì)于 Ubuntu ,除了上面的兩個(gè)包,還需要安裝?equivs
?:
$ sudo apt-get install equivs
build-essential
在 Debian 和 Ubuntu 上,該包包含了 libc6-dev 、 gcc 、 g++ 、 make 、 dpkg-dev 等編譯 deb 包所必須的軟件包。不過不包含 cmake 、 pkg-config 等同樣常用的工具。
devscripts
正如其包名所示的,它包含了一些用于輔助進(jìn)行軟件包構(gòu)建的腳本。之后需要用到的?mk-build-deps
?命令就出自該軟件包。
mk-build-deps
?是一個(gè)輔助安裝編譯依賴的腳本,它讀取 debian/control 并安裝其中列出的編譯依賴。它并不會(huì)直接安裝這些依賴包,因?yàn)橹苯影惭b會(huì)導(dǎo)致它們被標(biāo)記為手動(dòng)安裝,編譯完成以后無(wú)法方便地卸載(畢竟只在編譯時(shí)需要,軟件包運(yùn)行時(shí)大概率不需要它們),而是生成一個(gè)引用這些編譯依賴包的名為?*-build-deps
?空軟件包并安裝。這樣做的結(jié)果是所有編譯依賴包被標(biāo)記為自動(dòng)安裝,只要卸載這個(gè)?*-build-deps
?,其他軟件包通過?apt-get autoremove
?就可以方便地卸載,還給我們一個(gè)干凈的系統(tǒng)環(huán)境。
equivs
在 Debian 下,這個(gè)軟件包被 devscripts 依賴,但是清楚為啥, Ubuntu 的 devscripts 并沒有依賴這個(gè)包并導(dǎo)致了后面的工作出錯(cuò),所以我們只好手動(dòng)安裝之。
以 core 為例
以 core 為例,編譯 deb 包,其他包的過程與此相同。
克隆軟件倉(cāng)庫(kù)
我們克隆該倉(cāng)庫(kù),?--depth=1
?的作用是只克隆最近一次 commit ,這樣需要拉取的數(shù)據(jù)不會(huì)過多??寺⊥瓿珊筮M(jìn)入到克隆的目錄,此時(shí)目錄名為?core
?。
git clone --depth=1 https://kgithub.com/cutefishos/core.git cd core
安裝編譯依賴包
通過前面介紹過的?mk-build-deps
?來(lái)完成依賴包的安裝。?--install
?選項(xiàng)的涵義是生成軟件包后安裝,?--remove
?的涵義是安裝軟件包后自動(dòng)卸載,?--root-cmd sudo
?的涵義是提權(quán)使用?sudo
?命令。但是不知道是不是我理解錯(cuò)了(但是 man 是這么寫的呀),安裝生成的軟件包后并沒有自動(dòng)卸載,需要手動(dòng)卸載?*-build-deps
?。
$ mk-build-deps --install --remove --root-cmd sudo
編譯軟件包
使用?dpkg-buildpackage
?來(lái)自動(dòng)編譯和構(gòu)建,?-b
?的涵義是只生成二進(jìn)制包:
$ dpkg-buildpackage -b -uc -us
如果出現(xiàn)了奇怪的編譯錯(cuò)誤,可以試著關(guān)閉多線程:
$ dpkg-buildpackage -b -uc -us -J1
之前出現(xiàn)了奇怪的鏈接錯(cuò)誤,在 Debian12?穩(wěn)定復(fù)現(xiàn),不知道原理,也不知道為何關(guān)閉多線程就正常了。 Debian sid 沒發(fā)現(xiàn)報(bào)這個(gè)錯(cuò)。
在構(gòu)建完成后,你應(yīng)該在上級(jí)目錄看到多出來(lái)類似如下的四個(gè)文件,將文件名中的 mips64el 替換成你自己的體系結(jié)構(gòu)如 amd64 或 arm64 應(yīng)該就是你得到的文件的名稱:
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 ,另外兩個(gè)可以忽略。我們通常只需要保留第一個(gè)即可,其他東西包括克隆下來(lái)的代碼都可以刪除了。
卸載編譯依賴
對(duì)于編譯 core ,你可以通過下面的命令來(lái)卸載編譯依賴:
$ sudo apt-get remove cutefish-core-build-deps
$ sudo apt-get autoremove
如果你編譯了所有軟件包,希望卸載全部依賴,首先參考下面的命令搜索所有?mk-build-deps
?生成的軟件包名:
$ apt-cache search --names-only "^.*?-build-deps$"
檢查確認(rèn)包名后卸載他們:
$ sudo apt-get remove <package_name>
$ sudo apt-get autoremove
安裝軟件包
由于你不清楚他們之間的依賴關(guān)系,我不推薦你逐個(gè)安裝他們,所以將所有生成的軟件包一起安裝:
$ sudo apt-get install ./xxx1.deb ./xxx2.deb ./xxx3.deb ...
或者將他們放到一個(gè)目錄中然后一起安裝:
$ sudo apt-get install ./*.deb
注意如果安裝 cutefish-sddm-theme 時(shí)提示配置文件是選擇打包者提供的版本還是已經(jīng)存在的版本時(shí),請(qǐng)選擇打包者提供的版本,這樣你的 sddm 會(huì)被設(shè)置成 Cutefish 的主題。
自動(dòng)化的編譯腳本
我為了方便自己使用,編寫了自動(dòng)化的編譯腳本。這個(gè)相對(duì)比較自動(dòng)化,會(huì)從 github 逐個(gè)拉取需要構(gòu)建的倉(cāng)庫(kù)并構(gòu)建軟件包,構(gòu)建完成后記錄已經(jīng)編譯的包并清理工作區(qū)。因此,如果編譯出現(xiàn)錯(cuò)誤,你可以解決錯(cuò)誤后重新運(yùn)行腳本,腳本會(huì)從上次出錯(cuò)的軟件包開始繼續(xù)構(gòu)建。對(duì)于需要單線程構(gòu)建的情況,也有?--noparallel
?選項(xiàng)實(shí)現(xiàn),具體可以查看腳本的源碼:
https://kgithub.com/weilinfox/miscfiles/blob/master/build_script/cutefish_desktop.sh
https://kgithub.com/weilinfox/miscfiles/blob/master/build_script/cutefish_desktop.sh
使用方法:
$ mkdir cutefish
$ cd cutefish
$ wget https://raw.githubusercontent.com/weilinfox/miscfiles/master/build_script/cutefish_desktop.sh
$ chmod +x cutefish_desktop.sh
$ ./cutefish_desktop.sh
默認(rèn)多線程以加快編譯速度,如果需要以單線程的方式:
$ ./cutefish_desktop.sh --noparallel
全部構(gòu)建完成后,可以在 debs 目錄中找到構(gòu)建的軟件包。
注意這個(gè)腳本并不會(huì)幫你安裝這些軟件包和卸載編譯依賴,請(qǐng)參考上面一節(jié)中的“卸載編譯依賴”和“安裝軟件包”手動(dòng)操作。
Loongnix20 for loongarch64 的特別說(shuō)明
在腳本的第 124 行有一行注釋:# package on Loongnix is too old to build cutefish
?。但如果你恰好是 loongarch64 版本的 Loongnix20 ,興許你可以嘗試一下編譯。請(qǐng)取消第 125-127 行的注釋(去除行首的?#
),然后運(yùn)行腳本。
從 Cutefish 啟動(dòng)
Cutefish 建議從 SDDM 啟動(dòng)。在 SDDM 的啟動(dòng)界面,選擇 Cutefish 作為啟動(dòng)的桌面環(huán)境,直接登陸即可。
不出意外,你會(huì)得到如下圖的桌面環(huán)境。Enjoy it!

by SDUST weilinfox
參考
在 Debian 和 Ubuntu 上安裝 Cutefish 可愛魚 - 易學(xué)編程網(wǎng) (yixuebiancheng.com)