手册:Alpha/安装/安装stage3
选择 stage 文件
在支持的体系结构上,建议面向桌面(图形化)操作系统环境的用户使用名称中包含
desktop
的stage文件。这些文件包括 sys-devel/llvm 和 dev-lang/rust-bin 等包以及 USE 标志调整,这将大大缩短安装时间。stage文件 充当 Gentoo 安装的种子。stage文件是发布工程团队使用Catalyst制作的。stage 文件基于特定的 profiles,并包含一个几乎完整的系统。
在选择stage文件时,选择一个具有与所需系统类型对应的配置文件目标的文件非常重要。
虽然在建立安装后可以进行重大的配置文件更改,但切换需要大量的努力和考虑,并且超出了本安装手册的范围。切换 init 系统很困难,从
no-multilib
切换到 multilib
还需要广泛的 Gentoo 和低级工具链知识。大多数用户应该不需要使用“高级”tar包选项;它们用于一些不常见的和高级的软件或硬件配置。
OpenRC
OpenRC 是一个基于依赖的 init 系统(负责在内核启动后启动系统服务),OpenRC 与系统提供的 init 程序保持兼容,通常在 /sbin/init。它是 Gentoo 原创的 init 系统,但也部署在一些其它的 Linux 发行版和 BSD 系统。
默认情况下,OpenRC 不能替代 /sbin/init 文件 以及 100% 兼容 Gentoo init 脚本。这意味着可以在 Gentoo ebuild 仓库找到运行多个守护进程的解决方案。
systemd
systemd 是Linux 系统上一个现代化的 SysV 风格的 init 以及 rc 替代方案。大多数 Linux 发行版使用 systemd 作为主要的 init 系统。Gentoo 全面支持 systemd,并且已经达到预期。如果手册中似乎缺少 systemd 安装路径的内容,在寻求支持之前,请查看 systemd 文章。
multilib(32 位和 64 位)
不是所有架构都有 multilib 选项。许多只使用原生代码运行。Multilib 最常应用于amd64。
multilib 配置文件尽可能使用 64 位库,并且仅在兼容性绝对必要时才回退到 32 位版本。对于大多数安装来说,这是一个很好的选择,因为它为将来的自定义提供了很大的灵活性。
与
no-multilib
相比,使用 multilib
目标可以让以后切换换配置文件时更轻松no-multilib(纯64位)
刚开始使用 Gentoo 的读者,除非很有必要,否则不应该选择 no-multilib 包。把一个系统从
no-multilib
迁移到 multilib
需要极其丰富的使用Gentoo 的知识并熟悉底层的工具链。这一做法甚至可能使工具链开发者不寒而栗。因此不适合胆小的用户,而且也超出了本指南的范围。选择 no-multilib 压缩包可以在系统的基础上提供完整的 64 位操作系统环境(不包含 32 位的软件)。尽管技术上可行,但这样会使切换到 multilib
配置文件的工作变得很复杂。
下载 stage 文件
在下载 stage 文件 之前,当前目录应该设置为用于安装的挂载位置:
root #
cd /mnt/gentoo
设置日期和时间
Stage 存档通常使用 HTTPS 获取,这需要相对准确的系统时间。时钟偏差会阻止下载工作,如果在安装后将系统时间调整了相当多,则可能导致不可预知的错误。
可以使用 date 验证当前时间和日期:
root #
date
Mon Oct 3 13:16:22 PDT 2021
如果显示的日期/时间超时几分钟,则应使用下列方法之一进行精确更新。
自动
使用 NTP 来纠正时钟偏差通常比手动设置系统时钟更容易、更可靠。
chronyd,net-misc/chrony 的一部分,可以使用这个命令将系统时间更新为UTC:
root #
chronyd -q
没有正常运行的实时时钟 (RTC) 的系统必须在每次系统启动时同步系统时钟,此后必须定期同步。这对于具有 RTC 的系统也有好处,因为电池可能会发生故障,并且时钟偏差可能会累积。
标准 NTP 协议不包括身份验证,因此验证从网络获取的时间数据非常重要。
手动
当 NTP 访问不可用时,可以使用 date 手动设置系统时钟。
建议所有 Linux 系统使用 UTC 时间。稍后在安装期间将定义时区,这将修改时钟的显示为本地时间。
以下参数格式用于设置时间:MMDDhhmmYYYY
语法(Month(月),Day(天),hour(小时),minute(分钟) 和 Year(年))。
比如,设置时间到 2021 年 10 月 3 日的 13:16,示例:
root #
date 100313162021
图形化浏览器
可以使用图形化网页浏览器从主网站下载小节复制 stage 文件 URL。只需选择适当的选项卡,右键单击 stage 文件的链接,然后复制链接到剪贴板,然后将链接粘贴到命令行中的 wget 程序来下载 stage 文件:
root #
wget <PASTED_STAGE_FILE_URL>
命令行浏览器
更多传统的读者或是 Gentoo 的“老前辈”专门使用命令行工作,他们可能更喜欢使用非图形化菜单驱动的浏览器 links(www-client/links)。 要下载一个 stage,请像下面这样访问Gentoo镜像列表:
root #
links https://www.gentoo.org/downloads/mirrors/
要设置links使用一个HTTP代理,在传入URL上加一个-http-proxy
选项:
root #
links -http-proxy proxy.server.com:8080 https://www.gentoo.org/downloads/mirrors/
links之外还有一个 lynx(www-client/lynx)浏览器。和links 类似,它也是一个非图形化的浏览器,但不是自带的。
root #
lynx https://www.gentoo.org/downloads/mirrors/
如果需要定义一个代理,设置http_proxy和/或ftp_proxy变量:
root #
export http_proxy="http://proxy.server.com:port"
root #
export ftp_proxy="http://proxy.server.com:port"
在镜像列表中,选择一个附近镜像站。通常HTTP镜像站就足够了,但其他网络协议是可用的。请访问releases/alpha/autobuilds/ 。 那里将显示所有可用stage文件 (可能他们个别小组架构在命名的子目录中存储)。选择一个,然后按 d 下载。
stage 文件下载完成后,可以验证 stage 文件的完整性并验证其内容。感兴趣的人应该进行 下一节。
对验证 stage 文件不感兴趣的用户可以通过按 q 来关闭命令行浏览器,并且可以直接移步到 解包 stage 文件 部分。
验证
与最小安装CD一样,可以使用额外的下载来验证stage文件。 虽然这些步骤可以被跳过,但这些文件是为那些关心他们刚刚下载的文件合法性的用户提供的。额外的文件位于 mirrors 目录的根目录下。浏览到硬件体系结构和系统配置文件的相应位置,并下载关联的 .CONTENTS.gz、.DIGESTS 和 .sha256 文件。
root #
wget https://distfiles.gentoo.org/releases/
- .CONTENTS 包含stage压缩包内的所有文件的列表的文件。
- .DIGESTS 包含用不同的算法校验的stage文件的文件。
- .sha256 包含 stage 文件的 PGP 签名 SHA256 校验和。并非所有 stage 文件都提供此文件下载。
加密工具和实用程序(如 openssl、sha256sum 或 sha512sum)可用于将输出与 .DIGESTS 文件提供的校验和进行比较。
使用 openssl 验证 SHA512 校验值:
root #
openssl dgst -r -sha512 stage3-alpha-<release>-<init>.tar.xz
dgst
指示 openssl 命令使用消息摘要子命令,-r
以 coreutils 格式打印摘要输出,-sha512
选择 SHA512 算法进行摘要。
使用 openssl 验证 BLAKE2B512 校验值:
root #
openssl dgst -r -blake2b512 stage3-alpha-<release>-<init>.tar.xz
将校验和命令的输出与 .DIGESTS 文件所比较。配对的值需要与校验和命令的输出匹配,否则下载的文件已损坏,应丢弃并重新下载。
要验证来自关联的 .sha256 文件,使用 sha256sum 工具:
root #
sha256sum --check stage3-alpha-<release>-<init>.tar.xz.sha256
--check
选项指示 sha256sum 读取预期文件和相关哈希的列表,然后为每个校验正确的文件打印关联的 “OK” 或校验错误的文件打印 “FAILED” 。
就像 ISO 文件一样,tar.xz 文件的加密签名可以使用 gpg 进行验证,以确保没有对 tarball 执行篡改。
对于官方的 Gentoo live image,sec-keys/openpgp-keys-gentoo-release 软件包为自动发布提供了 PGP 签名密钥。必须先将密钥导入到用户的会话中,才能用于验证:
root #
gpg --import /usr/share/openpgp-keys/gentoo-release.asc
对于所有在 live 环境中提供 gpg 和 wget 的非官方 live 镜像,可以获取并导入包含 Gentoo 密钥的捆绑包:
root #
wget -O - https://qa-reports.gentoo.org/output/service-keys.gpg | gpg --import
验证 tarball 的签名以及关联的校验和文件(可选):
root #
gpg --verify stage3-alpha-<release>-<init>.tar.xz.asc
root #
gpg --verify stage3-alpha-<release>-<init>.tar.xz.DIGESTS
root #
gpg --verify stage3-alpha-<release>-<init>.tar.xz.sha256
如果验证成功,则 Good signature from(良好签名)将出现在先前命令的输出中。
OpenPGP 密钥的指纹用来对释出的安装媒介签名,在 发行的安装媒介签名页面 上可以找到 OpenPGP 密钥的指纹。
安装 stage 文件
下载完 stage 文件并且验证之后,可以使用 tar 提取 stage 文件:
root #
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
在提取之前,请验证选项:
x
extract(提取),指示 tar 提取存档的内容。p
preserve(保留),保留权限。V
verbose(详细),提供详细输出。f
file(文件),为 tar 提供输入存档的名称。--xattrs-include='*.*'
在存档中存储的所有命名空间中保留扩展属性。--numeric-owner 确保从 tarball
中提取的文件的用户和组 ID 与 Gentoo 的发布工程团队的预期相同(即使冒险的用户在安装过程中没有使用官方的 Gentoo live 环境)。
现在stage文件已经解压好了,下面我们继续配置编译选项。
配置编译选项
介绍
优化系统时,可以设置影响 Portage 的变量,Gentoo 官方支持包管理器。 所有这些变量可以设置为环境变量(使用export),但通过 export 设置不是永久的。
从技术上来说,可以通过 shell 的 配置文件或 rc 文件来导出变量,但这不是基本系统管理的最佳实践。
Portage 在运行时会读取 make.conf 文件,将根据文件中保存的值更改运行时行为。make.conf 可以认为是 Portage 的主要配置文件,因此请谨慎处理其内容。
所有可能的变量的注释列表可以在 /mnt/gentoo/usr/share/portage/config/make.conf.example中找到。额外的关于 make.conf 文档可以运行 man 5 make.conf 查找。
要成功安装 Gentoo,只需设置下面提到的变量。
启动编辑器(在本指南中,我们使用 nano)来更改我们将在下面讨论的优化变量。
root #
nano /mnt/gentoo/etc/portage/make.conf
从make.conf.example文件中可以明显看出文件的结构:注释行以 #
开头,其他行使用 VARIABLE="value"
语法定义变量。接下来选取其中的几个进行讨论。
CFLAGS 和 CXXFLAGS
CFLAGS 和 CXXFLAGS 变量分别定义了GCC C和C ++编译器的优化标志。 尽管这些标志一般在这里默认被定义过,但为了性能最大化,需要分别优化每个程序的这些配置。 原因是因为每个程序都不同。 但是,这是不可管理的,因此这些标志在 make.conf 文件中定义。
应该在make.conf中定义优化标志,这将使系统的响应速度最快。 不要在此变量中放置实验性的设置; 太多的优化可能会使程序产生问题(崩溃,甚至更糟,产生故障)。
Handbook不会解释所有可能的优化选项。 要了解它们,请阅读GNU在线手册或 gcc 信息页面 (info gcc)。make.conf.example 文件本身也包含了很多例子和信息; 不要忘了读它。
第一个设置是标志 -march=
和 -mtune=
,指定目标体系结构的名称。 可能用到的选项在make.conf.example文件中有描述(作为注释)。 一个常用的值是“native”,它告诉编译器选择当前系统体系结构(用户正在安装Gentoo时的系统)。
第二个是标志 -O
(即大写的字母O,而不是数字零),它指定了gcc优化级别标志。 可能用到级别的是s(对于大小最优化),0(零 - 无优化),1,2或甚至3等更多的优化选项(每个级别具有与前面相同的标志,加上一些额外选项)。 -O2
是建议的默认值。 -O3
在整个系统范围内使用时会导致问题,因此我们建议您坚持使用-O2
。
另一个普遍使用的优化标记是-pipe
(不同编译阶段通信使用管道而不是临时文件)。它对产生的代码没有任何影响,但是会使用更多的内存。在内存不多的系统里,gcc可能会被杀掉。如果是那样的话,就不要用这个标记。
使用 -fomit-frame-pointer
(它将不在寄存器里为不需要帧指针的函数保存帧指针)可能会在调试程序的时候造成严重后果!
在你定义 CFLAGS和CXXFLAGS的时候,你需要把这些优化标记都合并起来。stage文件里包含的你解压缩出来的默认值已经足够好了。下面这个例子仅仅是个例子:
# 为所有语言设置编译标志
COMMON_FLAGS="-mieee -pipe -O2 -mcpu=ev6"
# 为两个变量使用相同的设置
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
MAKEOPTS
通过使用 MAKEOPTS 可以定义在安装软件时,并行编译的数目。在 3.0.31 版本的 portage[1] 中,如果未定义该值, portage 默认的行为是,设置 MAKEOPTS 的值与 nproc 的返回线程数相同。
Further, as of Portage 3.0.53[2], if left undefined, Portage's default behavior is to set the MAKEOPTS load-average value to the same number of threads returned by nproc.
比较好的选择是从 CPU 线程数,或系统 RAM 总量除以 2 GiB 中选择是较小的那个值。
大量的 job 显著消耗内存。建议每个 job 至少有 2 GiB RAM (所以,
-j6
至少 需要 12 GiB)。避免内存溢出,根据可用内存降低 job 数量。当并行使用 emerge (
--jobs
),有效的 job 数量可以指数式加速(通过 emerge jobs 使 job 增加)。可以通过运行一个仅限于本地主机的 distcc 配置来解决这个问题,该配置将限制每个主机的编译器实例数量。# 如果未定义,Portage 的默认行为是:
# - 将 MAKEOPTS jobs 值设置为与 'nproc' 返回的相同线程数
# - 将 MAKEOPTS load-average 值设置为略高于 'nproc' 返回的线程数,因为它是一个阻尼值
# 请根据系统需要替换 '4' (使用系统线程数或GB记内存除以二的最小值),或者不设置。
MAKEOPTS="-j4 -l5"
在 man 5 make.conf 查找 MAKEOPTS 更多细节。
就位,预备,出发 !
根据你的喜好更新并保存 /mnt/gentoo/etc/portage/make.conf(nano 用户可以敲 Ctrl+o 可以保存更改,然后 Ctrl+x 退出)。
References