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转换后应该是这样的:
代码 2.2: /etc/conf.d/modules
# 启动时自动加载模块列表以上例子中,模块以及其参数只会在使用2.6.x系列内核情况下生效。新版本配置文件允 许在针对不同内核版本的情况下对模块和参数进行细致微调。
一个更深入的例子:
代码 2.3: 一个关于/etc/conf.d/modules的详细例子
# 不管内核是什么版本,都加载模块ochi1394和ieee1394注意: 请注意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如果你知道你使用了mdraid,lvm和swap,但是却没在上边结果中看到的话,那你要运行以 下命令把启动脚本增加到boot runlevel中。
代码 2.6: 把raid和lvm加入boot运行级别
# rc-update add raid boot网络
因为baselayout和OpenRC被拆分成了两个不同的包,你的net.eth0启动脚本在升级过程中可能消失。请依照下面的步骤来替换这个脚本:
代码 2.7: 添加回缺失的net.eth0脚本
# cd /etc/init.d如果你还缺失了其他网络启动脚本,请使用上面的命令来把她们添加回来。只需要把eth0替换成你的网络界面的名字即可。
还有,/etc/conf.d/net里的配置不再使用bash风格的数组。请查看/usr/share/doc/openrc/net.example以获取配置指令。这个转化应该很简单,以一个静态IP的配置为例:
代码 2.8: 旧的/etc/conf.d/net风格
config_eth0=( "192.168.1.37 netmask 255.255.255.0 brd 192.168.1.255" )代码 2.9: 新的/etc/conf.d/net风格
config_eth0="192.168.1.37 netmask 255.255.255.0 brd 192.168.1.255"时钟
设置时钟的文件不再叫/etc/conf.d/clock了,而是由系统原生的时钟调整工具的名字命名。这就是说Linux下这个文件叫/etc/conf.d/hwclock,而在FreeBSD中叫/etc/conf.d/adjkerntz。/etc/init.d里的启动脚本的名字也相应的改变了,所以请确保她已经在适当的运行级别里了。
还有,TIMEZONE变量也不再在这个文件里设置了。应该把这个变量的值写入文件/etc/timezone。如果这个文件不存在,你需要创建这个文件,并在里面写入你的时区。请复查这两个文件并确定她们的正确性。
这个文件的正确的值是你的时区相对于此目录/usr/share/zoneinfo的路径。比如,对于居住在中国的人来说,下面的是一个正确的设定。
代码 2.10: /etc/timezone
Asia/ShanghaiXSESSION
XSESSION变量也不再在文件/etc/rc.conf中设置了。可以在由x11-apps/xinit提供的文件/etc/env.d/90xsession里设置XSESSION变量。
默认是不会迁移这个变量的,所以你需要编辑文件/etc/env.d/90xsession 。
重要: 在/etc/env.d里创建文件后必须运行命令env-update然后登出再登录 才能让修改生效。
EDITOR/PAGER
EDITOR变量也不在/etc/rc.conf里了。EDITOR和PAGER变量的默认值都在/etc/profile里设定。如果你想改变,请在你自己的~/.bashrc(或起同等作用的)文件中设置这两个变量,或者新建一个文件/etc/env.d/99editor并且在里边设置系统默认值。
重要: 在/etc/env.d里创建文件后必须运行命令env-update然后登出再登录才能让修改生效。如果是在~/.bashrc里设置变量的话,你可以用命令 source ~/.bashrc来使你的改动立即生效。
完成
在你完成了配置文件和启动脚本的更新后,最后一件事就是重启。这一步是必须的,因为系统状态信息在升级中不会被保留下来,所以你需要重启来达到这个目的。
openrc是为了替代原来baselayout-1里的引导系统,算是baselayout-2的一部分,后来独立了出来