这期笔记继续安装Gentoo,上期我们已经到了可以进入新环境了,这意味着就是将原来的安装CD或其它介质改为硬盘上安装系统了,话不多说,马上开始!

恢复安装

由于我已经中断了安装,对于已经可以进入新环境的用户来说,这个可以通过恢复安装来继续安装Gentoo。

首先先挂载根分区:

然后复制DNS信息:

如果之前已经复制了,它会提示你是否覆盖文件,回车确定即可。

挂载必要的文件系统:

进入新环境:

以后的安装过程中被中断了,都要通过以上的这些命令来恢复安装。

配置Portage

从网站安装ebuild 数据库快照

接下来,是安装主 ebuild 版本库 (repository) 快照.这个快照包含一组文件,包括通知Portage中有关可用软件的标题(用于安装),系统管理员可以选择哪些配置文件,软件包或 profile 特定新闻 (news) 项目等。

这将从Gentoo的一个镜像中获取最新的快照(每天发布)并将其安装到系统上:

注:在这个操作中,emerge-webrsync可能会报找不到/usr/portage/位置。这是预期内的并且不用担心——这个工具将会创建这个位置。

稍等一会儿就好了。

可选:更新Gentoo eBuild存储库

如果需要最新更新的包(1小时以内),可以使用emerge --sync,这个命令将使用rsync协议来更新 Gentoo ebuild 数据库(之前通过emerge-webrsync获得的)到最新状态。

emerge --sync

在慢速的终端上,比如一些framebuffer或者串口控制台,建议使用--quiet选项来加速这个进程:

emerge --sync --quiet

阅读新闻条目

当同步Portage ebuild 数据库到系统时,Portage 可能警告用户类似于下面的信息:

新闻条目的创建是为了提供一个通信媒介,通过rsycn树来推送重要的消息给用户。要管理它们,使用eselect news。eselect应用程序是一个Gentoo应用程序,它允许一个通用的管理界面完成对系统的变更和操作。在这里,要用到eselect的news模块。

然后阅读新闻条目:

带着purge新闻可以删除,一旦他们已经被阅读,并将不再重读。

有关新闻阅读器的更多信息可通过其手册页面获得:

man news.eselect

选择正确的配置文件

 配置文件是任何一个Gentoo系统的积木。它不仅指定USECFLAGS和其它重要变量的默认值,还会锁定系统的包版本范围。这些设定全是由Gentoo的Portage开发者们来维护。

使用eselect,你能看到当前系统正在使用什么配置文件,现在来使用profile模块:

注:命令的输出只是一个例子,并随着时间的推移而发展。

注:配置文件升级不能掉以轻心。在选择初始配置文件时,请确保使用对应于同一版本作为第3阶段最初使用的(例如13.0)。每个新的配置文件版本都是通过一个包含迁移说明的新闻项目来宣布的。在切换到新的配置文件之前,一定要阅读并遵循它们。

可以从刚才的新闻条目第9条看出初始配置文件版本已经更新到17.1了,并且推荐选有desktop那项,但是我选择第16项,因为从上图可以看到17.0版本的被“*”(星号)所引用,说明目前文件版本为17.0。

更新@world集合

在这一点上,如果选择了新的系统profile,则更新系统的 @world set 是明智的,以便可以为新profile构建系统。

提示:如果选择了桌面环境配置文件,则此过程可能大大增加安装过程所需的时间量。 时间紧迫的人可以通过这个“经验法则”工作: 配置文件名称越短,系统的特定属性越少@world set; @world设置的特定性越低,系统将需要的软件包越少。 换一种说法:

选择default/linux/amd64/13.0需要更新的软件包非常少,而选择default/linux/amd64/13.0/desktop/gnome/systemd由于init系统正在从OpenRC转换为Systemd,并且GNOME桌面环境框架将被安装,因此需要安装许多包。

一共编译175个软件,这个需要的时间很长,这将花费你时间相当于差不多一个下午了(这个时间可能随着以后新版本而变长),耐心等待吧!!!

终于编译完了,我昨晚不小心在由于电脑卡死原因导致重新之前的步骤,搞的我到现在才编译完,这已经是第二天的早上了。

早上好,现在继续安装Gentoo。

配置USE变量

USE是Gentoo为用户提供的最具威力的变量之一,很多程序通过它可以选择编译或者不编译某些可选的支持。

大多数的发行版会使用尽可能多的支持特性编译它们的软件包,这既增加了软件的大小也减慢了启动时间,而这些还没有算上可能会涉及到的大量依赖性问题。Gentoo可以让你自己定义软件编译的选项,而这正是USE要做的事。

现在先检查下当前活动的USE标记:(“|”是Shift+“\”键敲击出的符号)

可以在系统的/usr/portage/profiles/use.desc中找到可用的USE标记的完整描述:

使用键来滚动,并且可以按q退出。

我们可以设置一个支持DVD、ALSA,以及CD录制的基于KDE系统的USE设置:

把上图的红框部分添加进去,然后Ctrl+X,按Y并且回车即可完成保存并退出。

时区

为系统选择时区:

假设要选择的时区是Asia/Shanghai

echo "Asia/Shanghai" > /etc/timezone

上面我选的时区是guangdong,这个可以随便设置,尽量向“北上广深”设置。

接下来,重新配置sys-libs/timezone-data包,将会为我们基于/etc/timezone条目更新/etc/localtime文件。/etc/localtime文件用于让系统的C类库知道系统在什么时区:

配置时区

系统应该支持的地区应该在/etc/locale.gen中提到:

按照上面的红框部分添加进去,然后Ctrl+X,按Y然后回车即可完成保存并退出。

注:我们强烈建议使用至少一个UTF-8格式的地区设置,因为有些应用程序可能需要它。

下一步是运行locale-gen。它将生成/etc/locale.gen文件中指定的所有地区:

要验证所选择的地区当前可用,运行locale -a:

等完成后,我们就来设定系统级别的区域设置:

额,我现在才发现zh-CN.UTF-8不见了,按道理是应该出现了,但是却检测不到无法进行应用,所以我就不在这里纠结了,我们依然选择第5项,如果真的选择了zh-CN.utf8,可能后面的步骤会出现乱码,为了不让乱码,所以我们选择第5项。

如果上面无法应用zh-CN.utf8,这个还可以通过人工编辑/etc/env.d/02locale文件来完成:

LANG="zh_CN.UTF-8"

确保设定了一个地区,不然系统会在后面安装中的内核编译和部署其他软件时显示警告和错误。

现在重新加载环境:

安装源码

Linux内核是所有发行版的核心,它位于用户程序和系统硬件之间,Gentoo提供给用户一些可选的内核源码。

针对基于amd64-系统的Gentoo,建议使用包 sys-kernel/gentoo-sources

选择一个合适的内核并使用emerge来安装它:

下载速度真快,很快就好了,下载完毕后将会自动安装。

这将在/usr/src/中安装Linux内核源码,并有一个符号连接叫作linux将指向安装的内核源码:

现在是时候来配置和编译内核源代码了。有两种方法:

1.手动配置并生成内核。

2.一个叫作genkernel的工具用来自动化生成并安装Linux内核。

我们在这里解释做为默认选择的手动配置,它是优化环境的最好方式。

手动配置内核经常被Linux用户认为是最困难的步骤。事实并非如此——但是当您手动配置几次内核之后,你就不会再觉得它有多么难了。

无论如何,有一件事是真实的:当手动配置内核时,了解(硬件)系统是至关重要的。

但对于新手来说,建议先选用genkernel来自动配置内核,慢慢熟练后再尝试手动配置内核,不得不说的是手动配置内核具有定制性。

配置内核

不得不说作者我也曾经倒在配置内核这一块,有时候连自动配置内核也无法配置,经原因查明是我之前的步骤有些出入,但最终解决了,现在是没有什么问题的。

所以本作者也是想避免工作量太多,所以使用genkernel,因为有时候手动配置内核可能少配置一些关键的东西。

如果手动配置看起来太恐怖,建议使用genkernel。它将自动配置并编译内核。

介绍:genkernel配置内核的工作原理几乎和安装CD配置的内核完全一致。也就是说当使用genkernel建立内核,系统通常将在引导时检测全部硬件,就像安装CD所做的。因为genkernel不需要任何手动内核配置,它对于那些不能轻松的编译他们自动内核的用户来说是一个理想的解决方案。

首先emerge sys-kernel/genkernel这个ebuild:

接下来,编辑/etc/fstab文件来使包含有第二个值为/boot/的那条的第一个值指向到正确的设备:

根据红框添加上去,配置/boot挂载点,然后Ctrl+X,按Y再按回车即可完成保存并退出。

注:如果引导分区不是使用ext2或ext3作为文件系统,它可能需要使用genkernel --menuconfig all来手动配置内核,并在内核中添加对这个具体文件系统的支持(比如:不是作为一个模块)。LVM2用户可能要作为参数来添加--lvm

现在,运行genkernel all来编译内核源码。值得注意的是,使用genkernel编译一个内核将支持几乎全部的硬件,这将使编译过程需要一阵子来完成!

如果出现以下情况,请看下面的解决方案(我不保证是不是终极解决方案):(如果genkernel命令可用,没有任何问题的话,请愉快地跳过此过程。)

上面说genkernel进入子程序无法找到该命令,这说明应该是genkernel启动失败,我们重新启动genkernel看看。

上图说明两个红框内的问题是需要解决的,否则genkernel将无法使用相关命令。

同样再次重新输入命令将会出现以下:

以下是我在wiki中找到的解决方案,先尝试下:

添加上面的红框里的内容后请按Ctrl+X,然后按Y再回车键即可完成保存并退出。

然后etc-update:

然后按-3,再按回车键覆盖:

结果还是行不通啊!!!有一个论坛这样说:使用自动配置内核有可能自动配置到不想要的东西,这也可能会产生相关的影响!

还有一种命令可以尝试下(我目前认为的最终解决方案):

输入u接受,再次emerge这个genkernel:

等待安装完成,这需要一会儿时间。

终于下载完毕了,纠结了我比较久的时间,终于成功下载并安装了genkernel,这个关于genkernel的相关问题的解决过程到此可以结束了!

 开始编译

Tips:如果你的genkernel也是上面的问题的,应该是genkernel无法正常下载,所以命令无法使用,不妨尝试下我上面的方法吧!

我就是倒在了这个genkernel无法编译的问题上,还好已经解决并且重新下载安装了,否则只能手动编译了,但是手动编译的话如果没有后面的initramfs文件,这可能也会导致系统无法正常启动,这个文件同样需要genkernel来下载的。

由于我不采用手动编译,所以可以参考下:https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Kernel,这里详细介绍手动编译内核的步骤。

(注:在内核参数选择的过程中,输入/可以进行搜索,空格进行选择和反选,按两下esc进行返回上一级目录,方向键左右可以切换到save和load,分别进行内核配置文件的保存和导入。默认保存为.config(我建议使用默认文件名,),保存的时候可以输入文件名,以备下次编译内核导入,省时省力。内核配置文件保存目录在/usr/src/linux下。)

困扰了我许久的genkernel问题终于解决了,当然是到了激动人心的时候了,现在开始正式编译内核了。

(注:如果引导分区不是使用ext2或ext3作为文件系统,它可能需要使用genkernel --menuconfig all来手动配置内核,并在内核中添加对这个具体文件系统的支持(比如:不是作为一个模块)。LVM2用户可能要作为参数来添加--lvm

重新输入非常熟悉的genkernel all:

编译过程十分漫长,请耐心等待,先去睡一晚觉正,明天再来查看编译结果。(其实我也不知道究竟需要多少时间,还是那句话,耐心等待吧!)

(用时只是一个小时多点)

我看到了内核已经编译完成,但也出现了相关的警告,一般情况下出现警告请选择无视,虽有风险但一般是没有什么问题,只有出现ERROR才要必须处理的问题。

Tips:内核可以重复编译,不会影响安装过程的。(你也可以通过genkernel --menuconfig all来手动配置,同样具有定制性,不过这是半自动编译方法。)

一旦genkernel完成,将创建一个内核、全部的模块和初始化内存文件(initramfs)。我们将在文档后面配置引导器的时候使用这个内核和initrd。记下内核和initrd名字作为编辑引导器配置文件的信息。initrd将在后执行硬件检测之后、“真实”系统启动之前立即启动。

到了这里配置内核环节就已经结束,剩下的安装步骤请见下一期的笔记!

本文将会同步到公众号qq596044192中,有兴趣的可以关注一下:

2018-09-03