基础布局Baselayout和OpenRC迁移指南 http://www.gentoo-cn.org/doc/zh_cn/openrc-migration.xml

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的详细例子

# 不管内核是什么版本,都加载模块ochi1394和ieee1394
modules="ohci1394 ieee1394"
# 只有在2.6.X系列内核的时候加载tun和usbserial
modules_2_6="tun usbserial"
# 只有在2.6.23内核时,才加载cx88_dvb
modules_2_6_23="cx88_dvb"
# 内核版本2.6.23-gentoo-r5才加载ivtv
modules_2_6_23_gentoo_r5="ivtv"

# 内核版本为2.6.23-gentoo-r5的时候,传递参数video_br=2给内核模块cx88_dvb
module_cx88_dvb_args_2_6_23_gentoo_r5="video_br=2"
# 2.6.x系列内核的话,传递vendor和product参数给usbserial模块
module_usbserial_args_2_6="vendor=0x1410 product=0x2110"
# 不管内核是什么版本,传递debug参数给模块ieee1394
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: 把raid和lvm加入boot运行级别

# rc-update add raid boot
# rc-update add lvm boot

网络

因为baselayout和OpenRC被拆分成了两个不同的包,你的net.eth0启动脚本在升级过程中可能消失。请依照下面的步骤来替换这个脚本:

代码 2.7: 添加回缺失的net.eth0脚本

# cd /etc/init.d
# ln -s net.lo net.eth0

如果你还缺失了其他网络启动脚本,请使用上面的命令来把她们添加回来。只需要把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" )
routes_eth0=( "default via 192.168.1.100" )

代码 2.9: 新的/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。/etc/init.d里的启动脚本的名字也相应的改变了,所以请确保她已经在适当的运行级别里了。

还有,TIMEZONE变量也不再在这个文件里设置了。应该把这个变量的值写入文件/etc/timezone。如果这个文件不存在,你需要创建这个文件,并在里面写入你的时区。请复查这两个文件并确定她们的正确性。

这个文件的正确的值是你的时区相对于此目录/usr/share/zoneinfo的路径。比如,对于居住在中国的人来说,下面的是一个正确的设定。

代码 2.10: /etc/timezone

Asia/Shanghai

XSESSION

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来使你的改动立即生效。

完成

在你完成了配置文件和启动脚本的更新后,最后一件事就是重启。这一步是必须的,因为系统状态信息在升级中不会被保留下来,所以你需要重启来达到这个目的。


标题: 把Gentoo转移到openrc[夕角奉献的说明,晨想奉献的官方文档翻译]
http://www.linuxsir.org/bbs/thread327354.html

openrc是为了替代原来baselayout-1里的引导系统,算是baselayout-2的一部分,后来独立了出来
原来Gentoo的引导系统(init system: 用于配合/sbin/init工作)是用shell写的,不仅有很大的限制,而且速度慢,碰到嵌入式环境,没有完整的shell的就难以使用,所以就有了openrc.
据说换成openrc后,启动速度快得多了,我今天也试了试。
转移指南在,这是晨想翻译,zhllg审校的
下面是我的操作过程:
一、安装 basklayout-2, openrc (请一定记得 etc-update 或 dispatch-conf )
二、修改/etc下的配置文件,详见指南,在emerge后,大部分都由portage修改好了
补充:我在重启后发现 net.eth0 被删了,所以重新做了连接
$ sudo ln -s /etc/init.d/net.lo /etc/init.d/net.eth0
$ sudo etc-update # 或 dispatch-conf
$ cat /etc/conf.d/modules #发现都修改好了
$ sudo rc-update show -v #检查服务
$ sudo vi /etc/conf.d/net
这里我就一行固定IP的,把括号去掉就OK了
$ sudo vi /etc/timezone
这个文件要自己新建,写入 Asia/Shanghai
$ sudo vi /etc/conf.d/hwclock
这行相信大家都改过吧?
把 UTC 改成 local
$ sudo vi /etc/env.d/90xsession
XSESSION="kde-4″
这一行是在 startx 时用的,相信大部分用不着
用kde-3.5 的改成 kde-3.5
用gnome 的改成 Gnome
最后,env-update一下就可以重启了,快去试试openrc的性能吧!

改用openrc启动速度几乎是原来的3倍以上,可惜splash没了,看来又有事要做了…


代码: svcdir="/lib/rc/init.d"
svcmount="YES"
svcfstype="tmpfs"
into /etc/rc.conf, but to no avail