Gentoo-zh 群推荐安装教程:

  1. https://bitbili.net/gentoo-linux-installation-and-usage-tutorial.html
  2. https://www.yafa.moe/post/install-gentoo-on-mac/
  3. https://litterhougelangley.life/blog/2021/05/21/gentoo/
  4. https://blog.bugsur.xyz/gentoo-handbook-installation/

群内如果要贴长文本,可以使用网络粘贴板:

<输出命令> | curl -F "c=@-" "https://fars.ee/"

并且将输出里的 url: http://far.se/xxxx 这行贴出来。使用的时候可以 curl http://far.se/xxxx | less 查看

QEMU/Linux guest

Configuration

Host

To create a disk image for the virtual machine, run:

$ qemu-img create -f qcow2 Gentoo-VM.img 30G

Download a minimal Gentoo LiveCD from here.

Since QEMU requires a lot of options, it would be a good idea to put them into a shell script, e.g.:

$ vim start_Gentoo_VM.sh
#!/bin/bash
DISKIMG=$HOME/VirtualMachine/Gentoo-VM.img
exec qemu-system-x86_64 -enable-kvm \
        -bios /usr/share/edk2-ovmf/OVMF_CODE.fd \
        -cpu host \
        -drive file=${DISKIMG},if=virtio \
        -netdev user,id=vmnic,hostname=Gentoo-VM,hostfwd=tcp::10022-:22 \
        -device virtio-net,netdev=vmnic \
        -device virtio-rng-pci \
        -m 4G \
        -smp 2 \
        -monitor stdio \
        -vga std \
        -audiodev pa,id=snd0 -device ich9-intel-hda -device hda-output,audiodev=snd0 \
        -name "Gentoo VM" \
        $@
        
$ chmod u+x start_Gentoo_VM.sh

Change the path to your disk image Gentoo-VM.img in the script. You can add more options when calling the script. To boot the disk image, run:

$ ./start_Gentoo_VM.sh -boot d -cdrom $HOME/Downloads/install-amd64-minimal-20211107T170547Z.iso

Install the guest per the Gentoo Handbook. See the guest section for optimum support. After the installation start the script without the additional options.

Using UEFI with QEMU

UEFI for x86 QEMU/KVM VMs is called OVMF (Open Virtual Machine Firmware). It comes from EDK2 (EFI Development Kit), which is the UEFI reference implementation.

$ sudo emerge sys-firmware/edk2-ovmf

检查是否安装,命令为:

$ equery f sys-firmware/edk2-ovmf | grep OVMF
/usr/share/edk2-ovmf/OVMF_CODE.fd
/usr/share/edk2-ovmf/OVMF_CODE.secboot.fd
/usr/share/edk2-ovmf/OVMF_VARS.fd

要在虚拟机中运行操作系统的映像文件,添加 -bios /usr/share/ovmf/OVMF.fd。该代码调用名为 OVMF.fd 的文件,该文件是 Qemu 的 UEFI 固件。

qemu-system-x86_64 -bios /usr/share/edk2-ovmf/OVMF_CODE.fd -cdrom ubuntu-21.04-desktop-amd64.iso

这个名为ovmf的包其实就是名为TianoCore的程序。该名称本身代表开放虚拟机固件)。

Questions

“BdsDxe: failed to load Boot0001”

solution: Try hitting F2 to enter the OVMF settings during guest boot and manually pick a new boot drive option.

介绍

欢迎

首先,欢迎使用Gentoo!您将会进入一个选择自由和性能至上的世界。Gentoo的一切都是为了自由选择。在安装Gentoo时就数次明确表明了这一特点——用户可以自己选择想要编译的一切内容、选择安装Gentoo的方式、选择想用的系统日志程序等等。

Gentoo 是一个快速、现代化的元发行版,它的设计简洁、灵活。Gentoo 围绕自由软件建立,它不会对它的用户隐瞒“引擎盖下的细节”。Gentoo 所使用的软件包维护系统 Portage 是用 Python 编写的,这意味着用户可以轻松地查看和修改它的源代码。 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 系统中尽情探索了!

选择正确的安装媒介

硬件需求

在开始之前,我们先列出在一台 amd64 的主机上成功安装Gentoo所必须的硬件需求。

Minimal CD
CPU Any x86-64 CPU, both AMD64 and Intel 64
Memory 2 GB
Disk space 8 GB (excluding swap space)
Swap space At least 2 GB

使用Gentoo Linux安装光盘

最小化安装CD

Gentoo最小化安装CD是一张可引导镜像:包含有完整Gentoo环境的。它允许用户从CD或其它安装媒介引导进入Linux。在引导过程中将检测硬件并加载适当的驱动。这个镜像由Gentoo开发人员维护,能让任何有Internet连接的人来安装Gentoo。

最小化安装CD叫做 install-amd64-minimal-<release>.iso

stage又是什么?

stage3压缩包是一个包含有最小化Gentoo环境的文件,可用来按照本手册介绍继续安装Gentoo。以前的Gentoo手册描述了使用三个 stage tarballs 的其中一个来进行安装。现在Gentoo仍然提供stage1和stage2的压缩包,但是官方安装方法只使用stage3压缩包。如果你对使用stage1或stage2压缩包安装Gentoo感兴趣,请阅读 Gentoo 常见问题中的如何使用stage1或stage2 tarball安装Gentoo?

Stage 文件可以在任意一个Gentoo官方镜像站 releases/amd64/autobuilds/ 路径下下载,中国可选择Tsinghua University

下载

获得安装媒介

Gentoo Linux使用最小化安装CD做为默认安装媒介,它带有一个非常小的可引导的Gentoo Linux环境。此环境包含所有正确的安装工具。 CD镜像本身可以从官方下载页(推荐)或任意一个镜像站下载。

在这些镜像站上,最小化安装CD可以通过以下方式找到:

  1. 进入 releases/ 目录
  2. 选择相应的架构, 如 amd64/
  3. 选择 autobuilds/ 目录
  4. 对于 amd64x86 平台的用户,请选择 current-install-amd64-minimal/ 目录。

在这个位置,安装媒体文件是那些带有.iso扩展名的文件。比如下面的清单:

[DIR] hardened/                                          05-Dec-2014 01:42    -   
[   ] install-amd64-minimal-20141204.iso                 04-Dec-2014 21:04  208M  
[   ] install-amd64-minimal-20141204.iso.CONTENTS        04-Dec-2014 21:04  3.0K  
[   ] install-amd64-minimal-20141204.iso.DIGESTS         04-Dec-2014 21:04  740   
[TXT] install-amd64-minimal-20141204.iso.DIGESTS.asc     05-Dec-2014 01:42  1.6K  
[   ] stage3-amd64-20141204.tar.bz2                      04-Dec-2014 21:04  198M  
[   ] stage3-amd64-20141204.tar.bz2.CONTENTS             04-Dec-2014 21:04  4.6M  
[   ] stage3-amd64-20141204.tar.bz2.DIGESTS              04-Dec-2014 21:04  720   
[TXT] stage3-amd64-20141204.tar.bz2.DIGESTS.asc          05-Dec-2014 01:42  1.5K

在上面的例子中, install-amd64-minimal-20141204.iso文件是最小化安装CD。但可以看到,还有其他相关文件存在:

  • .CONTENTS 文件是一个文本文件,它列出了安装媒介中的所有文件。这个文件可用于在下载前确认安装媒介是否包含特定的固件和驱动程序。
  • .DIGESTS 文件包含了ISO文件的Hash值,有不同的Hash格式/算法。这个文件可以用来验证已下载的ISO文件有没有损坏。
  • .DIGESTS.asc 文件不仅包含了ISO文件的Hash值(和 .DIGESTS 文件一样),还包含了它的加密签名。这个文件即可用于验证已下载的ISO文件是否损坏,也可验证文件确实是由Gentoo发行工程组(Gentoo Release Engineering Team)发布而没有被篡改。

现在可以先忽略当前位置的其他文件——它们在安装的后续步骤中会被提到。下载 .ISO,另外如果想要验证下载的文件,同时下载ISO文件对应的 .DIGESTS.asc。 .CONTENTS 文件不需要下载,因为安装指南后续不会用到这个文件。 .DIGESTS 这个文件和.DIGESTS.asc 文件包含相同的信息,除此以外后者还包含有上面文件的数字签名。

校验下载的文件

:这是一个可选步骤,并不是安装 Gentoo Linux 所必须的。但是,我们仍然推荐这么做,以此来确保下载的文件没有损坏,以及确保下载文件确实由 Gentoo Infrastructure Team提供。

通过 .DIGESTS 和 .DIGESTS.asc 文件,可以使用合适的工具来校验 ISO 文件的有效性。校验通常有两个步骤:  

  1. 首先,验证加密签名,确保安装文件是由Gentoo发行工程组( Gentoo Release Engineering team ) 提供
  2. 如果加密签名是有效的,就验证它的文件校验值 (比如 SHA512,WHIRLPOOL),以此来确认下载的文件没有损坏。

在 Linux 系统上,最常用的验证加密签名的方法就是使用 app-crypt/gnupg 这个软件。安装了这个程序,就可以使用以下命令来验证 .DIGESTS.asc 文件中的数字(GPG)签名。

首先,下载 数字签名页 中正确的密匙:

$ 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

下一步验证 .DIGESTS.asc 文件的数字(GPG)签名:

$ gpg --verify install-amd64-minimal-20141204.iso.DIGESTS.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文件没有损坏。 .DIGESTS.asc 文件包含了多个哈希算法,所以验证正确校验和的方法之一是先找到登记在文件 .DIGESTS.asc 中的相应的校验值。例如,获取 SHA512 的校验值:

$ grep -A 1 -i sha512 install-amd64-minimal-20141204.iso.DIGESTS.asc
# SHA512 HASH
364d32c4f8420605f8a9fa3a0fc55864d5b0d1af11aa62b7a4d4699a427e5144b2d918225dfb7c5dec8d3f0fe2cddb7cc306da6f0cef4f01abec33eec74f3024  install-amd64-minimal-20141204.iso
--
# SHA512 HASH
0719a8954dc7432750de2e3076c8b843a2c79f5e60defe43fcca8c32ab26681dfb9898b102e211174a895ff4c8c41ddd9e9a00ad6434d36c68d74bd02f19b57f  install-amd64-minimal-20141204.iso.CONTENTS

在上面的输出中,显示了两个SHA512校验和:一个用于文件:install-amd64-minimal-20141204.iso,一个用于与之对应的 .CONTENTS 文件。只有第一个校验值有用,因为要用它来和下面计算出来的 SHA512 的校验值进行比较:

$ sha512sum install-amd64-minimal-20141204.iso
364d32c4f8420605f8a9fa3a0fc55864d5b0d1af11aa62b7a4d4699a427e5144b2d918225dfb7c5dec8d3f0fe2cddb7cc306da6f0cef4f01abec33eec74f3024  install-amd64-minimal-20141204.iso

如果两个校验值匹配,那么表明文件没有损坏,安装可以继续进行。损坏的文件会导致安装出现问题,请重新下载。

刻录光盘

当然,只是下载一个 ISO 文件是无法开始 Gentoo Linux 的安装的。需要将这个ISO文件刻录成一张用来启动的 CD 光盘,是要将 ISO 文件里的内容而不是 ISO 文件本身刻录到CD光盘上。下面介绍了一些常见的方式——这里可以找到其他更复杂的方式:如何刻录ISO文件

在 Linux 系统上,可以通过 cdrecord 命令将ISO文件刻录到CD光盘上,这个命令由 app-cdr/cdrtools 软件包提供。

将ISO文件刻录到 /dev/sr0 设备的 CD 光碟上(这是系统上的第一个 CD 设备-在必要时将其替换为正确的设备):

$ cdrecord dev=/dev/sr0 install-amd64-minimal-20141204.iso

喜欢使用图形化界面的用户可以使用 K3B ,它由 kde-app/k3b 软件包提供。在 K3B 软件中,选择“工具”(Tools)菜单,然后选择“刻录CD镜像”(Burn CD Image)。

启动

启动安装媒介

安装媒介准备就绪后,就可以启动了。 将安装媒介插入系统中,重启,然后进入主板的固件用户界面。 通常是在开机自检(POST)过程中通过在键盘上按DEL, F1, F10, 或 ESC 进入,“触发”键取决于系统和主板。 如果使用主板的型号作为关键字在互联网搜索引擎进行搜索, 结果应该很容易确定。进入主板的固件菜单后,更改引导顺序,以便在内部磁盘设备之前尝试外部可启动媒介(CD / DVD盘或USB驱动器)。 否则,系统很可能会重新启动到内部磁盘设备,从而忽略外部启动媒介。

重要:如果想安装使用 UEFI 引导的 Gentoo ,建议立即使用UEFI启动。如果不用 UEFI 来启动,可能就要在最后完成 Gentoo Linux 的安装之前制作一个可以启动的 UEFI U盘(或其他介质)。

如果启动没有成功,请确保将安装媒介插入系统,然后重新启动。这是会显示一个启动提示符。 此时按Enter键将使用默认的启动选项启动。如果要使用自定义引导选项引导安装媒介,请按照启动选项指定一个内核,然后按Enter键。

附注:在大多数情况下,默认的Gentoo内核可以像之前提到的那样可以在没有任何指定参数的情况下正常工作,有关启动故障排除和专家选项,请继续执行此部分。否则,只需按Enter并跳转至其他硬件配置.

在启动提示符下,用户可以按 F1 键显示可用的内核,按 F2 按键显示可用的启动选项。如果在15秒内没做任何选择(既不显示信息,也不选择内核)安装媒介将会从硬盘启动。这样不用将 CD 光盘从光盘驱动器里拿出来,也可以在安装过程中重启和尝试已安装好的环境(这有时在远程安装的时候很有用)。

提到了指定一个内核。 在最小安装介质上,只提供了两个预定义的内核启动选项。 默认选项叫gentoo。 另一个是“-nofb”变量; 这会禁用内核帧缓冲区支持。

内核选择

  • gentoo

    默认内核,支持K8 CPU(包括NUMA支持)和EM64T CPU。

  • gentoo-nofb

    与“gentoo”相同,但没有framebuffer支持。

  • memtest86

    测试本地RAM的错误。

引导选项可以配合内核进一步调整引导过程的行为。

硬件选择

  • acpi=on

    这个选项载入对 ACPI 的支持,同时也会让 CD 光盘在启动时运行 acpid 守护进程。在系统需要 ACPI 才能正常工作的情况下才需要设置此选项。超线程(Hyperthreading)的支持不需要此选项。

  • acpi=off

    彻底禁用 ACPI。这个选项在一些较老的系统上比较有用,同样也是使用 APM 功能的必需项。这个选项也会禁用处理器的超线程支持。

  • console=X

    这会启用对一些终端的访问许可。它的第一个参数是设备,默认是 ttyS0, 之后的其它选项请使用逗号分割。默认参数是 9600,8,n,1 。

  • dmraid=X

    这会传递参数给 device-mapper RAID 子系统。需要在参数两端加上括号。

  • doapm

    这会加载对 APM 驱动的支持。这同时需要 acpi=off.

  • dopcmcia

    这会加载对 PCMCIA 和 Cardbus 硬件的支持,并且会使 pcmcia cardmgr 在 CD 启动时被启用. 这只有在从 PCMCIA/Cardbus 设备启动时才需要。

  • doscsi

    这会加载对大部分 SCSI 控制器的支持。当从使用 SCSI 内核子系统的 USB 设备启动时需要这个参数。

  • sda=stroke

    这会允许用户对整块硬盘进行分区,即使是 BIOS 无法控制的大容量硬盘。这个选项只有在使用老的 BIOS 的机器上才需要。注意,请把 “sda” 替换为需要这么做的设备。

  • ide=nodma

    这会强制内核禁用 DMA ,一些 IDE 芯片组和一些 CDROM 的驱动需要这么做才能工作。如果系统无法正常读取 IDE 的 CDROM,可以试试这个选项。这同时也会禁止默认的 hdpram 设置被执行。

  • noapic

    这会禁用一些新主板上的高级程序中断控制器(Advanced Programmable Interrupt Controller,APIC),因为这可能会造成一些旧的硬件无法正常工作。

  • nodetect

    这会禁止 CD 的全部自动检测功能,包括对硬件的检测和 DHCP 探测。 这有助于对启动失败的 CD 或驱动器进行查错。

  • nodhcp

    这会禁用在被发现的网卡上进行 DHCP 探测。这在需要使用固定 IP 的时候很有用。

  • nodmraid

    禁用对 device-mapper RAID 的支持,比如板载的IDE/SATA RAID控制器。

  • nofirewire

    这禁用了对 “火线”( Firewire ) 模块的加载。该选项只在“火线”(Firewire)造成 CD 无法正常启动时才需要。

  • nogpm

    这禁用对 gpm 控制台的鼠标(gpm console mouse)的支持。

  • nohotplug

    这会禁止在启动时加载对热插拔和冷插拔的脚本。这有助于对启动失败的 CD 或驱动器进行查错。

  • nokeymap

    这会禁用选择键盘映射(只有不是 US 键盘时才需要进行对键盘映射的设置)。

  • nolapic

    这会在单处理器内核里禁用本地APIC。

  • nosata

    这会禁止加载 Serial ATA 模块. 这在 SATA 子系统出错时才需要。

  • nosmp

    这会在支持 SMP 的内核上禁用 SMP(Symmetric Multiprocessing)。这在为排查与 SMP 相关的驱动或内核错误时很有用。

  • nosound

    这会禁止对音频的支持和音量控制。这在音频系统造成问题时很有用。

  • nousb

    这会禁止自动加载的 USB 模块。这在 USB 出现问题时很有用。

  • slowusb

    这会为慢速的USB CDROM 在启动时添加更多额外的中断,就像 IBM BladeCenter 那样。

逻辑卷/设备管理

  • dolvm

    这会启用 Linux 的逻辑分区管理器(Logical Volume Management)。

其他选项

  • debug

    启用调试代码。这可能会显得乱糟糟的,因为这会向输出大量的数据。

  • docache

    这会把整个 CD 运行环境缓存到内存中,这会使用户可以卸载 /mnt/cdrom 并挂载另外一个 CDROM 。这个选项需要至少两倍于 CD 大小的内存空间。

  • doload=X

    这会使启动时内存盘(initial ramdisk,initrd)加载这之后列出来的模块和它们的依赖。把“X”替换为模块名称,当需要加载多个模块时请用逗号分割。

  • dosshd

    在启动时启用 sshd 服务,这在无人值守安装时很有用。

  • passwd=foo

    这会将等号后的字符设置为 root 用户的密码,当使用“dosshd”参数时需要这么做因为默认的 root 密码是留空的。

  • noload=X

    这会使启动时内存盘(initial ramdisk,initrd)跳过对某些会造成问题的特定模块的加载。使用方法和“doload”相同。

  • nonfs

    禁止在启动时启用 portmap/nfsmount 。

  • nox

    这会使启用X的 LiveCD 不自动启动X,而是使用命令行。

  • scandelay

    这会使 CD 在启动过程中等待十秒来使一些初始化很慢的设备完成初始化。

  • scandelay=X

    这允许用户指定 CD 在启动过程中等待一些初始化很慢的设备完成初始化所需的延迟的时间。把X替换为所需要等待的时间(以秒为单位,只需要填写数字)。

附注:启动媒介将先检查no*选项,再检查do*选项,所以那些选项可以按照这个顺序覆盖。

现在启动安装媒介,选择一个内核(如果默认的 gentoo 的内核不能满足)和引导选项。作为示例,我们引导 gentoo 内核启动,并带有dopcmcia作为内核参数:

boot: gentoo dopcmcia

接下来迎接用户的是一个引导屏幕和进度条。如果用来安装系统的是一个非US键盘,确保马上按Alt + F1来切换到详细模式并遵照提示。如果在10秒钟内什么都没有选,则接受默认(US键盘)并继续引导过程。一旦引导过程完成,用户将自动以root超级用户身份登录到“Live”Gentoo Linux环境。当前控制台将显示一个root提示符,并且可以通过按Alt + F2、Alt + F3和Alt + F4切换到其他控制台。按Alt + F1返回到启动时的那个。

额外的硬件配置

当安装媒介启动时,它会尝试检测所有的硬件设备并加载合适的内核模块来支持硬件。在绝大多数的情况下,它工作得很好。然而,在某些情况下它可能没有自动加载系统所需的内核模块。如果 PCI 自动检测错过了一些系统硬件,相应的内核模块就必须手动加载了。

下面例子手工加载了 8139too 模块(它提供对某些类型的网卡的支持):

# modprobe 8139too

推荐:用户账号

如果其他人需要访问安装环境,或者需要以非 root 用户的身份在安装媒介上运行命令(例如出于安全原因使用没有 root 特权的 irssi 聊天),这时就需要创建额外的用户帐户,并将 root 用户密码设为强密码。

使用 passwd 命令来修改 root 用户密码:

# passwd
New password: (Enter the new password)
Re-enter password: (Re-enter the password)

要创建一个用户账户,先输入他们的信息,然后设置密码。用 useraddpasswd 命令来完成这些操作。

在下面的例子中,创建了一个名为“john”的用户。

# useradd -m -G users john
# passwd john
New password: (Enter john's password)
Re-enter password: (Re-enter john's password)

使用 su 命令可以从 root 用户(当前用户)切换到新建的用户:

# su - john

在安装时查看文档

TTYs

要在安装期间查看 Gentoo 安装手册,首先要按照上面的方法创建一个新的用户帐户。然后按 Alt+F2 进入一个新的终端。

在安装期间, 可以用 links 命令来浏览 Gentoo 安装手册 - 当然,只有在互联网连接可用的时候才行。

$ links https://wiki.gentoo.org/wiki/Handbook:AMD64/zh-cn

要回到原来的终端,请按 Alt+F1 。

GNU Screen

Screen是官方Gentoo安装介质中默认安装的实用程序。对于经验丰富的Linux爱好者来说,使用 screen 分割窗口查看安装说明,而不是上面提到的多个TTY的方法, 这可能更高效。

推荐:启动SSH服务

如果你通过的是虚拟机安装,或者同一网络下有其它电脑可以使用,那么使用 ssh 连接上本机,通过复制粘贴命令来操作会更加方便,而 LiveCD 环境下的 sshd 配置为,执行,

# nano /etc/ssh/sshd_config

打开 sshd 配置文件,确保如下两个选项

PermitRootLogin yes
PasswordAuthentication yes

前面都没有注释符 # ,后面的值都为 yes ,后按下 Ctrl + X , y , Enter 保存退出。之后执行,

# rc-service sshd start

启用 sshd 服务后,为 LiveCD 环境的 root 用户设置一个密码,如果不想设置复杂密码,可以编辑 /etc/security/passwdqc.conf 文件,将 enforce=everyone 改成 enforce=none 保存后再设置

# passwd root

之后就可以通过其它电脑/主机连接到此 LiveCD 环境了。

附注:如果用户登录到系统,他们将看到一个本系统主机密钥需要确认的信息(也就是我们说的密匙指纹)。此行为是典型的并且可以像预期一样与SSH服务器进行初始连接。但是,以后当系统设置好,并有人登录到新安装的系统时,SSH客户端会警告主机密钥已被更改。这是因为现在用户登录 - 对于SSH来讲 - 是一个不同的服务器(即新安装的Gentoo系统,而不是现在正在使用的安装系统环境)。请按照屏幕上的指示,去替换用户端的主机密钥

网络需要能正常工作,sshd 才能使用。请参照 配置网络 的内容继续安装。

配置网络

自动网络检测

它能够自动检测到么?

如果系统接入到一个有DHCP服务器的以太网络,网络配置非常可能会自动设置。这样的话,安装CD所包含的很多网络命令,比如sshscppingirssiwgetlinks,以及其他的一些, 都可以立即工作。

识别接口名称

ifconfig命令

ifconfig命令

如果网络已配置,ifconfig命令应该会列出一个或多个网络接口(围绕着lo)。在下面的示例中显示为eth0:

# 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 

作为预测的网络接口名称控制的结果, 系统的接口名称可以和旧的eth0命名规则很不一样。近期的安装媒介可能显示常规网络接口名字像是eno0、ens1或enp5s0。查看ifconfig输出中找到有你本地网络相关的IP地址的接口。

Tip:如果使用标准的ifconfig命令没有显示出接口,尝试使用带有-a选项的相同的命令。这个选项强制这个工具去显示系统检测到的所有的网络接口,不管他们是up或down状态。如果ifconfig -a没有提供结果,则硬件有错误或者接口驱动没有加载到内核中。这些情况都超过本手册的范围。联系 #gentoo (webchat) 需求支持。

ip命令

作为ifconfig的一个备选,ip命令可以用来识别接口名称。下面的示例展示了ip addr(由于是另外一个系统,所以显示的信息不同于前一个示例)的输出:

# 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。

测试网络

尝试ping你的ISP的DNS服务器(可在/etc/resolv.conf中找到)和选择一个网站。这可确信网络正常工作并且网络包可以到达网络,DNS名称解析能正常工作等等。

echo 'nameserver 8.8.4.4' >/etc/resolv.conf
ping -c 3 www.gentoo.org

如果这些都工作,则本章节中其余的部分可跳过,直接跳到安装介绍的下一步骤(准备磁盘)。

自动网络配置

如果网络没有立即工作,一些安装媒介允许用户使用net-setup(针对常规或无线网络),pppoe-setup(针对ADSL用户)或 pptp(针对PPTP用户)。

如果安装媒介没有包含这些工具,继续手动配置网络

默认:使用net-setup

如果网络没有自动配置,最简单的方式是运行net-setup脚本来设置:

# net-setup eth0

net-setup将会询问关于网络环境的一些问题。当所有这些完成后,网络连接就应该工作。以前面的方式测试网络连接。如果测试通过,恭喜!跳过本章节剩余部分并继续准备磁盘

如果网络还是不能工作,继续手动配置网络

可选:使用PPP

假设需要使用PPPoE连接到互联网,安装CD(任何版本)包含ppp来使这件事变得容易。使用提供的pppoe-setup脚本来配置连接。设置过程中将询问已连接到你的ADSL调制解调器的以太网设备、用户名和密码、DNS服务器的IP地址,以及是否需要一个简单的防火墙。

# pppoe-setup
# pppoe-start

如果还是有什么错误,再次在etc/ppp/pap-secrets或/etc/ppp/chap-secrets中检查用户名和密码都是正确的,并且确保使用了正确的以太网设备。如果以太网设备不存在,则需要加载合适的网络模块。如果是那样,继续手动网络配置将解释如何加载合适的网络模块。

如果所有事都还,继续准备磁盘

可选:使用PPTP

如果需要PPTP支持,使用安装CD提供的pptpclient。但是首先确保配置是正确的。编辑/etc/ppp/pap-secrets或/etc/ppp/chap-secrets让它包含正确的用户名/密码组合:

# nano -w /etc/ppp/chap-secrets

如果需要,继续调整/etc/ppp/options.pptp:

# nano -w /etc/ppp/options.pptp

当所有事都已完成,运行pptp(带着一些options.pptp无法设定的选项)来连接到服务器:

# pptp <server ipv4 address>

现在继续准备磁盘

手动配置网络

加载适当的网络模块

安装光盘在启动时,会尝试检测所有硬件设备并加载适当的内核模块(驱动程序)以支持你的硬件。绝大多数情况下,它都做得非常好。尽管如此,在某些情况下它可能还是无法自动载入你所需要的内核模块。

如果net-setuppppoe-setup都失败,则可能是网络没有立即被找到。也就是说用户可能需要手动加载合适的内核模块。

要找出什么内核模块提供网络,使用ls命令:

# ls /lib/modules/`uname -r`/kernel/drivers/net

如果找到一个针对网络设备的驱动,使用modprobe来加载内核模块。比如,要加载pcnet32模块:

# modprobe pcnet32

要检查网卡现在是否检测到,使用ifconfig。一个检测到的网卡应该在结果中像这样(再一次,这里的eth0只是一个示例):

# 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)

不过如果你得到如下错误信息,说明没有检测到网卡:

# ifconfig eth0
eth0: error fetching interface information: Device not found

系统中可用网络接口命名可以通过/sys文件系统列出。

# ls /sys/class/net
dummy0  eth0  lo  sit0  tap0  wlan0

在上面的示例中,找到了6个接口。eth0是最像(有线)以太网络适配器,而wlan0 是无线的。

假设现在网络已经检测到了,重新尝试net-setuppppoe-setup(现在应该工作了),但是对于铁杆的人,我们还是要解释如何手动配置网络。

基于你的网络从下面的章节中选择一个进行设置:

使用DHCP

DHCP(动态主机配置协议)使自动接受网络信息(IP地址、掩码、广播地址、网关、名称服务器等)变得容易。这只在网络中有DHCP服务器(或者如果ISP提供商提供一个DHCP服务)时有用。要使一个网络接口自动接受信息,使用dhcpcd

# dhcpcd eth0

一些网络管理员要求你使用DHCP服务器所提供的主机名和域名。 这种情况下请用:

# dhcpcd -HD eth0

如果这个工作的话(试着ping一些Internet服务器,像Google的8.8.8.8 或者 Cloudflare的 1.1.1.1 译者注:中国的114.114.114.114),则所有事情都设置好了并可以继续。跳过剩下的章节并继续到准备磁盘

准备无线网络链接

附注:可能只有特定的架构支持iw命令。如果这个命令不可用,检查net-wireless/iw包是否可用于当前架构。除非安装net-wireless/iw包,否则iw命令将一直不可用。

当使用一块无线(802.11)网卡,在继续之前需要先配置无线设置。要查看当前无线网卡的设置,你可以使用iw。运行iw可能会显示如下:

# 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

检查当前连接:

# iw dev wlp9s0 link
Not connected.

# 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密钥。

  • 首先,确保接口处于活动状态:
# ip link set dev wlp9s0 up
  • 连接到名为“GentooNode”的开放网络:
# iw dev wlp9s0 connect -w GentooNode
  • 设置一个WEP密钥:使用d:前缀:
# iw dev wlp9s0 connect -w GentooNode key 0:d:1234123412341234abcd
  • 用ASCII WEP密钥连接:
# iw dev wlp9s0 connect -w GentooNode key 0:some-password

附注:如果无线网络配置为WPA或WPA2,则需要使用wpa_supplicant。关于为Gentoo Linux配置无线网络的更多信息,请阅读Gentoo手册中的无线网络章节

使用iw dev wlp9s0 link确认无线设置。如果无线已经工作,继续按下一章节(了解网络术语)配置IP级别的网络选项或者使用前面描述的net-setup工具。

网络术语解读

如果以上所做的全部失败,你将不得不手动配置你的网络。这其实一点也不难。不过,你需要熟悉一些网络术语,才能配置好网络令自己满意。读完本节之后,你将了解到什么是网关,子网掩码是作什么用的,广播地址是如何形成的,以及为什么需要名称服务器。

在网络中,主机通过它们的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

设置网络由三步组成:

  1. 使用ifconfig指派一个IP地址
  2. 使用route设置到网关的路由
  3. 通过/etc/resolv.conf设置名称服务器的IP完成

要指派一个IP地址,需要IP地址、广播地址和掩码。运行下面的命令,替换${IP_ADDR}为正确的IP地址、${BROADCAST}为正确的广播地址以及${NETMASK}为正确的掩码:

# ifconfig eth0 ${IP_ADDR} broadcast ${BROADCAST} netmask ${NETMASK} up

route设置路由。替换${GATEWAY}为正确的网络IP地址:

# route add default gw ${GATEWAY}

现在打开/etc/resolv.conf:

# nano -w /etc/resolv.conf

使用下面的模板填入名称服务器。确保替换${NAMESERVER1}和${NAMESERVER2}为合适的名称服务器地址:

nameserver ${NAMESERVER1}
nameserver ${NAMESERVER2}

就是这样。现在通过ping一些互联网服务器(像Google的8.8.8.8 或者 Cloudflare的 1.1.1.1 译者注:中国的114.114.114.114)来测试网络。如果这个工作的话,再次恭喜。继续到准备磁盘

准备磁盘

块设备简介

块设备

让我们来好好看看Gentoo Linux以及普通Linux中有关磁盘方面的知识,包括块设备、分区和Linux文件系统。一旦磁盘的来龙去脉都了解了,我们将设置分区和文件系统以进行安装。

首先,让我们来看看块设备。最著名的块设备可能是代表Linux系统第一块磁盘的/dev/sda。SCSI和SATA磁盘全标为/dev/sd*;甚至IDE磁盘在libata内核框架下也标为/dev/sd*。当使用老设备框架时,第一个IDE磁盘是/dev/hda。

下表将帮助读者确定系统上找到某种类型的块设备的位置:

Type of device Default device handle Editorial notes and considerations
SATA, SAS, SCSI, or USB flash /dev/sda Found on hardware from roughly 2007 until the present, this device handle is perhaps the most commonly used in Linux. These types of devices can be connected via the SATA bus, SCSI, USB bus as block storage. As example, the first partition on the first SATA device is called /dev/sda1.
NVM Express (NVMe) /dev/nvme0n1 The latest in solid state technology, NVMe drives are connected to the PCI Express bus and have the fastest transfer block speeds on the market. Systems from around 2014 and newer may have support for NVMe hardware. The first partition on the first NVMe device is called /dev/nvme0n1p1.
MMC, eMMC, and SD /dev/mmcblk0 embedded MMC devices, SD cards, and other types of memory cards can be useful for data storage. That said, many systems may not permit booting from these types of devices. It is suggested to not use these devices for active Linux installations; rather consider using them to transfer files, which is their design goal. Alternatively they could be useful for short-term backups.

上面的块设备代表磁盘的抽象接口。用户程序可以使用这些块设备来与你的磁盘进行交互,而无需担心驱动器到底是 SATA,SCSI 还是其他什么东西。该程序可以把磁盘当作一系列连续的,可随机访问的 4096 字节块(4K)的存储。

分区表

虽然理论上可以用一整块磁盘来安装一个Linux系统(比如当创建一个 btrfs RAID时),但是实践中几乎从不这样做。实际上,一块磁盘可以被分成小一些的、更容易管理的块设备。在 amd64 系统里,这被称为分区。有两个标准的分区技术可以被使用:MBR(有时也称为 DOS 磁盘标签)和GPT;这些与两种引导过程类型相关:传统 BIOS 引导和 UEFI 引导。

GUID 分区表 (GPT)

GUID 分区表 (GPT)设置(也称为 GPT 磁盘标签)对分区使用 64 位标识符。它用来存储分区信息的空间也远比 MBR 分区表(DOS 磁盘标签)的512字节要大,GPT磁盘它也不对分区的数量作限制。分区的大小限制可以达到 8 ZiB(zebibytes)。

译者注:

  • 1ZiB = 1,024 EiB
  • 1EiB = 1024 PiB
  • 1PiB = 1024 TiB
  • 1TiB = 1024 GiB
  • 1GiB = 1024 MiB
  • 1MiB = 1024 KiB
  • 1KiB = 1024 B

当操作系统和系统固件之间的软件接口是UEFI (相对于BIOS)时,GPT几乎是必选的,因为这里 DOS 磁盘标签会引起很多兼容性问题。

GPT还利用校验和和冗余。 它携带CRC32校验和以检测报头和分区表中的错误,并在磁盘的末尾有一个备份GPT。 此备份表可用于恢复磁盘开头附近主GPT的损坏。

Important:关于 GPT 有一些注意事项:

  • 在基于 BIOS 的计算机上使用 GPT 是可行的,但不能与 Microsoft Windows 操作系统进行双重引导。原因是如果 Microsoft Windows 检测到 GPT 分区标签,它将以 UEFI 模式启动。
  • 一些配置为以 BIOS/CSM/legacy 模式启动的有问题的(旧)主板固件在从 GPT 标记的磁盘启动时也可能存在问题。

主引导记录 (MBR) 或 DOS 引导扇区

主引导记录引导扇区(也称为 DOS 引导扇区或 DOS 磁盘标签)于 1983 年首次在 PC DOS 2.x 中引入。 MBR 使用 32 位标识符作为分区的起始扇区和长度,并支持三种分区类型:主分区、扩展分区和逻辑分区。主分区的信息存储在主引导记录本身——磁盘最开始的一个非常小的(通常是 512 字节)位置。由于空间很小,因此仅支持四个主分区(例如,/dev/sda1 到 /dev/sda4)。

为了支持更多的分区,可以将 MBR 中的主分区之一标记为扩展分区。然后,该分区可以包含其它逻辑分区(分区内的分区)。

重要:虽然大多数主板制造商仍然支持,但 MBR 引导扇区及其相关的分区限制被认为是传统的分区方式。除非使用 2010 之前的硬件,否则最好使用 GUID 分区表 对磁盘进行分区。必须继续进行设置类型的读者应了解以下信息:

  • 大多数 2010 年后的主板都有接受用 MBR 引导扇区作为传统(受支持但不理想的)引导模式。
  • 由于使用 32 位标识符,MBR 中的分区表无法处理大于 2 TiB 的存储空间。
  • 除非创建扩展分区,否则 MBR 最多支持四个分区。
  • 此设置不提供备份引导扇区,因此如果某些内容覆盖分区表,所有分区信息将丢失。

也就是说,在 AWS 等虚拟化云环境中仍经常使用 MBR 和 BIOS 启动。

手册作者建议读者安装Gentoo时尽可能使用 [GPT](#使用 GPT for UEFI 对磁盘进行分区) 。

高级存储

amd64 安装 CD 提供了对逻辑卷管理器 (LVM) 的支持。 LVM 通过增加分区设置提供的灵活性。它允许将分区和磁盘组合到卷组中,并在快速的固态硬盘上为慢速的机械硬盘定义 RAID 组或缓存。下面的安装说明将侧重于"常规"分区,如果强烈需要 LVM,请访问 LVM 文章了解更多详情。新手请注意:LVM虽然完全支持 ,但不在本指南的范围内。

默认分区方案

在本手册的其余部分,我们将讨论和解释两种情况:1) GPT 分区表和 UEFI 引导,以及 2) MBR 分区表和传统 BIOS 引导。虽然可以混合搭配,但这超出了本手册的范围。如上所述,现代设备应该使用 GPT 分区表和 UEFI 引导;作为此规则的一个例外,MBR 和 BIOS 引导依然经常用于虚拟化(云)环境。

以下分区方案将用作一个简单的示例布局:

Partition Filesystem Size Description
/dev/sda1 fat32 (UEFI) or ext4 (BIOS) 256M Boot/EFI system partition
/dev/sda2 (swap) RAM size * 2 Swap partition
/dev/sda3 ext4 Rest of the disk Root partition

如果这些信息已经足够,高级读者可以直接跳转到实际分区操作。

fdiskparted 都是分区实用程序。 fdisk 是众所周知的,稳定的,推荐用于 MBR 分区布局分区工具。 parted 是最早支持 GPT 分区的 Linux 块设备管理的分区工具之一,并提供了替代方案。此处使用 fdisk 是因为它具有更好的基于文本的用户界面。

在进行创建分区的指导之前,关于分区方案和常见陷阱我们会先介绍更多的细节。

设计一个分区方案

多少个分区以及多大?

分区数量高度依赖于环境。比如,如果有很多个用户,则建议有一个独立的 /home/,以增强安全性及便于备份。如果安装 Gentoo 来做邮件服务器,则 /var/ 应该独立,因为所有的邮件都储存于 /var/。选择一个正确的文件系统将会获得最大化的性能。游戏服务器应该有一个独立的 /opt/,因为大多数游戏服务器都安装在那里。原因也和 /home/ 目录一样:安全和备份。在大多数场景下,应该保持 /usr/ 大一些:不仅是因为它包含多数的应用程序,还因为它通常还托管着 Gentoo ebuild 存储库(默认情况下位于 /var/db/repos/gentoo ),占用大约 650 MiB 的空间。这个磁盘空间的估计值默认不包括 /var/cache/ 下的 binpkgs/ 和 distfiles/ 目录。

在Gentoo的大多数情况下,/usr和/var应该保持相对较大的容量。/usr 包含系统上的大多数应用程序和Linux内核源(/usr/src 下)。默认情况下,/var 包含 gentoo ebuild存储库(位于/var/db/repos/gentoo),通常会消耗大约650 MiB(这取决于文件系统)的磁盘空间。此空间估计不包括/var/cache/distfiles(source files)和/var/cache/binpkgs(binary packages)目录。

分区的数量和大小取决于权衡利弊后根据实际情况选择最佳选项。单独的分区或卷具有以下优点:

  • 为每个分区或者卷选择性能最好的文件系统。
  • 当一个失控的工具持续向一个分区或卷写文件时,也不至于让整个系统由于无可用空间而无法运行。
  • 如果有必要,可以简化文件系统检查,多个检查可以并行的完成(尽管使用多个磁盘比使用多个分区更多地实现了这一优势)。
  • 可以通过在挂载一些分区或卷时使用只读、nosuid(忽略setuid属性)、noexec(忽略可执行属性)等来增加安全性。

但是,多个分区也有一些缺点:

  • 如果配置不正确,系统可能在一个分区上有很多可用空间,而在另一个分区上可用空间很少。
  • /usr/ 的单独分区可能需要管理员使用 initramfs 引导,以便在其他引导脚本启动之前挂载该分区。由于 initramfs 的生成和维护超出了本手册的范围,我们建议新手不要为 /usr/ 使用单独的分区
  • SCSI 和 SATA 也有 15 个分区的限制,除非磁盘使用 GPT 标签。

附注:如果你打算使用 Systemd,/usr/ 必须在启动时可用,作为根文件系统的一部分或通过 initramfs 挂载。

那么swap空间呢?

对于swap空间,没有一个完美值。swap空间的目的是当内存(RAM)有压力时为内核提供磁盘存储。一个swap空间允许内核将看过来稍后不会被访问的内存页面移动到磁盘(swap或者page-out)、施放内存。当然,如果那块内存突然要使用到,需要花一些时间(相比较内存,硬盘是非常慢的)将这些页面需要放回到内存中(page-in)。

如果系统不运行很需要内存的应用程序或系统有足够多的可能内存,则不需要太多的swap空间。不过,swap空间还用来在休眠时储存整个内存。如果一个系统需要休眠,则必须需要大一点的swap空间,通常至少为系统安装的内存数量。

作为一般规则,建议交换空间大小为内部存储器 (RAM) 的两倍。对于具有多个硬盘的系统,明智的做法是在每个磁盘上创建一个交换分区,以便它们可以用于并行读/写操作。当必须访问交换空间中的数据时,磁盘交换的速度越快,系统运行的速度就越快。在机械和固态磁盘之间进行选择时,最好将交换放在 SSD 上以提高性能。此外,交换文件可以用作交换分区的替代方案;这对于磁盘空间非常有限的系统来说非常有趣。

什么是 EFI 系统分区 (ESP)?

在使用由 UEFI 引导(而不是 BIOS)的操作系统上安装 Gentoo 时,创建 EFI 系统分区 (ESP) 很重要。下面的说明包含正确处理此操作所需的关键点。 在 BIOS/Legacy 模式下启动时不需要 EFI 系统分区。

ESP 必须是 FAT 变体(有时在 Linux 系统上显示为 vfat)。官方 [UEFI 规范](http://www.uefi.org/sites/default/files/resources/UEFI 2_5.pdf) 表示 UEFI 固件将识别 FAT12、16 或 32 文件系统,但建议使用 FAT32。分区后,相应地格式化 ESP:

# mkfs.fat -F 32 /dev/sda1

警告:如果 ESP 没有使用 FAT 变体进行格式化,那么系统的 UEFI 固件将找不到引导加载程序(或 Linux 内核)并且很可能无法引导系统!

什么是BIOS引导分区?

只有在 BIOS/Legacy 模式下将 GPT 分区布局与 GRUB2 结合时,才需要 BIOS 引导分区。 **在 EFI/UEFI 模式下引导时不需要它,使用 MBR 表时也不需要它。**它是一个非常小的分区(1 到 2 MB),像 GRUB2 这样的可以在其中放置超出容量的引导加载程序。本指南中不会使用它。

使用 GPT for UEFI 对磁盘进行分区

以下部分解释了如何使用 fdisk 为 GPT/UEFI 引导安装创建示例分区布局。范例分区布局我们在前面已经提到过了。

Partition Description
/dev/sda1 EFI system (and boot) partition
/dev/sda2 Swap partition
/dev/sda3 Root partition

请您根据自己的实际需要来调整您的分区布局。

查看当前分区布局

fdisk是一个流行的和强大的分区工具。用fdisk向磁盘开火吧!(在我们的例子里,我们使用/dev/sda):

# fdisk /dev/sda

使用 p 键来显示磁盘当前的分区配置。

Command (m for help):p
Disk /dev/sda: 28.89 GiB, 31001149440 bytes, 60549120 sectors
Disk model: DataTraveler 2.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 21AAD8CF-DB67-0F43-9374-416C7A4E31EA
 
Device        Start      End  Sectors  Size Type
/dev/sda1      2048   526335   524288  256M EFI System
/dev/sda2    526336  2623487  2097152    1G Linux swap
/dev/sda3   2623488 19400703 16777216    8G Linux filesystem
/dev/sda4  19400704 60549086 41148383 19.6G Linux filesystem

这块特定的磁盘被配置为容纳 2 个 Linux 文件系统(每个都有一个相应的分区列为“Linux”)以及一个交换分区(列为“Linux swap”)。

创建一个新的磁盘标签/删除所有分区

输入 g 在磁盘上创建一个新的 GPT 磁盘标签;这将删除所有现有分区。

Command (m for help):g
Created a new GPT disklabel (GUID: 87EA4497-2722-DF43-A954-368E46AE5C5F).

对于现有的 GPT 磁盘标签(参见上面 p 的输出),或者考虑从磁盘中一一删除现有分区。输入 d 来删除一个分区。例如,要删除现有的 /dev/sda1:

Command (m for help):d
Partition number (1-4): 1

这个分区已经计划被删除了,当您用p键打印分区清单时它将不会被显示了,但此时它还未被实际删除,直到改变被真正保存。这将允许用户在操作错误后中止——此时,输入q并按Enter可以立即防止分区被删除。

重复敲击 p来打印分区清单,然后敲击 d键和分区号码来删除它。最终,分区表将变得空空如也。

Command (m for help):p
Disk /dev/sda: 28.89 GiB, 31001149440 bytes, 60549120 sectors
Disk model: DataTraveler 2.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 87EA4497-2722-DF43-A954-368E46AE5C5F

现在在内存中的分区表已经空了,我们是时候来创建分区了。

创建 EFI 系统分区 (ESP)

首先创建一个小的 EFI 系统分区,该分区也将挂载为 /boot。输入 n 创建一个新分区,然后输入 1 选择第一个分区。当提示输入第一个扇区时,确保它从 2048(引导加载程序可能需要)开始并输入 Enter。当提示输入最后一个扇区时,输入 +256M 创建一个大小为 256 MB 的分区:

Command (m for help):n
Partition number (1-128, default 1): 1
First sector (2048-60549086, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-60549086, default 60549086): +256M
 
Created a new partition 1 of type 'Linux filesystem' and of size 256 MiB.

将分区标记为 EFI 系统分区:

Command (m for help):t
Selected partition 1
Partition type (type L to list all types): 1
Changed type of partition 'Linux filesystem' to 'EFI System'.

创建swap分区

接下来,要创建交换分区,请输入 n 创建一个新分区,然后输入 2 创建第二个分区 /dev/sda2。当提示输入第一个扇区时,输入 Enter。当提示输入最后一个扇区时,输入 +4G(或交换空间所需的任何其他大小)以创建大小为 4GB 的分区。

Command (m for help):n
Partition number (2-128, default 2): 
First sector (526336-60549086, default 526336): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (526336-60549086, default 60549086): +4G
 
Created a new partition 2 of type 'Linux filesystem' and of size 4 GiB.

完成后,输入t设置分区类型,2选择刚刚创建的分区,然后输入 19 设置分区类型为 “Linux Swap”。

Command (m for help):t
Partition number (1,2, default 2): 2
Partition type (type L to list all types): 19
 
Changed type of partition 'Linux filesystem' to 'Linux swap'.

创建根分区

最后,要创建根分区,请输入 n 以创建新分区。然后输入 3 创建第三个分区,/dev/sda3。当提示输入第一个扇区时,按 Enter。当提示输入最后一个扇区时,按 Enter 以创建一个分区,该分区占用磁盘上的其余剩余空间。完成这些步骤后,输入 p 应该会显示一个类似于以下内容的分区表:

Command (m for help):p
Disk /dev/sda: 28.89 GiB, 31001149440 bytes, 60549120 sectors
Disk model: DataTraveler 2.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 87EA4497-2722-DF43-A954-368E46AE5C5F
 
Device       Start      End  Sectors  Size Type
/dev/sda1     2048   526335   524288  256M EFI System
/dev/sda2   526336  8914943  8388608    4G Linux swap
/dev/sda3  8914944 60549086 51634143 24.6G Linux filesystem

保存分区布局

要保存分区布局并退出 fdisk,请敲击 w。

Command (m for help):w

当分区创建完成后,就该在其上部署文件系统了。

使用 MBR 对磁盘进行分区以用于 BIOS/legacy 启动

下面解释了如何为 MBR/BIOS 传统引导安装创建示例分区布局。前面提到的示例分区布局现在是:

Partition Description
/dev/sda1 Boot partition
/dev/sda2 Swap partition
/dev/sda3 Root partition

可以根据个人喜好更改分区布局。

查看当前分区布局

针对磁盘启动 fdisk(在我们的示例中,我们使用 /dev/sda):

# fdisk /dev/sda

输入p显示磁盘的当前分区配置:

Command (m for help):p
Disk /dev/sda: 28.89 GiB, 31001149440 bytes, 60549120 sectors
Disk model: DataTraveler 2.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 21AAD8CF-DB67-0F43-9374-416C7A4E31EA
 
Device        Start      End  Sectors  Size Type
/dev/sda1      2048   526335   524288  256M EFI System
/dev/sda2    526336  2623487  2097152    1G Linux swap
/dev/sda3   2623488 19400703 16777216    8G Linux filesystem
/dev/sda4  19400704 60549086 41148383 19.6G Linux filesystem

直到现在,这个特定的磁盘被配置为使用 GPT 表容纳两个 Linux 文件系统(每个都有一个相应的分区列为 “Linux”)以及一个交换分区(列为 “Linux swap”)。

创建一个新的磁盘标签/删除所有分区

输入 o 在磁盘上创建一个新的 MBR 磁盘标签(这里也称为 DOS 磁盘标签);这将删除所有现有分区。

Command (m for help):o
Created a new DOS disklabel with disk identifier 0xe04e67c4.
The device contains 'gpt' signature and it will be removed by a write command. See fdisk(8) man page and --wipe option for more details.

对于现有的 DOS 磁盘标签(参见上面 p 的输出),或者考虑从磁盘中一一删除现有分区。输入 d 删除分区。例如,要删除现有的 /dev/sda1:

Command (m for help):d
Partition number (1-4): 1

该分区现已计划删除。打印分区列表时将不再显示 (p,但在保存更改之前它不会被删除。如果发生错误,用户可以中止操作 —— 在这种情况下, 立即输入 q 并按 Enter 不会删除分区。

重复输入 p 打印出一个分区列表,然后输入 d 和分区号来删除它。最终,分区表将为空:

Command (m for help):p
Disk /dev/sda: 28.89 GiB, 31001149440 bytes, 60549120 sectors
Disk model: DataTraveler 2.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe04e67c4

现在我们已准备好创建分区。

创建引导分区

首先,创建一个将挂载到 /boot 的小分区。输入 n 创建一个新分区,然后输入 p 作为主分区,输入 1 选择第一个主分区。当提示输入第一个扇区时,确保它从 2048(引导加载程序可能需要)开始并按 Enter。当提示输入最后一个扇区时,输入 +256M 创建一个大小为 256 MB 的分区:

Command (m for help):n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-60549119, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-60549119, default 60549119): +256M
 
Created a new partition 1 of type 'Linux' and of size 256 MiB.

创建 swap 分区

接下来,要创建交换分区,输入 n 创建一个新分区,然后输入 p,然后输入 2 创建第二个主分区,/dev/sda2。当提示输入第一个扇区时,按 Enter。当提示输入最后一个扇区时,输入 +4G(或交换空间所需的任何其他大小)以创建大小为 4GB 的分区。

Command (m for help):n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (526336-60549119, default 526336): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (526336-60549119, default 60549119): +4G
 
Created a new partition 2 of type 'Linux' and of size 4 GiB.

完成后,输入t设置分区类型,输入2选择刚刚创建的分区,然后输入 82 设置分区类型为 “Linux Swap”。

Command (m for help):t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 82

<!--T:179-->
Changed type of partition 'Linux' to 'Linux swap / Solaris'.

创建根分区

最后,要创建根分区,请输入 n 以创建新分区。然后输入 p 和 3 以创建第三个主分区 /dev/sda3。当提示输入第一个扇区时,按 Enter。当提示输入最后一个扇区时,按 Enter 以创建一个分区,该分区占用磁盘上的剩余空间。完成这些步骤后,输入 p 应该会显示一个类似于以下内容的分区表:

Command (m for help):p
Disk /dev/sda: 28.89 GiB, 31001149440 bytes, 60549120 sectors
Disk model: DataTraveler 2.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe04e67c4
 
Device     Boot   Start      End  Sectors  Size Id Type
/dev/sda1          2048   526335   524288  256M 83 Linux
/dev/sda2        526336  8914943  8388608    4G 82 Linux swap / Solaris
/dev/sda3       8914944 60549119 51634176 24.6G 83 Linux

保存分区布局

要保存分区布局并退出 fdisk,输入 w。

Command (m for help):w

现在是时候将文件系统应用在分区上了。

创建文件系统

介绍

现在分区已经创建,该在上面设置文件系统了。下一章节中描述了 Linux 所支持的众多文件系统。知道使用哪一个文件系统的读者可以继续阅读为分区应用文件系统。剩下的人应该学习可用的文件系统……

文件系统

有一些可以使用的文件系统。有些在amd64架构上稳定——建议在选择为一个重要分区实验性的选择文件系统前继续阅读。

  • btrfs

    是下一代文件系统,提供了许多高级功能,如快照,通过校验和自我修复、 透明压缩、 子卷和集成 RAID。几个发行版已经开始将它作为一个默认的选项,但它还未为生产工作做好准备。文件系统报告崩溃是常见的。其开发人员敦促人们运行最新的内核版本来解决安全问题,以及老的问题。 这种情况已经很多年了,现在使用它还为时过早。如果出现变更,以及发生了变化,解决错误问题,都很少往旧内核注入补丁。请谨慎使用这个文件系统!

  • ext2

    是经考验证明可靠的Linux文件系统,但是没有元数据日志,这意味这在启动系统时的ext2文件系统的日常检查相当耗时。现在相当一部分的新一代的日志文件系统都可以非常迅速检查一致性,因此比那些非日志文件系统更受欢迎。当你启动系统碰巧遇到文件系统状态不一致时,日志文件系统不会在那里耽搁很长时间。

  • ext3

    是ext2文件系统的带日志版本,提供了元数据日志模式以快速恢复数据。此外还提供了其他增强的日志模式,如完整数据日志模式和有序数据日志模式。它使用了HTree索引,在几乎所有的情况下都能保持高性能。简而言之,ext3是非常好及可靠的文件系统。

  • ext4

    最初创建为ext3的一个分支,EXT4带来了新的功能,性能改进和去除中度更改磁盘格式大小限制。它可以跨越体积高达1的EB并用16 TB最大文件大小。取而代之的是经典的ext2/3位块分配的ext4的使用范围,这对提高大文件的性能,并减少碎片。的Ext4还提供了更为复杂的块分配算法(延迟分配和多嵌段分配)给文件系统驱动更多的方式来优化数据的布局在磁盘上。 EXT4是推荐的通用所有平台的文件系统。

  • f2fs

    这个文件系统最初由三星创建用于NAND闪存,是一种闪存文件系统 从直到2016年第二季度起,这个文件系统仍然被认为不成熟。把Gentoo安装到microSD卡,USB驱动器或其他基于闪存的存储设备时使用它是一个不错的选择。

  • JFS

    是IBM的高性能日志文件系统。JFS是一个轻量级的、快速的和稳定的基于B+树的文件系统,在很多情况下都有很好的表现。

  • ReiserFS

    是基于B+树的文件系统,它有着非常全面的性能,特别时在处理很多小文件的时候,虽然会占用多一点CPU。ReiserFS相比其他文件系统显得受维护的不够。

  • XFS

    是一种带元数据日志的文件系统,它有一个健壮的特性集,并且对可伸缩性进行了优化。XFS似乎对各种各样的硬件问题显得不够宽容。

  • vfat

    也称为FAT32,被支持Linux,但不支持任何权限设置。它主要用于互操作性与其他操作系统(主要是微软的Windows),但也是很有必要的一些系统固件(如UEFI)的支持。

  • NTFS

    这个“新技术”的文件系统是Microsoft Windows的旗舰文件系统。 与上面的vfat类似,它不存储BSD或Linux正常工作所需的权限设置或扩展属性,因此它不能用作根文件系统。 它应该’只’用于与Microsoft Windows系统的互操作性(注意只强调)。

为分区应用文件系统

在一个分区或卷上创建一个文件系统,这里有用于每一个可能的分区的工具。 单击下表中的文件系统名称,了解每个文件系统的更多信息:

Filesystem Creation command On minimal CD? Package
btrfs mkfs.btrfs Yes sys-fs/btrfs-progs
ext4 mkfs.ext4 Yes sys-fs/e2fsprogs
f2fs mkfs.f2fs Yes sys-fs/f2fs-tools
jfs mkfs.jfs Yes sys-fs/jfsutils
reiserfs mkfs.reiserfs Yes sys-fs/reiserfsprogs
xfs mkfs.xfs Yes sys-fs/xfsprogs
vfat mkfs.vfat Yes sys-fs/dosfstools
NTFS mkfs.ntfs Yes sys-fs/ntfs3g

例如,要将 EFI 系统分区 (/dev/sda1) 设为 FAT32,将根分区 (/dev/sda3) 设为 ext4,如示例分区结构中所用,将使用以下命令:

# mkfs.vfat -F 32 /dev/sda1
# mkfs.ext4 /dev/sda3

当在一个小的分区(少于8 GiB)上使用 ext2、ext3 或 ext4,则创建文件系统时必须带适当的选项以保留足够的 inode。mke2fsmkfs.ext2)应用程序使用“字节每inode”设置来计算一个文件系统 inode 的数量。在小分区,建议增加计算出的 inode 数量。

# mkfs.ext4 -T small /dev/<device>

这一般将是对于给定的文件系统inode数量的四倍,它的“字节每inode”从16kB每个减少到4kB每个。这个可以在将来通过提供比例进行调整:

现在在新创建的分区(或逻辑卷)上创建文件系统。

激活swap分区

mkswap是用来初始化swap分区的命令:

# mkswap /dev/sda2

要激活swap分区,使用swapon

# swapon /dev/sda2

使用上面提到的命令创建和激活swap。

可选:使用 swapfile

$ fallocate -l 15G /swapfile
$ chmod 600 /swapfile
$ mkswap /swapfile
$ swapon /swapfile
$ swapon -s

挂载 root 分区

现在分区都已初始化并有文件系统,接下来该挂载那些分区了。使用mount命令,但是不要忘记为每一个创建的分区创建需要的挂载目录。比如示例中我们挂载根分区:

# mount /dev/sda3 /mnt/gentoo

附注:如果/tmp/需要放在一个独立分区,确保在挂载后变更它的权限:

# chmod 1777 /mnt/gentoo/tmp

这同样适用于/var/tmp。

后面的介绍中将挂载proc文件系统(一个内核的虚拟接口)和其它内核伪文件系统。不过我们首先安装Gentoo安装文件

安装Gentoo安装文件

安装stage包

设置日期和时间

在安装Gentoo之前,最好确保日期和时间设置正确。 错误配置的时间可能会导致奇怪的结果:基本系统文件应设置精确的时间戳。 事实上,由于几个网站和服务使用加密通信(SSL / TLS),如果系统时间差的离谱,可能无法下载安装文件!

验证当前时间使用命令date:

# date
Mon Oct  3 13:16:22 PDT 2021

如果显示的日期/时间不正确,请使用下列方法之一进行更新。

附注:不包括实时时钟(RTC)的主板应配置为自动将系统时钟与时间服务器同步。 这也适用于包含RTC但具有故障电池的系统。

自动

Gentoo 的官方安装光盘包含 ntpd 命令 (属于包 net-misc/ntp package)。官方光盘包括指向ntp.org时间服务器的配置文件。它可以用于使用时间服务器,使得系统时钟自动同步到UTC时间。使用方法见配置网络 但在某些架构的光盘上可能不可用。

警告:自动时间同步需要付出一个代价。它将向时间服务器显示系统的IP地址和相关网络信息(在下面的示例中为ntp.org)。有隐私问题的用户应该注意这个“之前”使用下面的方法设置系统时钟。

# ntpd -q -g

手动

也可以用date 命令来对系统时钟执行手动设置。使用 MMDDhhmmYYYY 语法 (月, 日, 小时, 分钟 和 年)。

建议所有Linux系统使用UTC时间。 稍后在安装期间将定义时区。 这将修改时钟的显示为本地时间。

比如,设置时间到2016年10月3日的13:16:

# date 100313162021

选择一个stage包

multilib(32和64位)

选择一个基础压缩包的系统可以在稍后的安装过程节省大量的时间,特别是当它是一次选择正确的配置文件。一个stage包的选择将直接影响未来的系统配置,可以在以后省的头痛。该压缩包 multilib 尽可能使用64位的库,只必要时对32位版本兼容。这对于大多数安装一个很好的选择,因为它在未来的定制提供了极大的灵活性量。那些谁希望自己的系统,能够容易地切换配置,应该下载根据各自的处理器架构 multilib的压缩包选项。

大多数用户应该不需要使用“高级”tar包选项;它们用于特定的软件或硬件配置。

no-multilib(纯64位)

选择一个no-multilib压缩包:no-multilib是在系统的基础上提供了一个完整的64位操作系统环境。这有效地使得切换到multilib的profile是不可能的(不是完全不可能)。这些刚刚开始使用Gentoo的新手不应该选择一个 no-multilib 压缩包,除非"绝对必要"。而且应该有很好的理由并做出负责任的选择。

警告:注意,把一个系统从no-multilib迁移到multilib需要极其丰富的使用Gentoo的知识并熟悉底层的工具链。这一做法甚至可能导致Toolchain developers 这令人不寒而栗。不适合内心柔弱之人,而且也超出了本指南的范围。

其他 profile 属性说明

  • openrc: 带此单词表示,其默认的初始化程序为 openrc
  • systemd: 带此单词表示,其默认的初始化程序为 systemd,而不带该单词所有 profile ,默认初始化程序都是 openrc (即 Gentoo Linux 官方默认)
  • selinux: 带此单词表示,其默认包含 SELinux 相关配置,启用 SELinux
  • hardened: 带此单词表示,其默认包含强化安全性相关的配置

正常使用情况下,推荐如下两个 stage3 进行下载:

  • current-stage3-amd64-openrc
  • current-stage3-amd64-systemd

openrc 是 Gentoo Linux 官方维护且默认的初始化程序,而 systemd 则是如今大多数发行版使用的初始化程序,各有优劣,二者均可,自行选择。

下载stage压缩包

前往挂载根文件系统的 Gentoo 挂载点(类似于 /mnt/gentoo):

# cd /mnt/gentoo

根据不同的安装媒介,下载stage压缩包所需的唯一工具是网络浏览器。

图形化浏览器

那些使用图形化网页浏览器从主网站下载小节复制stage文件URL也没有问题。 只需选择适当的选项卡,右键单击stage文件的链接,然后复制链接地址(Firefox)或复制链接位置(Chromium)将链接复制到剪贴板,然后 将链接粘贴到命令行中的 wget程序以下载stage tarball:

# wget <PASTED_STAGE_URL>

例如

# wget https://mirrors.bfsu.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64-systemd/stage3-amd64-systemd-20220315T091810Z.tar.xz
# wget https://mirrors.bfsu.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64-systemd/stage3-amd64-systemd-20220315T091810Z.tar.xz.DIGESTS
# cat stage3-amd64-systemd-20220315T091810Z.tar.xz
# sha512sum stage3-amd64-systemd-20220315T091810Z.tar.xz

命令行浏览器

更多传统的读者或是 Gentoo 的“老前辈”,只能命令行工作,可能更喜欢使用非图形化菜单驱动的浏览器 links。 要下载一个 stage,请像下面这样访问Gentoo镜像列表:

# links https://www.gentoo.org/downloads/mirrors/

要设置links使用一个HTTP代理,在传入URL上加一个-http-proxy选项:

# links -http-proxy proxy.server.com:8080 https://www.gentoo.org/downloads/mirrors/

links之外还有一个lynx浏览器。和links类似,它也是一个非图形化的浏览器,但不是自带的。

# lynx https://www.gentoo.org/downloads/mirrors/

如果需要定义一个代理,设置http_proxy和/或ftp_proxy变量:

# export http_proxy="http://proxy.server.com:port"
# export ftp_proxy="http://proxy.server.com:port"

在镜像列表中,选择一个附近镜像站。通常HTTP镜像站就足够了,但其他网络协议是可用的。请访问releases/amd64/autobuilds/ 。 那里将显示所有可用stage文件 (可能他们个别小组架构在命名的子目录中存储)。选择一个,然后按 d 下载。

stage 文件下载完成后,可以验证 stage tarball 的完整性并验证其内容。

对验证stage文件不感兴趣的用户可以通过按 q 来关闭命令行浏览器,并且可以直接移步到 解压stage压缩包 部分。

验证

附注:一些 tarballs 是通过XZ压缩的。在下载以 .tar.xz 结尾的 tarball 时,请确保在下面的命令中调整tarball文件名的 .tar.bz2 。

与最小安装CD一样,可以使用额外的下载来验证stage文件。 虽然这些步骤可以被跳过,但这些文件是为那些关心他们刚刚下载的文件合法性的用户提供的。

  • A .CONTENTS 文件包含stage压缩包内的所有文件的列表。
  • A .DIGESTS 文件,其中包含用不同的算法校验的stage文件。
  • A .DIGESTS.asc 像.DIGESTS文件一样, 包含不同的stage文件的校验和,但也加密签名,以确保它是由Gentoo项目提供的。

使用 openssl 并比较,提供的校验输出与.DIGESTS或者.DIGESTS.asc 文件的内容是否一致。

比如,要验证SHA512校验值:

# openssl dgst -r -sha512 stage3-amd64-<release>-<init>.tar.?(bz2|xz)

使用sha512sum命令的另外一种方式:

# sha512sum stage3-amd64-<release>-<init>.tar.?(bz2|xz)

要验证Whirlpool校验值:

# openssl dgst -r -whirlpool stage3-amd64-<release>-<init>.tar.?(bz2|xz)

该值需要匹配,否则下载的文件可能已损坏(或摘要文件)。比较这些命令的输出与.DIGESTS(.asc)中的值。该值需要匹配,否则下载的文件可能已损坏(或digests文件)。

就像在ISO文件中,它也可以来验证加密签名的.DIGESTS.asc。使用 gpg 以确保DIGESTS.asc文件校验和未被篡改:

# gpg --verify stage3-amd64-<release>-<init>.tar.?(bz2|xz){.DIGESTS.asc,}

解压stage压缩包

现在,解压下载的stage到系统。我们使用 tar来进行:

# 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官方安装媒介。

现在stage文件已经解压好了,下面我们继续配置编译选项

配置编译选项

介绍

为了优化Gentoo,可以设置一些影响Portage的变量,Gentoo官方支持包管理器。 所有这些变量可以设置为环境变量(使用export),但这不是永久的。 为了保留设置,Portage读入/etc/portage/make.conf文件 ,一个用于Portage的配置文件,它有一个预配置好的模板文件在 /usr/share/portage/config/make.globals ,而 make.conf 下的配置会覆盖该模板下对应变量。

附注:所有可能的变量的注释列表可以在 /mnt/gentoo/usr/share/portage/config/make.conf.example中找到。要成功安装Gentoo,只需要设置下面提到的变量。

启动编辑器(在本指南中,我们使用 nano)来更改我们将在下面讨论的优化变量。

# 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时的系统)。(如果你知道自己处理器的代号,就用自己的处理器代号替换这里的native 比如我的是skylake,如果不确定就使用native。一个得到处理器代号的简单办法:使用 CPU-Z 检测)。

第二个是标志 -O(即大写的字母O,而不是数字零),它指定了gcc优化级别标志。 可能用到级别的是s(对于大小最优化),0(零 - 无优化),1,2或甚至3等更多的优化选项(每个级别具有与前面相同的标志,加上一些额外选项)。 -O2是建议的默认值。 -O3在整个系统范围内使用时会导致问题,因此我们建议您坚持使用-O2

另一个普遍使用的优化标记是-pipe(不同编译阶段通信使用管道而不是临时文件)。它对产生的代码没有任何影响,但是会使用更多的内存。在内存不多的系统里,gcc可能会被杀掉。如果是那样的话,就不要用这个标记。

使用 -fomit-frame-pointer(它将不在寄存器里为不需要帧指针的函数保存帧指针)可能会在调试程序的时候造成严重后果!

在你定义 CFLAGS和CXXFLAGS的时候,你需要把这些优化标记都合并起来。stage3文件里包含的你解压缩出来的默认值已经足够好了。下面这个例子仅仅是个例子:

# Compiler flags to set for all languages
COMMON_FLAGS="-march=native -O2 -pipe"
# Use the same settings for both variables
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"

Tip:通过GCC 优化指导这篇文章获取有更多的信息,比如这些优化变量如何影响你的系统,Safe CFLAGS也许是对初学者开始优化系统更实用的一篇文章

MAKEOPTS

通过使用MAKEOPTS 你可以定义在安装软件的时候同时可以产生并行编译的数目。官方推荐取「内存大小/2G」(free -h)与「CPU 线程数」(nproc)中的较小者。

警告:使用大量job会显着影响内存消耗。良好的建议是为指定的每项工作至少有2 GiB的RAM(例如,-j6需要至少12个GiB)。要避免内存不足,请降低作业数量以适应可用内存。

提示:使用并行emerges (--jobs)时,运行的有效作业数量可以呈指数增长(最高使工作数乘以emerge作业数)。通过运行仅限localhost-only distcc配置,可以根据仅限于每个主机的编译器实例的数量来解决此问题。

MAKEOPTS="-j5"

如果变量未进行设置,那么 portage 会根据当前 CPU 的线程数自动赋予一个值,该自动值等于当前 CPU 线程数。

make.conf Template

# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
COMMON_FLAGS="-march=native -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
#直接填写即可
CHOST="x86_64-pc-linux-gnu"  
# CPU指令集,按照自己CPU的实际情况填写,后文会提到
CPU_FLAGS_X86="aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt rdrand sse sse2 sse3 sse4_1 sse4_2 ssse3"  
# 同时编译的线程数
MAKEOPTS="-j5"                

# NOTE: This stage was built with the bindist Use flag enabled
PORTDIR="/var/db/repos/gentoo"
DISTDIR="/var/cache/distfiles"
PKGDIR="/var/cache/binpkgs"

# This sets the language of build output to English.
# Please keep this setting intact when reporting bugs.
LC_MESSAGES=C

# Emerge Default Option
EMERGE_DEFAULT_OPTS="--binpkg-changed-deps=y --binpkg-respect-use=y --getbinpkg=y --autounmask --autounmask-keep-masks --autounmask-write=n --keep-going -v -a"
#每次安装完包之后自动清理
AUTO_CLEAN="yes"  

# Accept
# 如果你更喜欢最新而非稳定那这里用~amd64
ACCEPT_KEYWORDS="amd64" 
# 接受所有许可证的软件
ACCEPT_LICENSE="*"                 

# Lang
# 语言设置照抄即可
L10N="en-US zh-CN en zh"           

# Harkware
# intel集成显卡和nvidia显卡(不使用novueau)
VIDEO_CARDS="intel i965 iris nvidia"  
# intel声卡
ALSA_CARDS="hda_intel"  
# 输入设备 非笔记本去除后面的synaptics
INPUT_DEVICES="libinput synaptics" 

#Grub
# 设置GRUB版本 照抄即可
GRUB_PLATFORMS="efi-64"            

# Ccache
# 使用ccache来大大提高重新编译时的速度,等后面安装并设置ccache之后取消注释
# FEATURES="parallel-fetch ccache"  
# ccache使用的目录
# CCACHE_DIR="/var/cache/ccache"     

# Aria2    
# 使用aria2提高下载速度(不设置也无大碍,设置的话一定要注意指令拼写正确)
#FETCHCOMMAND="/usr/bin/aria2c -d \${DISTDIR} -o \${FILE} --allow-overwrite=true --max-tries=5 --max-file-not-found=2 --max-concurrent-downloads=5 --connect-timeout=5  --timeout=5 --split=5 --min-split-size=2M --lowest-speed-limit=20K --max-connection-per-server=9 --uri-selector=feedback \${URI}"
#RESUMECOMMAND="${FETCHCOMMAND}"

# USE                               
# USE变量是Gentoo最有威力的变量 也是Gentoo吸引我的原因之一
#FUCKDE="-gnome -gnome-shell -gnome-keyring -nautilus -kde"
# 不打算安装gnome和kde及其相关组件
#FUCKSV="-bindist -mdev elogind -dhcpcd -oss -grub -plymouth -systemd -consolekit"
# 不使用systemd plymouth consolekit 只使用elogind(旧教程会使用consolekit,事实上elogind是consolekit未来的替代品)
#SOFTWARE="sudo -icu client git chromium openmp minizip udev blkid efi hwdb smack acpi ccache dbus policykit udisks"
# 需要用到的特性 照抄即可
#AUDIO="alsa jack pulseaudio"
# 对于音频相关软件使用pulseaudio alsa jack特性
#NET="network networkmanager connection-sharing wifi http2"
# 网络相关 照抄即可
#VIDEO="X vulkan layers glamor nvidia gallium"
# 图形相关 照抄即可
#ELSE="cjk emoji"
# 照抄

# 定义需要的USE变量
#USE="${FUCKDE} ${FUCKSV} ${SOFTWARE} ${AUDIO} ${NET} ${VIDEO} ${ELSE}"


# Mirrors
# 设置镜像站为北外镜像站(清华镜像站的影分身,压力小,速度快)
GENTOO_MIRRORS="https://mirrors.bfsu.edu.cn/gentoo" 

# Proxy
# emerge时用到的代理 需要代理时候自行设置 勿照抄 下同
#http_proxy="http://127.0.0.1:8889"     
#https_proxy="http://127.0.0.1:8889"
  • make.conf

  • CHOST

  • CPU_FLAGS_X86

    检测cpu指令集

    $ sudo emerge app-portage/cpuid2cpuflags
    $ sudo cpuid2cpuflags 
    

    安装完成之后使用该指令并将输出值作为CPU_FLAGS_X86的值输入到make.conf中

  • AUTO_CLEAN: man make.conf wrote

    AUTOCLEAN = ["yes" | "no"]
    Automatically cleans the system by removing outdated packages which will not remove functionalities or prevent your system from working. On major ABI changes this may need to be set to off to ensure that the system can be rebuilt using the new libs before the old ones are removed. Downgrading with this option turned off may result in missing symlinks and an inoperable system.
    Defaults to yes.
    
  • ALSA_CARDS:

    ALSA_CARDS is used by sys-firmware/alsa-firmware and media-sound/alsa-tools (result of eix -U ALSA_CARDS).

    If you have an intel hda(according to your lspci output), you don’t need to bother with ALSA_CARDS, because that card doesn’t require anything special. If you still want to set it for the sake of completeness, use ALSA_CARDS=“hda-intel”.

  • INPUT_DEVICES

  • ccache: 配置ccache

    emerge --ask dev-util/ccache
    # 创建ccache的目录
    mkdir -p /var/cache/ccache 
    # 修改owner为portage组的用户
    chown -R root:portage /var/cache/ccache  
    # 修改权限
    chmod -R 777 /var/cache/ccache          
    # 完成配置之后去掉make.conf中ccache的注释
    # 之后安装别的包可能会在ccache这出现问题,需要重新给权限
    

就位,预备,出发 !

根据你的喜好更新并保存/mnt/gentoo/etc/portage/make.conf(nano用户可以敲 Ctrl+X)。

让我们继续 安装Gentoo 基本系统.

安装Gentoo基础系统

Chrooting

可选:选择镜像站点

分发文件

为了能更快的下载源代码,这里推荐选择一个快的镜像。Portage 将会在make.conf文件中查找GENTOO_MIRRORS变量,并使用其中所列的镜像。可以通过浏览 Gentoo 镜像列表搜索一个(或一组)最接近系统物理位置(往往那是最快的)的镜像。另外,我们提供一个叫作mirrorselect的好工具,它为用户选择所需镜像提供了一个很好的交换。只需要移动光标选择镜像并按Spacebar选择一个或多个镜像。

# mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf

如果因为连接国外网络不畅的原因,导致获取列表失败,这时候也可以直接手动指定一个镜像:

echo 'GENTOO_MIRRORS="https://mirrors.tuna.tsinghua.edu.cn/gentoo"' >> /mnt/gentoo/etc/portage/make.conf
官方 ebuild 软件仓库

选择镜像的第二个重要步骤是通过/etc/portage/repos.conf/gentoo.conf文件来配置 Gentoo的 ebuild 软件仓库。这个文件包含了更新 Portage 数据库(包含 Portage 需要下载和安装软件包所需要的信息的一个 ebuild 和相关文件的集合)所需要的同步信息。

通过几个简单的步骤就可以完成软件仓库的配置。首先,如果它不存在,则创建repos.conf目录:

# mkdir --parents /mnt/gentoo/etc/portage/repos.conf

接下来,复制 Portage 提供的 Gentoo 仓库配置文件到这个(新创建的)目录:

# cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf

使用一个文件编辑器或通过使用 cat 命令来看一眼。文件里的内容应该是.ini格式并且看起来像是这样:

# cat /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基础设施上带宽的压力并能提供一个由于特定镜像离线的故障安全。除非使用本地私有Portage镜像,否则建议保留默认URI。

Tip:对那些有兴趣的话,可以在Portage项目的同步主题中找到关于Portage的同步API插件的官方规范。

自定义 ebuild 软件仓库

同步方式:

  • rsync 方式可以使用命令校验本地改动,但本地同步时速度较慢;镜像站同步上游频率正常
  • git 方式可以使用命令结合人工介入判断以校验本地改动,本地同步时速度快;官方镜像点与原始仓库同步最及时,但国内镜像站同步上游频率低

目前推荐使用 git 方式。为了使得更新更迅速,建议自定义一个靠近自己的镜像站点。方法为先创建一个自定义配置文件 /etc/portage/repos.conf/gentoo.conf ,后根据同步类型进行操作:

  • 自定义 rsync 方式同步配置

    [gentoo]
    location   = /var/db/repos/gentoo
    auto-sync  = yes
    sync-type  = rsync
    sync-uri   = rsync://mirrors.bfsu.edu.cn/gentoo-portage
    # 国内我这里建议可以使用北外的镜像站,其负载小,带宽大,更新迅速。
    # 其它国内的镜像站我所知的还有:
    #   TUNA: rsync://mirrors.tuna.tsinghua.edu.cn/gentoo-portage
    #    163: rsync://mirrors.163.com/gentoo-portage
    #  中科大: rsync://rsync.mirrors.ustc.edu.cn/gentoo-portage/
    

    Gentoo Linux 官方有一份较为完整的 rsync 镜像列表

  • 自定义 git 方式同步配置

    [gentoo]
    location   = /var/db/repos/gentoo
    auto-sync  = yes
    sync-type  = git
    sync-depth = 1
    sync-uri   = https://mirrors.bfsu.edu.cn/git/gentoo-portage.git
    # 国内我找到的 git 方式同步镜像只有北外和 TUNA 两家
    #   TUNA 的地址: https://mirrors.tuna.tsinghua.edu.cn/git/gentoo-portage.git
    # 但它们的同步上游的频率都很低(截至发文时确认为 11 小时一次)
    # 所以若使用 git 方式同步,在网络流畅的情况,个人更建议直接同步官方镜像:
    #   https://github.com/gentoo-mirror/gentoo.git
    sync-git-verify-commit-signature = yes
    # 设置校验最上层 commit 的签名,默认是不校验的
    

    之后执行:

    emerge -vj dev-vcs/git
    # 以安装 git 工具,它并不是系统自带的
    
    rm -rf /var/db/repos/gentoo
    # 删除原有的不支持 git 方式的数据库
    
    emerge --sync
    # 初始化同步一次数据库
    

如果你比较疑惑为何在 mirrorselect 时添加了一个镜像地址,此时又添加了,那么在此说明:

安装 Gentoo Linux 时往 /etc/portage/make.conf 写入的镜像地址,是 distfiles 镜像地址,用于下载安装软件时的软件本体(源代码或者二进制包),也包括了很多其它内容,比如 Portage 数据库的快照(但此快照不适用于日常更新)。

而此时配置的镜像是用于同步 Portage 系统的数据库,其包含了基础的系统配置文件,安装软件所需的描述文件等等很多基础内容。

复制DNS信息

在进行新环境之前,还有一件要做的事情就是复制/etc/resolv.conf中的DNS信息。需要完成这个来确保即使进入到新环境后网络仍然可以使用。/etc/resolv.conf包含着当前网络中的DNS服务器。

要复制这个信息,建议通过cp命令的 --dereference 选项。这可以保障如果/etc/resolv.conf是一个符号链接的话,复制的是那个目标文件而不是这个符号文件自己。否则在新环境中,符号文件将指向一个不存在的文件(因为链接目标非常可能不会在新环境中)。

# cp --dereference /etc/resolv.conf /mnt/gentoo/etc/

或者

# echo 'nameserver 8.8.4.4' > /mnt/gentoo/etc/resolv.conf

挂载必要的文件系统

稍等片刻,Linux 的根目录将变更到新的位置。为了确保新环境正常工作,需要确保一些文件系统可以正常使用。

需要提供的文件系统是:

  • /proc/ 一个pseudo文件系统(看起来像是常规文件,事实上却是实时生成的),由Linux内核暴露的一些环境信息
  • /sys/ 一个pseudo文件系统,像要被取代的/proc/一样,比/proc/更加有结构
  • /dev/ 是一个包含全部设备文件的常规文件系统,一部分由Linux设备管理器(通常是udev)管理

/proc/位置将要挂载到/mnt/gentoo/proc/,而其它的两个都是绑定挂载。字面上的意思是,例如/mnt/gentoo/sys/事实上就是/sys/(它只是同一个文件系统的第二个条目点),而/mnt/gentoo/proc/是(可以说是)文件系统的一个新的挂载。

# mount --types proc /proc /mnt/gentoo/proc
# mount --rbind /sys /mnt/gentoo/sys
# mount --make-rslave /mnt/gentoo/sys
# mount --rbind /dev /mnt/gentoo/dev
# mount --make-rslave /mnt/gentoo/dev
# mount --bind /run /mnt/gentoo/run
# mount --make-slave /mnt/gentoo/run

附注--make-rslave操作是稍后安装systemd支持时所需要的。

警告:当使用非Gentoo安装媒介时,比如 Ubuntu,这时可能还不算完。一些发行版将/dev/shm符号链接到/run/shm/,在chroot后将变得不可用。为了让/dev/shm/是一个正常挂载的tmpfs,可以这样修复:

# test -L /dev/shm && rm /dev/shm && mkdir /dev/shm
# mount --types tmpfs --options nosuid,nodev,noexec shm /dev/shm

同时确保设置了权限为1777

# chmod 1777 /dev/shm

ArchФэ: genfstab 确实方便很多,再来个gentoochroot就更舒服了 min: 可以,做完前面的步骤,再 systemd-nspawn -b -D /mnt 这样比之chroot还可以用hostnamectl啥的

进入新环境

现在所有的分区已经初始化,并且基础环境已经安装,是时候进入到新的安装环境了。这意思着会话将把根目录(能访问到最顶层的位置)从当前的安装环境(安装CD或其他安装媒介)变为安装系统(叫做初始化分区)。因此叫作 change rootchroot

完成chroot有三个步骤:

  1. 使用 chroot 将根目录的位置从 /(在安装媒介里)更改成 /mnt/gentoo/ (在分区里)
  2. 使用 source 命令将一些设置(那些在 /etc/profile 中的)重新载入到内存中
  3. 更改主提示符来帮助我们记住当前会话在一个 chroot 环境里面。
# chroot /mnt/gentoo /bin/bash
# source /etc/profile
# export PS1="(chroot) ${PS1}"

从现在开始,所有的动作将立即在新Gentoo Linux环境里生效。当然这离完成还很远,因为安装还剩下很多章节 !

Tip:如果安装Gentoo时在这一步之后的任何地方中断,那么“应该”可以从这一步“继续”安装。不必再重新给磁盘分区!只需要[挂载 root 分区](#挂载 root 分区) 并运行上述步骤,然后通过复制 DNS 信息 重新进入工作环境。 这也对修复引导程序问题很有用。 更多的信息可以在 chroot 这篇文章中找到。

挂载 boot 分区

现在已经进入新的环境,必须创建并挂载 boot 分区。 当编译内核并安装引导加载程序时,这将非常重要:

# mount /dev/sda1 /boot

可以挂载到 /boot/efi/ 分区

# mkdir -p /boot/efi
# mount /dev/sda1 /boot/efi/

配置Portage

从网站安装 Gentoo ebuild 数据库快照

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

建议那些使用限制性防火墙的用户使用 emerge-webrsync 命令(它使用 HTTP / FTP 协议下载快照)节省网络带宽。 没有网络或带宽限制的读者可以愉快地跳到下一节。

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

# 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获得的)到最新状态。

# emerge --sync

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

# 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 特有的应用程序,它允许使用通用管理接口来管理系统。在这里,要用到 eselectnews 模块。

对于news模块,最常用的有三个操作:

  • 使用list显示一个可用新闻条目的预览。
  • 使用read来阅读新闻条目。
  • 使用purge将在新闻条目阅读后删除,并且不能再次阅读。
# eselect news list
# eselect news read
# eselect news read --quiet

可以通过新闻阅读器手册页查看更多关于新闻阅读器的信息:

# man news.eselect

选择正确的配置文件

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

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

# eselect profile list
  ...
  [1]   default/linux/amd64/17.1 (stable)
  [2]   default/linux/amd64/17.1/selinux (stable)
  [3]   default/linux/amd64/17.1/hardened (stable)
  [4]   default/linux/amd64/17.1/hardened/selinux (stable)
  [5]   default/linux/amd64/17.1/desktop (stable)
  [6]   default/linux/amd64/17.1/desktop/gnome (stable)
  [7]   default/linux/amd64/17.1/desktop/gnome/systemd (stable)
  [8]   default/linux/amd64/17.1/desktop/plasma (stable)
  [9]   default/linux/amd64/17.1/desktop/plasma/systemd (stable)
  ...

附注:命令的这个输出只是一个示例,并会随时间演变。

可以看到,一些架构还会有桌面的子配置文件。

Warning:升级 profile 不能掉以轻心。 选择初始 profile 时,请确保使用与最初使用的 stage3 “相同的版本”(例如 17.1 )。 每个新的 profile 版本都通过新闻项目公布,新闻项目中包含了迁移说明。 在切换到较新的 profile 之前,请务必阅读并遵循这些内容。

在看完框架的可用配置文件amd64之后,用户可以键入以下命令为系统选择一个不同的配置文件,比如选择 plasma/systemd:

# eselect profile set 9

No-multilib

若要选择没有 32 位应用和类库的纯 64 位环境,请使用一个 no-multilib 的配置文件:

# eselect profile list
Available profile symlink targets:
  [1]   default/linux/amd64/17.1 *
  [2]   default/linux/default/linux/amd64/17.1/desktop
  [3]   default/linux/default/linux/amd64/17.1/desktop/gnome
  [4]   default/linux/default/linux/amd64/17.1/desktop/kde
  [5]   default/linux/default/linux/amd64/17.1/no-multilib

接下来选择no-multilib配置文件:

# eselect profile set 5
# eselect profile list
Available profile symlink targets:
  [1]   default/linux/default/linux/amd64/17.1
  [2]   default/linux/default/linux/amd64/17.1/desktop
  [3]   default/linux/default/linux/amd64/17.1/desktop/gnome
  [4]   default/linux/default/linux/amd64/17.1/desktop/kde
  [5]   default/linux/default/linux/amd64/17.1/no-multilib *

附注developer 子配置文件是专用于Gentoo Linux开发,也就是说不是用于普通用户。

推荐:安装二进制包

对于虚拟机或其他情况,可以选择是否安装二进制包而不是自己从源码开始编译。

二进制包的提供是目前 Gentoo 的一种实验性质的方案,它的存在能显著缩短整体安装时间,降低机器负载,但目前对二进制包是不存在文件校验的,所以使用它有些许潜在风险。同时,使用二进制包表示将不会对本机有编译优化。(其它的也有可能导致一些需要编译的包出现编译问题)

另外,如果本地一些包的 [USE标记](# USE标记) 有变动或者一些包的依赖有了变动,那么对于该包, Portage 目前默认会回退到自行编译安装的状态(也推荐这样),在尽可能安装二进制包的同时,也完全不影响正常的使用。

如果你决定启用这个尚处于实验状态的方案,那么需创建一个文件:

$ cat > /etc/portage/binrepos.conf
[binhost]
priority = 9999
sync-uri = https://mirrors.tuna.tsinghua.edu.cn/gentoo/experimental/amd64/binpkg/default/linux/17.1/x86-64/

sync-uri 可以配置成任意所选镜像地址

再编辑 /etc/portage/make.conf 文件,设置:

EMERGE_DEFAULT_OPTS="--binpkg-changed-deps=y --binpkg-respect-use=y --getbinpkg=y"

最终,我的配置为:

# echo 'EMERGE_DEFAULT_OPTS="--binpkg-changed-deps=y --binpkg-respect-use=y --getbinpkg=y --autounmask --autounmask-keep-masks --autounmask-write=n --keep-going -v -a"' >> /etc/portage/make.conf

配置USE变量

USE是Gentoo为用户提供的最具威力的变量之一。很多程序通过它可以选择编译或者不编译某些可选的支持。例如,一些程序可以在编译时加入对 GTK+或是对Qt的支持。其它的程序可以在编译时加入或不加入对于SLL的支持。有些程序甚至可以在编译时加入对framebuffer的支持(svgalib)以取代X11(X服务器)。

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

在USE变量里你可以定义关键字,它被用来对应相应的编译选项。例如,ssl将会把SSL支持编译到程序中以支持它。-X会移除其对于X服务器的支持(注意前面的减号)。gnome gtk -kde -qt4 -qt5将会以支持GNOME(和GTK+)但不支持KDE(和Qt)的方式编译软件,使系统为GNOME做完全调整(如果架构支持)。

默认的USE设置全放在了系统所使用的Gentoo配置文件的make.defaults文件中。Gentoo对它的配置文件们使用了一个(复杂的)继承系统,在这个阶段我们不去深入。最简单的检查当前活动的USE标记的办法是运行emerge –info并选择以USE开头的那一行:

# 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标记的完整描述。

# less /var/db/repos/gentoo/profiles/use.desc

less命令中,可以通过使用键来滚动,并且可以按q退出。

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

# nano -w /etc/portage/make.conf
USE="-gtk -gnome qt5 kde dvd alsa cdr"

当USE在/etc/portage/make.conf中定义,会从那个默认列表中添加(或者移除,如果USE标记以-号开头的话)。用户想忽略所有默认的USE设置并完全由自己管理的话,应该在make.conf中定义USE以-*开头:

USE="-* X acl alsa "

警告:由于仔细选择 USE 标志默认值可能会对某些软件包防止冲突和其它错误,所以尽管可以设置 -*(如上例所示),但不鼓励这样做。

推荐: 配置 ACCEPT_LICENSE 变量

Gentoo 对所有的软件包都使用包所属的许可证进行标记。这允许用户在安装软件之前根据特定的许可证或许可证组来选择软件。

Important:ebuild 中 的 LICENSE 变量仅是为 Gentoo 开发人员和用户准备的一份指南。它既不是法律声明,也不保证其真实性。因此不要过度依赖它,您需要深入检查软件包的本身,以及您使用的所有文件。

Portage 使用 ACCEPT_LICENSE 变量决定那些包允许对之前接受的许可证不提示用户。同样,也可以在 /etc/portage/package.license 中每个包中设置例外。

在 Gentoo 仓库中定义的许可证组,由 Gentoo Licenses project 项目管理,有:

Group Name Description
@GPL-COMPATIBLE GPL compatible licenses approved by the Free Software Foundation
@FSF-APPROVED Free software licenses approved by the FSF (includes @GPL-COMPATIBLE)
@OSI-APPROVED Licenses approved by the Open Source Initiative
@MISC-FREE Misc licenses that are probably free software, i.e. follow the Free Software Definition but are not approved by either FSF or OSI
@FREE-SOFTWARE Combines @FSF-APPROVED, @OSI-APPROVED and @MISC-FREE
@FSF-APPROVED-OTHER FSF-approved licenses for “free documentation” and “works of practical use besides software and documentation” (including fonts)
@MISC-FREE-DOCS Misc licenses for free documents and other works (including fonts) that follow the free definition but are NOT listed in @FSF-APPROVED-OTHER
@FREE-DOCUMENTS Combines @FSF-APPROVED-OTHER and @MISC-FREE-DOCS
@FREE Metaset of all licenses with the freedom to use, share, modify and share modifications. Combines @FREE-SOFTWARE and @FREE-DOCUMENTS
@BINARY-REDISTRIBUTABLE Licenses that at least permit free redistribution of the software in binary form. Includes @FREE
@EULA License agreements that try to take away your rights. These are more restrictive than “all-rights-reserved” or require explicit approval

Gentoo 在配置文件中提供了有预定义的值,默认接受由自由软件基金会明确批准的许可,开源项目或者遵循自由软件定义,例如:

# portageq envvar ACCEPT_LICENSE
@FREE

可以通过更改 /etc/portage/make.conf 来自定义整个系统,使之接受所有许可:

# echo 'ACCEPT_LICENSE="*"' >> /etc/portage/make.conf

还可以根据需要添加每个软件包的覆盖:

# nano -w /etc/portage/package.license/kernel
app-arch/unrar unRAR
sys-kernel/linux-firmware @BINARY-REDISTRIBUTABLE
sys-firmware/intel-microcode intel-ucode

更新@world集合

程序的原子指的是由完整类别组成的名称,没有版本和其他的限定符号比如说 net-vpn/openvpn。什么时候会用到原子呢?比如说你要引用一个基于SQLite的数据库 dev-python/axiom 但是这个是和sci-mathematics/axiom 是一个软件包名字这个时候原子就派上用场了。

可以将多个原子分为一组,从而可以针对整个组来进行操作(比如说重建某个组)。对于这个组有个名字:集合,集合以@作为前缀,其中一些是在Portage里由预先定义的比如说 @system集合包括主要的系统软件包。像是我们安装一个软件包(原子)这个就会记录在 /var/lib/portage/world中 (@world集合包含了@system集合,如果有需要还可以自己定义集合)。将 world 文件复制到其它运行 Gentoo 的电脑上,就可以还原原机器上安装的软件和环境。

明智的做法是更新系统的 @world set ,以便可以构建系统。

当系统应用了任何升级,或从 任何profile 构建了stage3 后,应用了变化的 use 标记时,下一步是“必要”的。

# emerge --ask --verbose --update --deep --newuse @world

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

  • 选择 default/linux/amd64/17.1 将只有很少的包被重装或更新
  • 选择 default/linux/amd64/17.1/desktop/gnome/systemd 将需要安装许多软件包,因为init系统要更改为systemd,并且将安装GNOME桌面环境框架。

可选:使用 OpenRC 作为 init 系统

**本文的后续部分专注于 Systemd 作为默认的 init 系统。**如果读者要安装 GNOME 3.8 及之后版本则必须使用 Systemd。如果需要使用 OpenRC (传统的 Gentoo init 系统),可以阅读官方文档

时区

为系统选择时区。在/usr/share/zoneinfo/中查找可用的时区。

# ls /usr/share/zoneinfo

假设选择的时区是 Asia/Shanghai,生成一个符号链接:

# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

稍后,当系统运行时,我们可以使用timedatectl命令配置时区和相关设置。

配置 locale

Locale 生成

大多数用户只想在他们的系统上使用一或两个地区。对于 root 用户而言,一般使用默认的配置即可。但这里需要添加上自己所需其它语言设置以供普通用户使用。

Locale 不只是指定用户应该使用与系统进行交互的语言,同时也指定了字符串排序,日期和时间的显示等规则。Locale 是 “区分大小写” 的,必须完全按照描述的方式表示。完整的 locale 可用列表可以在 /usr/share/i18n/SUPPORTED 文件中找到。

系统支持的 locale 必须在 /etc/locale.gen 文件中定义。

# <语言>_<国家代码>[@可选的变体].<编码> <编码>

下面的地区是一个示例,展示了同时使用英语(美国)和汉语(中国)及附加字符格式(如UTF-8)。

# cat >> /etc/locale.gen
en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8

警告:我们"强烈"建议添加至少一个UTF-8格式的地区设置,因为许多应用程序也许需要这样才能正确构建。

下一步是运行 locale-gen 命令。此命令会生成 /etc/locale.gen 文件中所有指定的地区。

# locale-gen

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

Locale 选择

等完成后,我们就来设定系统级别的 locale 设置。我们又一次使用 eselect 来做这件事,现在使用 locale 模块。

通过 eselect locale list 可显示可用的目标:

# eselect locale list
Available targets for the LANG variable:
  [1]   C
  [2]   C.utf8
  [3]   POSIX
  [4]   en_US.utf8
  [5]   zh_CN.utf8
  [6]   C.UTF8 *
  [ ]   (free form)

可以使用 eselect locale set <NUMBER> 选择正确的 locale:

# eselect locale set 4

这个还可以通过手动编辑 /etc/env.d/02locale 文件来完成:

LANG="zh_CN.UTF-8"
LC_COLLATE="C"

设定 locale 可以避免在后面安装中,内核和软件汇编时的警告和错误。

现在重新加载环境:

# env-update && source /etc/profile && export PS1="(chroot) ${PS1}"

完整的本地化指南提供了有关 locale 选择过程的其他指导。另一个有意思的文章是为系统启用 UTF-8 的具体信息的 UTF-8 指南。

配置Linux内核

安装源码

Linux内核是所有发行版的核心。它位于用户程序和系统硬件之间。Gentoo提供给用户一些可选的内核源码。完整的带描述的列表在内核概述页面

Gentoo Linux 所提供的可用内核源码包都在 sys-kernel 类下。而其中以下两个个版本更通用:

  • sys-kernel/gentoo-sources

    这是最高到内核主线版本的内核源码包,需要自行配置后,再自行编译后安装

  • sys-kernel/gentoo-kernel

    这是最高到内核主线版本的内核源码包,但同时包含了通用的内核配置,可自动编译后安装

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

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

# emerge --ask sys-kernel/gentoo-sources

这将在/usr/src/中安装Linux内核源码。如果在选择的内核源代码包上没有启用USE=symlink,它将不会自己创建一个符号链接。

通常需要维护/usr/src/linux符号链接,这样它就指向与当前运行的内核相对应的源代码。但是,默认情况下不会创建这个符号链接。创建符号链接的一个简单方法是利用eselect的内核模块。

关于符号链接的目的以及如何管理它的更多信息,请参阅 Kernel/Upgrade

首先,列出所有已安装的内核:

# eselect kernel list
Available kernel symlink targets:
  [1]   linux-4.9.16-gentoo

要创建一个名为linux的符号链接,请使用:

# eselect kernel set 1
# ls -l /usr/src/linux
lrwxrwxrwx    1 root   root    12 Oct 13 11:04 /usr/src/linux -> linux-4.9.16-gentoo

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

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

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

默认:手动配置

介绍

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

无论如何,有一件事是真实的:当手动配置内核时,了解(硬件)系统是至关重要的。大多数信息可以通过安装包含lspci命令的sys-apps/pciutils来收集:

# emerge --ask sys-apps/pciutils

附注:在chroot中,可以安全的忽略任何lspci可能抛出的关于pcilib的警告(比如pcilib: cannot open /sys/bus/pci/devices)。

另一个系统信息来源是运行lsmod来查看安装CD使用什么内核模块,它可能对启用什么提供了一个好的暗示。

现在进入内核源码目录并执行make menuconfig。这将启动一个菜单驱动的配置屏幕。

# cd /usr/src/linux
# 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)的选择。

如果您使用的是 sys-kernel/vanilla-sources, ,您必须自己找到所需的选项。

确保引导系统的每一个至关重要的驱动(比如SCSI控制器,等等)是编译进内核而不是作为一个模块,否则系统将无法完全引导。

接下来选择最正确的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 disk support

现在进入File Systems并选择你使用的文件系统。不要作为模块来编译根文件系统所使用的文件系统,否则Gentoo系统将不能挂载这个分区。同时选择Virtual memory和*/proc file system*根据系统的需要选择一个或多个以下选项(CONFIG_EXT2_FS, CONFIG_EXT3_FS, CONFIG_EXT4_FS, CONFIG_MSDOS_FS, CONFIG_VFAT_FS, CONFIG_PROC_FS, and CONFIG_TMPFS):

File systems --->
  <*> Second extended fs support
  <*> The Extended 3 (ext3) filesystem
  <*> The Extended 4 (ext4) filesystem
  <*> Reiserfs support
  <*> JFS filesystem support
  <*> XFS filesystem support
  <*> Btrfs 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设备,不要忘记启用那些(CONFIG_HID_GENERIC and CONFIG_USB_HID, CONFIG_USB_SUPPORT, CONFIG_USB_XHCI_HCD, CONFIG_USB_EHCI_HCD, CONFIG_USB_OHCI_HCD)::

Device Drivers --->
  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

架构特有的内核配置

如果要支持32位程序,请确保选择IA32 Emulation(CONFIG_IA32_EMULATION)。Gentoo 默认会安装一个multilib 系统(混合 32 位/ 64 位计算),所以除非使用了一个 no-multilib 配置文件,否则这个选项是必需的。

Processor type and features  --->
   [ ] Machine Check / overheating reporting 
   [ ]   Intel MCE Features
   [ ]   AMD MCE Features
   Processor family (AMD-Opteron/Athlon64)  --->
      ( ) Opteron/Athlon64/Hammer/K8
      ( ) Intel P4 / older Netburst based Xeon
      ( ) Core 2/newer Xeon
      ( ) Intel Atom
      ( ) Generic-x86-64
Executable file formats / Emulations  --->
   [*] IA32 Emulation

如果在分区时使用GPT分区标签,则启用对它的支持 (CONFIG_PARTITION_ADVANCED and CONFIG_EFI_PARTITION):

-*- Enable the block layer --->
   Partition Types --->
      [*] Advanced partition selection
      [*] EFI GUID Partition support

如果使用UEFI来引导系统,则在内核中启用EFI桩支持和EFI变量 (CONFIG_EFI, CONFIG_EFI_STUB, CONFIG_EFI_MIXED, and CONFIG_EFI_VARS):

Processor type and features  --->
    [*] EFI runtime service support 
    [*]   EFI stub support
    [*]     EFI mixed-mode support
 
Firmware Drivers  --->
    EFI (Extensible Firmware Interface) Support  --->
        <*> EFI Variable Support via sysfs

编译和安装

当配置完成,是时间来编译和安装内核了。退出配置并开始编译过程:

# make && make modules_install

附注:还可以启用并行生成使用make -jXX是一个生成过程中所允许运行的并行任务的整数。这类似于早期有关/etc/portage/make.conf的中关于MAKEOPTS变量的介绍。

当内核完成编译,复制内核镜像到/boot/。这由make install命令来处理:

# make install

这将复制内核镜像到/boot/,一起的还有System.map文件和内核配置文件。

可选:生成一个initramfs

在某些情况中需要建立一个initramfs (initial ram file system) ——一个基于内存的初始化文件系统,它用于解决如何在真正初始化系统运行前执行用户空间程序。类似的方案还有一种叫 initrd ,两者功能基本一致,实现方式有差异。

它代表着一种方案,也代表着一个文件。它在一些基础情况下并不是必须的。

在说明它存在的意义前,先简单说明下 Linux 系统的基本启动流程:

  1. PC 加电,BIOS/UEFI 自检后载入系统引导程序
  2. 引导程序载入内核
  3. 内核挂载根目录所对应的分区
  4. 内核执行根目录下系统的初始化(init)命令
  5. 自此来到了用户空间下

这个基本的流程里面会出现问题,看步骤 3

  • 问题一、如果这个根目录的分区无法直接挂载怎么办(被加密了、使用了 RAID、它是一个 NFS,等情况)
  • 问题二、如果这个根目录的分区下的 /usr 又单独分区了,里面没所需文件怎么办(这个文件夹包含了系统的库文件等)

如果上述两种情况都未出现,那么只要把根目录分区所对应的文件系统驱动被编译进内核(而非模块的形式),就可以省略掉 initramfs ;如果出现了任意一种情况,这个时候就需要 initramfs 的参与。

正如前文所说, initramfs 提供了在真正系统初始化前提前进入用户空间的功能,它其实就是一个简略版的完整系统,通过它,可以把该解密的分区解密,该挂载的内核无法直接挂载的分区(包括模块未加载,额外的分区,需要联网等情况)都挂载好,之后再由根目录下真正的系统初始化程序接管。

如果没有initramfs的,存在着巨大的风险,系统将无法正常开机,因为这是负责安装的文件系统工具需要驻留在这些文件系统的信息。 initramfs中的一个将在必要的文件拉进它的内核启动之后使用的档案,但控制被移交前转移到初始化工具。在initramfs的脚本,然后将确保分区正确地安装在系统继续启动之前。

Gentoo Linux 提供了一个工具叫 sys-kernel/genkernel 可用于创建 initramfs,其配置文件位于 /etc/genkernel.conf ,里面对每个变量的设置都有详细的说明。 有别于其它的 initramfs 创建工具, genkernel 会单独编译一个独立的 initramfs 环境(而非直接使用当前系统环境),并打包压缩。这会使得其相对于其它的工具(比如 dracut)创建过程更慢。

# emerge --ask sys-kernel/genkernel
# genkernel --install --kernel-config=/path/to/used/kernel.config initramfs

为了在initramfs中启用特定的支持,比如LVM或RAID,要为genkernel添加一个合适的选项。查看genkernel –help以获得更多信息。在下面的示例中,我们启用LVM和软件RAID (mdadm) 的支持:

# genkernel --lvm --mdadm --install --kernel-config=/path/to/used/kernel.config initramfs

initramfs将存储在/boot/。结果文件可以简单的通过列出以initramfs开头的文件来找到:

# ls /boot/initramfs*

现在继续到内核模块

备选:localmodconfig

内核是否真的需要自定义配置?这个问题因人而异,有人想要一份精简的内核,有人只要功能完善即可。我个人建议则是,非嵌入式环境下,对内核体积没要求情况下量力而行即可。内核的配置系统太过庞与复杂,理解所有的配置很难。而纯粹使用通用的配置则会导致模块目录太大,无用的模块太多,也不妥。

make localmodconfig 生成了一份完整的内核配置文件。此命令的含义是,以当前系统环境为参考,禁用没有被加载的模块配置。可在纯模块加载的系统环境下,接上你有的设备,开启你需要用到的所有服务,然后执行它。一般用于首次配置内核,使得后续配置更轻松。

而进一步的配置可以在内核目录下使用 make menuconfig 命令打开一个界面化的配置菜单,根据界面内提示进行。也可以执行 make help 显示帮助信息,以方便根据需要自行选择。

自定义配置时,建议给该配置文件设定一个自定义版本,以便于区分,配置路径位于:

General setup  --->
  (-examplename) Local version - append to kernel release

其它的项目本文不会说明,建议查阅 官方内核配置文档 ,其它可查阅的资料有:

备选:使用genkernel

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

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

现在,我们来看看如何使用genkernel。首先emerge sys-kernel/genkernel这个ebuild:

# emerge --ask sys-kernel/genkernel

接下来,编辑/etc/fstab文件来使包含有第二个值为/boot/的那条的第一个值指向到正确的设备。如果是按照本手册的分区示例,则这个设备非常像使用ext4文件系统的/dev/sda1。这将使文件中的这一条目看起来像是:

# nano -w /etc/fstab
/dev/sda1	/boot	ext4	defaults	0 2

附注:在Gentoo将来的安装中,还要再配置一次/etc/fstab。现在只需要正确设置/boot来让genkernel应用程序读到相应的配置。

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

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

# genkernel all

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

# ls /boot/kernel* /boot/initramfs*

推荐:二进制

因为内核的配置非常复杂,需根据每台机器的环境而定,为了简单与节约时间,可以选择预编译好的,适用范围最广的二进制内核。

# emerge --ask sys-kernel/gentoo-kernel-bin

sys-kernel/gentoo-kernel-bin 是最高到内核主线版本的内核二进制包,其使用的是最通用的内核配置。

内核模块

配置模块

附注:硬件模块手动列出是可选的。在大多数情况下,udev通常将加载所有被检测为已连接的硬件模块。然而,列出自动检测到的模块是没有什么不良影响的。有时,一些奇特硬件需要帮助来加载其驱动程序。

在 /etc/modules-load.d/.conf 中各个模块的每一行列出需要自动加载的模块。如果有必要的话,可以在 /etc/modprobe.d/.conf 文件中,为模块设置添加附加选项。

要查看所有可用模块,运行下面的find命令。不要忘记替换“<kernel version>”为刚刚编译的内核版本:

# find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko' | less

比如,要自动加载3c59x.ko模块(3Com网卡家族的特定驱动),编辑/etc/modules-load.d/network.conf文件并在里面输入模块名字。实际的文件名对 loader 来说无关紧要。

# mkdir -p /etc/modules-load.d
# nano -w /etc/modules-load.d/network.conf

继续到配置系统来安装。

推荐:安装固件

一些驱动需要先在系统上安装附加的固件才能工作。经常网络接口上会使用,特别是无线网络接口。此外,来自 AMD 、 NVidia 和 Intel 等供应商的现代视频芯片在使用开源驱动程序时,通常也需要外部固件文件。大多数固件都打包在 sys-kernel/linux-firmware 里:

# emerge --ask sys-kernel/linux-firmware

配置系统

文件系统信息

关于 fstab

在Linux系统下,系统所用到的所有分区都必须在 /etc/fstab文件中指明。这个文件包含了这些分区的挂载点(在系统目录树中的位置)、挂载方法和特殊挂载选项(是否自动挂载,是否某个用户可以挂载它等)。

创建/etc/fstab文件

/etc/fstab文件使用一种特殊语法格式。每行都包含六个字段。这些字段之间由空白键(空格键,tab键,或者两者混合使用)分隔。每个字段都有自己的含意:

  1. 第一个字段显示要挂载的特殊 block 设备或远程文件系统。 有几种设备标识符可用于特殊块设备节点,包括设备文件路径,文件系统标签,UUID以及分区标签。
  2. 第二个字段是分区挂载点,也就是分区应该挂载到的地方
  3. 第三个字段给出分区所用的文件系统
  4. 第四个字段给出的是挂载分区时mount命令所用的挂载选项。由于每个文件系统都有自己的挂载选项,我们建议你阅读mount手册(man mount)以获得所有挂载选项的列表。多个挂载选项之间是用逗号分隔的。
  5. 第五个字段是给dump使用的,用以决定这个分区是否需要dump。一般情况下,你可以把该字段设为0(零)。
  6. 第六个字段是给fsck使用的,用以决定系统非正常关机之后文件系统的检查顺序。根文件系统应该为1,而其它的应该为2(如果不需要文件系统自检的话可以设为0)。

重要:Gentoo 默认提供的 /etc/fstab 不是有效的fstab 文件,它只是提供了几个模板。

# nano -w /etc/fstab

在文本的其余部分,我们使用默认的块设备 /dev/sd* 文件作为分区。

分区表和UUIDs

MBR(BIOS)和GPT都支持“文件系统”标签和“文件系统”的UUID。 这些属性可以在尝试查找和挂载块设备时使用,作为 mount 命令的替代方法,在 /etc/fstab 中定义。文件系统标签和 UUID 由 LABEL 和 UUID 前缀标识,可以使用 blkid 命令查看:

# blkid

警告:如果分区中的文件系统被擦除,则文件系统标签和UUID值将随后被更改或删除。

出于唯一性,建议使用 MBR 分区表的读者使用UUID来定义/etc/fstab 中的可挂载卷。

分区卷标和 UUIDs

已经使用 GPT 磁盘的用户有一些更稳定的选项可用于在 /etc/fstab 中定义分区。分区卷标和分区 UUID 可以用来标识块设备的单独分区,而不管为分区本身选择了什么文件系统。分区卷标和 UUID 分别由 PARTLABEL 和 PARTUUID 前缀标识,可以通过运行 blkid 命令在终端中很好地查看分区标签:

# blkid

虽然对于分区表不总是正确的,但使用UUID来标识fstab 中的分区,即使将来文件系统更改,也可以保证在寻找某个卷时引导加载程序不会被混淆。对于经常重新启动并定期添加和删除SATA设备时,在 fstab 中定义分区,使用旧的默认分区文件 (/dev/sd*N非常危险) 。

块设备文件的命名取决于许多因素,包括磁盘如何以及以什么顺序加载到系统。它们也可能以不同的顺序显示,具体情况取决于在早期启动过程中内核首先检测到哪些设备。 有了这个说明,除非有人打算不断地解决磁盘排序问题,使用默认块设备文件是一个简单和直接的方法。

让我们来看看如何写下/boot/分区的选项。 这只是一个示例,应根据安装时的具体情况进行修改。 在amd64分区示例中, /boot/ 通常是/dev/sda1 ext4作为文件系统。 它需要在启动期间进行检查,所以我们写下:

/dev/sda1   /boot     ext4    defaults        0 2

有些用户不希望/boot/分区自动挂载,以提高系统的安全性。 他们应该用noauto.代替 defaults。这意味着这些用户将需要在每次他们想要使用它时手动挂载这个分区。

增加符合你分区方案的规则,为你的光驱(当然,如果你有其他分区或者驱动器,也为它们加上)添加挂载规则。

下面是/etc/fstab文件的例子(for MBR):

/dev/sda1   /boot        ext4    defaults,noatime     0 2
/dev/sda2   none         swap    sw                   0 0
/dev/sda3   /            ext4    noatime              0 1
  
/dev/cdrom  /mnt/cdrom   auto    noauto,user          0 0

auto选项可以使mount 猜测文件系统(推荐对于可移动设备采用这个选项,因为它们可能采用很多不同的文件系统),而 user选项使得非root用户可以挂载光驱。

为了提高性能,大多数用户想要添加 noatime mount选项,这将拥有更快的系统,因为访问时间没有注册(一般不需要这些)。 这也推荐用于固态硬盘(SSD)用户,他们还应该启用discard 安装选项(现在只支持ext4和btrfs),这使得 TRIM命令有效。

下面是/etc/fstab文件的例子(for GPT)

# EFI 分区
UUID="XXXX-XXXX" /boot vfat rw,noatime,errors=remount-ro 0 2
# 交换分区
UUID="XXXXXXXX-...XXXX" none swap sw 0 0
# 根分区
UUID="XXXXXXXX-...XXXX" / ext4 defaults,noatime 0 1

仔细检查/etc/fstab文件,保存并退出以继续。

推荐:genfstab

# emerge -av genfstab
# genfstab -U / >> /etc/fstab

网络信息

主机名

要设置主机名称,创建/编辑 /etc/hostname ,然后直接输入所需的主机名。

# echo 'SAKAMOTO' > /etc/hostname

当使用 systemd 引导时,存在一个名为hostnamectl的工具,用于编辑/etc/hostname/etc/machine-info

# hostnamectl set-hostname <HOSTNAME>

参考 man hostnamectl 来获得更多选项。

配置网络

在Gentoo Linux安装时,网络已经配置。然而,这是安装的安装光盘本身的配置,并不是新的系统环境的网络配置。现在你所要设置的是Gentoo系统的永久网络配置。

附注:更多关于网络配置的详细信息,包括网卡绑定、网桥、802.1Q VLANs和无线网络在内的高级配置会在Gentoo网络配置这一部分介绍。

使用 systemd-networkd

systemd-networkd 在有线网络接口的简单配置上是很有用的。它在默认情况下是禁用的。

要配置systemd-networkd,在/etc/systemd/network路径下创建一个文件。network请参考systemd.network(5), 一个简单的DHCP配置如下:

# nano -w /etc/systemd/network/50-dhcp.network
[Match]
Name=en*

[Network]
DHCP=yes

在启动时自动启用网络连接

# systemctl enable systemd-networkd.service
# systemctl start systemd-networkd.service

注意systemd-networkd 默认不会自动更新 resolv.conf ,要 systemd 管理 DNS 设置,替换 resolv.conf 为一个符号连接并启动 systemd-resolved。

# ln -snf /run/systemd/resolve/resolv.conf /etc/resolv.conf
# systemctl enable systemd-resolved.service
# systemctl start systemd-resolved.service
推荐:使用 NetworkManager
# emerge --ask net-misc/networkmanager
# systemctl enable NetworkManager

使用 nmtui 设置:在 IPv4 CONFIGURATION 设置 DNS-servers 为 8.8.4.4,并开启 Ignore automatically obtained DNS parameters。因为它会把路由器ip(192.168.0.1)放在/etc/resolv.conf 第一个,导致ping不通。

The hosts file

Next inform Linux about the network environment. This is defined in /etc/hosts and helps in resolving host names to IP addresses for hosts that aren’t resolved by the nameserver.

# This defines the current system and must be set
127.0.0.1     tux.homenetwork tux localhost
  
# Optional definition of extra systems on the network
192.168.0.5   jenny.homenetwork jenny
192.168.0.6   benny.homenetwork benny

Save and exit the editor to continue.

Root 密码

使用passwd命令设置root密码。

# passwd

root帐户是一个功能强大的帐户,因此请选择一个强密码。 稍后将为日常操作创建其他常规用户帐户。

Reset lost root password

  1. Append the init=/bin/bash kernel parameter to your boot loader’s boot entry.
  2. Your root file system is mounted as read-only now, so remount it as read/write: mount -n -o remount,rw /.
  3. Use the passwd command to create a new password for the root user.
  4. Reboot by typing reboot -f and do not lose your password again!

Read-only file system

# mount -o remount,rw /

安装系统工具

系统日志工具

因为有一些工具提供给用户的功能比较类似,它们就没有包含在stage3当中。现在就是你选择安装哪一个的时候了。

你首先需要决定的就是系统日志工具。Unix和Linux在日志记录功能方面有良好的传统——如果你愿意的话你可以把系统发生的所有事件都记录到日志文件中。这些功能就是通过系统日志工具来完成的。

systemd 提供了自己的日志记录工具,名字叫“ journal”。在运行systemd的系统上,可以选择性的地安装单独的 syslog 程序,并且可能需要进行其他配置才能使syslog 守护进程从日志中读取消息。

Gentoo提供了多种系统日志工具可供选择。包括:

  • app-admin/sysklogd -提供传统的系统日志记录守护程序。默认日志配置容易学习,这个包是初学者的好选择。
  • app-admin/syslog-ng -高级系统记录器。 需要额外配置很多东西, 更高级的用户可以根据它的日志潜力选择这个包; 注意额外的配置是任何种类的智能日志记录的必要条件。
  • app-admin/metalog -一个可以灵活配置的系统日志工具。

Portage内或许还有其他的系统日志工具——我们的可用软件包数量是以天为单位在增加的。

Tip:如果你打算使用sysklogd或者syslog-ng你很可能会随后希望安装并且配置 logrotate ,因为这些系统日志工具并没有提供系统日志文件的滚动功能。

可选:Cron守护进程

接下来你可以选择cron守护进程。尽管这是可选的并且不是系统所必须的,但是最好能够安装一个。

cron守护程序执行计划中的命令。 如果某些命令需要定期执行(例如每天,每周或每月),这是非常方便的。

Gentoo提供了几个可选的cron守护进程: sys-process/bcron, sys-process/dcron, sys-process/fcron, and sys-process/cronie。安装这其中一个的方法和安装一个系统日志工具的方法类似。下面的例子使用sys-process/cronie

# emerge --ask sys-process/cronie
# systemctl enable cronie

如果使用 dcron,则需要执行额外的初始化命令:

# crontab /etc/crontab

如果使用 fcron,则需要额外的 emerge 步骤:

# emerge --config sys-process/fcron

可选:文件索引

如果你想索引你的系统文件使得你能够使用locate工具很快定位它们,你需要安装sys-apps/mlocate

# emerge --ask sys-apps/mlocate

可选:远程访问

为了能够在安装后远程访问系统,必须将sshd配置为在启动时启动。

$ systemctl enable sshd

如果需要串行控制台访问(这在远程服务器的情况下是可能的),则必须配置agetty。

$ systemctl enable getty@tty1.service

文件系统工具

根据你所使用的文件系统的不同,你需要安装必须的文件系统工具(用于检查文件系统完整性、创建额外的文件系统等)。请注意管理ext2,ext3和ext4文件系统的工具 (sys-fs/e2fsprogs)已经做为系统的一部分被安装了。

以下的表格列出了特定文件系统所需要安装的工具。

Filesystem Package
Ext 4 sys-fs/e2fsprogs
XFS sys-fs/xfsprogs
ReiserFS sys-fs/reiserfsprogs
JFS sys-fs/jfsutils
VFAT (FAT32, …) sys-fs/dosfstools
Btrfs sys-fs/btrfs-progs
ZFS sys-fs/zfs

Tip:获取更多关于Gentoo上文件系统的信息请看filesystem article

网络工具

如果不需要任何其它网络工具,请立即继续 配置引导程序

安装DHCP客户端

重要:虽然可选,但大多数用户会发现他们需要一个DHCP客户端,用来连接到他们网络上的DHCP服务器。 请借此机会安装DHCP客户端。如果忘记此步骤,则系统可能无法访问网络,从而使之后无法下载DHCP客户端。

为了使系统能够使用netifrc脚本自动获取一个或多个IP地址,需要安装DHCP客户端。 我们建议使用net-misc/dhcpcd,虽然许多其他DHCP客户端可通过Gentoo数据库下载:

# emerge --ask net-misc/dhcpcd

关于 dhcpcd 的更多信息可以通过 dhcpcd 文章查询。

可选:安装PPPoE客户端

如果你需要ppp来连接网络,你需要安装它 net-dialup/ppp

# emerge --ask net-dialup/ppp

推荐:安装无线网络工具

如果系统将连接无线网络,请为开放网络或 WEP 网络安装 net-wireless/iw 包,为 WPA 或 WPA2 网络安装 net-wireless/wpa_supplicant 包。iw 也是一个有用的无线网络扫描的基本诊断工具

# emerge --ask net-wireless/iw net-wireless/wpa_supplicant

现在继续配置引导启动程序

配置引导加载程序

选择引导器

完成配置Linux内核、安装系统工具和编辑配置文件之后,现在是时候去安装Linux安装的最后一个重要的部分:引导器。

引导器负责在引导过程中启动内核——若没有引导器,系统将不知道按下电源键后将如何进行。

针对amd64,我们编写了如果在基于BIOS的系统上配置GRUB2LILO,以及针对UEFI系统的GRUB2efibootmgr

在本手册的这一部分中,描述了 “emerging” 引导加载程序包和 “installing” 引导加载程序到系统磁盘之间的区别。 这里,术语 “emerging” 将用于请求 Portage 使软件包安装于系统。 术语 “installing” 将表示引导加载程序复制文件或物理地修改系统的磁盘驱动器的适当部分,以便在下一次开机时使引导加载程序“激活并准备好操作”。

默认:GRUB2

默认情况下,Gentoo系统现在主要依赖于GRUB(在sys-boot/grub 包中),它是GRUB Legacy的继任者。无需额外配置,GRUB2就能支持旧的BIOS(“pc”) 系统。 在安装之前加上少量的配置,Grub2可以支持超过一半的平台。 有关详细信息,请参阅位于GRUB2先决条件

Emerge

当使用只支持MBR分区表的旧版BIOS系统时,无需进行其他配置即可安装GRUB:

# emerge --ask --verbose sys-boot/grub

UEFI用户注意:运行上述命令将在出现之前输出启用的GRUB_PLATFORMS 值。 当使用支持UEFI的系统时,用户需要确保启用 GRUB_PLATFORMS="efi-64" 参数(默认情况下是这样)。 如果设置不是这样,则需要在安装GRUB2之前将 GRUB_PLATFORMS="efi-64"添加到/etc/portage/make.conf

# echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf
# emerge --ask sys-boot/grub

如果GRUB2在未先添加GRUB_PLATFORMS="efi-64"到make.conf时就已经emerge过,可以添加这一行(像上面显示那样)然后通过--update --newuse options to emerge:选项来重新计算 world package set

# emerge --ask --update --newuse --verbose sys-boot/grub

GRUB2现在已经安装到系统中了,但是还没有激活。

安装

接下来,通过grub-install命令安装GRUB2所需的文件到/boot/grub/目录。假设第一块磁盘(引导系统的那块)是/dev/sda,将使用下面的一条命令:

使用BIOS时

# grub-install /dev/sda

使用UEFI时

重要:确保EFI系统分区在运行grub-install“之前”已经挂载。它可能会使grub-install安装的GRUB EFI文件(grubx64.efi(到一个错误的目录“并且不会”提供“任何”辨识使用错误目录的信息。

# grub-install --target=x86_64-efi --efi-directory=/boot

附注:当/boot分区没有格式化成vfat时,必须修改 --efi-directory选项到EFI系统分区。如

# grub-install --target=x86_64-efi --efi-directory=/boot/efi

重要:如果 grub_install 返回了一个错误,类似 Could not prepare Boot variable: Read-only file system,那么为了成功安装,可能必须需要将 efivars 重新挂载为读写:

# mount -o remount,rw /sys/firmware/efi/efivars

一些主板制造商(包括虚拟机)似乎只支持EFI系统分区(ESP)中.EFI文件的 /efi/boot/目录。 GRUB安装程序可以使用 --removable选项自动执行此操作。 在运行以下命令之前验证是否已安装ESP。 假设ESP安装在/boot(如前所述),执行:

# grub-install --target=x86_64-efi --efi-directory=/boot --removable

这将创建UEFI规范定义的默认目录,然后将 grubx64.efi 文件复制到由同一规范定义的“默认”EFI文件位置。

配置

接下来,基于用户在/etc/default/grub文件和/etc/grub.d中特别配置的脚本文件来生成GRUB2。在大多数场景中,不需要由用户来配置,GRUB2就可以自动检测出哪个内核用于引导(位于/boot/中最高的那一个)以及根文件系统是什么。也可以使用GRUB_CMDLINE_LINUX 变量在/etc/default/grub中附加内核参数。

要生成最终的GRUB2配置,运行grub-mkconfig命令:

# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-4.9.16-gentoo
Found initrd image: /boot/initramfs-genkernel-amd64-4.9.16-gentoo
done

需要注意至少找到一个Linux镜像在命令的输出中,它们是用来引导系统的。如果使用一个initramfs或用genkernel建立内核,同样会检测到正确的initrd 镜像。如果不是这样,进入到/boot/并使用ls命令检查内容。如果文件确实不存在,回到内核配置和安装的介绍。

Tipos-prober实用程序可与GRUB2配合使用,以检测所连接驱动器上的其他操作系统。可检测到Windows 7, 8.1, 10,和其他Linux发行版。 那些希望双引导系统的应该出现sys-boot/os-prober包,然后重新运行 grub-mkconfig命令(如上所示)。 如果遇到问题,请务必先阅读GRUB2 文章,然后再向Gentoo社区请求支持。

使用救急控制台

set 用来修改变量,insmod 用来载入模组以添加功能。

如果 /boot 在单独分区上(例如在用 UEFI 的时候),适当地进行修改:

注意: 因为 boot 是一个单独的分区而不是根分区的一部分,你得手动把它的地址写清楚,格式和前面的 prefix 一样。

set root=(hd0,5)
linux (hdX,Y)/vmlinuz-linux root=/dev/sda6
initrd (hdX,Y)/initramfs-linux.img
boot

可选:启用休眠唤醒

如果之前有分配交换分区,在这里可以执行如下命令以启用其休眠后唤醒的功能

# sed -Ei "/GRUB_CMDLINE_LINUX_DEFAULT/s/^#*(GRUB.*DEFAULT=).*$/\1\"resume=UUID=$(blkid -o value /dev/sdX4 | head -1)\"/" /etc/default/grub

也可以手动修改,打开 /etc/default/grub 文件:

  • 找到 GRUB_CMDLINE_LINUX_DEFAULT 变量
  • 去掉其注释标记 (#)
  • 在其双引号内添加上 resume=UUID=<UUID 值>, 此 <UUID 值> 可由命令 blkid -o value /dev/sdX4 | head -1 显示

最后创建配置 :

# grub-mkconfig -o /boot/grub/grub.cfg

可选:多系统

如果电脑存在多系统,可以执行如下步骤添加其它系统的引导菜单选项:

  • 给 grub 添加 mount 这个 USE 以满足 os-prober 的依赖

    # echo 'sys-boot/grub mount' >/etc/portage/package.use/grub
    
  • 安装 os-prober 工具

    # emerge -vj os-prober
    

    如果你上面进行了启用休眠唤醒可选操作,更新了 grub 配置文件,那么安装完成后可能会有一个关于 Grub 的配置文件更新提示 IMPORTANT: config file '/etc/default/grub' needs updating. 这个暂时不用理会,也可「更新配置文件」

  • 配置 grub 以启用 os-prober 功能

    # echo 'GRUB_DISABLE_OS_PROBER=false' >>/etc/default/grub
    
  • 之后再次运行一次上述的 grub-mkconfig 命令,该命令会自动识别同一机器上其它的系统,并做成引导菜单选项:

    # grub-mkconfig -o /boot/grub/grub.cfg
    

备选1:LILO

Emerge

LILO (the LInuxLOader,) 是Linux引导程序的久经考验的主力。但是它缺少GRUB所拥有的一些特性。LILO仍旧在一些系统上被使用的原因是GRUB无法使用但LILO却可以。当然还因为一些人是先认识了LILO而且对它忠心不二。不管怎样,Gentoo可以支持它们两个启动器。

安装LILO是一件轻而易举的事,使用emerge就可以了。

# emerge --ask sys-boot/lilo

配置

要配置LILO,首先要创建 /etc/lilo.conf:

# nano -w /etc/lilo.conf

在配置文件中,小节(sections)被用于指向可引导的内核。请确保内核文件(与内核版本号一起)和initramfs文件都可以被知晓,因为它们都需要被这个配置文件所引用。

Note:如果根文件系统是JFS,请在每一个引导条目之后增加 append="ro"因为JFS在它被挂载为可读写之前需要重放它的日志。

boot=/dev/sda             # Install LILO in the MBR
prompt                    # Give the user the chance to select another section
timeout=50                # Wait 5 (five) seconds before booting the default section
default=gentoo            # When the timeout has passed, boot the "gentoo" section
compact                   # This drastically reduces load time and keeps the map file smaller; may fail on some systems
  
image=/boot/vmlinuz-4.9.16-gentoo
  label=gentoo            # Name we give to this section
  read-only               # Start with a read-only root. Do not alter!
  root=/dev/sda3          # Location of the root filesystem
  
image=/boot/vmlinuz-4.9.16-gentoo
  label=gentoo.rescue     # Name we give to this section
  read-only               # Start with a read-only root. Do not alter!
  root=/dev/sda3         # Location of the root filesystem
  append="init=/bin/bb"   # Launch the Gentoo static rescue shell
  
# The next two lines are for dual booting with a Windows system.
# In this example, Windows is hosted on /dev/sda6.
other=/dev/sda6
  label=windows

附注:如果您使用不同的分区方案或内核文件,请根据需要进行调整。

如果initramfs是必须的,那么就更改配置文件以便引用这个initramfs文件,并且告诉initramfs根设备的所在位置。

image=/boot/vmlinuz-4.9.16-gentoo
  label=gentoo
  read-only
  append="root=/dev/sda3"
  initrd=/boot/initramfs-genkernel-amd64-4.9.16-gentoo

如果额外的选项需要被传递到内核,使用append语句。例如增加 video 语句来使能framebuffer:

image=/boot/vmlinuz-4.9.16-gentoo
  label=gentoo
  read-only
  root=/dev/sda3
  append="video=uvesafb:mtrr,ywrap,1024x768-32@85"

使用 genkernel的用户应该了解他们的内核使用与安装CD相同的引导选项。例如,如果对SCSI设备的支持需要被使能,就增加 doscsi到内核选项中。

现在保存这个文件并退出。

安装

为了彻底完成,运行 /sbin/lilo,这样 LILO 就会把 /etc/lilo.conf 中的设置应用到系统中(也就是说安装它自己到磁盘上)。要记住每一次一个新内核被安装或者 lilo.conf 文件被改变后,/sbin/lilo 都需要执行一次,以确保在内核文件名发生改变后系统仍然能够被引导起来。

# /sbin/lilo

备选2:efibootmgr

在基于UEFI的系统上,系统上的UEFI固件(换句话说,主引导加载程序)可以直接操作以查找UEFI引导条目。 这样的系统不需要具有额外的(也称为辅助)引导加载器,如GRUB2,以帮助引导系统。 据说,基于EFI的引导加载程序(如GRUB2)存在的原因是在引导过程中“扩展”UEFI系统的功能。 使用efibootmgr是真正的那些想要采取一个极简主义(虽然更僵硬的)方法来启动他们的系统; 使用GRUB2(见上文)对于大多数用户更容易,因为它在引导UEFI系统时提供了灵活的方法。

记住sys-boot/efibootmgr应用程序不是一个引导器,它是一个和UEFI固件相互作用并更新它的设置,因为之前安装的Linux内核可以通过额外的选项(如果需要)来引导,或允许多重引导条目。可以通过EFI变量(需要支持EFI变量的内核)来完成这个相互作用。

一定要阅读通过 EFI stub内核文章“‘再继续。 内核必须具有能够被系统的UEFI固件直接引导的特定选项。 可能需要重新编译内核。 看看**efibootmgr** 文章,这也是一个好主意。

附注:要重申,efibootmgr 不是引导UEFI系统的要求。Linux内核本身就可以启动即引导,其他内核命令行选项可以内置到Linux内核(有一个内核配置选项)允许用户指定启动参数作为命令行选项,甚至initramfs 可以“内置”到内核。

那些决定采取这种方法的人必须安装软件:

# emerge --ask sys-boot/efibootmgr

接下来,创建 /boot/efi/boot/,并复制内核文件到这个位置,并叫作bootx64.efi:

# mkdir -p /boot/efi/boot
# cp /boot/vmlinuz-* /boot/efi/boot/bootx64.efi

接下来,告诉UEFI固件创建一个叫作“Gentoo”的引导条目,它拥有全新编译的EFI stub内核:

# efibootmgr --create --disk /dev/sda --part 2 --label "Gentoo" --loader "\efi\boot\bootx64.efi"

如果使用一个内存文件系统(initramfs),为它添加相应的引导选项:

# efibootmgr -c -d /dev/sda -p 2 -L "Gentoo" -l "\efi\boot\bootx64.efi" initrd='\initramfs-genkernel-amd64-4.9.16-gentoo'

附注:UEFI定义强制要求使用\作为目录分割符。

完成这些变更后,当系统重新启动时,会有一个叫作“Gentoo”的引导条目。

备选3: Syslinux

Syslinux是 amd64架构的另一种引导加载程序替代方案。 它不仅支持MBR,从版本6.00开始,它开始支持EFI启动。 还支持PXE(网络)引导和鲜为人知的选项。 尽管Syslinux是许多流行的引导加载程序,但它并没有得到手册的支持。 读者可以在Syslinux文章中找到有关新兴然后安装此引导加载程序的信息。

备选4:systemd-boot

systemd-boot, formerly called gummiboot, is a simple UEFI boot manager capable of booting Linux and Windows in EFI mode.

Note: As of systemd 220, systemd-boot has been included with systemd (accessible via the bootctl command). If sys-apps/systemd has been installed on the system, then sys-boot/systemd-boot does not need to be installed.

UEFI boot manager

The systemd-boot application makes the installation, which only needs to be performed once (unless a new version of systemd-boot needs to be installed), fairly simple. Verify the following:

  • The system is booted with EFI to start with (either from a EFI compatible media, or through any other UEFI boot manager) as it will otherwise fail to install.

  • The EFI variable file system (efivars) is mounted read/write:

    # mount -t efivarfs efivarfs /sys/firmware/efi/efivars
    

Then perform the install itself:

# bootctl --path /boot/efi install

The installation will install the proper EFI files so that the EFI-capable system will boot the systemd-boot bootloader.

重启系统

退出chroot环境并unmount全部已持载分区。然后敲入一条有魔力的命令来初始化最终的、真实的测试:reboot

# exit
# cd
# umount -l /mnt/gentoo/dev{/shm,/pts,}
# umount -R /mnt/gentoo
# reboot

当然,别忘了移除可引导CD,否则可能再次从CD启动,而不是新的Gentoo系统。

当重启进全新安装的Gentoo环境,继续完成结束Gentoo安装

收尾安装工作

用户管理

添加一个日常使用的用户

在Unix/Linux系统中,用root进行工作是一件危险的事情,应该尽量避免。因此我们强烈推荐您为日常使用添加一个普通用户。

用户所属的组定义了其可以执行的活动。下表中列出了许多您可能希望使用的重要组:

Group Description
audio Be able to access the audio devices.
cdrom Be able to directly access optical devices.
floppy Be able to directly access floppy devices.
games Be able to play games.
portage Be able to access portage restricted resources.
usb Be able to access USB devices.
video Be able to access video capturing hardware and doing hardware acceleration.
wheel Be able to use su.

比如,创建一个叫作larrywheelusersaudio组的成员用户,首先作为root登录(只有root能创建用户)并运行useradd

Login: root
Password: (输入root 密码)
# useradd -m -G users,wheel,audio -s /bin/bash larry
# passwd larry
Password: (输入larry的密码)
Re-enter password: (重复输入密码)

如果一个用户仍需要以root身份做一些任务,他们可以使用**su -**来临时得到root权限。另一种方式是使用sudo包,如果配置正确的话,非常安全。

sudo

sudo 使普通用户可以以超级权限执行命令

# emerge app-admin/sudo

打开配置文件,找到 #%wheel 开头的几行设置,根据说明去掉所需配置行的注释符号

# visudo

磁盘清理

删除tar包

当Gentoo安装完毕并且系统已经重启过,如果所有事情都完成好了,我们现在要从硬盘上删除下载的stage3的tar包。记住它们下载在/目录。

# rm /stage3-*.tar.xz

下一步该做什么?

文档

不知道接下来该做什么?现在有许多途径可以探索…Getoo 为用户提供了大量的可能性,因此也已经在 wiki 和其他与 Gentoo 相关的子域名上提供大量的文档(少量没有),可以通过这些文档来进行探索(参见下面的 [Gentoo 在线](#Gentoo 在线)章节)。

读者一定要看一下 Gentoo 手册的下一章节使用 Gentoo,讲述了如何保障软件是最新的、如何安装额外的软件包、USE 标记的更多细节、OpenRC init 系统,以及与 Gentoo 系统安装后,管理相关的各种其他信息话题。

除了这本手册,也鼓励读者去探索Gentoo维基的其他角落来寻找更多的、社区提供的文档。Gentoo wiki 组同时提供一个文档概述,其中按照类别列出了一系列的维基文档。比如,它指向的本地化指南能使系统更有家的感觉(特别适用于以英语为第二语言的用户)。

Gentoo 在线

重要:读者应注意,所有在线的 Gentoo 官方网站均受Gentoo的 行为准则约束。活跃于 Gentoo 社区是一种特权,而不是一种权利,用户应该知道行为准则的存在是有原因的。

除了 Freenode 托管的因特网中继聊天( internet relay chat IRC)网络和邮件列表之外,大多数Gentoo 网站要求每个站点都有一个帐户,以便提问、展开讨论或上报 Bug。

论坛 和 IRC

欢迎每个用户来我们的 Gentoo 论坛 或我们的 Gentoo 的 因特网中继聊天( internet relay chat IRC)频道。有很多以前发现的新 Gentoo 安装遇到的问题,在获得一些反馈后得以解决,这些问题的经验可以在论坛中轻松地搜索查看。其他用户第一次使用 Gentoo 遇到安装问题的可能性非常令人惊讶。建议用户在 Gentoo 支持频道寻求帮助之前搜索论坛和 wiki。

邮件列表

这些是提供给社区成员的一些邮件列表,他们更愿意通过电子邮件请求支持或反馈,而不是在论坛或IRC上创建用户帐户。用户需要按照说明进行操作,以便订阅特定的邮件列表。

Bugs

有时,在查看 wiki、搜索论坛、在IRC频道或邮件列表中寻求支持之后,并没有问题已知的解决方案。一般来说,这是在 Gentoo 的 Bugzilla 网站 上报告 bug 的信号。

开发指南

希望了解更多有关开发 Gentoo 的读者可以查看开发指南。该指南提供了有关编写 ebuild、使用 eclass 的说明,并提供了 Gentoo 开发中许多基本概念的定义。

结语

Gentoo 是一个健壮、灵活、维护良好的发行版。开发者社区很高兴听到关于如何使Gentoo 成为一个“更好的”发行版的反馈。

在此提醒,任何关于 “本手册”的反馈应该按照如何改进手册?章节中开头的详细准则。

我们期待看到我们的用户将如何选择使用Gentoo!

显卡驱动

在之前安装 Gentoo Linux 的过程中,二进制内核本身已自带了大多数显卡的内核驱动部分,该部分负责接收用户空间发送的指令及数据,进行处理后传递给显卡。

make.conf

对于 X 而言,这里以现代化的 N 卡为例,编辑 /etc/portage/make.conf 文件,双显卡 Intel+NVIDIA 添加以下内容:

# echo 'VIDEO_CARDS="intel i965 iris nvidia"' >> /etc/portage/make.conf
  • Intel 的一般设为 intel i965 iris, 详细查阅: https://wiki.gentoo.org/wiki/Intel
  • N 卡开源驱动一般设为 nouveau, 详细查阅: https://wiki.gentoo.org/wiki/Nouveau。如若你的显卡是较新的 N 卡,开源驱动还未支持,请安装闭源驱动。
  • N 卡闭源驱动一般设为 nvidia, 详细查阅: https://wiki.gentoo.org/wiki/NVIDIA/nvidia-drivers
  • amdgpu 用于给 X 开启 2D 驱动(X 下必须),radeonsi 用于给 OpenGL 的实现 mesa 开启对内核下 amdgpu 驱动的支持(无论 X 还是 Wayland 均需配置),如果 A 卡比较老,则额外添加 radeon 值,详细查阅: https://wiki.gentoo.org/wiki/AMDGPU
  • 虚拟机下的驱动设置得具体看,比如现在的 VirtualBox 和 VMWare 都用 vmware 驱动,那么就设置值为 vmware,再比如 QEMU 可选使用 virgl 驱动,那么就设置为 virgl。

在这里,还需将之前配置的普通用户 kurome 添加到 video 组下以使用硬件加速功能。执行

# gpasswd -a kurome video
# or
# groupmod -a video -U kurome

驱动

Intel

# emerge -av xorg-server xf86-video-intel

nvidia

# emerge -av nvidia-drivers xrandr

禁用 nouveau:

# cat >> /etc/modprobe.d/blacklist.conf
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0

要起作用,需要重启。

NVIDIA/Optimus

注意:请安装完成桌面环境后再来看这部分。

一般情况下,intel + nvidia 用混合模式。

xorg.conf

For a laptop with Intel integrated graphics and Nvidia discrete graphics, the following xorg.conf should be sufficient:

# mkdir -p  /etc/X11/xorg.conf.d/
# nano /etc/X11/xorg.conf.d/10-nvidia.conf
Section "ServerLayout"
    Identifier "layout"
    Screen 0 "nvidia"
    Inactive "intel"
EndSection

Section "Device"
    Identifier "nvidia"
    Driver "nvidia"
    BusID "01:00:0"
    Option "RegistryDwords" "EnableBrightnessControl=1"
EndSection

Section "Screen"
    Identifier "nvidia"
    Device "nvidia"
    Option "AllowEmptyInitialConfiguration"
EndSection

Section "Device"
    Identifier "intel"
    Driver "modesetting"
EndSection

Section "Screen"
    Identifier "intel"
    Device "intel"
EndSection

有朋友会问,BusID 是否需要根据自己的改一改,我觉得可能不用,我用过 intel + nvidia 的3台笔记本,这个 BusID 都没有变过,还来自不同厂家,小米,Thinkpad,雷蛇。

也可以通过如下命令确认一下:

$ lspci | grep -i --color 'vga\|3d\|2d'
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07)
01:00.0 3D controller: NVIDIA Corporation GM108M [GeForce 930MX] (rev a2)

gdm

编辑/usr/share/gdm/greeter/autostart/optimus.desktop/etc/xdg/autostart/optimus.desktop 文件。写入的内容均一样:

[Desktop Entry]
Type=Application
Name=Optimus
Exec=sh -c "xrandr --setprovideroutputsource modesetting NVIDIA-0; xrandr --auto"
NoDisplay=true
X-GNOME-Autostart-Phase=DisplayServer

sddm

编辑 /etc/sddm.conf 文件,内容如下:

[X11]
DisplayCommand=/etc/sddm/scripts/Xsetup

下面创建一个脚本目录:

# mkdir -p /etc/sddm/scripts

创建启动脚本,cat > /etc/sddm/scripts/Xsetup ,内容如下:

#!/bin/sh
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

最后赋予权限:

$ chmod u+x /etc/sddm/scripts/Xsetup

无显示管理器

修改 ~/.xinitrc

#!/bin/bash
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto
xrdb -merge ~/.Xresources
[ -f ~/.xprofile ] && source ~/.xprofile
exec dbus-launch --exit-with-session startplasma-x11

前两行为必填,后两行为启动X11时同时加载这两个文件。

编写一个简单脚本:假设名字为 sx.sh

#!/bin/bash
sudo modprobe nvidia_drm nvidia_modeset nvidia && startx

授权启动

$ chmod u+x sx.sh
$ ./sx.sh

KDE

KDE 是一个自由软件社区,其提供了一组应用程序,包括流行的 Plasma 桌面环境。

Gentoo对KDE项目的支持非常好,包括对KDE Frameworks 5,Plasma 5和Applications的全面支持,以及其他各种各样基于KDE的软件。

Profile

在安装心仪的 DE/WM 之前,建议切换到的 desktop profile 下,执行

# eselect profile list

以列出所有的 profiles,然后进行选择。例如:

openrc 下,可以选择

  • amd64/17.1/desktop
  • amd64/17.1/desktop/gnome
  • amd64/17.1/desktop/plasma

systemd 下,可以选择

  • amd64/17.1/desktop/systemd
  • amd64/17.1/desktop/gnome/systemd
  • amd64/17.1/desktop/plasma/systemd

如若只想安装轻量级的窗口管理器,那么可以选择类似 amd64/17.1/desktop 一样的纯 desktop profile。

根据本文上下文环境,这里我选择 amd64/17.1/desktop/plasma 以准备好 KDE Plasma 的前期环境

# eselect profile set 9

虽然 desktop profile 下已经配置启动了基本的 ALSA 声音接口功能,但个人建议再启用 PulseAudio 声音服务器以获得更多功能。只需编辑 /etc/portage/make.conf 文件,设置

echo 'USE="pulseaudio"' >> /etc/portage/make.conf

切换到 desktop profile 并不是一个必须的操作,也可以在基础的 profile 或者其它的 profile 下进行,但如果这样的话,则需要再自行额外配置,会相对复杂一点,此处不多做说明。

Plasma

Plasma 5 是 KDE 正在发展的一代桌面环境,基于 Qt 5 和 KDE Framework 5 。

安装

kde-plasma/plasma-meta 包提供完整的 Plasma 5 桌面,执行此命令将 plasma-meta 这个元包添加到 world set 中:

# emerge --ask kde-plasma/plasma-meta

你也可以选择安装 kde-plasma/plasma-desktop,它提供了一个非常基本的桌面,让用户可以自由安装他们需要的额外软件包 - 或者更确切地说,让他们自己找出并补全缺少的功能。

警告:请注意,仅安装kde-plasma/plasma-desktop会丢失重要的软件包,例如kde-plasma/powerdevil(电源管理,挂起和休眠选项),kde-plasma/systemsettings等等,在这种情况下都不会被支持。

小工具

kde-plasma/kdeplasma-addons 提供了很多有用的小工具 (早就被 kde-plasma/plasma-meta作为依赖安装了):

# emerge --ask kde-plasma/kdeplasma-addons

显示管理器

SDDM (Simple Desktop Display Manager) 是被推荐的登录管理器并且它默认会通过 kde-plasma/plasma-meta 被自动安装。 另外你也可以选择使用 LightDM ,这需要为 kde-plasma/plasma-meta 设置 -sddm 的 USE 旗标, 同时还要修改 /etc/conf.d/xdm 中的设置。 同时在发生错误时请阅读 SDDM 页面。

如果是其它的 DM 也是启用对应的服务即可。

# systemctl enable sddm.service

无显示管理器

Plasma 可以用startx以老式方式启动,但需要格外小心以确保它获得有效的会话。创建 ~/.xinitrc 文件:

#!/bin/sh
exec dbus-launch --exit-with-session startplasma-x11

这也可以写入~/.profile文件中,该文件将在登录时执行。

dbus-launch --exit-with-session startplasma-wayland

系统托盘

Plasma 5 对系统托盘图标使用StatusNotifier规范。由于并非所有应用程序都已移植到新系统,因此需要一些应变方法,并且 Plasma 5 也具有将旧的基于xembed的系统托盘图标转换为StatusNotifier图标的方法。

通过激活kde-plasma/plasma-metalegacy-systray 来启用传统支持,这将引入kde-plasma/xembed-sni-proxy。编辑 /etc/portage/package.use/kde-plasma-settings

# xembed system tray support for legacy applications
kde-plasma/plasma-meta legacy-systray
Pidgin

net-im/pidgin 需要 x11-plugins/pidgin-indicator。安装完成后,在 工具|插件 下可以找到 Ubuntu 指示器 插件。

KWallet

在登录桌面后添加一个(无线)网络连接或者在kde-apps/kmail中添加一个电子邮箱账户时,许多用户被推荐使用 kde-frameworks/kwallet —— Plasma桌面的加密密码存储器。

有个软件包kde-apps/kwalletmanager,可用于管理KWallets,导入及导出密码:

# emerge --ask kde-apps/kwalletmanager

KWallet 自动解锁

kde-plasma/kwallet-pam 提供了一种机制,可以避免在登录后即被要求访问kwallet。

# emerge --ask kde-plasma/kwallet-pam

需要如下的配置:

  • 为了KWallet的安全性,请使用比较传统的blowfish加密,而不是GPG
  • 在kwallet和用户使用相同的密码
  • 让登录管理器支持PAM特性 - x11-misc/sddmx11-misc/lightdm 都支持

通过SDDM解锁KWallet PAM的配置行,编辑 /etc/pam.d/sddm

-auth           optional        pam_kwallet5.so
-session        optional        pam_kwallet5.so auto_start

附注:对于LightDM, 需要自己编辑/etc/pam.d/lightdm

附注:如果在登录时,存有你的用户的KWallet文件的文件系统已经被pam_mount挂载,你可能需要将~/.local/share/kwalletd/kdewallet.salt复制到你的根文件系统的相同路径下。否则,PAM会在主目录可用之前尝试解锁KWallet并失败。实际包含加密的KWallet密码的文件~/.local/share/kwalletd/kdewallet.kwl不需要复制。

禁用 KWallet

要完全禁用KWallet子系统,请编辑 ~/.config/kwalletrc

[Wallet]
Enabled=false

SSH/GPG 密钥启动/关闭脚本

ssh-agent 脚本位于 /etc/xdg/plasma-workspace/env 和 /etc/xdg/plasma-workspace/shutdown。关闭脚本需要设置可执行位,因为它们不是源。Keychain 提供了更多信息

Using keychain with Plasma 5

Keychain is a frontend to ssh-agent and ssh-add, allowing long running sessions and letting the user enter passphases just once. It can also be used to allow scripts access to SSH connections.

# emerge --ask net-misc/keychain

Plasma 5 users, instead of using ~/.bash_profile, can let Plasma manage ssh-agent for them. In order to do so, edit /etc/xdg/plasma-workspace/env/10-agent-startup.sh, which is read during Plasma’s startup, and /etc/xdg/plasma-workspace/shutdown/10-agent-shutdown.sh, which is executed during its shutdown.

Here is how one could edit those files:

Editing /etc/xdg/plasma-workspace/env/10-agent-startup.sh for Plasma 5

SSH_AGENT=true

Editing /etc/xdg/plasma-workspace/shutdown/10-agent-shutdown.sh for Plasma 5

if [ -n "${SSH_AGENT_PID}" ]; then
  eval "$(ssh-agent -k)"
fi

Now, all that has to be done is launch a terminal of choice, like kde-apps/konsole, and load the right set of keys to use. For example:

$ keychain ~/.ssh/id_rsa

The keys will be remembered until the end of the Plasma session (or until the ssh-agent process is killed manually).

使用root权限运行 GUI 应用

警告:使用root权限启动 GUI 应用可能是一个 非常 坏的主意。相比之下,更好的办法是将常规用户添加到相应的组或者只是无提权地运行命令。只有在绝对必要时才使用 kdesu

KDE Plasma有一个实用程序,用于以root权限启动图形应用。它由kde-plasma/kde-cli-tools提供 - 要使用 USE 标志kdesu构建。这将会安装kde-frameworks/kdesu的一个图形前端。这依赖Xorg,并且仅在X内有效。编辑 /etc/portage/package.use/kde-plasma-settings

# Build graphical frontend for kde-frameworks/kdesu (requires X)
kde-plasma/kde-cli-tools kdesu X

记得要重建软件包以获取更改:

# emerge -1 kde-cli-tools

可以通过从KRunner或终端仿真器调用kdesu来使用它:

# kdesu <program-name>

将显示一个消息对话框,提示输入root密码。

附注:出于安全原因,某些应用(如kwrite、dolphin等)拒绝使用kdesu打开。

应用程序

发行版本包含很多基于 Qt 5/KDE Frameworks 5 的应用程序和支持库。

安装

kde-apps/kde-apps-meta 包提供完整的应用程序集合,但是可替代地,可以挑选其中一个或多个较小的元包。

个人建议没必要使用默认设置来安装 kde-apps/kde-apps-meta 包,因为会引入太多不常用的应用,建议根据 USE 来管理(下文 USE 标记一节有说明),选择性安装,即

# echo 'kde-apps/kde-apps-meta -*' > /etc/portage/package.use/kdeapps

同时取消 kdecore-meta 的 webengine 依赖,以减少当下的编译时间

# echo 'kde-apps/kdecore-meta -webengine' >> /etc/portage/package.use/kdeapps

安装最核心的 KDE 应用,其它 KDE 应用根据需要安装即可

# emerge --ask kde-apps/kde-apps-meta

本地化

Plasma-5 和应用程序的每个包都提供了本地化文件。可以在系统设置中启用本地化。

KDE PIM

KDE PIM 是一整套用于管理个人信息的应用程序,包括邮件,日历,联系人等。它有几个可选的运行时依赖来扩展其功能:

框架

KDE Frameworks 5 是一套运行库和软件框架的合集,为KDE Plasma 5 和 KDE 应用提供基础,但是可能会受到一些 Qt 程序的影响。

KDE 框架大部分是运行库,只提供少量的面对用户的功能。它不需要被手动安装 —— 需要的软件包会被作为别的软件包的依赖自动安装。

更多KDE软件

最主要的 KDE 应用程序在 Porage 树的 kde-appskde-misc 分类中。

GNOME

GNOME 是一个流行的能够启动 Xorg 和 Wayland 会话的 桌面环境 。本指南 尝试描述 GNOME 的所有方面,包括安装、配置和使用。

从 3.30 版本开始,Gentoo 上的 GNOME 能够再次在 OpenRC 上运行。详情参见 Mart Raudsepp (leio)blog post

什么是 GNOME?

项目

GNOME 项目是一个自由的软件组织,它致力于 GNOME 的发展,Unix/Linux 桌面套件和开发平台。 GNOME 基金会协调发展 GNOME 项目的其他方面。

软件

GNOME 是一个桌面环境和一个开发平台。这款自由软件是包括 Canonical (Ubuntu) 和 Red Hat(Red Hat Linux、Fedora、Centos)在内的多个行业领导者的首选桌面。

准备

从历史上看,Xorg 显示服务器是 Linux 上所有桌面环境的标准显示基础。对于 GNOME 3 及更高版本,已经开始转向更新的 Wayland 显示服务器协议。NVIDIA 以外的系统在 Wayland 上运行 GNOME 会话没有问题。

也就是说,退一步讲,最好先阅读并按照 Xorg 指南 中设置 X 环境的说明。

根据 GNOME 上游的说法,GNOME 3 是用 systemd 初始化系统编写的。因此,systemd 用户最好从 systemd 文章中阅读并遵守所有必要的内核设置。

安装

在安装 GNOME 套件之前,编辑系统的 USE 变量是个好主意。 Gentoo 开发人员提供了一个 GNOME 特定配置文件,以帮助对 GNOME 软件堆栈进行系统范围的调整。在安装 GNOME 之前选择最新且稳定的 GNOME 特定配置文件。

使用 logind 的 OpenRC 用户可以选择此特定配置文件:

# eselect profile set default/linux/amd64/17.1/desktop/gnome

systemd 用户将会选择以下 profile:

# eselect profile set default/linux/amd64/17.1/desktop/gnome/systemd

确保 X、gtk 和 gnome 位于 /etc/portage/make.conf 中的 USE 变量中。 建议启用对 D-Bus 系统范围的支持。 systemd 包括这个系统消息总线。 也将 systemd 添加到 USE 变量(D-Bus 是 GNOME 广泛使用的系统消息总线)。 如果不需要 KDE 支持,请从 USE 中删除 qt5 和 kde。 可以通过在它们前面添加减号 (-) 来删除 USE 标志。 有关正确使用的减号,请参见下面的示例。

USE="-qt5 -kde X gtk gnome systemd"

附注:当使用 desktop/gnome profile, 这些 USE flags将为你设置。

一旦完成,就由emerge GNOME来安装GNOME,安装一个完整的GNOME,它提供了所有你可能需要的额外的软件包:

# emerge --ask gnome-base/gnome

“最小化”GNOME安装,该选项提供了一个轻量级的GNOME安装没有额外的工具

# emerge --ask gnome-base/gnome-light

这将需要一段时间,所以要开始阅读我们 wiki 中的其他部分。准备好了么?很好,现在更新环境变量:

# env-update && source /etc/profile

接下来剩余的服务和用户组将被清除。

验证 plugdev 组是否存在。如果是,建议让每个 GNOME 用户成为该组的成员,但这是可选的(该组不再常见)。

# getent group plugdev
plugdev❌104:

取代 <username> 为GNOME用户的用户名:

# gpasswd -a <username> plugdev

第一印象

现在是时候看看什么是刚刚构建的。退出root 终端并以普通用户身份登录。下一步骤是配置会话管理器,使用GNOMEstartx 命令来调用(请看using startx 在Xorg guide的更多信息)。

启用 GDM

:有关 GDM 故障排除的帮助可以在 GNOME/GDM 文章中找到。

systemd

在引导时启动 GDM:

# systemctl enable gdm.service

要立即启动 GDM,运行:

# systemctl start gdm.service

Tip:以下命令同时启用并立即启动 GDM:

# systemctl enable --now gdm.service

另一个建议是激活 Network Manager,以防没有其他网络管理服务被激活。

使用 startx

退出 root shell 并以普通用户身份登录。 下一步是配置会话管理器以在调用 startx 命令时运行 GNOME(有关更多信息,请参阅 Xorg 指南中的使用 startx)。

# echo "exec gnome-session" > ~/.xinitrc

从 gnome-base/gnome-session-2.26.2 开始,当使用 ~/.xinitrc 方法启动桌面时,用户需要预先添加 XDG_MENU_PREFIX 变量以获取 GNOME 菜单。如果 ~/.xinitrc 没有被使用,它将被自动处理;无需额外的配置。

# sed -i '1i\export XDG_MENU_PREFIX=gnome-' ~/.xinitrc

现在开始运行安装的图形环境startx:

# startx

如果一切顺利GNOME,我们高兴的问候您。祝贺你成功设置GNOME!

移除

完全删除 GNOME 安装的一种可能方法是明确卸载 gnome-base/gnome 包,然后清除该包的依赖项。

为了做到这一点,请确保主 ebuild 存储库已同步:

# emerge --sync

接下来,运行全局更新使系统是全新的:

# emerge --ask --update --newuse --deep --with-bdeps=y @world

卸载 GNOME 基础包:

# emerge --ask --depclean gnome-base/gnome

最后,清理系统:

# emerge --ask --depclean

GNOME 现已删除。

Awesome

简介

awesome 是眾多衍生自 dwm 的 window manager 的其中之一,是一種 tiling window manager。第一次接觸到 tiling wm 是 ion,但是因為設定不容易且用不習慣,一下就放棄了。幾個月前發現時常有人在 Debian Planet 上 awesome, awesome 的嚷嚷,花了點時間才搜尋到這個 wm 的首頁,稍微試用一下卻馬上就被吸引住了!目前的 stable 版本也就是我第一次使用的是 awesome 2.3 版,主打的是簡單的設定檔,良好的 EWMH 支持,XRandr/Xinerama 支持等,還有就是比 virtual desktop 更方便的 tag 用法,動態的 layout 等。噢,還有一個一定要提的就是 widget 的支援,awesome 提供基礎的顯示元件如 text, graph, image 等,可以利用 script 把資訊更新到 widget 上,可以輕鬆的自製 widget。

2.3 版用的還挺習慣的,widget 雖然需要用 script 去更新資料,但是也有許多人寫好許多模組利用 ruby, perl 或是獨立程式去更新資料。可是在我還在適應期,還沒開始自訂我的環境時,jd 宣佈開始 awesome 3 的開發,要全面使用 XCB 並引入 Lua 作為設定/程式介面。心養養的我就開始使用 git 版的 awesome,awesome 3 因為引入 XCB 幾乎全面改寫,而 Lua 使得 awesome 大部分的操作都便得動態且可以自訂,如 widget 就可以用 Lua 完成,client 的操作、tag 的切換、快捷鍵的設定,通通都可以透過 Lua 設定卻又維持一定的可讀性。因此,awesome 3 的定位變成了進階使用者為主,高度客製化的 framework window manager。

使用寬螢幕或是大螢幕時,常要調整視窗大小,不容易完全利用到整個螢幕的空間,compiz 等 3d wm 雖然特效絢麗,但是仍比不上 tiling wm 的方便有效率。awesome 推出沒多久就受到許多人的青睞,在這次的 DebConf8 就有數位 DD 使用 awesome 上台演說呢 XD

awesome 3 預計下禮拜就要釋出了,Debian 的使用者可以直接從 experimental 安裝 3.0~rc5

從官網節錄的一些特性:

  • 目前唯一使用 XCB 的 window manager
  • 良好的文件
  • 所有工作皆可用鍵盤完成
  • Multihead 支援,可用 XRandR, Xinerama, Zaphod
  • 實做 Freedesktop 標準:EWMH, XDG Base Directory, XEmbed, System Tray
  • 根據不同 tag 的 policy 自動排列視窗
  • 使用 tag 而不是 workspace,可以根據需要選擇要顯示哪些 tag 內的視窗,可以同時選擇多個 tag
  • 可以使用眾多的 Lua 擴充:dynamic tagging, widget feeding, tabs, …
  • D-Bus 支援

awesome 的客製化可以參考 Wiki 以及 Lua api doc