本博客也算是一季一更了。最近既没玩宝可梦、《识质存在》,也没研究AI,没赶任何潮流。但是,我仍觉得我折腾的东西有用。
今天写的头两篇文章,主要给我那个自举(bootstrap)gentoo linux的教程起到一个承上启下的作用。

前言

本文适合人群

本文适合哪些读者呢?说实话,本文的目的也就是收集整理网上资料,桌面版Linux圈子应该也算挺冷门的,就怕原作者哪天删了跑路,所以我要把人家的劳动成果复读一遍,最后给我自己看的。不指望任何读者读懂。

Linux发行版

我最推荐新手读者使用Ubuntu系统作为个人电脑的操作系统,因为它安装方便,生态环境也不错,支持的软件也多。这个对于新手来说,只需要一键安装就可以了。也有主播使用Mint,我没用过,不太好评价,听说使用体验跟Windows最接近。
Debian也可以,比Ubuntu轻盈,安装难度高一些,灵活性也高一些。

Arch Linux

Arch Linux属于邪教。它的安装难度比除了某些发行版以外的都要大。但是如果熟练的话,重装一次系统还是非常快的。
你可以从安装(使用archinstall除外)中,学到如何手动给硬盘分区,如何给一个空硬盘安装软件,最后设置引导区使你新装的系统能够启动。

archinstall

我并不觉得使用一键脚本的人应该受歧视,也不觉得这个行为应该在玩家圈子中感到羞愧。你安装Linux肯定有自己的用途,可能当黑客,可能开发软件,可能运维一些服务,你确实不应该把时间浪费在重装系统上。反倒嘲笑别人,秀优越的人倒是应该在歧视链底端。

灵活性

你使用其他发行版的一键安装(不使用专家模式),或者arch linux的archinstall,势必会使系统丧失它的灵活性。你安装出来的系统,也会变得更加臃肿。我手动安装的Arch Linux,它的空间就占得很小,你用了archinstall,就会比我大好几个G。

还有个问题就是何谓“灵活性”?我就举个例子,这个btrfs很方便吧?它的子卷特性可以让我在一个分区塞好几个发行版,甚至其他类型的类UNIX系统。并且我随时可以恢复到以前的快照。
最不济的情况,就是我需要重装某个系统了。重装Ubuntu和国产的那些傻瓜Linux系统,就是要比重装Arch Linux麻烦!
在btrfs分区重装或插入Debian系统就必须得使用专家模式。
所以说,有些事情确实只有高手才能做到。

Gentoo

Gentoo属于极端派的邪教。除了手动分区和chroot以外,最极品的就是它的所有软件,包括内核,都是从源代码编译的。你可以从官网https://gentoo.orgGithub上,顺藤摸瓜找到它整个操作系统的源代码。
理论上,只要你下载并安装了它的包管理器Portage,就可以安装它的整个系统。但是,我在Arch Linux和Ubuntu上试下来,安装portage后再安装gentoo系统是不行的,因为缺少各种gentoo独有的软件,手动补上以后,直接bash编译失败。根本无法完成自举。
只有使用stage3或安装完毕的gentoo系统,才能编译它自身。

当然,并非上面所有软件都可以从源代码编译。就比如Nvidia驱动,WPS办公软件,这些本来就不开源。我觉得还有我长毛象需要的elasticsearch 8.4.1,这个我只能从官网下载二进制,然后手动复制/移动安装它,这样才能恰到好处地使用文档里地全部功能。

Gentoo的兼容性是最好的。但是我不推荐任何人使用它,除非你想学习操作系统是如何编写、编译的。

不推荐服务器使用Gentoo

尽管官方帮你编译了二进制内核和二进制软件包,但是大部分软件依然需要自行编译。服务器上的系统资源是非常宝贵的,用来给长毛象升级就已经很要命了,更不用说编译内核了。
它的优点就是,如果哪个开源软件出现了漏洞,那么它将是第一个发布补丁的发行版,毕竟全都是用户在编译,它只需要在自己软件仓库里面加上原作者发布代码的链接就行了。这个优点掩盖不了它的缺点。

不推荐个人电脑使用Gentoo

gentoo是滚动更新,一星期不上线,你再更新就会滚挂。平时上学上班就已经够忙了,你还得给它天天签到,这跟网游没区别。

LFS

站在Linux歧视链顶端的就是Linux From Scrach。有个梗图说的就是“你是不会使用LFS才使用Gentoo的”。
它的兼容性和灵活性都很低,因为没有包管理器,也仅有作者在测试各个软件是否兼容。
最极端且有包管理器的Linux发行版也只有Gentoo了。

折腾这些的意义

说实话,找不到它的意义。也许可以让你每天上班摸鱼时,显示器上显示emerge运行的过程,显得你像个黑客?

在VPS上安装gentoo

【热烈推荐】 最简单的办法

使用一键脚本。地址在这https://github.com/bin456789/reinstall (假如原作者跑路,我fork了
你必须要注意的是,首先你要确定你的VPS是否支持重装(应该都支持的)、救援盘是否好用(vultr的救援盘就不太好用)、有没有VNC?
如果没有上述功能,建议不要在这家VPS尝试安装gentoo。如果你不能熟练使用上述功能,请不要继续阅读本文。

有时,这个脚本运行完以后可能无效。

删除,并复制安装新的系统文件 【最难方法】

这个办法亲测可用(原作者被删或访问错误,请访问档案馆

这个办法我点评一下:它最充分地发挥了stage3文件的各种妙用,这个社区成员写的教程,比官方文档更有教育意义!
以防链接和档案消失,以及读者看不懂,我再复述一遍它的操作。

  1. 在根目录新建一个文件夹/gentoo
  2. 下载stage3并完整地解压到/gentoo目录下。这个目录相应的程序带有属性(软链接)和所有权,可以视为一个Linux的系统目录。
  3. 把部分内核拷入新系统
  4. 使用容器化技术。首先通过挂载系统设备的方式,将本机内存中的内核借给新系统使用。再用chroot更改根目录,使软链接和动态链接库指向新系统。这个原理跟docker是一样的,也是基本上所有操作系统的安装方式。
  5. 将本机的根目录挂载到新系统里
  6. 进入gentoo容器后,用批处理命令把那旧系统里的文件全给删除,再复制新系统的文件进去(出来)。
  7. 再chroot进容器化的根目录(不能退出)。安装ssh,并进行测试。
  8. 登录VPS官网,进入该机器的面板,进行硬重启(软重启会卡死,可能会导致必须把VPS退订!)

讲一下我的踩坑经验:

  • 一定要使用你相应CPU架构的openrc的stage3文件!
  • 推荐使用至少4核8G的VPS安装Gentoo!
  • 推荐在VPS上使用二进制包,emerge在tmux中进行!
  • 整个安装过程中,建议不要断开ssh连接!
  • 在虚拟机中也可以复现此操作,但是请通过ssh连接进行,因为通过其他内核使用gentoo键盘会非常卡顿!
  • 安装成功后首先要做的,就是删除旧系统的内核,安装新内核(包括initramfs和grub)!别看它没有自己的内核也能运行,实际上,安装systemd必定会出错!旧内核删除后,可以断线,但是千万不要重启机器(千万不要断电)!否则你只能通过救援盘继续安装了!
  • gentoo内核安装成功后,才可以安装systemd!否则一律使用openrc!(以后编译stage3也一样!)

总结

本文没有涉及硬盘分区,大头主要在chroot上。练习分区最好的发行版就是Arch Linux,gentoo主要是用来给你学习工具链和容器化的,以及如何编译那些可以让电脑显示出文字的软件(就比如ncurses)。