山里的娃 發表於 2022-3-12 22:21:00

在 Debian 和 Ubuntu 上安装 Cutefish 可爱鱼

<ul>
<li>版权声明:原创文章,未经博主允许不得转载</li>
</ul>
<p>CutefishOS 是一个可爱好看的新 Linux 发行版,当前最新版本为 0.8beta 。这是一个基于 Debian 的发行版,从其镜像源配置就可以明显地看出来。它和 Debian 的关系看起来就像 Linux Mint 和 Ubuntu 的关系。</p>
<p>为啥要写这一篇呢,因为 CutefishOS 虽然基于 Debian ,但是只提供 AMD64 体系结构的官方支持。如果你的设备恰好不是 x86 的(比如 ARM 或 MIPS),那么你不能使用 CutefishOS 来体验 Cutefish 桌面环境;反之如果你恰好使用 AMD64 体系结构的 Debian bullseye ,那么你可以心安理得地使用 CutefishOS 的软件源,这在后面会再次提到。</p>
<p>CutefishOS 官方在其 github 项目的所有仓库里都提供了构建 deb 包所需的配置文件,我们可以轻松地使用 dpkg-buildpackage 来构建其二进制软件包。</p>
<p>我在 Debian11 bullseye 和 Ubuntu 21.10 及以上进行了测试,都是可以正常编译通过的;在 Debian10 和 Ubuntu20.04 都出现了一些问题,主要是 Qt 版本太低导致的。在 Debian11 上, mips64el (龙芯)和 aarch64 (树莓派)也都是好的。另外在 Loongarch64 上,你可以选择在 Loongnix20 上编译,虽然并没有测试过(没有设备);至于 mips64el 的 Loongnix20 ,已经测试过 Qt 版本过低(和 Debian10 的情况一致)。</p>
<p>由于这是一个非常年轻的桌面环境,只完成了最基本的桌面功能,对于一些复杂的配置并不支持,所以暂时只建议尝鲜,不太建议日常使用(不过你也可以在每次仓库出现新的 commit 时重新构建追新)。</p>
<h2 id="使用官方源安装">使用官方源安装</h2>
<p>如果你恰好使用 AMD64 体系结构的 Debian bullseye ,那么官方源是可以使用的。</p>
<p>这个部分并没有被充分测试(并没有可供测试的机器),特别是在 bullseye 以上版本中,所以只作为一个可行的思路。</p>
<h3 id="添加镜像源和密钥">添加镜像源和密钥</h3>
<p>只需要将其添加到你的 /etc/apt/sources.list 中:</p>
<pre><code class="language-shell">deb http://packages.cutefishos.com bullseye main
</code></pre>
<p>然后添加 cutefishos 的 gpg key 即可,这里给出链接: http://packages.cutefishos.com/key/cutefishos.gpg.key</p>
<h3 id="更新包缓存并安装">更新包缓存并安装</h3>
<pre><code class="language-shell">$ sudo apt-get update
$ sudo apt-get install cutefish
</code></pre>
<h2 id="源码编译安装">源码编译安装</h2>
<p>正篇开始,这里默认你会使用 git 和 apt 包管理器。</p>
<h3 id="配置网络">配置网络</h3>
<p>如果你的网络状态不佳,那么可能需要借助一些工具。在浏览器,你可以通过 xxxxxxx-xxxxx 来管理你的网络连接;而对于 git ,你可以考虑设置 <code>HTTP_PROXY</code> 或 <code>HTTPS_PROXY</code> 环境变量,这里给出一个示例,注意这个设置是临时的:</p>
<pre><code class="language-shell">export HTTPS_PROXY=http://127.0.0.1:7890
</code></pre>
<h3 id="需要编译的包">需要编译的包</h3>
<p>在 CutefishOS 的项目仓库列表,可以看到所有的软件包仓库,其中大部分都是需要我们编译的,这里列表如下:</p>
<ul>
<li>statusbar</li>
<li>terminal</li>
<li>updator</li>
<li>fishui</li>
<li>libcutefish</li>
<li>screenshot</li>
<li>screenlocker</li>
<li>settings</li>
<li>core</li>
<li>launcher</li>
<li>icons</li>
<li>daemon</li>
<li>filemanager</li>
<li>kwin-plugins</li>
<li>dock</li>
<li>sddm-theme</li>
<li>debinstaller</li>
<li>texteditor</li>
<li>appmotor</li>
<li>qt-plugins</li>
<li>gtk-themes</li>
<li>cursor-themes</li>
<li>calculator</li>
<li>videoplayer</li>
<li>calamares</li>
<li>plymouth-theme</li>
<li>wallpapers</li>
</ul>
<p>他们的编译过程全部都是一样的,所以下面将以 core 为例。</p>
<h3 id="准备必要的编译工具">准备必要的编译工具</h3>
<p>对于 Debian ,需要安装 <code>build-essential</code> 和 <code>devscripts</code> 两个软件包:</p>
<pre><code class="language-shell">$ sudo apt-get install build-essential devscripts
</code></pre>
<p>对于 Ubuntu ,除了上面的两个包,还需要安装 <code>equivs</code> :</p>
<pre><code class="language-shell">$ sudo apt-get install equivs
</code></pre>
<h4 id="build-essential">build-essential</h4>
<p>在 Debian 和 Ubuntu 上,该包包含了 libc6-dev 、 gcc 、 g++ 、 make 、 dpkg-dev 等编译 deb 包所必须的软件包。不过不包含 cmake 、 pkg-config 等同样常用的工具。</p>
<h4 id="devscripts">devscripts</h4>
<p>正如其包名所示的,它包含了一些用于辅助进行软件包构建的脚本。之后需要用到的 <code>mk-build-deps</code> 命令就出自该软件包。</p>
<p><code>mk-build-deps</code> 是一个辅助安装编译依赖的脚本,它读取 debian/control 并安装其中列出的编译依赖。它并不会直接安装这些依赖包,因为直接安装会导致它们被标记为手动安装,编译完成以后无法方便地卸载(毕竟只在编译时需要,软件包运行时大概率不需要它们),而是生成一个引用这些编译依赖包的名为 <code>*-build-deps</code> 空软件包并安装。这样做的结果是所有编译依赖包被标记为自动安装,只要卸载这个 <code>*-build-deps</code> ,其他软件包通过 <code>apt-get autoremove</code> 就可以方便地卸载,还给我们一个干净的系统环境。</p>
<h4 id="equivs">equivs</h4>
<p>在 Debian 下,这个软件包被 devscripts 依赖,但是清楚为啥, Ubuntu 的 devscripts 并没有依赖这个包并导致了后面的工作出错,所以我们只好手动安装之。</p>
<h3 id="以-core-为例">以 core 为例</h3>
<p>以 core 为例,编译 deb 包,其他包的过程与此相同。</p>
<h4 id="克隆软件仓库">克隆软件仓库</h4>
<p>我们克隆该仓库, <code>--depth=1</code> 的作用是只克隆最近一次 commit ,这样需要拉取的数据不会过多。克隆完成后进入到克隆的目录,此时目录名为 <code>core</code> 。</p>
<pre><code class="language-shell">$ git clone --depth=1 https://github.com/cutefishos/core.git
$ cd core
</code></pre>
<h4 id="安装编译依赖包">安装编译依赖包</h4>
<p>通过前面介绍过的 <code>mk-build-deps</code> 来完成依赖包的安装。 <code>--install</code> 选项的涵义是生成软件包后安装, <code>--remove</code> 的涵义是安装软件包后自动卸载, <code>--root-cmd sudo</code> 的涵义是提权使用 <code>sudo</code> 命令。但是不知道是不是我理解错了(但是 man 是这么写的呀),安装生成的软件包后并没有自动卸载,需要手动卸载 <code>*-build-deps</code> 。</p>
<pre><code class="language-shell">$ mk-build-deps --install --remove --root-cmd sudo
</code></pre>
<h4 id="编译软件包">编译软件包</h4>
<p>使用 <code>dpkg-buildpackage</code> 来自动编译和构建, <code>-b</code> 的涵义是只生成二进制包:</p>
<pre><code class="language-shell">$ dpkg-buildpackage -b -uc -us
</code></pre>
<p>如果出现了奇怪的编译错误,可以试着关闭多线程:</p>
<pre><code class="language-shell">$ dpkg-buildpackage -b -uc -us -J1
</code></pre>
<p>之前出现了奇怪的链接错误,在 Debian11 稳定复现,不知道原理,也不知道为啥关闭多线程就正常了。 Debian sid 没发现报这个错。</p>
<p>在构建完成后,你应该在上级目录看到多出来类似如下的四个文件,将文件名中的 mips64el 替换成你自己的体系结构如 amd64 或 arm64 应该就是你得到的文件的名称:</p>
<ul>
<li>cutefish-core_0.8_mips64el.deb</li>
<li>cutefish-core-dbgsym_0.8_mips64el.deb</li>
<li>cutefish-core_0.8_mips64el.changes</li>
<li>cutefish-core_0.8_mips64el.buildinfo</li>
</ul>
<p>其中 <code>cutefish-core_0.8_mips64el.deb</code> 是你需要的软件包, <code>cutefish-core-dbgsym_0.8_mips64el.deb</code> 是软件包的 debug symbol ,另外两个可以忽略。我们通常只需要保留第一个即可,其他东西包括克隆下来的代码都可以删除了。</p>
<h4 id="卸载编译依赖">卸载编译依赖</h4>
<p>对于编译 core ,你可以通过下面的命令来卸载编译依赖:</p>
<pre><code class="language-shell">$ sudo apt-get remove cutefish-core-build-deps
$ sudo apt-get autoremove
</code></pre>
<p>如果你编译了所有软件包,希望卸载全部依赖,首先参考下面的命令搜索所有 <code>mk-build-deps</code> 生成的软件包名:</p>
<pre><code class="language-shell">$ apt-cache search --names-only "^.*?-build-deps$"
</code></pre>
<p>检查确认包名后卸载他们:</p>
<pre><code class="language-shell">$ sudo apt-get remove &lt;package_name&gt;
$ sudo apt-get autoremove
</code></pre>
<h4 id="安装软件包">安装软件包</h4>
<p>由于你不清楚他们之间的依赖关系,我不推荐你逐个安装他们,所以将所有生成的软件包一起安装:</p>
<pre><code class="language-shell">$ sudo apt-get install ./xxx1.deb ./xxx2.deb ./xxx3.deb ...
</code></pre>
<p>或者将他们放到一个目录中然后一起安装:</p>
<pre><code class="language-shell">$ sudo apt-get install ./*.deb
</code></pre>
<p>注意如果安装 cutefish-sddm-theme 时提示配置文件是选择打包者提供的版本还是已经存在的版本时,请选择打包者提供的版本,这样你的 sddm 会被设置成 Cutefish 的主题。</p>
<h2 id="自动化的编译脚本">自动化的编译脚本</h2>
<p>我为了方便自己使用,编写了自动化的编译脚本。这个相对比较自动化,会从 github 逐个拉取需要构建的仓库并构建软件包,构建完成后记录已经编译的包并清理工作区。因此,如果编译出现错误,你可以解决错误后重新运行脚本,脚本会从上次出错的软件包开始继续构建。对于需要单线程构建的情况,也有 <code>--noparallel</code> 选项实现,具体可以查看脚本的源码:</p>
<p>https://github.com/weilinfox/miscfiles/blob/master/build_script/cutefish_desktop.sh</p>
<p>使用方法:</p>
<pre><code class="language-shell">$ 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
</code></pre>
<p>默认多线程以加快编译速度,如果需要以单线程的方式:</p>
<pre><code class="language-shell">$ ./cutefish_desktop.sh --noparallel
</code></pre>
<p>全部构建完成后,可以在 debs 目录中找到构建的软件包。</p>
<p>注意这个脚本并不会帮你安装这些软件包和卸载编译依赖,请参考上面一节中的“卸载编译依赖”和“安装软件包”手动操作。</p>
<h3 id="loongnix20-for-loongarch64-的特别说明">Loongnix20 for loongarch64 的特别说明</h3>
<p>在脚本的第 124 行有一行注释:<code># package on Loongnix is too old to build cutefish</code> 。但如果你恰好是 loongarch64 版本的 Loongnix20 ,兴许你可以尝试一下编译。请取消第 125-127 行的注释(去除行首的 <code>#</code>),然后运行脚本。</p>
<h2 id="从-cutefish-启动">从 Cutefish 启动</h2>
<p>Cutefish 建议从 SDDM 启动。在 SDDM 的启动界面,选择 Cutefish 作为启动的桌面环境,直接登陆即可。</p>
<p>不出意外,你会得到如下图的桌面环境。</p>
<p><img src="https://images.cnblogs.com/cnblogs_com/weilinfox/1638696/o_220312135058_Cutefish_desktop.png" alt="Cutefish" loading="lazy"></p>
<p>by SDUST weilinfox</p><br><br>
来源:https://www.cnblogs.com/weilinfox/p/15997787.html
頁: [1]
查看完整版本: 在 Debian 和 Ubuntu 上安装 Cutefish 可爱鱼