Gentoo Linux 手册:安装Gentoo
介绍
欢迎
欢迎使用 Gentoo!Gentoo 是一个基于 Linux 的自由操作系统,他可以针对任何应用或需求进行自动优化和定制。 它基于自由软件生态系统,不会向用户隐瞒背后运行的内容。
开放
Gentoo 的主要工具是用简单的编程语言构建的。Portage/zh-cn 是 Gentoo 的软件包维护系统,他是 由 Python 编写的。Ebuilds 为 Portage 定义软件包,他是由 bash 编写的。我们鼓励用户审查、修改和完善 Gentoo 所有源代码。
默认情况下,软件包只在必要时才会打补丁,比如修复漏洞或者提供与 Gentoo 互操作。软件包通过上游项目提供的源代码编译成二进制格式,然后安装到系统中(尽管也支持预编译二进制包)。也可以通过文本文件配置 Gentoo。
出于上述和其他原因:开放是 Gentoo 设计原则之一。
选择
Gentoo 的另一个设计原则是选择。
安装 Gentoo 时,选择贯穿于整个手册中。系统管理员可以选择两种完全支持的 init 系统(Gentoo 自己的 OpenRC 和 Freedesktop.org 的 systemd),存储磁盘的分区结构,磁盘使用什么文件系统,目标 系统配置文件,通过 USE 标记对全局(系统级)或特定软件包移除、添加特性,启动引导,网络管理工具,还有很多很多。
作为一种开发哲学, Gentoo 的作者尽量避免强迫用户使用特定的系统配置文件或桌面环境。如果一些东西在 GNU/Linux 生态系统中有,那很有可能在 Gentoo 中也能使用。即使 GNU/Linux 没有,我们也很乐意看到他。如果要添加新的软件包,请提交 bug 报告或者创建你自己的 ebuild 仓库。
强力
作为一个基于源代码的操作系统,Gentoo 可以移植到新计算机指令集架构上,还可以对所有安装的软件包进行调整。这一优势体现了 Gentoo 的另一个设计原则:强力。
A system administrator who has successfully installed and customized Gentoo has compiled a tailored operating system from source code. The entire operating system can be tuned at a binary level via the mechanisms included in Portage's make.conf file. If so desired, adjustments can be made on a per-package basis, or a package group basis. In fact, entire sets of functionality can be added or removed using USE flags.
手册的读者必须明白,这些设计原则正是 Gentoo 的独特之处。由于 Gentoo 着重强调了强大的功能、多种选择和极度开放的原则,因此在使用 Gentoo 时应多努力、多思考、多用心。
安装步骤
Gentoo的安装可以被分成10个步骤,分别对应后续的章节。执行完每个步骤,都会让系统进入某种确定的状态:
步骤 | 结果 |
---|---|
1 | 用户处于一个准备好安装 Gentoo 的工作环境中。 |
2 | 用于安装 Gentoo 的互联网连接已经准备完毕。 |
3 | 硬盘已经为 Gentoo 的安装初始化完毕。 |
4 | 安装环境已经准备好,用户准备 chroot 到新环境中去。 |
5 | 那些在所有Gentoo安装中都相同的核心软件包已经安装完毕。 |
6 | Linux内核已经安装完毕。 |
7 | 用户已经创建好大部分的 Gentoo 系统配置文件。 |
8 | 必要的系统工具已经安装完毕。 |
9 | 合适的启动引导程序 (Bootloader) 已经安装配置完毕。 |
10 | 登录系统,你就可以在已经全新安装完毕的 Gentoo Linux 系统中尽情探索了! |
当面临选择的时候,手册上会尽量说明每个选择的利弊。虽然手册会以默认选择(标题中有 "默认Default:" 标记)继续描述下去,但其他可能的选择同样也会在文档中说明(标题中有 "可选Alternative:" 标记)。请不要认为默认选项是 Gentoo的推荐选项。这只是 Gentoo 认为大多数用户会使用的选项。
有时候你也可以进行一些可选的步骤。这样的步骤会被标注为"可选Optional:",当然这些步骤对于安装Gentoo来说就不是必须的。然而,有些可选的步骤依赖于你先前所做出的决定。我们将会在你需要做这样决定以及可选步骤出现的时候提醒你。
选择合适的方法安装Gentoo
Gentoo可以以许多不同的方式安装。 它可以从官方Gentoo安装介质(如我们的可引导ISO文件)下载和安装。 安装介质可以安装在USB盘上或通过网络引导环境访问。 或者,Gentoo可以从非官方介质安装,如已安装的发行版或非Gentoo可启动磁盘(如Knoppix)。
本文讲解了如何使用Gentoo官方安装光盘或者在某些情况下使用网络启动来安装Gentoo。
需要其他安装方式的帮助(包括使用非Gentoo的Linux引导介质)请阅读我们的其他安装方式。
我们也提供一篇 Gentoo 安装提示和技巧文档,它可能会有用。
遇到麻烦
如果在安装(或安装文档中)发现问题,请访问我们的 bug 跟踪系统,并确认这个 Bug 是否已经被提交。如果没有提交,请为它创建一个错误报告以方便我们的后续处理。不要害怕和被分配解决这个问题的开发人员交流——他们(通常)不吃人。
虽然你当前阅读的文档是针对某一特定的硬件架构,但是它可能还是会包含对其他平台架构的引用,因为Gentoo手册中的绝大部分在所有硬件架构都相同(避免重复劳动)。为了避免混淆,我们把这样的引用保持在最低限度。
如果你不能确定你的问题是否是使用者的操作问题(尽管你已经仔细地阅读了文档但仍然出了错)还是一个软件问题(尽管我们已经仔细地测试了安装步骤/文档但仍然出了错)。请联系我们: irc.libera.chat 上的 #gentoo (webchat)。当然,如果你有其他方面的关于Gentoo的问题,我们也欢迎你来这里讨论。
说到这里,如果还有任何额外的Gentoo问题,看看我们常见问题 ,或者Gentoo论坛 上的 FAQs 。
硬件需求
安装之前,为了使 ia64 系统架构能成功安装 Gentoo,我们应该满足最低硬件要求。
Pretty much every IA64 should be able to boot Gentoo. At the moment we only have a LiveCD, so the machine must have a CDROM drive installed.
使用Gentoo Linux安装光盘
虽然推荐使用官方安装媒介,但还是可以选择其他非 Gentoo 安装媒介。Gentoo 安装媒介可以确保 live 操作系统环境中有必要的工具。当使用非 Gentoo 安装媒介时,可以直接跳到准备磁盘。
最小化安装CD
Gentoo最小化安装CD是一张可引导镜像:包含有完整Gentoo环境的。它允许用户从CD或其它安装媒介引导进入Linux。在引导过程中将检测硬件并加载适当的驱动。这个镜像由Gentoo开发人员维护,能让任何有Internet连接的人来安装Gentoo。
最小化安装CD叫做install-ia64-minimal-<release>.iso。
偶尔用到的Gentoo LiveDVD
有时,需要用一张特制的DVD安装Gentoo。本章的介绍是针对最小化安装CD的,因此从LiveDVD引导可能会有一点不同。不管怎么样,LiveDVD(或任何其他官方 Gentoo Linux 环境)支持通过在终端输入 sudo su - 或者 sudo -i 来获取root权限。
stage 又是什么?
stage3压缩包是一个包含有最小化的特定profile的Gentoo环境的压缩包,Stage3可用来按照本手册介绍继续安装Gentoo。以前的Gentoo手册描述了使用三个 stage tarballs 的其中一个来进行安装。Gentoo不再提供stage1和stage2压缩包供下载,因为它们主要用于内部使用和在新架构上对Gentoo进行bootstrap。
Stage 文件更新比较频繁并且不在官方安装镜像中提供,但可以在任意一个Gentoo官方镜像站 的releases/ia64/autobuilds/ 路径下选择下载。
下载
获得安装媒介
Gentoo Linux使用最小化安装CD做为默认安装媒介,它带有一个非常小的可引导的Gentoo Linux环境。此环境包含所有正确的安装工具. CD镜像本身可以从官方下载页(推荐)或任意一个镜像站下载。
在这些镜像站上,最小化安装CD可以通过以下方式找到:
- 进入 releases/ 目录
- 选择相应的架构, 如 ia64/
- 选择 autobuilds/ 目录
- 对于 amd64 和 x86 平台的用户,请选择 current-install-amd64-minimal/ 或 current-install-x86-minimal/ 目录。如果需要所有其它平台的,请进入 current-iso/ 目录。
一些架构例如arm,mips,和s390 是没有最小化安装 CD 的。 这是因为 Gentoo 发行工程项目 ( Gentoo Release Engineering project ) 不支持构建这些平台的.iso文件。
在这个位置,安装媒体文件是那些带有.iso扩展名的文件。比如下面的清单:
[DIR] hardened/ 05-Dec-2014 01:42 -
[ ] install-ia64-minimal-20141204.iso 04-Dec-2014 21:04 208M
[ ] install-ia64-minimal-20141204.iso.CONTENTS 04-Dec-2014 21:04 3.0K
[ ] install-ia64-minimal-20141204.iso.DIGESTS 04-Dec-2014 21:04 740
[TXT] install-ia64-minimal-20141204.iso.asc 05-Dec-2014 01:42 1.6K
[ ] stage3-ia64-20141204.tar.bz2 04-Dec-2014 21:04 198M
[ ] stage3-ia64-20141204.tar.bz2.CONTENTS 04-Dec-2014 21:04 4.6M
[ ] stage3-ia64-20141204.tar.bz2.DIGESTS 04-Dec-2014 21:04 720
[TXT] stage3-ia64-20141204.tar.bz2.asc 05-Dec-2014 01:42 1.5K
在上面的例子中, install-ia64-minimal-20141204.iso文件是最小化安装CD。但可以看到,还有其他相关文件存在:
- .CONTENTS 文件是一个文本文件,它列出了安装媒介中的所有文件。这个文件可用于在下载前确认安装媒介是否包含特定的固件和驱动程序。
- .DIGESTS 文件包含了ISO文件的 Hash 值,有不同的 Hash 格式/算法。这个文件可以用来验证已下载的ISO文件有没有损坏。
- .asc 文件是 ISO 文件的加密签名。这个文件即可用于验证已下载的 ISO文件是否损坏,也可验证文件确实是由 Gentoo 发行工程组(Gentoo Release Engineering Team)发布而没有被篡改。
现在可以先忽略当前位置的其他文件——它们在安装的后续步骤中会被提到。下载 .ISO,另外如果想要验证下载的文件,同时下载ISO文件对应的 .iso.asc。.CONTENTS 文件不需要下载,因为安装指南后续不会用到这个文件。如果 .iso.asc 文件已经验证签名,那么就不需要 .DIGESTS。
校验下载的文件
这是一个可选步骤,并不是安装 Gentoo Linux 所必须的。但是,我们仍然推荐这么做,以此来确保下载的文件没有损坏,以及确保下载文件确实由 Gentoo基础设施团队提供。
.asc 文件提供了 ISO 的加密签名。验证了加密签名,可以确保安装文件是由Gentoo发行工程组( Gentoo Release Engineering team )提供,并且没有损坏和修改。
在微软 Windows 操作系统上校验
首先验证文件加密签名,可以使用类似 GPG4Win 这样的工具。安装完工具后,需要导入 Gentoo 发行工程组(Gentoo Release Engineering Team)的公钥。 公钥列表在: 数字签名页。导入完成后,用户就可以验证 .DIGESTS.asc 文件的签名。
在已有的 Linux 系统上校验
在 Linux 系统上,最常用的验证加密签名的方法就是使用 app-crypt/gnupg 这个软件。安装此程序后,就可以使用以下命令来验证 .asc 文件中的加密签名。
首先,下载 数字签名页 中正确的密钥:
user $
gpg --keyserver hkps://keys.gentoo.org --recv-keys 0xBB572E0E2D182910
gpg: requesting key 0xBB572E0E2D182910 from hkp server pool.sks-keyservers.net gpg: key 0xBB572E0E2D182910: "Gentoo Linux Release Engineering (Automated Weekly Release Key) <releng@gentoo.org>" 1 new signature gpg: 3 marginal(s) needed, 1 complete(s) needed, classic trust model gpg: depth: 0 valid: 3 signed: 20 trust: 0-, 0q, 0n, 0m, 0f, 3u gpg: depth: 1 valid: 20 signed: 12 trust: 9-, 0q, 0n, 9m, 2f, 0u gpg: next trustdb check due at 2018-09-15 gpg: Total number processed: 1 gpg: new signatures: 1
或者,您可以使用 WKD 来下载密钥:
user $
gpg --auto-key-locate=clear,nodefault,wkd --locate-key releng@gentoo.org
gpg: key 0x9E6438C817072058: public key "Gentoo Linux Release Engineering (Gentoo Linux Release Signing Key) <releng@gentoo.org>" imported gpg: key 0xBB572E0E2D182910: public key "Gentoo Linux Release Engineering (Automated Weekly Release Key) <releng@gentoo.org>" imported gpg: Total number processed: 2 gpg: imported: 2 gpg: public key of ultimately trusted key 0x58497EE51D5D74A5 not found gpg: public key of ultimately trusted key 0x1F3D03348DB1A3E2 not found gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u pub dsa1024/0x9E6438C817072058 2004-07-20 [SC] [expires: 2024-01-01] D99EAC7379A850BCE47DA5F29E6438C817072058 uid [ unknown] Gentoo Linux Release Engineering (Gentoo Linux Release Signing Key) <releng@gentoo.org> sub elg2048/0x0403710E1415B4ED 2004-07-20 [E] [expires: 2024-01-01]
或者使用 Gentoo 官方发行的安装媒介,从 /usr/share/openpgp-keys/gentoo-release.asc 导入密钥(由 sec-keys/openpgp-keys-gentoo-release 提供):
user $
gpg --import /usr/share/openpgp-keys/gentoo-release.asc
gpg: directory '/home/larry/.gnupg' created gpg: keybox '/home/larry/.gnupg/pubring.kbx' created gpg: key DB6B8C1F96D8BF6D: 2 signatures not checked due to missing keys gpg: /home/larry/.gnupg/trustdb.gpg: trustdb created gpg: key DB6B8C1F96D8BF6D: public key "Gentoo ebuild repository signing key (Automated Signing Key) <infrastructure@gentoo.org>" imported gpg: key 9E6438C817072058: 3 signatures not checked due to missing keys gpg: key 9E6438C817072058: public key "Gentoo Linux Release Engineering (Gentoo Linux Release Signing Key) <releng@gentoo.org>" imported gpg: key BB572E0E2D182910: 1 signature not checked due to a missing key gpg: key BB572E0E2D182910: public key "Gentoo Linux Release Engineering (Automated Weekly Release Key) <releng@gentoo.org>" imported gpg: key A13D0EF1914E7A72: 1 signature not checked due to a missing key gpg: key A13D0EF1914E7A72: public key "Gentoo repository mirrors (automated git signing key) <repomirrorci@gentoo.org>" imported gpg: Total number processed: 4 gpg: imported: 4 gpg: no ultimately trusted keys found
下一步,验证加密签名:
user $
gpg --verify install-ia64-minimal-20141204.iso.asc
gpg: Signature made Fri 05 Dec 2014 02:42:44 AM CET gpg: using RSA key 0xBB572E0E2D182910 gpg: Good signature from "Gentoo Linux Release Engineering (Automated Weekly Release Key) <releng@gentoo.org>" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 13EB BDBE DE7A 1277 5DFD B1BA BB57 2E0E 2D18 2910
为了绝对确定所有文件都是有效的,验证上面显示的密匙指纹信息是否和 数字签名页 的密匙指纹信息一致。
刻录光盘
当然,只是下载一个 ISO 文件是无法开始 Gentoo Linux 的安装的。需要将这个ISO文件刻录成一张用来启动的 CD 光盘,是要将 ISO 文件里的内容而不是 ISO 文件本身刻录到CD光盘上。下面介绍了一些常见的方式 - 这里可以找到其他更复杂的方式:如何刻录ISO文件。
在Microsoft Windows 7和更高版本上刻录
Microsoft Windows 7 及更高版本可以将 ISO 映像装载和刻录到光学媒体,无需第三方软件。 只需插入可刻录磁盘,浏览到下载的 ISO 文件,在 Windows 资源管理器中右键单击该文件,然后选择“刻录磁盘映像”。
在已有的 Linux 系统上刻录
app-cdr/cdrtools中的cdrecord可以在Linux下烧录ISO镜像
将ISO文件刻录到 /dev/sr0 设备的 CD 光碟上(这是系统上的第一个 CD 设备-在必要时将其替换为正确的设备):
user $
cdrecord dev=/dev/sr0 install-ia64-minimal-20141204.iso
喜欢使用图形化界面的用户可以使用 K3B ,它由 kde-app/k3b 软件包提供。在 K3B 软件中,选择“工具”(Tools)菜单,然后选择“刻录CD镜像”(Burn CD Image)。
启动
Handbook:IA64/Blocks/Booting/zh-cn
额外的硬件配置
当安装媒介启动时,它会尝试检测所有的硬件设备并加载合适的内核模块来支持硬件。在绝大多数的情况下,它工作得很好。然而,在某些情况下它可能没有自动加载系统所需的内核模块。如果 PCI 自动检测错过了一些系统硬件,相应的内核模块就必须手动加载了。
下面例子手工加载了 8139too 模块(它提供对某些类型的网卡的支持):
root #
modprobe 8139too
可选:用户账号
如果其他人需要访问安装环境,或者需要以非 root 用户的身份在安装媒介上运行命令(例如出于安全原因使用没有 root 特权的 irssi 聊天),这时就需要创建额外的用户帐户,并将 root 用户密码设为强密码。
使用 passwd 命令来修改 root 用户密码:
root #
passwd
New password: (Enter the new password) Re-enter password: (Re-enter the password)
要创建一个用户账户,先输入他们的信息,然后设置密码。用 useradd 和 passwd 命令来完成这些操作。
在下面的例子中,创建了一个名为“john”的用户。
root #
useradd -m -G users john
root #
passwd john
New password: (Enter john's password) Re-enter password: (Re-enter john's password)
使用 su 命令可以从 root 用户(当前用户)切换到新建的用户:
root #
su - john
可选:在安装时查看文档
终端
要在安装期间查看 Gentoo 安装手册,首先要按照上面的方法创建一个新的用户帐户。然后按 Alt+F2 进入一个新的终端(TTY)。
在安装期间, 可以用 links 命令来浏览 Gentoo 安装手册 - 当然,只有在互联网连接可用的时候才行。
user $
links https://wiki.gentoo.org/wiki/Handbook:IA64/zh-cn
要回到原来的终端,请按 Alt+F1 。
启动到最小化 Gentoo 或者 Gentoo 管理环境后,有 7 个终端可供使用。可以按 Alt 和 F1 到 F7 之间的功能键来切换。当等待任务完成的时候,切换到一个新的终端可以很方便的用来打开文档等。
GNU Screen
Screen 是官方Gentoo安装介质中默认安装的实用程序。对于经验丰富的Linux爱好者来说,使用 screen 分割窗口查看安装说明,而不是上面提到的多个终端的方法, 这可能更高效。
可选:启动SSH服务
要在安装期间允许其他用户访问你的系统(可能是为了在安装过程中提供技术支持,甚至远程安装),需要添加一个用户账户(就像之前的文档描述的那样)同时 SSH 服务也要启动。
若要在 OpenRC init 启动 SSH 服务,请执行以下命令:
root #
rc-service sshd start
如果用户登录到系统,他们将看到一个本系统主机密钥需要确认的信息(也就是我们说的密匙指纹)。此行为是典型的并且可以像预期一样与SSH服务器进行初始连接。但是,以后当系统设置好,并有人登录到新安装的系统时,SSH客户端会警告主机密钥已被更改。这是因为现在用户登录 - 对于SSH来讲 - 是一个不同的服务器(即新安装的Gentoo系统,而不是现在正在使用的安装系统环境)。请按照屏幕上的指示,去替换用户端的主机密钥
网络需要能正常工作,sshd 才能使用。请参照 配置网络 的内容继续安装。
自动网络检测
它能够自动检测到么?
如果系统接入到一个有 DHCP 服务器的以太网络,那么很可能会自动配置好网络。这样的话,安装媒介所包含的很多网络命令,比如ssh、scp、ping、irssi、wget、links,以及其他的一些命令, 都可以立即工作。
识别接口名称
ifconfig命令
如果网络已配置,ifconfig命令应该会列出一个或多个网络接口(围绕着lo)。在下面的示例中显示为eth0:
root #
ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:BA:8F:61:7A inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::50:ba8f:617a/10 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1498792 errors:0 dropped:0 overruns:0 frame:0 TX packets:1284980 errors:0 dropped:0 overruns:0 carrier:0 collisions:1984 txqueuelen:100 RX bytes:485691215 (463.1 Mb) TX bytes:123951388 (118.2 Mb) Interrupt:11 Base address:0xe800
因为名称变成了预测的网络接口名称(Predictable Network Interface Names), 所以系统的接口名称可能和旧的 eth0 命名规则很不一样。近期的安装媒介上常规网络接口名字可能显示为 eno0、ens1 或 enp5s0。查看 ifconfig 输出中找到有你本地网络相关的IP地址的接口。
如果使用标准的ifconfig命令没有显示出接口,尝试使用带有
-a
选项的相同的命令。这个选项强制这个工具去显示系统检测到的所有的网络接口,不管他们是up或down状态。如果ifconfig -a没有提供结果,则硬件有错误或者接口驱动没有加载到内核中。这些情况都超过本手册的范围。联系#gentoo (webchat)需求支持。ip 命令
作为ifconfig的一个备选,ip命令可以用来识别接口名称。下面的示例展示了ip addr(由于是另外一个系统,所以显示的信息不同于前一个示例)的输出:
root #
ip addr
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether e8:40:f2:ac:25:7a brd ff:ff:ff:ff:ff:ff inet 10.0.20.77/22 brd 10.0.23.255 scope global eno1 valid_lft forever preferred_lft forever inet6 fe80::ea40:f2ff:feac:257a/64 scope link valid_lft forever preferred_lft forever
在上面的示例中,接口名称直接跟在数字后面;比如 eno1。
在本文档的其余部分,手册中假设要操作的网络接口叫作eth0。
可选:配置代理
如果要通过代理访问互联网,则在安装过程中需要设置代理信息。定义一个代理十分容易:只需要定义一个包含代理服务器信息的变量即可。
Certain text-mode web browsers such as links can also make use of environment variables that define web proxy settings; in particular for the HTTPS access it also will require the https_proxy environment variable to be defined. While Portage will be influenced without passing extra run time parameters during invocation, links will require proxy settings to be set.
大多数情况下,只要将这个变量定义为代理服务器主机名。作为示例,我们假定代理叫作proxy.gentoo.org并且端口为8080。
The
#
symbol in the following commands is a comment. It has een added for clarity only and does not need to be typed when entering the commands.设置一个HTTP代理(用于HTTP或HTTPS流量):
root #
export http_proxy="http://proxy.gentoo.org:8080"
如果代理要求用户名和密码,针对变量使用下面语言:
http://username:password@proxy.gentoo.org:8080
Start links using the following parameters for proxy support:
user $
links -http-proxy ${http_proxy} -https-proxy ${https_proxy}
设置一个FTP代理:
root #
export ftp_proxy="ftp://proxy.gentoo.org:8080"
Start links using the following parameter for a FTP proxy:
user $
links -ftp-proxy ${ftp_proxy}
设置一个RSYNC代理:
root #
export RSYNC_PROXY="proxy.gentoo.org:8080"
测试网络
尝试ping你的ISP的DNS服务器(可在/etc/resolv.conf中找到)和选择一个网站。这可确信网络正常工作并且网络包可以到达网络,DNS名称解析能正常工作等等。
root #
ping -c 3 www.gentoo.org
如果这些都工作,则本章节中其余的部分可跳过,直接跳到安装介绍的下一步骤(准备磁盘)。
自动网络配置
如果网络没有立即工作,一些安装媒介允许用户使用net-setup(针对常规或无线网络),pppoe-setup(针对ADSL用户)或pptp(针对PPTP用户)。
如果安装媒介没有包含这些工具,继续section#Manual network configuration。
- 常规以太网用户应该选择 默认:使用net-setup
- ADSL 用户应该选择 备选:使用PPP
- PPTP 用户应该选择 备选:使用PPTP
默认:使用net-setup
如果网络没有自动配置,最简单的方式是运行net-setup脚本来设置:
root #
net-setup eth0
net-setup将会询问关于网络环境的一些问题。当所有这些完成后,网络连接就应该工作。以前面的方式测试网络连接。如果测试通过,恭喜!跳过本章节剩余部分并继续准备磁盘。
如果网络还是不能工作,继续手动配置网络。
备选:使用PPP
假设需要使用PPPoE连接到互联网,安装CD(任何版本)包含ppp来使这件事变得容易。使用提供的pppoe-setup脚本来配置连接。设置过程中将询问已连接到你的ADSL调制解调器的以太网设备、用户名和密码、DNS服务器的IP地址,以及是否需要一个简单的防火墙。
root #
pppoe-setup
root #
pppoe-start
如果还有什么错误,请再次检查 /etc/ppp/pap-secrets 和 /etc/ppp/chap-secrets 中的用户名以及密码是否都正确,并且确保使用了正确的以太网设备。如果以太网设备不存在,则需要加载合适的网络模块。如果是那样,继续手动网络配置,手册将解释如何加载合适的网络模块。
如果所有事都完成了,那么继续准备磁盘。
备选:使用PPTP
如果需要PPTP支持,使用安装CD提供的pptpclient。但是首先确保配置是正确的。编辑/etc/ppp/pap-secrets或/etc/ppp/chap-secrets让它包含正确的用户名/密码组合:
root #
nano -w /etc/ppp/chap-secrets
如果需要,继续调整/etc/ppp/options.pptp:
root #
nano -w /etc/ppp/options.pptp
当所有事都已完成,运行pptp(带着一些options.pptp无法设定的选项)来连接到服务器:
root #
pptp <server ipv4 address>
现在继续准备磁盘。
手动配置网络
加载适当的内核网络模块
安装光盘在启动时,会尝试检测所有硬件设备并加载适当的内核模块(驱动程序)以支持你的硬件。绝大多数情况下,它都做得非常好。尽管如此,在某些情况下它可能还是无法为当前网络设备自动载入需要的内核模块。
如果net-setup或pppoe-setup都失败,则可能是网络没有立即被找到。也就是说用户可能需要手动加载合适的内核模块。
要找出什么内核模块提供网络,使用ls命令:
root #
ls /lib/modules/`uname -r`/kernel/drivers/net
如果找到一个针对网络设备的驱动,使用modprobe来加载内核模块。比如,要加载pcnet32模块:
root #
modprobe pcnet32
要检查网卡现在是否检测到,使用ifconfig。一个检测到的网卡应该在结果中像这样(再一次,这里的eth0只是一个示例):
root #
ifconfig eth0
eth0 Link encap:Ethernet HWaddr FE:FD:00:00:00:00 BROADCAST NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
不过如果你得到如下错误信息,说明没有检测到网卡:
root #
ifconfig eth0
eth0: error fetching interface information: Device not found
系统中可用网络接口命名可以通过/sys文件系统列出。
root #
ls /sys/class/net
dummy0 eth0 lo sit0 tap0 wlan0
在上面的示例中,找到了6个接口。eth0是最像(有线)以太网络适配器,而wlan0 是无线的。
假设现在网络已经检测到了,重新尝试net-setup或pppoe-setup(现在应该工作了),但是对于铁杆的人,我们还是要解释如何手动配置网络。
基于你的网络从下面的章节中选择一个进行设置:
- 使用 DHCP 针对自动获取IP
- 准备无线访问 如果使用无线网络
- 了解网络术语 解释了关于网络的基础
- 使用ifconfig和route 解释了如何手动设置网络
使用DHCP
DHCP(动态主机配置协议)使自动接受网络信息(IP地址、掩码、广播地址、网关、名称服务器等)变得容易。这只在网络中有DHCP服务器(或者如果ISP提供商提供一个DHCP服务)时有用。要使一个网络接口自动接受信息,使用dhcpcd:
root #
dhcpcd eth0
一些网络管理员要求你使用DHCP服务器所提供的主机名和域名。 这种情况下请用:
root #
dhcpcd -HD eth0
如果正常工作的话(试着ping一些Internet服务器,像Google的8.8.8.8 或者 Cloudflare的 1.1.1.1),则所有事情都设置好了并可以继续。跳过剩下的章节并继续到准备磁盘。
准备无线网络链接
当使用一块无线(802.11)网卡,在继续之前需要先配置无线设置。要查看当前无线网卡的设置,你可以使用iw。运行iw可能会显示如下:
root #
iw dev wlp9s0 info
Interface wlp9s0 ifindex 3 wdev 0x1 addr 00:00:00:00:00:00 type managed wiphy 0 channel 11 (2462 MHz), width: 20 MHz (no HT), center1: 2462 MHz txpower 30.00 dBm
检查当前连接:
root #
iw dev wlp9s0 link
Not connected.
或
root #
iw dev wlp9s0 link
Connected to 00:00:00:00:00:00 (on wlp9s0) SSID: GentooNode freq: 2462 RX: 3279 bytes (25 packets) TX: 1049 bytes (7 packets) signal: -23 dBm tx bitrate: 1.0 MBit/s
一些无线网卡的设备名可能是wlan0或ra0而不是 wlp9s0。运行 ip link 可以识别正确的设备名称。
对于大多数用户,只需要两个设置来连接,即ESSID(也称无线网络名称)和可选的WEP密钥。
- 首先,确保接口处于活动状态:
root #
ip link set dev wlp9s0 up
- 连接到名为“GentooNode”的开放网络:
root #
iw dev wlp9s0 connect -w GentooNode
- 设置一个WEP密钥:使用
d:
前缀:
root #
iw dev wlp9s0 connect -w GentooNode key 0:d:1234123412341234abcd
- 使用ASCII WEP密钥连接:
root #
iw dev wlp9s0 connect -w GentooNode key 0:some-password
使用iw dev wlp9s0 link确认无线设置。如果无线已经工作,继续按下一章节(了解网络属于)配置IP级别的网络选项或者使用前面描述的net-setup工具。
网络术语解读
如果IP地址、广播地址、掩码和名称服务器这些全都了解,则可以跳过这个子章节,进入到使用ifconfig和route。
如果以上所做的全部失败,你将不得不手动配置你的网络。这其实一点也不难。不过,你需要熟悉一些网络术语,才能配置好网络令自己满意。读完本节之后,你将了解到什么是网关,子网掩码是作什么用的,广播地址是如何形成的,以及为什么需要名称服务器。
在网络中,主机通过它们的IP地址(互联网协议地址)来标识。这个地址被看为是由四个0到255的数字来组成。很好,至少在使用IPv4(IP版本4)时。实事上,这样的一个IPv4地址包括32个位(1和0)。让我们来看一个示例:
IP地址(数字): 192.168.0.2
IP地址(位): 11000000 10101000 00000000 00000010
-------- -------- -------- --------
192 168 0 2
比IPv4更成功的IPv6使用128位(1和0)。在这章节中,我们只关注IPv4地址。
在所有可访问到的网络里,这样的IP地址跟主机是一一对应的(比如你能够连接到的每台主机必须拥有一个唯一的IP地址)。为了区别一个网络内部和外部的主机,IP地址被分为两个部分:网络部分和主机部分。
由一堆1后面跟着一堆0的掩码写出了网络的分离。IP映射到1的部分是网络部分,剩下的是主机部分。通常,掩码可以写成IP地址。
IP地址: 192 168 0 2
11000000 10101000 00000000 00000010
掩码: 11111111 11111111 11111111 00000000
255 255 255 0
+--------------------------+--------+
网络 主机
换句话说,192.168.0.14是示例网络的一部分,但192.168.1.2不是。
广播地址是一个拥有相同网络部分,但是主机部分全是1的IP地址。网络上的每一个主机都监听这个IP地址。它的真正用途是用来广播包。
IP地址: 192 168 0 2
11000000 10101000 00000000 00000010
广播: 11000000 10101000 00000000 11111111
192 168 0 255
+--------------------------+--------+
网络 主机
为了能在互联网上冲浪,网络中的每个主机必须知道哪个主机共享着互联网连接。这个主机叫作网关。它同样是一台常规主机,它有一个常规IP地址(比如192.168.0.1)。
之前我们说每台主机都有它自己的IP地址。要通过名称来到达这台主机(代替一个IP地址)我们需要一个服务去翻译一个名称(比如dev.gentoo.org)到一个IP地址(64.5.62.82)。这样的服务叫做名称服务。要使用这样的服务,需要在/etc/resolv.conf中定义所需的名称服务器。
有些情况下,网关同时也是名称服务器。不然的话,需要在这个文件中添加ISP提供的名称服务器。
总结一下,在继续之前需要下面的信息:
网络项目 | 示例 |
---|---|
系统IP地址 | 192.168.0.2 |
掩码 | 255.255.255.0 |
广播 | 192.168.0.255 |
网关 | 192.168.0.1 |
名称服务器 | 195.130.130.5, 195.130.130.133 |
使用 ifconfig 和 route
使用sys-apps/net-tools包中的工具,手动设置网络通常包括三个步骤:
- 使用ifconfig指派一个IP地址
- 使用route设置到网关的路由
- 通过/etc/resolv.conf设置名称服务器的IP完成
要指派一个IP地址,需要IP地址、广播地址和掩码。运行下面的命令,替换${IP_ADDR}为正确的IP地址、${BROADCAST}为正确的广播地址以及${NETMASK}为正确的掩码:
root #
ifconfig eth0 ${IP_ADDR} broadcast ${BROADCAST} netmask ${NETMASK} up
使用route设置路由。替换${GATEWAY}为正确的网关IP地址:
root #
route add default gw ${GATEWAY}
现在用文本编辑器打开/etc/resolv.conf:
root #
nano -w /etc/resolv.conf
使用下面的模板填入名称服务器。修改${NAMESERVER1}和${NAMESERVER2}为名称服务器的IP地址。可以添加多个名称服务器:
/etc/resolv.conf
默认 /etc/resolv.conf 的模板nameserver ${NAMESERVER1}
nameserver ${NAMESERVER2}
就是这样。现在通过ping一些互联网服务器(像Google的8.8.8.8 或者 Cloudflare的 1.1.1.1)来测试网络。如果这个工作的话,再次恭喜。继续到准备磁盘。
块设备简介
块设备
让我们来好好看看Gentoo Linux以及普通Linux中有关磁盘方面的知识,包括块设备、分区和Linux文件系统。一旦磁盘的来龙去脉都了解了,我们将设置分区和文件系统以进行安装。
首先,让我们来看看块设备。SCSI和SATA磁盘以/dev/sda,/dev/sdb,/dev/sdc等形式被标注。在更先进的设备中,基于PCI Express的NVMe固态磁盘一般以/dev/nvme0n1,/dev/nvme0n2等形式被标注。
下表将帮助读者确定在系统中哪里可以找到块设备的类型:
设备类型 | 默认设备句柄 | 社论笔记和注意事项 |
---|---|---|
IDE,SATA,SAS,SCSI 或 USB 闪存 | /dev/sda | 从大约 2007 年到现在,这可能是 Linux 中最常用的设备句柄。这类设备可以连接在 SATA 总线,SCSI,USB 总线上作为块储存。例如,在第一个 SATA 设备的第一个分区称为 /dev/sda1。 |
NVM Express (NVMe) | /dev/nvme0n1 | NVMe设备是最新的固态技术,它连接在 PCI Express 总线,并且拥有市面上最快的传输速度。2014 年前后的系统可能会支持 NVMe 硬件。在第一个 NVMe 设备的第一个分区称为 /dev/nvme0n1p1。 |
MMC,eMMC 和 SD | /dev/mmcblk0 | 嵌入式 MMC 设备,SD 卡和其它类型的记忆卡 可以作为数据存储使用。也就是说,许多系统可能不允许从这些类型的设备启动。建议不使用这些设备用来安装 Linux,而是考虑用它们来传输文件,这也是它们的设计目的。另外,它们可以用来做短期的备份。 |
上面的块设备代表磁盘的抽象接口。用户程序可以使用这些块设备来与你的磁盘进行交互,而无需担心驱动器到底是 SATA,SCSI 还是其他什么东西。该程序可以把磁盘当作一系列连续的,可随机访问的 4096 字节块(4K)的存储。
Handbook:IA64/Blocks/Disks/zh-cn
创建文件系统
如果使用 SSD 或者 NVMe 驱动,请检查是否需要升级固件。特别是有些英特尔的 SSD(600p 和 6000p)需要升级固件来修复关键错误,以避免XFS I/O 使用模式导致的数据损坏。(尽管这并非文件系统的问题)。smartctl 可以检查型号和固件版本。
介绍
现在分区已经创建,该在上面设置文件系统了。下一章节中描述了 Linux 所支持的众多文件系统。知道使用哪一个文件系统的读者可以继续阅读为分区应用文件系统。剩下的人应该学习可用的文件系统……
文件系统
Linux 支持数十种文件系统,尽管其中许多只是为了特定目的而部署。在 ia64 架构上只能找到某些稳定的文件系统 - 建议在为重要分区选择更具实验性的文件系统之前查阅文件系统及其支持状态。XFS 是推荐的全平台通用的文件系统。下面是一个不完全的文件系统列表:
- btrfs
- 下一代文件系统,提供许多高级功能,例如快照、通过校验和进行自我修复、透明压缩、子卷和集成 RAID。不能保证 5.4.y 之前的内核在生产中与 btrfs 一起使用是安全的,因为对严重问题的修复仅存在于 LTS 内核分支的最新版本中。文件系统损坏问题在较旧的内核分支上很常见,比如说启用压缩后,较旧的内核(比 5.4.y 小)更可能发生损坏。 RAID 5/6 和配额组在所有版本的 btrfs 上都不安全。
- ext4
- Ext4 是一个可靠的、通用的全平台文件系统,但是它缺乏诸如引用链接之类的现代化功能。
- f2fs
- Flash-Friendly File System 最初是由三星为与 NAND 闪存一起使用而创建的。截至 2016 年第二季度,这个文件系统仍然被认为是不成熟的,但在将 Gentoo 安装到 microSD 卡、USB 驱动器或其他基于闪存的存储设备上时,它是一个不错的选择。
- XFS
- 具有元数据日志的文件系统,具有强大的功能集并针对可扩展性进行了优化。 XFS 不断升级来支持现代化功能。 XFS 唯一的缺点是还不能缩减分区,不过这个问题正在解决中。XFS 特别支持反向链接和写入时复制(CoW),因为用户需要完成大量编译工作,所以对 Gentoo 系统很有用。推荐使用 XFS 这个现代化的通用全平台文件系统。XFS 要求分区至少300MB。
- VFAT
- 也称为 FAT32,Linux 支持但不支持标准的 UNIX 权限设置。它主要用于与其他操作系统(Microsoft Windows 或 Apple 的 macOS)的互操作和交换,但也是某些系统引导加载程序固件(如 UEFI)的必需品。UEFI 系统的用户需要使用 VFAT 格式化的 EFI 系统分区才能启动。
- NTFS
- 这个“新技术”文件系统是自 Windows NT 3.1 以来 Microsoft Windows 的旗舰文件系统。与 vfat 类似,它不存储 BSD 或 Linux 正常运行所需的 UNIX 权限设置或扩展属性,大多数情况下,不应将其用作为根文件系统。它应该仅用于与Microsoft Windows 系统的互操作和数据交换(注意强调仅)。
更多有关于文件系统的信息可以在社区维护的文件系统文章中找到。
为分区应用文件系统
安装结束后,请确保在重新启动之前,为之后在手册中选择的文件系统 emerge 相应软件包。
在一个分区或卷上创建一个文件系统,这里有用于每一个可能的分区的工具。 单击下表中的文件系统名称,了解每个文件系统的更多信息:
文件系统 | 创建命令 | 是否在最小化 CD 中已包含? | 软件包 |
---|---|---|---|
btrfs | mkfs.btrfs | 是 | sys-fs/btrfs-progs |
ext4 | mkfs.ext4 | 是 | sys-fs/e2fsprogs |
f2fs | mkfs.f2fs | 是 | sys-fs/f2fs-tools |
xfs | mkfs.xfs | 是 | sys-fs/xfsprogs |
vfat | mkfs.vfat | 是 | sys-fs/dosfstools |
NTFS | mkfs.ntfs | 是 | sys-fs/ntfs3g |
比如,在示例分区结构中,有使用 xfs 的根分区(/dev/sda3),会使用下面的命令:
root #
mkfs.xfs /dev/sda3
如果在较小的分区(少于8 GiB)上使用 ext4,则创建文件系统时必须带适当的选项以保留足够的 inode。可以使用以下命令创建文件系统:
root #
mkfs.ext4 -T small /dev/<device>
这一般将是对于给定的文件系统inode数量的四倍,它的“字节每inode”从16kB每个减少到4kB每个。
现在在新创建的分区(或逻辑卷)上创建文件系统。
激活 swap 分区
mkswap是用来初始化swap分区的命令:
root #
mkswap /dev/sda2
要激活swap分区,使用swapon:
root #
swapon /dev/sda2
使用上面提到的命令创建和激活swap。
挂载 root 分区
非 Gentoo 安装介质的用户需要通过运行以下命令来创建挂载点:
root #
mkdir --parents /mnt/gentoo
现在分区都已初始化并有文件系统,接下来该挂载那些分区了。使用 mount 命令,但是不要忘记为每一个创建的分区创建需要的挂载目录。比如示例中我们挂载根分区:
root #
mount /dev/sda3 /mnt/gentoo
如果/tmp/需要放在一个独立分区,确保在挂载后变更它的权限:
root #
chmod 1777 /mnt/gentoo/tmp
后面的介绍中将挂载proc文件系统(一个内核的虚拟接口)和其它内核伪文件系统。不过我们首先安装 Gentoo 安装文件。
安装stage包
设置日期和时间
在安装 Gentoo 之前,必须设置正确的日期和时间。因为 Gentoo 网络基础服务使用了安全证书,如果系统时间差的离谱,可能无法下载安装文件。另外,初始化安装完成后,如果使用将来的日期保存文件,即使后来纠正了时钟,仍然可能会引起奇怪的错误。
验证当前时间使用命令date:
root #
date
Mon Oct 3 13:16:22 PDT 2021
如果显示的日期/时间超时几分钟,则应使用下列方法之一进行精准更新。
自动
大多数读者都希望系统使用时间服务器自动更新时间。
一些主板不包括实时时钟(RTC),RTC 即使关闭了系统,也会保持相对准确的时间。这些主板非常有必要配置为在每次系统启动时以及启动后在内部,自动将系统时钟与时间服务器同步。这个配置也对包含 RTC 但具有电池故障的系统很重要。
Gentoo 的官方 live 环境包含 chronyd 命令(属于 net-misc/chrony 软件包),以及指向 ntp.org 时间服务器的配置文件。它可以用于使用时间服务器,使得系统时钟自动同步到 UTC 时间。使用方法见 配置网络 但可能在某些架构上不可用。
自动时间同步需要付出一个代价。它将向时间服务器显示系统的IP地址和相关网络信息(在下面的示例中为ntp.org)。有隐私问题的用户应该注意这个“之前”使用下面的方法设置系统时钟。
root #
chronyd -q
手动
对于无权访问时间服务器的系统,可以使用 date 命令来对系统时钟执行手动设置。它使用以下格式作为参数:使用 MMDDhhmmYYYY
语法(Month(月),Day(天),hour(小时),minute(分钟) 和 Year(年))。
建议所有 Linux 系统使用 UTC 时间。稍后在安装期间将定义时区,这将修改时钟的显示为本地时间。
比如,设置时间到 2021 年 10 月 3 日的 13:16,示例:
root #
date 100313162021
选择 stage 包
不是所有架构都有 multilib 选项。许多只使用原生代码运行。Multilib 最常应用于amd64。
multilib(32 位和 64 位)
选择一个基础压缩包的系统可以在稍后的安装过程节省大量的时间,特别是当它是一次选择正确的配置文件。stage 包的选择将直接影响未来的系统配置,可以在以后省的头痛。该压缩包 multilib 尽可能使用64位的库,只必要时对32位版本兼容。这对于大多数安装一个很好的选择,因为它在未来的定制提供了极大的灵活性量。那些谁希望自己的系统,能够容易地切换配置,应该下载根据各自的处理器架构 multilib的压缩包选项。
大多数用户应该不需要使用“高级”tar包选项;它们用于特定的软件或硬件配置。
no-multilib(纯64位)
选择 no-multilib 压缩包可以在系统的基础上提供完整的64 位操作系统环境。尽管在技术上可行,但这会造成不可切换到 multilib 的配置文件。
刚开始使用 Gentoo 的读者,除非很有必要,否则不应该选择 no-multilib 包。把一个系统从 no-multilib 迁移到 multilib 需要极其丰富的使用Gentoo 的知识并熟悉底层的工具链。这一做法甚至可能使工具链开发者不寒而栗。因此不适合胆小的用户,而且也超出了本指南的范围。
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 文章。
从技术上来说,可以将正在安装的 Gentoo 从 OpenRC 切换到 systemd,然后再切换回来。然而,切换需要花费一些功夫,而且超出了安装手册的范围。在下载 stage tarball 之前,请决定是否使用 OpenRC 或 systemd 作为目标 init 系统并下载相关的 stage tarball。
下载 stage 归档文件
前往挂载根文件系统的 Gentoo 挂载点(类似于 /mnt/gentoo):
root #
cd /mnt/gentoo
图形化浏览器
可以使用图形化网页浏览器从主网站下载小节复制 stage 文件 URL。只需选择适当的选项卡,右键单击 stage 文件的链接,然后复制链接到剪贴板,然后将链接粘贴到命令行中的 wget 程序来下载stage 归档文件:
root #
wget <PASTED_STAGE_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/ia64/autobuilds/ 。 那里将显示所有可用stage文件 (可能他们个别小组架构在命名的子目录中存储)。选择一个,然后按 d 下载。
stage 文件下载完成后,可以验证 stage tarball 的完整性并验证其内容。 有兴趣的人应该进行下一节。
对验证stage文件不感兴趣的用户可以通过按 q 来关闭命令行浏览器,并且可以直接移步到解压 stage tarball 部分。
验证
与最小安装CD一样,可以使用额外的下载来验证stage文件。 虽然这些步骤可以被跳过,但这些文件是为那些关心他们刚刚下载的文件合法性的用户提供的。
root #
wget https://distfiles.gentoo.org/releases/
- A .CONTENTS 文件包含stage压缩包内的所有文件的列表。
- A .DIGESTS 文件,其中包含用不同的算法校验的stage文件。
使用 openssl,并且比较输出与 .DIGESTS 文件提供的校验和。
比如,要验证SHA512校验值:
root #
openssl dgst -r -sha512 stage3-ia64-<release>-<init>.tar.xz
dgst
instructs the openssl command to use the Message Digest sub-command, -r
prints the digest output in coreutils format, and -sha512
selects the SHA512 digest.
要验证Whirlpool校验值:
root #
openssl dgst -r -whirlpool stage3-ia64-<release>-<init>.tar.xz
将这些命令的输出与.DIGESTS 文件中的值进行对比。对应的值应该相同,否则下载的文件(或 digests 文件)可能已损坏。
使用sha512sum命令的另外一种方式:
root #
sha512sum stage3-ia64-<release>-<init>.tar.xz
The --check
option instructs sha256sum to read a list of expected files and associated hashes, and then print an associated "OK" for each file that calculates correctly or a "FAILED" for files that do not.
就像在 ISO 文件中一样,它也可以来验证 tar.xz 文件的加密签名。使用 gpg 确保压缩包未被篡改:
For official Gentoo live images, the sec-keys/openpgp-keys-gentoo-release package provides PGP signing keys for automated releases. The keys must first be imported into the user's session in order to be used for verification:
root #
gpg --import /usr/share/openpgp-keys/gentoo-release.asc
For all non-official live images which offer gpg and wget in the live environment, a bundle containing Gentoo keys can be fetched and imported:
root #
wget -O - https://qa-reports.gentoo.org/output/service-keys.gpg | gpg --import
Verify the signature of the tarball and, optionally, associated checksum files:
root #
gpg --verify stage3-ia64-<release>-<init>.tar.xz{.asc,}
If verification succeeds, "Good signature from" will be in the output of the previous command(s).
OpenPGP 密钥的指纹用来对释出的安装媒介签名,在 Gentoo 服务器的 释出的安装媒介签名页面 上可以找到 OpenPGP 密钥的指纹。
解压stage 归档文件
现在,解压下载的stage到系统。使用 tar 工具来进行:
root #
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
验证你在命令中使用了同样的参数 ( xpf
和 --xattrs-include='*.*'
)。 x
表示解开(Extract),v
表示详细信息(Verbose)可以用来查看解压缩时发生了什么(可选参数), p
表示保留权限(Preserve permissions),还有f
表示我们要解开一个文件,而不是标准输入。最后,--numeric-owner
被用于确保从tarball中提取的文件的用户和组ID与Gentoo发布工程团队预期的保持一致,即使大胆的用户使用的不是 Gentoo live 环境。
The options starting with the double dash (--
) do not have a short parameters. --xattrs-include='*.*'
is to include preservation of the the extended attributes in all namespaces stored in the archive. Finally, --numeric-owner
is used to ensure that the user and group IDs of the files being extracted from the tarball will remain the same as Gentoo's release engineering team intended (even if adventurous users are not using official Gentoo live environments for the installation process).
现在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 -w /mnt/gentoo/etc/portage/make.conf
从make.conf.example文件中可以明显看出文件的结构:注释行以 #
开头,其他行使用 VARIABLE="value"
语法定义变量。接下来选取其中的几个进行讨论。
CFLAGS 和 CXXFLAGS
CFLAGS 和 CXXFLAGS 变量分别定义了GCC C和C ++编译器的优化标志。 尽管这些标志一般在这里默认被定义过,但为了性能最大化,需要分别优化每个程序的这些配置。 原因是因为每个程序都不同。 但是,这是不可管理的,因此这些标志在 make.conf 文件中定义。
应该在make.conf中定义优化标志,这将使系统的响应速度最快。 不要在此变量中放置实验性的设置; 太多的优化可能会使程序产生问题(崩溃,甚至更糟,产生故障)。
我们不会解释所有可能的优化选项。 要了解它们,请阅读GNU在线手册或gcc信息页面 (info gcc-只适用于可用的Linux系统)。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的时候,你需要把这些优化标记都合并起来。stage3文件里包含的你解压缩出来的默认值已经足够好了。下面这个例子仅仅是个例子:
# 为所有语言设置编译标志
COMMON_FLAGS="-O2 -pipe"
# 为两个变量使用相同的设置
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
MAKEOPTS
通过使用 MAKEOPTS 可以定义在安装软件时,并行编译的数目。在 3.0.31 版本的 portage[1] 中,如果未定义该值, portage 默认的行为是,设置 MAKEOPTS 的值与 nproc 的返回线程数相同。
比较好的选择是从 CPU 线程数,或系统 RAM 总量除以 2 GiB 中选择是较小的那个值。
大量的 job 显著消耗内存。建议每个 job 至少有 2 GiB RAM (所以,
-j6
至少 需要 12 GiB)。避免内存溢出,根据可用内存降低 job 数量。当并行使用 emerge (
--jobs
),有效的 job 数量可以指数式加速(通过 emerge jobs 使 job 增加)。可以通过运行一个仅限于本地主机的 distcc 配置来解决这个问题,该配置将限制每个主机的编译器实例数量。/etc/portage/make.conf
声明 MAKEOPTS 示例# 如果未定义该值,portage 默认的行为是,设置 MAKEOPTS 的值与 `nproc` 的返回线程数相同。
MAKEOPTS="-j4"
在 man 5 make.conf 查找 MAKEOPTS 更多细节。
就位,预备,出发 !
根据你的喜好更新并保存 /mnt/gentoo/etc/portage/make.conf(nano 用户可以敲 Ctrl+o 可以保存更改,然后 Ctrl+x 退出)。
让我们继续 安装Gentoo 基本系统。
References
Chrooting
可选:选择镜像站点
分发文件
当使用非 Gentoo 安装介质时,跳过此步骤很安全。app-portage/mirrorselect 软件包可以之后在 stage3 中 emerged(进入新环境之后),并且可以在该节点执行本节中定义的操作。
为了能更快的下载源代码,这里推荐选择一个快的镜像。Portage 将会在make.conf文件中查找GENTOO_MIRRORS变量,并使用其中所列的镜像。可以通过浏览 Gentoo 镜像列表搜索一个(或一组)最接近系统物理位置(往往那是最快的)的镜像。另外,我们提供一个叫作mirrorselect的好工具,它为用户选择所需镜像提供了一个很好的交换。只需要移动光标选择镜像并按Spacebar选择一个或多个镜像。
root #
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
Gentoo ebuild 软件仓库
选择镜像的第二个重要步骤是通过/etc/portage/repos.conf/gentoo.conf文件来配置 Gentoo的 ebuild 软件仓库。这个文件包含了更新 Portage 数据库(包含 Portage 需要下载和安装软件包所需要的信息的一个 ebuild 和相关文件的集合)所需要的同步信息。
通过几个简单的步骤就可以完成软件仓库的配置。首先,如果它不存在,则创建 repos.conf 目录:
root #
mkdir --parents /mnt/gentoo/etc/portage/repos.conf
接下来,复制 Portage 提供的 Gentoo 仓库配置文件到这个(新创建的)目录:
root #
cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
使用一个文件编辑器或通过使用cat命令来看一眼。文件里的内容应该是.ini格式并且看起来像是这样:
/mnt/gentoo/etc/portage/repos.conf/gentoo.conf
[DEFAULT]
main-repo = gentoo
[gentoo]
location = /var/db/repos/gentoo
sync-type = rsync
sync-uri = rsync://rsync.gentoo.org/gentoo-portage
auto-sync = yes
sync-rsync-verify-jobs = 1
sync-rsync-verify-metamanifest = yes
sync-rsync-verify-max-age = 24
sync-openpgp-key-path = /usr/share/openpgp-keys/gentoo-release.asc
sync-openpgp-key-refresh-retry-count = 40
sync-openpgp-key-refresh-retry-overall-timeout = 1200
sync-openpgp-key-refresh-retry-delay-exp-base = 2
sync-openpgp-key-refresh-retry-delay-max = 60
sync-openpgp-key-refresh-retry-delay-mult = 4
上面列出的 sync-uri 变量默认值将根据轮询的确定一个镜像地址。这会缓解 Gentoo 基础设施上带宽的压力,并能在特定镜像离线时保证失效安全。除非使用本地或者私有的镜像,否则建议保留默认 URI。
可以在 Portage 同步主题中找到关于 Portage 的同步API插件的官方规范。
复制DNS信息
在进行新环境之前,还有一件要做的事情就是复制/etc/resolv.conf中的DNS信息。需要完成这个来确保即使进入到新环境后网络仍然可以使用。/etc/resolv.conf包含着当前网络中的DNS服务器。
要复制这个信息,建议通过cp命令的 --dereference
选项。这可以保障如果/etc/resolv.conf是一个符号链接的话,复制的是那个目标文件而不是这个符号文件自己。否则在新环境中,符号文件将指向一个不存在的文件(因为链接目标非常可能不会在新环境中)。
root #
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
挂载必要的文件系统
稍等片刻,Linux 的根目录将变更到新的位置。
需要提供的文件系统是:
- /proc/ 是一个伪文件系统,虽然它看起来像是常规文件,但是却是由 Linux 内核生成
- /sys/ 是一个伪文件系统,它类似被取代的 /proc/,但是比 /proc/ 更结构化
- /dev/ 是一个包含全部设备文件的常规文件系统,一部分由Linux设备管理器(通常是udev)管理
- /run/ 是一个临时文件系统,用于运行时生成的文件,例如 PID 文件和锁
/proc/位置将要挂载到/mnt/gentoo/proc/,而其它的都是绑定挂载。字面上的意思是,例如/mnt/gentoo/sys/事实上就是/sys/(它只是同一个文件系统的第二个条目点),而/mnt/gentoo/proc/是(可以说是)文件系统的一个新的挂载。
If using Gentoo's install media, this step can be replaced with simply: arch-chroot /mnt/gentoo.
root #
mount --types proc /proc /mnt/gentoo/proc
root #
mount --rbind /sys /mnt/gentoo/sys
root #
mount --make-rslave /mnt/gentoo/sys
root #
mount --rbind /dev /mnt/gentoo/dev
root #
mount --make-rslave /mnt/gentoo/dev
root #
mount --bind /run /mnt/gentoo/run
root #
mount --make-slave /mnt/gentoo/run
--make-rslave
操作是稍后安装systemd支持时所需要的。当使用非Gentoo安装媒介时,这时可能还不算完。一些发行版将/dev/shm符号链接到/run/shm/,在chroot后将变得不可用。为了让/dev/shm/是一个正常挂载的tmpfs,可以这样修复:
root #
test -L /dev/shm && rm /dev/shm && mkdir /dev/shm
root #
mount --types tmpfs --options nosuid,nodev,noexec shm /dev/shm
同时确保设置了权限为1777:
root #
chmod 1777 /dev/shm /run/shm
进入新环境
现在所有的分区已经初始化,并且基础环境已经安装,是时候进入到新的安装环境了。这意思着会话将把根目录(能访问到最顶层的位置)从当前的安装环境(安装CD或其他安装媒介)变为安装系统(叫做初始化分区)。因此叫作 change root 或 chroot。
完成chroot有三个步骤:
- 使用 chroot 将根目录的位置从 /(在安装媒介里)更改成 /mnt/gentoo/ (在分区里)
- 使用 source 命令将一些设置(那些在 /etc/profile 中的)重新载入到内存中
- 更改主提示符来帮助我们记住当前会话在一个 chroot 环境里面。
root #
chroot /mnt/gentoo /bin/bash
root #
source /etc/profile
root #
export PS1="(chroot) ${PS1}"
从现在开始,所有的动作将立即在新 Gentoo Linux 环境里生效。
如果安装Gentoo时在这一步之后的任何地方中断,那么“应该”可以从这一步“继续”安装。不必再重新给磁盘分区!只需要挂载 root 分区 并运行上述步骤,然后通过复制 DNS 信息重新进入工作环境。 这也对修复引导程序问题很有用。更多的信息可以在 chroot 文章中找到。
配置 Portage
从网站安装 Gentoo ebuild 数据库快照
接下来,是安装 Gentoo ebuild 数据库。这个快照包含一组文件,包括通知 Portage 中有关可用软件的标题(用于安装),系统管理员可以选择哪些配置文件,软件包或 profile 特定新闻 (news) 项目等。
建议那些使用限制性防火墙的用户使用 emerge-webrsync 命令(它使用 HTTP / FTP 协议下载快照)节省网络带宽。 没有网络或带宽限制的读者可以愉快地跳到下一节。
这将从Gentoo的一个镜像中获取最新的快照(每天发布)并将其安装到系统上:
root #
emerge-webrsync
在这个操作中,emerge-webrsync可能会报找不到 /var/db/repos/gentoo/ 位置。这是预期内的并且不用担心——这个工具将会创建这个位置。
从现在开始,Portage 可能会提示建议运行某些更新。这是因为在安装了一个新的repository 快照后,Portage 发现了 stage 文件中已经安装的某些软件包有更新的版本。现在可以安全的忽略包的更新;可以延迟到 Gentoo 安装完成之后更新。
可选:更新Portage ebuild 数据库
Gentoo 数据库可以更新到最新版本。前面的emerge-webrsync命令将安装一个最近的快照(通常是24小时以内),所以这一步是可选的。
假设需要最新更新的软件包(1小时以内),可以使用emerge --sync。这个命令将使用rsync协议来更新 Gentoo ebuild 数据库(之前通过emerge-webrsync获得的)到最新状态。
root #
emerge --sync
在慢速的终端上,比如一些framebuffer或者串口控制台,建议使用--quiet
选项来加速这个进程:
root #
emerge --sync --quiet
阅读新闻条目
当同步Portage ebuild 数据库时,Portage 可能会输出类似于下面的信息:
* IMPORTANT: 2 news items need reading for repository 'gentoo'.
* Use eselect news to read news items.
创建新闻条目是为了提供一个通信媒介,通过 Gentoo ebuild 数据库来给用户推送重要的消息。可以使用 eselect news 管理新闻条目。eselect 应用程序是一个Gentoo 特有的应用程序,它允许使用通用管理接口来管理系统。在这里,要用到 eselect 的 news
模块。
对于news
模块,最常用的有三个操作:
- 使用
list
显示一个可用新闻条目的预览。 - 使用
read
来阅读新闻条目。 - 使用
purge
将在新闻条目阅读后删除,并且不能再次阅读。
root #
eselect news list
root #
eselect news read
可以通过新闻阅读器手册页查看更多关于新闻阅读器的信息:
root #
man news.eselect
选择正确的配置文件
桌面配置文件并非只是 桌面环境。也可能是小的窗口管理器,例如 i3 或 sway。
配置文件是任何一个Gentoo系统的积木。它不仅指定USE、CFLAGS和其它重要变量的默认值,还会锁定系统的包版本范围。这些设定全是由Gentoo的Portage开发者们来维护。
运行 eselect 使用 profile
模块,能看到当前系统正在使用什么配置文件:
root #
eselect profile list
Available profile symlink targets: [1] default/linux/ia64/ * [2] default/linux/ia64//desktop [3] default/linux/ia64//desktop/gnome [4] default/linux/ia64//desktop/kde
命令的这个输出只是一个示例,并会随时间演变。
若要使用 systemd, 请选择名称中包含 "systemd" 的配置文件。否则,选择相反的配置文件。
一些架构还会有桌面的子配置文件。
升级 profile 不能掉以轻心。 选择初始 profile 时,使用与最初使用的 stage3 “相同的版本”(例如 )。 每个新的 profile 版本都通过新闻项目公布,新闻项目中包含了迁移说明。 在切换到较新的 profile 之前,请按照说明操作。
在看完框架的可用配置文件ia64之后,用户可以键入以下命令为系统选择一个不同的配置文件:
root #
eselect profile set 2
developer
子配置文件是专用于Gentoo Linux开发,也就是说不适用于普通用户。更新@world集合
为了构建系统,最好更新系统的 @world 集合。
当系统应用了任何升级,或从 任何profile 构建了stage3 后,应用了变化的 use 标记时,下一步是必要的。
root #
emerge --ask --verbose --update --deep --newuse @world
如果选择了桌面环境配置文件,则此过程可能大大增加安装过程所需的时间量。时间紧迫的人可以通过这个“经验法则”工作:配置文件名称越短,系统 @world 集 越不具体; @world 集越不具体,系统将需要的软件包越少。换一种说法:
- 选择
default/linux/amd64/
将只有很少的包被重装或更新 - 选择
default/linux/amd64//desktop/gnome/systemd
将需要安装许多软件包,因为 init 系统要从 OpenRC 更改为 systemd,并且将安装 GNOME 桌面环境框架。
配置 USE 变量
USE是Gentoo为用户提供的最具威力的变量之一。很多程序通过它可以选择编译或者不编译某些可选的支持。例如,一些程序可以在编译时加入对 GTK+或是对Qt的支持。其它的程序可以在编译时加入或不加入对于SLL的支持。有些程序甚至可以在编译时加入对framebuffer的支持(svgalib)以取代X11(X服务器)。
大多数的发行版会使用尽可能多的支持特性编译它们的软件包,这既增加了软件的大小也减慢了启动时间,而这些还没有算上可能会涉及到的大量依赖性问题。Gentoo可以让你自己定义软件编译的选项,而这正是USE要做的事。
在USE变量里你可以定义关键字,它被用来对应相应的编译选项。例如,ssl
将会把SSL支持编译到程序中以支持它。-X
会移除其对于X服务器的支持(注意前面的减号)。gnome gtk -kde -qt5
将会以支持GNOME(和GTK+)但不支持KDE(和Qt)的方式编译软件,使系统为GNOME做完全调整(如果架构支持)。
默认的USE设置全放在了系统所使用的Gentoo配置文件的make.defaults文件中。Gentoo对它的配置文件们使用了一个(复杂的)继承系统,在这个阶段我们不去深入。最简单的检查当前活动的USE标记的办法是运行emerge --info并选择以USE开头的那一行:
root #
emerge --info | grep ^USE
USE="X acl alsa amd64 berkdb bindist bzip2 cli cracklib crypt cxx dri ..."
上面的示例被截断了,实际上的USE列表值是非常非常多的。
可以在系统的 /var/db/repos/gentoo/profiles/use.desc 中找到可用的USE标记的完整描述。
root #
less /var/db/repos/gentoo/profiles/use.desc
在less命令中,可以通过使用↑和↓键来滚动,并且可以按q退出。
作为示例,我们展示一个支持DVD、ALSA,以及CD录制的基于KDE系统的USE设置:
root #
nano -w /etc/portage/make.conf
/etc/portage/make.conf
为基于 KDE/Plasma 系统启用 DVD、ALSA 和 CD录制支持 flagUSE="-gtk -gnome qt5 kde dvd alsa cdr"
当在 /etc/portage/make.conf中定义一个 USE 值,会添加到系统 USE 标志中。USE 标志可以通过在列表内的值前面中添加 - 减号来全局移除。例如,禁用 X 图形化环境的支持,可以设置 -X
:
/etc/portage/make.conf
忽略默认USE标记USE="-X acl alsa"
尽管可以设置
-*
(这将禁用除 make.conf 中指定的值之外的所有 USE 值),但这样做很不推荐,也不理智。Ebuild 开发人员在 ebuild 中选择某些默认的 USE 标志值以防止冲突,增强安全性,避免错误,以及其他原因。禁用 所有 USE 标志将否定默认行为,并可能导致重大问题。CPU_FLAGS_*
一些架构(包括 AMD64/X86、ARM、PPC)有称为 CPU_FLAGS_<ARCH> 的 USE_EXPAND 变量,请将 <ARCH> 替换为相应的系统架构名称。
不要糊涂! AMD64 和 X86 系统有一些共同的架构,所以 AMD64 正确的变量名称是 CPU_FLAGS_X86。
该变量用于构建编译特定的汇编代码或其他内置函数——通常是手写或其它的,
并且与要求编译器输出针对某个 CPU 功能的优化代码不同。(例如 -march=
)
如果需要,用户除了配置他们的 COMMON_FLAGS ,还应该设置此变量。
需要几个步骤来设置它:
root #
emerge --ask app-portage/cpuid2cpuflags
如果有疑问,请手动检查输出:
root #
cpuid2cpuflags
然后复制输出到 package.use:
root #
echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags
VIDEO_CARDS
VIDEO_CARDS USE_EXPAND 变量应根据使用的 GPU 进行适当配置。Xorg 指南介绍了如何执行此操作。仅控制台安装则不需要设置 VIDEO_CARDS。
可选:配置 ACCEPT_LICENSE 变量
Gentoo 软件包的许可证存储在 ebuild 的 LICENSE 变量中。系统接受的特定许可证或许可证组在以下文件中定义:
- 整个系统的在已选择的 profile。
- 整个系统的在 /etc/portage/make.conf。
- 每个软件包的在 /etc/portage/package.license 文件。
- 每个软件包的在/etc/portage/package.license/ 目录 或文件。
Portage 在 ACCEPT_LICENSE 中查找允许安装的软件包。打印当前系统范围的值运行:
user $
portageq envvar ACCEPT_LICENSE
@FREE
可选择通过在配置文件中更改 /etc/portage/make.conf 覆盖系统范围默认接受项。
/etc/portage/make.conf
如何在系统范围接受 ACCEPT_LICENSE 许可证示例ACCEPT_LICENSE="-* @FREE @BINARY-REDISTRIBUTABLE"
也可以选择为每个软件包定义接受的许可证,如下面的文件目录所示。需要注意的是,如果 package.license 目录不存在的话,需要创建该目录。
root #
mkdir /etc/portage/package.license
/etc/portage/package.license/kernel
如何接受每个软件包的许可证示例app-arch/unrar unRAR
sys-kernel/linux-firmware @BINARY-REDISTRIBUTABLE
sys-firmware/intel-microcode intel-ucode
ebuild 中 的 LICENSE 变量仅是为 Gentoo 开发人员和用户准备的一份指南。它既不是法律声明,也不保证其真实性。因此不要过度依赖它,您需要深入检查软件包的本身,以及已经安装到系统的所有文件。
在 Gentoo 仓库中定义的许可证组,由 Gentoo Licenses project 项目管理,有:
组别名称 | 描述 |
---|---|
@GPL-COMPATIBLE | 由自由软件基金会批准的 GPL 兼容许可 GPL [a_license 1] |
@FSF-APPROVED | 由 FSF 批准的自由软件许可证(包括@GPL-COMPATIBLE ) |
@OSI-APPROVED | 由开放源代码促进会批准的许可证 [a_license 2] |
@MISC-FREE | Misc 许可证可能是自由软件,即遵循自由软件定义 [a_license 3] ,但不被 FSF 或 OSI 批准 |
@FREE-SOFTWARE | 结合 @FSF-APPROVED,@OSI-APPROVED 和 @MISC-FREE |
@FSF-APPROVED-OTHER | 经 FSF 批准的“免费文档”和“除软件和文档外的实际使用作品”(包括字体)许可证 |
@MISC-FREE-DOCS | 遵循自由定义的免费文档和其他作品(包括字体) [a_license 4]且没有在 @FSF-APPROVED-OTHE 中列出的杂项许可 |
@FREE-DOCUMENTS | 结合 @FSF-APPROVED-OTHER 和 @MISC-FREE-DOCS |
@FREE | 所有许可证的 metaset,可以自由使用,共享,修改和共享修改。结合 @FREE-SOFTWARE 和 @FREE-DOCUMENTS |
@BINARY-REDISTRIBUTABLE | 至少允许以二进制形式自由分发软件的许可证。包括 @FREE |
@EULA | 试图剥夺您的权利的许可协议。与“保留所有权利”和需要明确的批准相比,@EULA 有更多的限制 |
时区
这一步不适用于 musl libc 用户。不知道 musl libc 是什么的用户应该执行此步骤。
为系统选择时区。在/usr/share/zoneinfo/中查找可用的时区,然后写进/etc/timezone文件。
root #
ls /usr/share/zoneinfo
假设要选择的时区是 “Europe/Brussels”。
OpenRC
我们把时区名称写入 /etc/timezone 文件。
root #
echo "Europe/Brussels" > /etc/timezone
请避免使用 /usr/share/zoneinfo/Etc/GMT* 时区,它们的名字并不意味着想要的时区。例如,GMT-8 实际上是 GMT+8。
接下来,重新配置 sys-libs/timezone-data 包,将会为我们基于 /etc/timezone 条目更新 /etc/localtime 文件。 /etc/localtime 文件用于让系统的 C 类库知道系统在什么时区。
root #
emerge --config sys-libs/timezone-data
systemd
当使用 systemd 时,采用一种稍有不同的方法。生成一个符号链接:
root #
ln -sf ../usr/share/zoneinfo/Europe/Brussels /etc/localtime
之后当 systemd 运行时,时区和相关设置可以使用 timedatectl 命令配置。
配置区域设置
这一步不适用于 musl libc 用户。不知道 musl libc 是什么的用户应该执行此步骤。
生成区域设置
大多数用户只想在他们的系统上使用一或两个地区。
Locale 不只是指定用户应该使用与系统进行交互的语言,同时也指定了字符串排序,日期和时间的显示等规则。Locale 是 "区分大小写" 的,必须完全按照描述的方式表示。完整的 locale 可用列表可以在 /usr/share/i18n/SUPPORTED 文件中找到。
系统支持的 locale 必须在 /etc/locale.gen 文件中定义。
root #
nano -w /etc/locale.gen
下面的地区是一个示例,展示了同时使用英语(美国)和德语(德国)及附加字符格式(如 UTF-8)。
/etc/locale.gen
启用US和 DE 地区及附加字符格式en_US ISO-8859-1
en_US.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE.UTF-8 UTF-8
许多应用程序需要至少有 UTF-8 区域设置才能正确构建。
下一步是运行 locale-gen 命令。此命令会生成 /etc/locale.gen 文件中所有指定的地区。
root #
locale-gen
要验证当前所选择的 locale 可用,可以运行 locale -a。
在 systemd 安装中,可以使用 localectl,例如 localectl set-locale ... 或者 localectl list-locales。
选择区域设置
等完成后,我们就来设定系统级别的区域设置。我们又一次使用 eselect 来做这件事,现在使用 locale
模块。
通过 eselect locale list 可显示可用的目标:
root #
eselect locale list
Available targets for the LANG variable: [1] C [2] C.utf8 [3] en_US [4] en_US.iso88591 [5] en_US.utf8 [6] de_DE [7] de_DE.iso88591 [8] de_DE.utf8 [9] POSIX [ ] (free form)
可以使用 eselect locale set <NUMBER> 选择正确的区域设置:
root #
eselect locale set 9
还可以手动编辑 /etc/env.d/02locale 文件,在 Systemd 是 /etc/locale.conf 文件,来选择区域设置:
/etc/env.d/02locale
手动设置系统区域设置
定义LANG="de_DE.UTF-8"
LC_COLLATE="C.UTF-8"
设定区域设置可以避免在后面安装中,内核和软件汇编时的警告和错误。
现在重新加载环境:
root #
env-update && source /etc/profile && export PS1="(chroot) ${PS1}"
更多有关区域设置选择过程的指导,另请参阅本地化指南和 UTF-8 指南。
可选:安装固件和微代码
固件
在开始配置内核部分之前,最好了解下,一些硬件设备需要先在系统上安装附加的固件,有时是非自由及开放源代码软件(FOSS)才能正常运行。我们经常网络接口上会使用附加的固件,特别是无线网络接口,常用于台式电脑和笔记本电脑。此外,来自 AMD,Nvidia 和 Intel 等供应商的现代视频芯片,要想使用完整的功能,通常也需要外部固件文件。现代硬件设备的大多数固件都可以在 sys-kernel/linux-firmware 软件包中找到。
为了在必要时提供固件,首次重启系统之前推荐安装 sys-kernel/linux-firmware 软件包:
root #
emerge --ask sys-kernel/linux-firmware
安装某些固件软件包时,经常需要接受固件关联的许可证。有需要的话,访问手册的许可证处理章节有助于你接受许可证。
注意,当内核以模块(M)加载内核符号时,将从文件系统中加载其相关的固件文件。对于以模块加载的符号,没有必要把设备固件文件加入内核二进制镜像中。
微码
除了独立显卡硬件和网络接口之外,CPU 可能也需要固件更新。通常这种固件被称为微码(microcode)。有时需要更新版本的微码来修补 CPU 硬件中的不稳定性、安全问题或其他复杂的错误。
AMD CPU 的微码更新在前面提到的 sys-kernel/linux-firmware 软件包内分发。Intel CPU 的微码可以在 sys-firmware/intel-microcode 包中找到,并且需要单独安装。更多有关如何更新微码的细节,请查看微码文章。
内核配置和编译
现在是时候来配置和编译内核源代码了。将介绍三种用内核管理安装的方法,但是安装后,任何时候都可以采用新的方法。
由操作最少到操作最多排序:
- 全自动方法:Distribution 内核
- Distribution 内核用来配置、自动构建安装 Linux 内核、相关模块和 initramfs 文件(可选,但是默认启用)。将来内核就像其他的系统软件包一样,通过使用包管理器全自动升级。如果需要定制内核,它可以提供自定义内核配置文件。这种过程操作最少,并且非常适合新 Gentoo 用户,因为它开箱即用,并且系统管理员最少参与。
- 混合方法:Genkernel
- 通过系统包管理器安装新内核源代码。系统管理员使用 Gentoo 的 genkernel 工具的通用配置文件,自动构建和安装 Linux 内核、相关模块和 initramfs 文件(可选,但默认不 启用)。如果要自定义内核,它可以提供自定义内核配置文件。将来每次更新内核配置、编译和安装都需要系统管理员运行 eselect kernel,genkernel和其他可能的命令。
- 全手动方法
- 通过系统包管理器安装新的内核源代码。使用 eselect kernel 和一大堆 make 命令手动配置、构建和安装内核。将来内核升级需要重复手动配置、构建和安装内核文件的过程。这是操作做多的过程,但是在内核更新过程提供最大程度控制。
Linux内核是所有发行版的核心。它位于用户程序和系统硬件之间。尽管手册提供给用户一些可选的内核源码,但是在内核概述页面有更全面的列表,上面有着更多的细节描述。
安装内核源码
本小节只有关于使用 genkernel(混合)或手动内核管理方法
当为基于 ia64 的系统安装和编译内核时,Gentoo 推荐使用 sys-kernel/gentoo-sources 软件包。
选择一个合适的内核并使用 emerge 来安装它。
root #
emerge --ask sys-kernel/gentoo-sources
这将在 /usr/src/ 中安装路径中特定版本的 Linux 内核源码。如果没有在所选内核源码包内启用 USE=symlink
,它将不会自行创建符号链接。
我们习惯性的维护 /usr/src/linux 符号链接。这样,它指向与当前运行的内核相对应的源代码。然而,默认情况下不会创建这个符号链接。有一个简单创建符号链接的方法是利用 eselect 的内核模块。
更多有关符号链接的信息以及如何管理符号链接,请参考升级内核。
首先,列出所有已安装的内核:
root #
eselect kernel list
Available kernel symlink targets: [1] linux-3.16.5-gentoo
要创建一个名为 linux 的符号链接,使用:
root #
eselect kernel set 1
root #
ls -l /usr/src/linux
lrwxrwxrwx 1 root root 12 Oct 13 11:04 /usr/src/linux -> linux-3.16.5-gentoo
备选:genkernel
如果全手动配置看起来太恐怖,系统管理员应该考虑使用 genkernel 混合方法来维护内核。
Genkernel 提供了通用的内核配置文件,可以自动生成内核(generates the kernel),initramfs,和相关模块,然后将生成的二进制文件安装到适当的位置。它提供了系统首次启动时最小的常规硬件支持,并允许将来自定义内核配置以及对内核额外升级。
请注意:虽然使用 genkernel 维护内核可以让系统管理员对系统内核,initramfs 和其他选项更新时有更多的操作,但当新的源代码发行时,却会投入更多的时间和精力去更新内核。所以那些希望不手动内核维护的人应该使用 distribution 内核。
更进一步说,认为 genkernel 可以为正在运行的硬件自动生成自定义的内核配置 是一种误解;genkernel 使用了支持大多数通用硬件的预定的内核配置文件,并且可以自动处理 make 命令来汇编和安装内核、相关模块以及 initramfs 文件。
二进制可再分发软件许可证组
如果已经预先安装了 linux-firmware 软件包,那么跳转到安装章节。
由于 sys-kernel/genkernel 软件包默认启用 firwmare
USE 标志,所以包管理器还会尝试拉取 sys-kernel/linux-firmware 软件包。安装 linux-firmware 之前,需要接受二进制可再分发软件许可证。
通过在 /etc/portage/make.conf 文件为 ACCEPT_LICENSE 变量添加 @BINARY-REDISTRIBUTABLE
值,可以接受系统范围任何软件包的许可证组。通过在 /etc/portage/package.license/linux-firmware 文件添加特定内容,可以单独接受 linux-firmware 软件包的许可证组。
如果有必要,查看手册安装基本系统里的接受软件许可证的方法章节,然后修改一些可接受的软件许可证。
如果分析不出来,可以这样做:
root #
mkdir /etc/portage/package.license
/etc/portage/package.license/linux-firmware
为 linux-firmware 软件包接受二进制可再分发许可证(binary redistributable)sys-kernel/linux-firmware @BINARY-REDISTRIBUTABLE
安装
说明完以及准备好之后,安装 sys-kernel/genkernel 软件包:
root #
emerge --ask sys-kernel/genkernel
常规
运行genkernel all来编译内核源码。值得注意的是,使用 genkernel 编译的内核适用于不同计算机体系结构的各种硬件,这可能使编译过程需要一阵子来完成。
如果 root 分区/卷 不是使用 ext4 作为文件系统,它可能需要使用 genkernel --menuconfig all 来手动配置内核,并在内核中添加对这个具体文件系统的支持(比如:不是作为一个模块)。LVM2用户可能要作为参数来添加
--lvm
。LVM2 用户应该在下面 genkernel命令添加
--lvm
参数 。root #
genkernel --mountboot --install all
genkernel 完成后,将在 /boot 目录生成并安装内核和初始化内存文件(initial ram filesystem,initramfs)。/lib/modules 目录将安装相关模块。initramfs 将在内核加载后立即启动,然后进行硬件自动检测(就像在 live 磁盘镜像环境中一样)。
root #
ls /boot/vmlinu* /boot/initramfs*
root #
ls /lib/modules
可选:手动配置
介绍
手动配置内核经常被 Linux 用户认为是最困难的步骤。但是事实并非如此──当您手动配置几次内核之后,你就不会再觉得它有多么难了!
无论如何,有一件事是真实的:当手动配置内核时,了解(硬件)系统是至关重要的。大多数信息可以通过安装包含lspci命令的sys-apps/pciutils来收集:
root #
emerge --ask sys-apps/pciutils
在chroot中,可以安全的忽略任何lspci可能抛出的关于pcilib的警告(比如pcilib: cannot open /sys/bus/pci/devices)。
另一个系统信息来源是运行lsmod来查看安装CD使用什么内核模块,它可能对启用什么提供了一个好的暗示。
现在进入内核源码目录并执行make menuconfig。这将启动一个菜单驱动的配置屏幕。
root #
cd /usr/src/linux
root #
make menuconfig
Linux 内核配置有很多很多的章节。我们先列出一些必须激活的选项(否则 Gentoo 将无法工作,或者离开附加的调整将无法正常工作)。我们同时在 Gentoo 维基上有一个 Gentoo 内核配置指南可能会在将来有帮助。
启用必要的选项
当使用 sys-kernel/gentoo-sources 时,强烈推荐启用 Gentoo 特有的配置选项。这些确保了系统可以正常运行所需的最少内核特性:
Gentoo Linux --->
Generic Driver Options --->
[*] Gentoo Linux support
[*] Linux dynamic and persistent device naming (userspace devfs) support
[*] Select options required by Portage features
Support for init systems, system and service managers --->
[*] OpenRC, runit and other script based systems and managers
[*] systemd
当然,最后两行的选择取决于所选择的 init 系统 (OpenRC 对比 systemd)。但是两种 init 系统都启用也并没有害处。
当使用 sys-kernel/vanilla-sources时,不能使用额外的 init 系统。可以使用已启用的 init 系统,但这超出了手册的范围。
启用典型的系统组件支持
确保引导系统的每一个至关重要的驱动(比如 SATA 控制器,NVMe 块设备支持,文件系统支持,等等)是编译进内核而不是作为一个模块,否则系统将无法完全引导。
接下来选择最正确的CPU类型。同时建议启用MCE功能(如果可用)能在硬件出现问题时通知用户。在一些架构(比如x86_64),这些错误不会打印到 dmesg,但是会到/dev/mcelog。这需要app-admin/mcelog包。
同时选择Maintain a devtmpfs file system to mount at /dev来让重要的设备文件在引导过程的早期就已就绪(CONFIG_DEVTMPFS and CONFIG_DEVTMPFS_MOUNT):
Device Drivers --->
Generic Driver Options --->
[*] Maintain a devtmpfs filesystem to mount at /dev
[*] Automount devtmpfs at /dev, after the kernel mounted the rootfs
验证 SCSI 磁盘支持是否已激活(CONFIG_BLK_DEV_SD):
Device Drivers --->
SCSI device support --->
<*> SCSI device support
<*> SCSI disk support
Device Drivers --->
<*> Serial ATA and Parallel ATA drivers (libata) --->
[*] ATA ACPI Support
[*] SATA Port Multiplier support
<*> AHCI SATA support (ahci)
[*] ATA BMDMA support
[*] ATA SFF support (for legacy IDE and PATA)
<*> Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support (ata_piix)
验证已经启用基础 NVMe 支持:
Device Drivers --->
<*> NVM Express block device
Device Drivers --->
NVME Support --->
<*> NVM Express block device
也可以启用下列额外的 NVMe 支持:
[*] NVMe multipath support
[*] NVMe hardware monitoring
<M> NVM Express over Fabrics FC host driver
<M> NVM Express over Fabrics TCP host driver
<M> NVMe Target support
[*] NVMe Target Passthrough support
<M> NVMe loopback device support
<M> NVMe over Fabrics FC target driver
< > NVMe over Fabrics FC Transport Loopback Test driver (NEW)
<M> NVMe over Fabrics TCP target support
现在进入File Systems并选择系统将使用的文件系统。不要作为模块来编译根文件系统所使用的文件系统,否则系统可能不挂载这个分区。同时选择Virtual memory和/proc file system根据系统的需要选择一个或多个以下选项:
File systems --->
<*> Second extended fs support
<*> The Extended 3 (ext3) filesystem
<*> The Extended 4 (ext4) filesystem
<*> Btrfs filesystem support
<*> XFS filesystem support
DOS/FAT/NT Filesystems --->
<*> MSDOS fs support
<*> VFAT (Windows-95) fs support
Pseudo Filesystems --->
[*] /proc file system support
[*] Tmpfs virtual memory file system support (former shm fs)
如果使用PPPoE连接到互联网,或者是拨号调制解调器,则启用下面的选项(CONFIG_PPP, CONFIG_PPP_ASYNC, and CONFIG_PPP_SYNC_TTY):
Device Drivers --->
Network device support --->
<*> PPP (point-to-point protocol) support
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
这两个压缩选项将是无害的,但是它们一定是不需要的,包括基于以太网的PPP选项也是一样,只有在配置内核模式PPPoE时才会需要。
不要忘记在内核中包括网(以太网或无线)卡。
大多数系统会有多核心处理,所以激活 Symmetric multi-processing support(对称多处理) 很重要 (CONFIG_SMP):
Processor type and features --->
[*] Symmetric multi-processing support
在多核系统中,每个核心视为一个处理器。
如果使用USB输入设备(比如键盘和鼠标)或其他USB设备,不要忘记启用那些:
HID support --->
-*- HID bus support
<*> Generic HID driver
[*] Battery level reporting for HID devices
USB HID support --->
<*> USB HID transport layer
[*] USB support --->
<*> xHCI HCD (USB 3.0) support
<*> EHCI HCD (USB 2.0) support
<*> OHCI HCD (USB 1.1) support
Handbook:IA64/Blocks/Kernel/zh-cn
可选:生成 initramfs
在某些情况中需要建立一个 initramfs──基于内存的初始化文件系统(initial ram-based file system)。最常见的原因是当重要的文件系统位置(如 /usr/ 或 /var/ )在分离的分区时。通过initramfs,可以使用 initramfs 里面的工具来挂载这些分区。
如果没有 initramfs,会存在着系统将无法正常启动的风险,因为这是负责安装的文件系统工具需要驻留在未挂载文件系统的信息。initramfs 中的一个将在必要的文件拉进它的内核启动之后使用的档案,但控制被移交前转移到初始化工具。在 initramfs 的脚本,然后将确保分区正确地安装在系统继续启动之前。
如果要使用 genkernel,应该在编译内核和 initramfs 时都使用。当只在生成 initramfs 时使用 genkernel,关键要将
--kernel-config=/path/to/kernel.config
传递给 genkernel,否则生成的 initramfs 可能在手动构建的内核中无法工作 。请注意,手动构建内核超出了手册的支持范围。更多信息参考内核配置文章。要安装 initramfs,首先安装sys-kernel/dracut,然后用它生成 initramfs:
root #
emerge --ask sys-kernel/dracut
root #
dracut --kver=3.16.5-gentoo
initramfs将存储在/boot/。结果文件可以简单的通过列出以initramfs开头的文件来找到:
root #
ls /boot/initramfs*
现在继续到内核模块。
内核模块
列出可用的内核模块
硬件模块手动列出是可选的。在大多数情况下,udev 通常将加载所有被检测为已连接的硬件模块。然而,列出自动检测到的模块并没有什么不良影响的。有时,一些奇特硬件需要帮助来加载其驱动程序。
可以在 /etc/modules-load.d/*.conf 文件中添加需要在每次启动时加载的模块,格式为每行一个模块。如果模块需要附加选项,可以在 /etc/modprobe.d/*.conf 文件内设置。
对于特定的内核版本,如果要查看所有可用模块,使用下面的 find 命令。不要忘记在查找时替换 “<kernel version>” 为对应的内核版本:
root #
find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko' | less
强制加载特定内核模块
要强制加载内核 3c59x.ko 模块(3Com 网卡家族的特定驱动),编辑/etc/modules-load.d/network.conf 文件并在里面输入模块名字。
root #
mkdir -p /etc/modules-load.d
root #
nano -w /etc/modules-load.d/network.conf
注意,模块的 .ko 文件后缀对加载机制影响不大,所以配置文件中没有文件后缀:
/etc/modules-load.d/network.conf
强制加载 3c59x 模块3c59x
继续到配置系统来安装。
文件系统信息
分区表和 UUID
MBR(BIOS)和GPT都支持“文件系统”标签和“文件系统”的UUID。 这些属性可以在尝试查找和挂载块设备时使用,作为 mount 命令的替代方法,在 /etc/fstab 中定义。文件系统标签和 UUID 由 LABEL 和 UUID 前缀标识,可以使用 blkid 命令查看:
root #
blkid
如果分区中的文件系统被擦除,则文件系统标签和UUID值将随后被更改或删除。
出于唯一性,建议使用 MBR 分区表的读者使用 UUID 来定义/etc/fstab 中的可挂载卷。
LVM 卷文件系统的 UUID 与其 LVM 快照相同,因此应避免使用 UUID 挂载 LVM 卷。
分区卷标和 UUIDs
已经使用 GPT 磁盘的用户有一些更稳定的选项可用于在 /etc/fstab 中定义分区。分区卷标和分区 UUID 可以用来标识块设备的单独分区,而不管为分区本身选择了什么文件系统。分区卷标和 UUID 分别由 PARTLABEL 和 PARTUUID 前缀标识,可以通过运行 blkid 命令在终端中很好地查看分区标签:
root #
blkid
虽然对于分区表不总是正确的,但使用UUID来标识fstab 中的分区,即使将来文件系统更改,也可以保证在寻找某个卷时引导加载程序不会被混淆。对于经常重新启动并定期添加和删除SATA设备时,在 fstab 中定义分区,使用旧的默认分区文件 (/dev/sd*N非常危险) 。
块设备文件的命名取决于许多因素,包括磁盘如何以及以什么顺序加载到系统。它们也可能以不同的顺序显示,具体情况取决于在早期启动过程中内核首先检测到哪些设备。 有了这个说明,除非有人打算不断地解决磁盘排序问题,使用默认块设备文件是一个简单和直接的方法。
关于 fstab
在Linux系统下,系统所用到的所有分区都必须在 /etc/fstab 文件中指明。这个文件包含了这些分区的挂载点(在系统目录树中的位置)、挂载方法和特殊挂载选项(是否自动挂载,是否某个用户可以挂载它等)。
创建 /etc/fstab 文件
/etc/fstab 文件使用一种特殊语法格式。每行都包含六个字段。这些字段之间由空白键(空格键,tab键,或者两者混合使用)分隔。每个字段都有自己的含意:
- #第一个字段显示要挂载的特殊 block 设备或远程文件系统。 有几种设备标识符可用于特殊块设备节点,包括设备文件路径,文件系统标签,UUID,分区标签以及UUID。
- 第二个字段是分区挂载点,也就是分区应该挂载到的地方。
- 第三个字段给出分区所用的文件系统的类型。
- 第四个字段给出的是挂载分区时 mount 命令所用的挂载选项。由于每个文件系统都有自己的挂载选项,我们建议系统管理员阅读 mount 手册(man mount)以获得所有挂载选项的列表。多个挂载选项之间是用逗号分隔的。
- 第五个字段是给dump使用的,用以决定这个分区是否需要dump。一般情况下,你可以把该字段设为
0
(零)。 - 第六个字段是给fsck使用的,用以决定系统非正常关机之后文件系统的检查顺序。根文件系统应该为
1
,而其它的应该为2
(如果不需要文件系统自检的话可以设为0
)。
Gentoo stage 文件默认提供的 /etc/fstab “不”是有效的fstab 文件,它只是提供了几个模板,可用于输入相关值。
root #
nano /etc/fstab
For a DOS/Legacy BIOS system
增加符合你分区方案的规则,为你的光驱(当然,如果你有其他分区或者驱动器,也为它们加上)添加挂载规则。
下面是/etc/fstab文件的例子:
/etc/fstab
一个 /etc/fstab 例子# 调整与准备磁盘步骤的任何格式差异
/dev/sda2 none swap sw 0 0
/dev/sda3 / xfs defaults,noatime 0 1
/dev/cdrom /mnt/cdrom auto noauto,user 0 0
/dev/cdrom /mnt/cdrom auto noauto,user 0 0 }}
For an EFI system
Below is an example of an /etc/fstab file for an system that will boot via EFI firmware:
/etc/fstab
A full /etc/fstab example for a EFI system# Adjust any formatting difference and additional partitions created from the "Preparing the disks" step
defaults 0 2
/dev/sda2 none swap sw 0 0
/dev/sda3 / xfs defaults,noatime 0 1
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
/dev/cdrom /mnt/cdrom auto noauto,user 0 0
auto
选项可以使mount 猜测文件系统(推荐对于可移动设备采用这个选项,因为它们可能采用很多不同的文件系统),而 user
选项使得非root用户可以挂载光驱。
To improve performance, most users would want to add the noatime
mount option, which results in a faster system since access times are not registered (those are not needed generally anyway). This is also recommended for systems with solid state drives (SSDs). Users may wish to consider lazytime
instead.
由于会使性能下降,所以不推荐在 /etc/fstab 定义
discard
挂载选项。一般来说,最好使用作业调度器(例如 cron 或 timer (systemd))定期丢弃块。查看定期 fstrim 作业来获取更多信息。仔细检查/etc/fstab文件,保存并退出以继续。
网络信息
特别注意,以下部分可以帮助读者快速设置他们的系统接入局域网。
对于运行 OpenRC 的系统,更多网络设置的细节参考高级网络配置章节,手册末尾附近有介绍。有更具体网络需求的系统可能需要跳过此章节,然后返回此处继续后续的安装。
更多关于 systemd 具体的网络设置,请参考 systemd 文章的网络部分。
主机名
系统管理员必须要做的事情之一就是命名他们的机器。尽管这看上去很容易,但是很多用户觉得很难起一个合适的主机名。为了加快进度,应该知道所有你所命名的名字都是可以在今后重新修改的。下面的示例使用 tux 作为主机名。
设置主机名(OpenRC 和 systemd)
root #
echo tux > /etc/hostname
systemd
可以使用 hostnamectl 工具在正运行 systemd 的系统设置系统的主机名。
可以将设置主机名为 "tux":
root #
hostnamectl hostname tux
运行 hostnamectl --help 或 man 1 hostnamectl 查看帮助。
网络
配置网络接口有许多可用的方法。本章节只介绍了其中一些方法。你可以选择一个看起来最合适的设置方法。
通过 dhcpcd 使用 DHCP (任何 init 系统)
大多数 LAN 网络都运行 DHCP 服务器。如果是这种情况,则建议使用 dhcpcd 程序获取 IP 地址。
安装:
root #
emerge --ask net-misc/dhcpcd
在 OpenRC 系统中启用和开始服务:
root #
rc-update add dhcpcd default
root #
rc-service dhcpcd start
在 systemd 系统中启用和开始服务:
root #
systemctl enable --now dhcpcd
完成这些步骤后,下次系统启动时,dhcpcd 应该就会从 DHCP 服务器获取 IP 地址。 更多细节请查看 Dhcpcd 文章。
netifrc (OpenRC)
配置网络
在Gentoo Linux安装时,网络已经配置。然而,这是安装的 live 环境本身的配置,并不是新的系统环境的网络配置。现在你所要设置的是 Gentoo 系统的永久网络配置。
更多关于网络配置的详细信息,包括网卡绑定、网桥、802.1Q VLANs和无线网络在内的高级配置会在高级网络配置这一部分介绍.
/etc/conf.d/net 当中收集了所有的网络信息。尽管这个文件采用直接易懂的语法,如果你还是因为觉得不够直观而完全不知道如何手动进行网络配置的话,请不用担心,我们将一一解释。在 /usr/share/doc/netifrc-*/net.example.bz2 中有一个详细注释过的例子,它涵盖了许多种类不同的配置。
首先安装net-misc/netifrc:
root #
emerge --ask --noreplace net-misc/netifrc
系统默认使用DHCP。如果使用DHCP的话,你需要安装一个DHCP客户端。这个将在稍后的安装必要的系统工具部分介绍。
如果你需要配置你的网络连接,不管是因为你是需要指定DHCP选项还是你不使用DHCP,打开 /etc/conf.d/net:;
root #
nano /etc/conf.d/net
设置 config_eth0 和 routes_eth0 输入IP地址信息和路由信息:
假定网络接口名称是 eth0。这个名称非常依赖于系统,如果安装介质足够新,则建议在从安装介质引导时重命名接口。更多信息可以在网络接口命名章节中找到。
/etc/conf.d/net
静态IP定义config_eth0="192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255"
routes_eth0="default via 192.168.0.1"
要使用DHCP,定义 config_eth0:
/etc/conf.d/net
DHCP 配置config_eth0="dhcp"
请阅读 /usr/share/doc/netifrc-*/net.example.bz2 获取额外的配置文件选项的列表。如果你需要设定特殊的 DHCP 选项,请参考你的 DHCP 客户端的 man 手册页。
如果你有多个网络接口,那么重复之前对于config_eth1,config_eth2等操作步骤。
现在保存配置并退出。
在启动时自动启用网络连接
为了在启动时自动激活网络接口,你必须添加这些到default运行级别。
root #
cd /etc/init.d
root #
ln -s net.lo net.eth0
root #
rc-update add net.eth0 default
如果系统有多个网络接口,那么需要创建适当的net.* 文件,就像我们使用net.eth0一样。
如果在引导系统后,发现网络接口名称(目前写作 eth0
)是错误的,那么执行以下步骤来纠正这一点:
- 用正确的名称更新 /etc/conf.d/net(比如说
enp3s0
或者enp5s0
取代eth0
)。 - 创建符号链接(比如 /etc/init.d/net.enp3s0)。
- 删除旧的符号链接(rm /etc/init.d/net.eth0)。
- 创建新的默认运行级别。
- 删除旧的运行级别,使用 rc-update del net.eth0 default。
hosts 文件
现在你需要告诉Linux有关你的网络的信息。这需要在/etc/hosts文件中定义,它将帮助你将那些无法被域名解析器解析的主机名解析成IP地址。
root #
nano /etc/hosts
/etc/hosts
Filling in the networking information# 定义当前系统
127.0.0.1 tux.homenetwork tux localhost
# 可选,定义网络上的其它系统
192.168.0.5 jenny.homenetwork jenny
192.168.0.6 benny.homenetwork benny
保存并退出编辑器,继续
系统信息
Root 密码
使用passwd命令设置root密码。
root #
passwd
稍后将为日常操作创建其他常规用户帐户。
配置引导和启动
OpenRC
当在 Gentoo 中使用 OpenRC 时,系统使用/etc/rc.conf配置系服务,启动和关闭。 打开 /etc/rc.conf 并查看文件中的所有注释。查看设置并根据需要进行更改。
root #
nano /etc/rc.conf
接下来,打开/etc/conf.d/keymaps 来处理键盘设置。编辑它就可以设置你的键盘。
root #
nano /etc/conf.d/keymaps
要特别注意keymap这个变量 。如果你选择了错误的KEYMAP,在你敲击键盘的时候会有奇怪的结果。
完成 /etc/conf.d/hwclock 的配置之后,保存并退出。
root #
nano /etc/conf.d/hwclock
如果你机器上的时钟不用UTC,你需要在配置文件加上clock="local"
。否则,你的时钟就有可能出现偏差。
systemd
首先,推荐运行 systemd-firstboot,这样会准备好系统各个组件的正确设置,以便首次启动到新的 systemd 环境。传递以下选项将提示用户设置区域设置、时区、主机名、root 密码和 root shell 值。并且会分配一个随机的机器 ID:
root #
systemd-firstboot --prompt --setup-machine-id
接下来,用户应该运行 systemctl 来重置所有已安装工具的文件为预设的策略值:
root #
systemctl preset-all --preset-mode=enable-only
虽然可以运行完整的预设更改,但这可能会重置在此过程中已配置的任何服务:
root #
systemctl preset-all
这两个步骤将有助于确保从 live 环境平滑过渡到安装过程的首次启动。
系统日志工具
OpenRC
因为有一些工具提供给用户的功能比较类似,它们就没有包含在stage3当中。现在就是你选择安装哪一个的时候了。
首先需要决定的工具就是系统日志机制。Unix 和 Linux 在日志记录功能方面有良好的传统——如果愿意的话,可以把系统发生的所有事件都记录到日志文件中。
Gentoo提供了多种系统日志工具可供选择。包括:
- app-admin/sysklogd -提供传统的系统日志记录守护程序。默认日志配置容易学习,这个包是初学者的好选择。
- app-admin/syslog-ng -高级系统记录器。 需要额外配置很多东西, 更高级的用户可以根据它的日志潜力选择这个包; 注意额外的配置是任何种类的智能日志记录的必要条件。
- app-admin/metalog -一个可以灵活配置的系统日志工具。
Gentoo ebuild 仓库内或许还有其他系统日志工具,因为可用软件包数量每天在增加。
如果打算使用 syslog-ng ,建议安装并且配置 logrotate。syslog-ng 并没有提供系统日志文件的滚动功能。新版本(>= 2.0)的 sysklogd 会自己处理日志滚动。
要安装你所选择的系统日志工具,你可以用 emerge 命令安装它。在 OpenRC 中,使用 rc-update 将它加入默认运行级别。以下就是一个安装 app-admin/sysklogd 并作为系统 syslog 工具的例子:
root #
emerge --ask app-admin/sysklogd
root #
rc-update add sysklogd default
systemd
systemd 用户通常可以跳过此步骤,除非他们特别需要 syslog。systemd 包括处理相同功能的 journald。
更多关于使用 journalctl 审查系统的细节,请查看 man journalctl。
For a number of reasons, such as the case of forwarding logs to a central host, it may be important to include redundant system logging mechanisms on a systemd-based system. This is a irregular occurrence for the handbook's typical audience and considered an advanced use case. It is therefore not covered by the handbook.
可选:Cron守护进程
OpenRC
尽管这是可选的并且不是系统所必须的,但是最好能够安装一个 cron 守护进程。
cron守护程序执行计划中的命令。 如果某些命令需要定期执行(例如每天,每周或每月),这是非常方便的。
All cron daemons support high levels of granularity for scheduled tasks, and generally include the ability to send an email or other form of notification if a scheduled task does not complete as expected.
Gentoo 提供了三个可选的 cron 守护进程,包括:
- sys-process/cronie - cronie is based on the original cron and has security and configuration enhancements like the ability to use PAM and SELinux.
- sys-process/dcron - This lightweight cron daemon aims to be simple and secure, with just enough features to stay useful.
- sys-process/fcron - A command scheduler with extended capabilities over cron and anacron.
- sys-process/bcron - A younger cron system designed with secure operations in mind. To do this, the system is divided into several separate programs, each responsible for a separate task, with strictly controlled communications between parts.
cronie
下面的示例使用 sys-process/cronie:
root #
emerge --ask sys-process/cronie
添加 cronie 作为默认系统运行级别后,将会开机自启。
root #
rc-update add cronie default
可选:dcron
root #
emerge --ask sys-process/dcron
如果 dcron 是前置 cron agent,则需要执行额外的初始化命令:
root #
crontab /etc/crontab
可选:fcron
root #
emerge --ask sys-process/fcron
如果选择 fcron 作为任务调度器,则需要额外的 emerge 步骤:
root #
emerge --config sys-process/fcron
可选:bcron
bcron 是一款新的内建特权分离的 cron agent。
root #
emerge --ask sys-process/bcron
systemd
systemd 不需要 cron 守护进程,因为它有 timers,但仍然可以运行 cron 守护程序。
可选:文件索引
如果你想索引你的系统文件使得你能够使用locate工具很快定位它们,你需要安装sys-apps/mlocate。
root #
emerge --ask sys-apps/mlocate
可选:远程 shell 访问
opensshd 默认配置不允许远程登录 root 用户。如果有需要的话,请在安装后创建一个非 root 用户,并且配置合适的权限,或者调整 /etc/ssh/sshd_config,使其允许 root 远程登录。
要在安装后远程访问系统,必须配置为在启动时运行sshd。
OpenRC
在 OpenRC 上将 sshd init 脚本添加到默认运行级别:
root #
rc-update add sshd default
如果需要访问串行控制台(在远程服务器的情况下这是可能的),必须配置 agetty。
在 /etc/inittab 中取消串行控制台部分的注释:
root #
nano -w /etc/inittab
# SERIAL CONSOLES s0:12345:respawn:/sbin/agetty 9600 ttyS0 vt100 s1:12345:respawn:/sbin/agetty 9600 ttyS1 vt100
systemd
运行以下命令来启用 SSH 服务端:
root #
systemctl enable sshd
运行以下命令来启用串行控制台支持:
root #
systemctl enable getty@tty1.service
可选:Shell 补全
Bash
Bash 是Gentoo系统里默认的shell,所以安装补全建议插件支持可以更有效率,更便捷。app-shells/bash-completion 将会提供Gentooo系统特有的和其他常用命令和工具的可用的建议补全
root #
emerge --ask app-shells/bash-completion
完成安装后,可以使用eselect命令管理bash的补全支持的项目 。 查阅关于bash补全的文章获取更多详情:Shell completion integrations section
时间同步
使用一些同步系统时钟的方法很重要。通常使用 NTP 协议和软件。有一些 NTP 协议的其他实现,例如 Chrony。
设置 Chrony,例如
root #
emerge --ask net-misc/chrony
OpenRC
在 OpenRC 上,运行:
root #
rc-update add chronyd default
systemd
在 systemd 上,运行:
root #
systemctl enable chronyd.service
另外,systemd 用户可能希望使用默认安装的更简单的 systemd-timesyncd SNTP 客户端。
root #
systemctl enable systemd-timesyncd.service
文件系统工具
根据你所使用的文件系统的不同,你需要安装需要的文件系统工具(用于检查文件系统完整性、创建额外的文件系统等)。请注意已经安装了做为 @system 集一部分的管理 ext4 文件系统工具 (sys-fs/e2fsprogs)。
以下的表格列出了特定文件系统所需要安装的工具。
文件系统 | 软件包 |
---|---|
XFS | sys-fs/xfsprogs |
ext4 | sys-fs/e2fsprogs |
VFAT (FAT32, ...) | sys-fs/dosfstools |
Btrfs | sys-fs/btrfs-progs |
ZFS | sys-fs/zfs |
JFS | sys-fs/jfsutils |
ReiserFS | sys-fs/reiserfsprogs |
It's recommended that sys-block/io-scheduler-udev-rules is installed for the correct scheduler behavior with e.g. nvme devices:
root #
emerge --ask sys-block/io-scheduler-udev-rules
获取更多关于Gentoo上文件系统的信息请看文件系统文章。
网络工具
如果在之前配置系统步骤配置好网络,并且完成网络设置,那么本‘网络工具’章节可以安全地跳过。这样的话,继续配置引导程序章节。
安装DHCP客户端
大多数用户需要 DHCP 客户端连接到他们网络。如果没有安装的话,则系统可能无法访问网络,从而使之后也无法下载 DHCP 客户端。
DHCP 客户端可以使用 netifrc 脚本自动获取一个或多个IP地址。我们建议使用 net-misc/dhcpcd(另请参阅 dhcpcd):
root #
emerge --ask net-misc/dhcpcd
可选:安装PPPoE客户端
如果你需要ppp来连接网络,你需要安装它 net-dialup/ppp 。
root #
emerge --ask net-dialup/ppp
可选:安装无线网络工具
如果系统将连接无线网络,请为开放网络或 WEP 网络安装 net-wireless/iw 包,为 WPA 或 WPA2 网络安装 net-wireless/wpa_supplicant 包。iw 也是一个有用的无线网络扫描的基本诊断工具
root #
emerge --ask net-wireless/iw net-wireless/wpa_supplicant
现在继续配置引导启动程序。
Handbook:IA64/Blocks/Bootloader/zh-cn
重启系统
退出chroot环境并unmount全部已持载分区。然后敲入一条有魔力的命令来初始化最终的、真实的测试:reboot。
root #
exit
cdimage ~#
cd
cdimage ~#
umount -l /mnt/gentoo/dev{/shm,/pts,}
cdimage ~#
umount -R /mnt/gentoo
cdimage ~#
reboot
当然,别忘了移除可引导CD,否则可能再次从CD启动,而不是新的Gentoo系统。
当重启进全新安装的Gentoo环境后,完成Gentoo安装。
用户管理
添加一个日常使用的用户
在 Unix/Linux 系统中,用 root 进行工作是一件危险的事情,应该尽量避免。因此我们强烈推荐您为日常使用添加一个普通用户。
用户所属的组定义了其可以执行的活动。下表中列出了许多您可能希望使用的重要组:
Group | Description |
---|---|
audio | 允许使用声音设备 |
cdrom | 允许直接使用光驱设备 |
floppy | 允许直接使用软驱 |
games | 允许运行游戏 |
portage | 能够访问portage受限资源。 |
usb | 允许使用USB设备 |
video | 允许使用视频采集设备和硬件加速 |
wheel | 可以使用su. |
比如,创建一个叫作 larry 的 wheel、users 和 audio 组的成员用户,首先使用 root 登录(只有 root 能创建用户)并运行 useradd:
Login:
root
Password: (Enter the root password)
root #
useradd -m -G users,wheel,audio -s /bin/bash larry
root #
passwd larry
Password: (Enter the password for larry) Re-enter password: (Re-enter the password to verify)
如果一个用户仍需要以 root 身份做一些任务,他们可以使用 su - 来临时得到 root 权限。另一种方式是使用 sudo(app-admin/sudo)或者 doas(app-admin/doas)工具,如果配置正确的话,非常安全。
磁盘清理
删除 tar 包
如果 Gentoo 安装完毕并且系统已经重启过,并且所有事情都完成好了,那么我们现在就要从硬盘上删除下载的 stage3 的 tar 包。记住它们下载在 / 目录。
root #
rm /stage3-*.tar.*
下一步该做什么?
不知道接下来该做什么?现在有许多途径可以探索……Getoo 为用户提供了大量的可能性,因此也已经在 wiki 和其他与 Gentoo 相关的子域名上提供大量的文档(少量没有),可以通过这些文档来进行探索(参见下面的 Gentoo 在线章节)。
额外的文档
需要注意的是,由于 Gentoo 中可用的选项数量众多,手册提供的文档范围有限——它主要侧重于启动和运行 Gentoo 系统的基础知识以及基本的系统管理活动。该手册有意排除了有关图形环境的说明、有关强化的详细信息以及其他重要的管理任务。话虽如此,本手册还有更多部分可以帮助读者使用更多基本功能。
读者一定要看一下手册的下一章节使用 Gentoo,讲述了如何保障软件是最新的、如何安装额外的软件包、USE 标记的更多细节、OpenRC init 系统,以及与 Gentoo 系统安装后,管理相关的各种其他信息话题。
除了这本手册,也鼓励读者去探索Gentoo维基的其他角落来寻找更多的、社区提供的文档。Gentoo wiki 组同时提供一个文档概述,其中按照类别列出了一系列的维基文档。比如,它指向的本地化指南能使系统更有家的感觉(特别适用于以英语为第二语言的用户)。
大多数使用桌面的用户将设置图形环境。有许多社区维护支持桌面环境(DEs)和窗口管理器 (WMs)的 'meta' 文章。读者应该知道,每个桌面环境设置有略微不同的步骤,这会增加 Bootstrap 的复杂性。
许多其他的 Meta 文章 为我们的读者提供了对 Gentoo 中可用软件的高级概述。
Gentoo 在线
读者应注意,所有在线的 Gentoo 官方网站均受Gentoo的 行为准则约束。活跃于 Gentoo 社区是一种特权,而不是一种权利,用户应该知道行为准则的存在是有原因的。
除了 Libera.Chat 托管的因特网中继聊天( internet relay chat IRC)网络和邮件列表之外,大多数Gentoo 网站要求每个站点都有一个帐户,以便提问、展开讨论或上报 Bug。
论坛 和 IRC
欢迎每个用户来我们的 Gentoo 论坛 或我们的 Gentoo 的 因特网中继聊天( internet relay chat IRC)频道。有很多以前发现的新 Gentoo 安装遇到的问题,在获得一些反馈后得以解决,这些问题的经验可以在论坛中轻松地搜索查看。其他用户第一次使用 Gentoo 遇到安装问题的可能性非常令人惊讶。建议用户在 Gentoo 支持频道寻求帮助之前搜索论坛和 wiki。
邮件列表
这些是提供给社区成员的一些邮件列表,他们更愿意通过电子邮件请求支持或反馈,而不是在论坛或IRC上创建用户帐户。用户需要按照说明进行操作,以便订阅特定的邮件列表。
Bug
有时,在查看 wiki、搜索论坛、在IRC频道或邮件列表中寻求支持之后,并没有问题已知的解决方案。一般来说,这是在 Gentoo 的 Bugzilla 网站 上报告 bug 的信号。
开发指南
希望了解更多有关开发 Gentoo 的读者可以查看开发指南。该指南提供了有关编写 ebuild、使用 eclass 的说明,并提供了 Gentoo 开发中许多基本概念的定义。
结语
Gentoo 是一个健壮、灵活、维护良好的发行版。开发者社区很高兴听到关于如何使Gentoo 成为一个“更好的”发行版的反馈。
在此提醒,任何关于 “本手册”的反馈应该按照如何改进手册?章节中开头的详细准则。
我们期待看到我们的用户将如何选择使用 Gentoo 满足他们独特的用例和需求。
Warning: Display title "Gentoo Linux 手册:安装Gentoo" overrides earlier display title "手册:IA64/全部/安装".