复制DNS信息
在进行新环境之前,还有一件要做的事情就是复制
/etc/resolv.conf
中的DNS信息。需要完成这个来确保即使进入到新环境后网络仍然可以使用。
/etc/resolv.conf
包含着当前网络中的DNS服务器。
要复制这个信息,建议通过
cp
命令的
-L
选项。这可以保障如果
/etc/resolv.conf
是一个符号链接的话,复制的是那个目标文件而不是这个符号文件自己。否则在新环境中,符号文件将指向一个不存在的文件(因为链接目标非常可能不会在新环境中)。
root #
cp -L /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 -t 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
进入新环境
现在所有的分区已经初始化,并且基础环境已经安装,是时候进入到新的安装环境了。这意思着会话将把根(所能访问到的最顶层位置)从当前的安装环境(安装CD或其他安装媒介)变为安装系统(叫做初始化分区)。因此叫作
change root
或
chroot
。
完成chroot有三个步骤:
- 使用chroot将根位置从/(在安装媒介里)更改成/mnt/gentoo/(在分区里)
- 使用source命令将一些设置(那些在/etc/profile中的)重新载入到内存中
- 更改主提示符来帮助我们记住当前会话在一个chroot环境里面。
root #
chroot /mnt/gentoo /bin/bash
root #
source /etc/profile
root #
export PS1="(chroot) $PS1"
从现在开始,所有的动作将立即在新Gentoo Linux环境里生效。当然这离完成还很远,因为安装还剩下很多章节 :-)
配置Portage
安装Portage快照
接下来,是安装Portage快照,一个用来告诉Portage哪些软件标题可用于安装、哪些配置文件可以由管理员选择等等的文件集合。
建议使用
emerge-webrsync
。这将从Gentoo的一介镜像中得到最新的Portage快照(Gentoo每天发布一个基准)并安装到系统中。
root #
emerge-webrsync
阅读新闻条目
当同步Portage树到系统时,它可能警告用户一条类似于下面的信息:
CODE
Portage通知用户关于新闻条目
* IMPORTANT: 2 news items need reading for repository 'gentoo'. * Use eselect news to read news items.
Portage新闻条目的创建是为了提供一个通信媒介,通过rsycn树来推送重要的消息给用户。要管理它们,使用
eselect news
。
eselect
应用程序是一个Gentoo应用程序,它允许一个通用的管理界面完成对系统的变更和操作。在这里,要用到
eselect
的
news
模块。
对于
news
模块,最常用的有三个操作:
- 使用list显示一个可用新闻条目的预览。
- 使用read来阅读新闻条目。
- 使用purge将在新闻条目阅读后删除,并且不能再次阅读。
root #
eselect news list
root #
eselect news read
更多关于新闻阅读器的信息可以通过其手册页查看:
root #
man news.eselect
选择正确的配置文件
配置文件
是任何一个Gentoo系统的积木。它不仅指定
USE
、
CFLAGS
和其它重要变量的默认值,还会锁定系统的包版本范围。这些设定全是由Gentoo的Portage开发者们来维护。
使用
eselect
,你能看到当前系统正在使用什么配置文件,现在来使用
profile
模块:
root #
eselect profile list
Available profile symlink targets: [1] default/linux/amd64/13.0 *
[2] default/linux/amd64/13.0/desktop
[3] default/linux/amd64/13.0/desktop/gnome [4] default/linux/amd64/13.0/desktop/kde
root #
eselect profile set 2
更新@world集合
At this point, if a new system profile as been chosen, it is wise to update the system's
@world set
so that a base can be established for the new profile.
This following step is
necessary
for those who have selected a profile with
systemd
in the title (since all of Gentoo's official stage tarballs use OpenRC as the default init system), however it is
optional
for the other profiles:
root #
emerge --ask --update --deep --newuse @world
Tip
If a full scale desktop environment profile has been selected this process could greatly extend the amount of time necessary for the install process. Those in a time crunch can work by this 'rule of thumb': the shorter the profile name, the less specific the system's
@world set
; the less specific the @world set, the fewer packages the system will require. In other words:
- selecting default/linux/amd64/13.0 will require very few packages to be updated, whereas
- selecting default/linux/amd64/13.0/desktop/gnome/systemd will require many packages to be installed since the init system is changing from OpenRC to systemd, and the Gnome desktop environment framework will be installed.
配置USE变量
USE
是Gentoo为用户提供的最具威力的变量之一。很多程序通过它可以选择编译或者不编译某些可选的支持。例如,一些程序可以在编译时加入对gtk或是对qt的支持。其它的程序可以在编译时加入或不加入对于SLL的支持。有些程序甚至可以在编译时加入对framebuffer的支持(svgalib)以取代X11(X服务器)。
大多数的发行版会使用尽可能多的支持特性编译它们的软件包,这既增加了软件的大小也减慢了启动时间,而这些还没有算上可能会涉及到的大量依赖性问题。Gentoo可以让你自己定义软件编译的选项,而这正是
USE
要做的事。
在
USE
变量里你可以定义关键字,它被用来对应相应的编译选项。例如,
ssl
将会把ssl支持编译到程序中以支持它。
-X
会移除其对于X服务器的支持(注意前面的减号)。
gnome gtk -kde -qt4
将会以支持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 ..."
时区
为系统选择时区。在
/usr/share/zoneinfo/
中查找可用的时区,然后写进
/etc/timezone
文件。
root #
ls /usr/share/zoneinfo
假设要选择的时区是
Asia/Shanghai
:
root #
echo "Asia/Shanghai" > /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
配置地区
大多数用户只想在他们的系统上使用一或两个地区。
地区不只是指定系统应该使用的与系统进行交互的语言,同时也指定了字符串排序,日期和时间的显示等规则。
系统应该支持的地区应该在
/etc/locale.gen
中提到。
root #
nano -w /etc/locale.gen
下面的地区是一个示例,展示了同时使用英语(美国)和中文(中国)及附加字符格式(如UTF-8)。
FILE
/etc/locale.gen
启用US和CN地区及附加字符格式
en_US ISO-8859-1en_US.UTF-8 UTF-8zh_CN GBKzh_CN.UTF-8 UTF-8
警告
我们强烈建议使用至少一个UTF-8格式的地区设置,因为有些应用程序可能需要它。
下一步是运行
locale-gen
。它将生成
/etc/locale.gen
文件中指定的所有地区。
root #
locale-gen
要验证所选择的地区当前可用,运行
locale -a
。
等完成后,我们就来设定系统级别的区域设置。我们又一次使用
eselect
来做这件事,现在使用
locale
模块。
通过
eselect locale list
可显示可用的目标:
root #
eselect locale list
Available targets for the LANG variable: [1] C [2] en_US [3] en_US.iso88591 [4] en_US.utf8 [5] POSIX [6] zh_CN [7] zh_CN.gbk [8] zh_CN.utf8 [ ] (free form)
通过
eselect locale set VALUE
可以设定正确的地区:
root #
eselect locale set 8
确保设定了一个地区,不然系统会在后面安装中的内核编译和部署其他软件时显示警告和错误。
现在重新加载环境:
root #
env-update && source /etc/profile && export PS1="(chroot) $PS1"