基础布局Baselayout和OpenRC迁移指南
1.
背景知识
什么是baselayout?
为了让所有系统能正常得工作,Baselayout提供了一个基础的文件集合,比如/etc/hosts。她也为Gentoo提供了基础的文件系统布局(如目录/etc,/var,/usr,/home)
什么是OpenRC?
OpenRC是一个基于依赖关系的rc系统,可以和系统所提供任何init程序配合运行,一般指的是/sbin/init。但是她不是用来取代/sbin/init的。Gentoo Linux默认使用的init是由sys-apps/sysvinit提供,而Gentoo/FreeBSD则使用由sys-freebsd/freebsd-sbin提供的FreeBSD init。
那么干嘛要迁移?
最初的Gentoo的rc系统是为baselayout-1建立并且完全是由bash写出来的。这里有几个缺陷。比如在启动的时候需要访问某些系统调用,而这样就需要增加基于C的调用。这些调用都是静态连接的,从而会让rc系统随时间的增长而不断膨大。
而且,在Gentoo扩展到其他平台如Gentoo/FreeBSD和Gentoo嵌入式之后,就更不可能要求有一个基于bash的rc系统了。所以完全用C写的baselayout-2应运而生,她只需要一个兼容POSIX的shell。在开发baselayout-2的过程中,我们发现把rc系统和仅仅提供基础文件和文件系统布局的baselayout分成不同的包会更好。于是OpenRC诞生了。
OpenRC主要由Roy Marples开发,她支持Gentoo现在的所有变种(如Gentoo Linux,Gentoo/FreeBSD,Gentoo嵌入式和Gentoo Vserver)以及其他的平台如FreeBSD和NetBSD。
2.
迁移到OpenRC
迁移到OpenRC的过程是比较直接的;你的包管理器在常规升级的时候就已经包括了。重要的是在你安装新的>=sys-apps/baselayout-2和sys-apps/openrc之后的步骤。一定要运行dispatch-conf以确保/etc目录里的文件都已经更新到了最新版本。不这么做的话系统会无法启动,那样的话你就需要使用Gentoo LiveCD并按照以下步骤并来修复你的系统。
更新完配置文件后,在重启前复查以下几点。
/etc/conf.d/rc
/etc/conf.d/rc文件将不再使用,所有里边的设置需要被迁移到/etc/rc.conf中相应的设置。请通读/etc/rc.conf和/etc/conf.d/rc后再迁移设置。在完成修改后删除文件/etc/conf.d/rc。
内核模块
一般情况下,当你想在启动的时候自动加载某些模块的话,就把模块名连同参数一起加入到/etc/modules.autoload.d/kernel-2.6里边。baselayout-2不再用这个文件了。在baselayout-2里,不管内核的版本是多少,自动加载模块和模块参数都被放到了/etc/conf.d/modules文件里边。
例子:老式的配置文件
代码 2.1: /etc/modules.autoload.d/kernel-2.6 |
ivtv
cx88_dvb video_br=2
|
转换后应该是这样的:
代码 2.2: /etc/conf.d/modules |
modules_2_6="ivtv cx88_dvb"
module_cx88_dvb_args_2_6="video_br=2"
|
以上例子中,模块以及其参数只会在使用2.6.x系列内核情况下生效。新版本配置文件允
许在针对不同内核版本的情况下对模块和参数进行细致微调。
一个更深入的例子:
代码 2.3: 一个关于/etc/conf.d/modules的详细例子 |
modules="ohci1394 ieee1394"
modules_2_6="tun usbserial"
modules_2_6_23="cx88_dvb"
modules_2_6_23_gentoo_r5="ivtv"
module_cx88_dvb_args_2_6_23_gentoo_r5="video_br=2"
module_usbserial_args_2_6="vendor=0x1410 product=0x2110"
module_ieee1394_args="debug"
|
注意:
请注意module_和modules_之间的区别。
|
Boot运行级别
此boot运行级别为每台机器完成了几个重要的启动步骤。比如,确保你的根文件系统以读写方式挂载,确保你的文件系统已经检查过错误,确保你的挂载点确实存在,还有确保/proc伪文件系统在启动过程中已经挂载。
在OpenRC里,默认情况下块储存设备的卷管理服务不再被自动启动。这些卷管理服务包括lvm、raid、swap、device-mapper(dm)、dm-crypt和evms等等。你必须确保这些服务对应的启动脚本确实在boot运行级别里,否则你的系统可能不能正常启动。
尽管OpenRC ebuild会尝试帮你完成迁移工作,你还是应该复查一下所有的卷管理服务看看她们是否被正确迁移:
代码 2.4: 显示boot运行级别的所有服务 |
# ls -l /etc/runlevels/boot/
|
如果在上面的结果里你没有看到root、procfs、mtab、swap和fsck,请运行下面的命令把她们加入boot运行级别:
代码 2.5: 把必需的服务加入boot运行级别 |
# rc-update add root boot
# rc-update add procfs boot
# rc-update add mtab boot
# rc-update add fsck boot
# rc-update add swap boot
|
如果你知道你使用了mdraid,lvm和swap,但是却没在上边结果中看到的话,那你要运行以
下命令把启动脚本增加到boot runlevel中。
代码 2.6: 把mdraid和lvm加入boot运行级别 |
# rc-update add mdraid boot
# rc-update add lvm boot
|
Udev
OpenRC不再默认启动udev,但是它必须要在sysinit运行级别中以便能够被启动。OpenRC ebuild应该检测udev之前是否被启用并把它加入sysinit运行级别。不过,为了保险,还是亲自检查一下udev:
代码 2.7: 检查udev |
# ls -l /etc/runlevels/sysinit
lrwxrwxrwx 1 root root 14 2009-01-29 08:00 /etc/runlevels/sysinit/udev -> \
/etc/init.d/udev
|
如果udev不在上面命令的结果里,那就把它加入正确的运行级别:
代码 2.8: 把udev加入到sysinit运行级别 |
# rc-update add udev sysinit
|
网络
因为baselayout和OpenRC被拆分成了两个不同的包,你的net.eth0启动脚本在升级过程中可能消失。请依照下面的步骤来替换这个脚本:
代码 2.9: 添加回缺失的net.eth0脚本 |
# cd /etc/init.d
# ln -s net.lo net.eth0
|
如果你还缺失了其他网络启动脚本,请使用上面的命令来把她们添加回来。只需要把eth0替换成你的网络界面的名字即可。
还有,/etc/conf.d/net里的配置不再使用bash风格的数组。请查看/usr/share/doc/openrc-<version>/net.example以获取配置指令。这个转化应该很简单,以一个静态IP的配置为例:
代码 2.10: 旧的/etc/conf.d/net风格 |
config_eth0=( "192.168.1.37 netmask 255.255.255.0 brd 192.168.1.255" )
routes_eth0=( "default via 192.168.1.100" )
|
代码 2.11: 新的/etc/conf.d/net风格 |
config_eth0="192.168.1.37 netmask 255.255.255.0 brd 192.168.1.255"
routes_eth0="default via 192.168.1.100"
|
时钟
设置时钟的文件不再叫/etc/conf.d/clock了,而是由系统原生的时钟调整工具的名字命名。这就是说Linux下这个文件叫/etc/conf.d/hwclock,而在FreeBSD中叫/etc/conf.d/adjkerntz。如果一个系统没有一个可用的实时时种(RTC)芯片,那么它应该用/etc/init.d/swclock,这个脚本将会根据系统关机时创建的一个文件的修改时间(mtime)来设置系统时间。/etc/init.d里的启动脚本的名字也相应的改变了,所以请确保适用于你的系统的脚本已经在适当的运行级别里了。
还有,TIMEZONE变量也不再在这个文件里设置了。应该把这个变量的值写入文件/etc/timezone。如果这个文件不存在,你需要创建这个文件,并在里面写入你的时区。请复查这两个文件并确定她们的正确性。
这个文件的正确的值是你的时区相对于此目录/usr/share/zoneinfo的路径。比如,对于居住在中国的人来说,下面的是一个正确的设定。
代码 2.12: /etc/timezone |
Asia/Shanghai
|
XSESSION
XSESSION变量也不再在文件/etc/rc.conf中设置了。你可以为每个用户在他们的~/.bashrc(或类似文件)里设定XSESSION变量,或者全局的设定在/etc/env.d/里。
这里有全局设定的一个例子:
代码 2.13: 全局设定XSESSION |
# echo 'XSESSION="Xfce4"' > /etc/env.d/90xsession
|
重要:
在/etc/env.d里创建文件后必须运行命令env-update然后登出再登录才能让修改生效。如果你把这个变量设定在~/.bashrc里,那么你重新source这个文件即可source ~/.bashrc.
|
EDITOR和PAGER
EDITOR变量也不在/etc/rc.conf里了。EDITOR和PAGER变量的默认值都在/etc/profile里设定。如果你想改变,请在你自己的~/.bashrc(或起同等作用的)文件中设置这两个变量,或者新建一个文件/etc/env.d/99editor并且在里边设置系统默认值。
重要:
在/etc/env.d里创建文件后必须运行命令env-update然后登出再登录才能让修改生效。如果是在~/.bashrc里设置变量的话,你可以用命令 source ~/.bashrc来使你的改动立即生效。
|
启动记录
在此之前,你可以用app-admin/showconsole来记录启动过程。但是现在OpenRC的记录是在内部处理的,所以也就不需要showconsole来作这个事情了。你可以放心的删除掉showconsole。如想继续记录启动信息,只需在/etc/rc.conf里设置一个变量就可以了。记录可以在/var/log/rc.log里找到。
代码 2.14: 在/etc/rc.conf中开启启动记录 |
rc_logger="YES"
|
完成
在你完成了配置文件和启动脚本的更新后,最后一件事就是重启。这一步是必须的,因为系统状态信息在升级中不会被保留下来,所以你需要重启来达到这个目的。
本文档的内容遵循知识共享-署名-相同方式共享许可协议
|