Translations:Handbook:Parts/Full/Installation/7/zh-cn

From Gentoo Wiki
Jump to:navigation Jump to:search


Chrooting

可选:选择镜像站点

分发文件

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

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

Gentoo ebuild 软件仓库

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

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

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

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

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

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

FILE /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
[DEFAULT]
main-repo = gentoo
 
[gentoo]
location = 
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插件的官方规范。

复制DNS信息

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

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

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

挂载必要的文件系统

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

需要提供的文件系统是:

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

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

root #mount --types proc /proc /mnt/gentoo/proc
root #mount --rbind /sys /mnt/gentoo/sys
root #mount --make-rslave /mnt/gentoo/sys
root #mount --rbind /dev /mnt/gentoo/dev
root #mount --make-rslave /mnt/gentoo/dev
附注
--make-rslave操作是稍后安装systemd支持时所需要的。
警告
当使用非Gentoo安装媒介时,这时可能还不算完。一些发行版将/dev/shm符号链接到/run/shm/,在chroot后将变得不可用。为了让/dev/shm/是一个正常挂载的tmpfs,可以这样修复:
root #test -L /dev/shm && rm /dev/shm && mkdir /dev/shm
root #mount --types tmpfs --options nosuid,nodev,noexec shm /dev/shm

同时确保设置了权限为1777:

root # chmod 1777 /dev/shm

进入新环境

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

完成chroot有三个步骤:

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

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

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


配置Portage

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

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

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

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

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

从现在开始,Portage 可能会提示建议运行某些更新。这是因为在安装了一个新的repository 快照后,Portage 发现了 stage 文件中已经安装的某些软件包有更新的版本。现在可以安全的忽略包的更新;可以延迟到 Gentoo 安装完成之后更新。

可选:更新Portage ebuild 数据库

Gentoo 数据库可以更新到最新版本。前面的emerge-webrsync命令将安装一个最近的快照(通常是24小时以内),所以这一步是可选的。

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

root #emerge --sync

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

root #emerge --sync --quiet

阅读新闻条目

当同步Portage ebuild 数据库时,Portage 可能会输出类似于下面的信息:

* IMPORTANT: 2 news items need reading for repository 'gentoo'.
* Use eselect news to read news items.

创建新闻条目是为了提供一个通信媒介,通过 Gentoo ebuild 数据库来给用户推送重要的消息。可以使用 eselect news 管理新闻条目。eselect 应用程序是一个Gentoo 特有的应用程序,它允许使用通用管理接口来管理系统。在这里,要用到 eselectnews 模块。

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

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

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

root #man news.eselect

选择正确的配置文件

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

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

root #eselect profile list
Available profile symlink targets:
  [1]   default/linux// *
  [2]   default/linux///desktop
  [3]   default/linux///desktop/gnome
  [4]   default/linux///desktop/kde
附注
命令的这个输出只是一个示例,并会随时间演变。

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

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

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

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

更新@world集合

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

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

root #emerge --ask --verbose --update --deep --newuse @world
Tip
如果选择了桌面环境配置文件,则此过程可能大大增加安装过程所需的时间量。 时间紧迫的人可以通过这个“经验法则”工作: 配置文件名称越短,系统的特定属性越少@world set; @world设置的特定性越低,系统将需要的软件包越少。 换一种说法:
  • 选择 default/linux/amd64/ 将只有很少的包被重装或更新
  • 选择 default/linux/amd64//desktop/gnome/systemd 将需要安装许多软件包,因为init系统要从OpenRC更改为systemd,并且将安装GNOME桌面环境框架。

配置USE变量

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

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

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

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

root #emerge --info | grep ^USE
USE="X acl alsa amd64 berkdb bindist bzip2 cli cracklib crypt cxx dri ..."
附注
上面的示例被截断了,实际上的USE列表值是非常非常多的。

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

root #less /profiles/use.desc

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

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

root #nano -w /etc/portage/make.conf
FILE /etc/portage/make.conf为基于 KDE/Plasma 系统启用 DVD、ALSA 和 CD录制支持 flag
USE="-gtk -gnome qt5 kde dvd alsa cdr"

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

FILE /etc/portage/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 项目管理,有:

组别名称 描述
@GPL-COMPATIBLE 由自由软件基金会批准的 GPL 兼容许可 GPL [a_license 1]
@FSF-APPROVED 由 FSF 批准的自由软件许可证(包括@GPL-COMPATIBLE )
@OSI-APPROVED 由开放源代码促进会批准的许可证 [a_license 2]
@MISC-FREE Misc 许可证可能是自由软件,即遵循自由软件定义 [a_license 3] ,但不被 FSF 或 OSI 批准
@FREE-SOFTWARE 结合 @FSF-APPROVED,@OSI-APPROVED 和 @MISC-FREE
@FSF-APPROVED-OTHER 经 FSF 批准的“免费文档”和“除软件和文档外的实际使用作品”(包括字体)许可证
@MISC-FREE-DOCS 遵循自由定义的免费文档和其他作品(包括字体) [a_license 4]且没有在 @FSF-APPROVED-OTHE 中列出的杂项许可
@FREE-DOCUMENTS 结合 @FSF-APPROVED-OTHER 和 @MISC-FREE-DOCS
@FREE 所有许可证的 metaset,可以自由使用,共享,修改和共享修改。结合 @FREE-SOFTWARE 和 @FREE-DOCUMENTS
@BINARY-REDISTRIBUTABLE 至少允许以二进制形式自由分发软件的许可证。包括 @FREE
@EULA 试图剥夺您的权利的许可协议。与“保留所有权利”和需要明确的批准相比,@EULA 有更多的限制

Gentoo 在配置文件中提供了有预定义的值,例如:

user $portageq envvar ACCEPT_LICENSE
@FREE

可以通过更改 /etc/portage/make.conf 来自定义整个系统。默认只接受由自由软件基金会明确批准的许可,开源项目或者遵循自由软件定义:

FILE /etc/portage/make.conf自定义 ACCEPT_LICENSE
ACCEPT_LICENSE="-* @FREE"

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

FILE /etc/portage/package.license/kernel许可接受示例
app-arch/unrar unRAR
sys-kernel/linux-firmware @BINARY-REDISTRIBUTABLE
sys-firmware/intel-microcode intel-ucode


时区

为系统选择时区。在/usr/share/zoneinfo/中查找可用的时区,然后写进/etc/timezone文件。

root #ls /usr/share/zoneinfo

Suppose the timezone of choice is Europe/Brussels.

OpenRC

We write the timezone name into the /etc/timezone file.

root #echo "Europe/Brussels" > /etc/timezone

请避免使用 /usr/share/zoneinfo/Etc/GMT* 时区,它们的名字并不意味着想要的时区。例如,GMT-8 实际上是 GMT+8

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

root #emerge --config sys-libs/timezone-data

Systemd

We use a slightly different approach here; we generate a symbolic link:

root #ln -sf ../usr/share/zoneinfo/Europe/Brussels /etc/localtime

Later, when systemd is running, we can configure the timezone and related settings with the timedatectl command.

配置 locale

Locale 生成

大多数用户只想在他们的系统上使用一或两个地区。

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

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

root #nano -w /etc/locale.gen

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

FILE /etc/locale.gen启用US和 DE 地区及附加字符格式
en_US ISO-8859-1
en_US.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE.UTF-8 UTF-8
警告
我们"强烈"建议添加至少一个UTF-8格式的地区设置,因为许多应用程序也许需要这样才能正确构建。

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

root #locale-gen

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

Locale 选择

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

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

root #eselect locale list
Available targets for the LANG variable:
  [1] C
  [2] POSIX
  [3] en_US
  [4] en_US.iso88591
  [5] en_US.utf8
  [6] de_DE
  [7] de_DE.iso88591
  [8] de_DE.iso885915
  [9] de_DE.utf8
  [ ] (free form)

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

root #eselect locale set 9

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

FILE /etc/env.d/02locale手动设置系统地区定义
LANG="de_DE.UTF-8"
LC_COLLATE="C"

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

现在重新加载环境:

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

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