关于标题

咳咳,其实应该延续上次的标题继续的,也罢,下次注意……这些内容像为了我将来更方便折腾特意留下的日志。

Gentoo 一次安装,一辈子都不需要重装

该观点的立足于——“Gentoo 系统发生灾难的时候,你仍然能够进入系统”。那么什么算是能够“进入 Gentoo 系统”呢?

  • 开机能够登陆 root(这是最好的结果);
  • 开机只能完成启动 initramfs 的加载,换句话说就是完成了内核启动,但是找不到 newroot(这说明文件系统出问题了,或者 grub, systemd-boot 等等 bootloader 出问题了,需要找如何引导进入 newroot );
  • 只能通过 chroot 进入 Gentoo 系统。

那么有些朋友就说,以上三种情况中,chroot 应该是通吃的,怎么可能无法解决呢。对,从理论上来说,chroot 是可以通吃一切 “Linux 系统不启动”。但是唯独 Gentoo 这种高度定制化的,会出问题,因为在每个人配置 Gentoo 之后,最常设置的就是 make.conf 文件,一旦配置了 CPU 型号,而通过它开始全系统构建以后,再通过其他的 LiveUSB ( LiveCD )进行 chroot 就不好使了。因为 Live 环境的系统是通用系统,无法针对你特定系统进行 chroot ,除非你的 Gentoo 的 CPU 优化部分开的是 native 而不是具体的 CPU 型号,那 chroot 还是可行的。还有,Gentoo 的 GCC 版本一般都会比其他发行版快,当然,有时候,Fedora 比我们 Gentoo 还快。

所以就以上情况而言,Gentoo 系统想要救回是没有难度的,关键在于你是否了解相关命令行操作。

那么,由此引申到其他发行版是否可行呢?完全没问题。Linux 系统的核心是内核,系统的构建还是依托 / 目录为基础的文件系统结构树,不论什么发行版,唯一的区别就是围绕这个文件系统结构树做文章,所以,了解了本质,对于一个 Linux 管理员而言,任何系统其实都能够救回,最起码,能够把文件系统中的重要文件保留下来(当然,那种直接全部删掉掉的就难了)。

举个两个“栗子”:

  • Debian 系的 Linux 发行版,有个叫做 debootstrap 的工具,利用这个工具,就能实现类似于 Archlinux 那样安装系统。同样的,Fedora,openSUSE,红帽这些发行版,基于 RPM 包管理的,也能利用不同的包管理实现类似的行为。
  • chroot 救系统,最简单的例子就是忘记 Linux 登陆 root 的密码。chroot 到系统中,passwd root 就搞定了。

所以当一个 Linuxer 开始使用 Linux 任何发行版的时候,尽量少思考“是否需要重做系统”,而是应该多考虑“我应该如何救系统”。所以说为什么一辈子不用重做系统,即使硬件坏了,也可以考虑方法数据救援。系统只是工具,数据才是第一;硬件只是耗材,数据价更高。

如何改变 Gentoo 的桌面环境

从前面我的视频和小文章大家可以了解到,Gentoo 这个发行版是基于源码的发行版,所有软件通过 USE 自定义编译安装到系统,编译和安装过程通过 portage 自动化完成,非常灵活。

前面的教程中我也提到一个叫做 profile 的文件,在安装的时候通过选择它来自定义下一步想要构建怎样的操作系统,那么,当一个用户使用了一段时间的 KDE 发现不想用了,想更换成其他的 DE ,怎么操作呢?

当然,绝对不是重装。

我们首先要明白,使用 Gentoo 的用户是怎样的群体?

  • 他们是极简主义者,不需要一个臃肿的系统,以往的认知是,系统给我什么,我就怎么用,学习怎么去用。Gentoo 反其道而行之,需求决定系统,我爱怎么用,你系统就应该是那个样子,系统就应该按照我的意识来运作和服务。
  • 他们大多数从 Ubuntu 或者 Archlinux 群体过来,Ubuntu 非常好,开箱即用;Archlinux 也非常优秀,原汁原味,更新迅速。但是,Gentoo 能针对一个软件做减法,简化的同时,通过本地编译优化提高性能

秉承这两个观点去解决 Gentoo 中的各种问题,就方便了。

以我本次折腾为例,之所以我一直保留两台计算机使用 Archlinux 的原因是因为上面能够稳定使用 Lightworks 剪辑视频。但是,最新的一期 Linux 头脑风暴,我改用 shotcut 完成了整个工作流,意味着我再也不用去用 Lightworks 这个价格昂贵的软件了,每年省下1000元人民币不香吗?

于是我首先将我的主力剪辑台式机从 Archlinux 更换 Gentoo。

P.S 这里需要插一句,为什么我一直在所有的 Archlinux 和 Gentoo 中使用 ZFS 文件系统,是因为我可以充分利用 ARC 和 L2ARC 的功能来提高剪辑视频的效率,降低回放卡顿,从而提升剪辑体验。因为 IO 提升了。

继续,我首先考虑将这次 Gentoo 系统使用 KDE 的桌面环境,一方面是 KDE 桌面系统更自由灵活;另一方面是 KDE 更漂亮。但是后来正常安装后,出现了一些 KDE 给我印象不好的地方,比方重启非常缓慢,偶尔还回报个 bug,通过自带的设置中心下载美化素材,加载缓慢(已经科学上网了),wayland 的表现并不令我满意等等。

于是我准备改成 Gnome ,在 Gentoo 中换桌面环境并不是像 Ubuntu 或者 Fedora 那么简单,直接安装就完事了。还记得吗?我们要做减法。

首先需要修改我们的 world 文件,位置在 /var/lib/portage/world ,这个文件记录了用户主动安装的软件,换句话说,整个系统的构建就是围绕这 world 来创建的。我首先将这个文件中不再需要的包删除,比方说 KDE 的软件和一些后续可以再安装,而目前保留可能造成构建麻烦的软件,比方说 htop,megasync,telegram-desktop,fcitx5 之类的,尽量减少到保留必须的就可以了,比方说内核,zfs 之类的。另外可以使用 emerge --deselect xxxx 命令清理 world 。

然后是使用 eselect profile 修改配置文件到我需要的 gnome 。

其次是修改或是删除暂时不需要的 USE 配置文件。这里需要强调一下,world 文件是我们手动安装的软件,这些软件用 USE 定义了其他附带安装的软件包和组,那么针对这一系列软件包和组,我们可以通过定义 /etc/portage/package.use/ 里面的文件控制需要什么,不需要什么。那么里面关于 KDE 的部分,我就需要精简,甚至是删除。

再次就是运行 emerge --sync; emerge --depclean 来清理系统。一般情况下,这个步骤会删除数百个包,耐心等它完成。

最后就是一些收尾工作,清理结束后,运行一些小工具来解决一些新老软件依赖的问题,我一般运行下面的命令一波清。

emerge -avj @preserved-rebuild; perl-cleaner --all; emerge --sync; emerge -avujDN --with-bdeps=y --autounmask-write=y @world

运行以后看看会不会有什么 Block 之类的包,或者循环依赖的包,手动删除下,后续再更新有时候就解决了;还有时候解决不了看看是不是 USE 没有清理干净,多试几次就会清理干净,更新没有任何报错就可以开始下面的操作了

这个时候我一般会来一次全系统重构,其实也不用,各位根据自己的时间和精力来统筹安排。命令如下:

emerge -ej --keep-going @world

目前我这里重构1300多个包,用时7~8小时,如果你的 CPU 足够优秀,内存足够大、足够快,这个重构的时间还能缩短。

这解决之后,我就开始清理我的 /home/<user>/ 下的各种配置文件,这些配置文件一般都在隐藏文件夹中,用 ls -al 查看,删除一些不需要的之后,我们就可以开始安装 gnome-base/gnome 了,后续就是我们的咖啡时间。

本次折腾总结:

使用 Gentoo 系统是可以净化人的心灵的,摒弃浮躁,静心分析,学习救系统,而不是什么都“从头再来”,不是什么事情都能从头再来的。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注