将 gnome 升级到了 3.14

从 openrc 到 systemd

rca posted @ 2013年7月17日 17:06 in Gentoo || FreeBSD with tags gentoo GNOME 3 systemd , 13587 阅读

将 gdm 从 3.8.0 升级为 3.8.3 时,发现这货开始硬性依赖 systemd 了,即使是 gentoo 拿它也没辙,最主要的问题详见 https://bugs.gentoo.org/show_bug.cgi?id=463784

好吧,那么就装 systemd,但是很惊异的发现它与系统中的 udev 互斥,二者不可共生。因为好久未关注 linux 的这些破事,在 google 里逛了一圈才发现 udev 已经作为一个子集被并入到 systemd 中,而 gentoo 则是从 systemd 中将 udev 剥离出来作为单独一个包,以供 openrc 之类的包使用。

对于 systemd 与 udev 的互斥问题,http://wiki.gentoo.org/wiki/Systemd 页面中说道:It is necessary to install systemd before enabling the flag. Otherwise, circular dependencies will prevent Portage from continuing. 于是,我就根据页面提供的 USE 标志的表格,在 gentoo 的 USE 文件中增加:

sys-apps/systemd keymap gudev introspection 

这样,就解决了 systemd 与 udev 的冲突问题,gdm 也顺利的升级到了 3.8.3 版本。但是结果很悲催,openrc 的 xdm 脚本无法起动 gdm 了!

于是,我打算完全的放弃 openrc,改投 systemd 门下!

既然 systemd 已安装,那么下一步就是就是开启所有可支持 systemd 的 USE,即在 /etc/make.conf 的总 USE 中加入“systemd”标志,然后:

$ sudo emerge --ask --changed-use --deep @world

这样会重新编译安装一些与 gnome 3 相关的软件包。

下一步,就是让 systemd 取代 openrc,即修改 grub 配置文件,设定使用 systemd 作为系统服务管理器。由于我是使用 grub2 作为系统引导程序,所以下面的做法不适于 grub1。

编辑 /etc/default/grub 文件,将 GRUB_CMDLINE_LINUX_DEFAULT 的值修改如下:

GRUB_CMDLINE_LINUX_DEFAULT="init=/usr/bin/systemd ro quiet"

然后重新生成 /boot/grub2 目录中的 grub.cfg 文件:

$ sudo mount /boot
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg

这样,重启系统后,就是 systemd 代替了 openrc 在工作。

但是,此时 gdm 依然不会被启用,因为 systemd 默认不会启用 gdm 的服务,需要执行以下命令方可启用它:

$ sudo systemctl enable gdm.service

上述命令就类似于 openrc 的:

$ sudo rc-update add xdm default

然后重启系统,即可看到 gdm 的登陆界面。如果不想重启,也可以执行下面的命令当场开启:

$ sudo systemctl start gdm.service

如果你发现无法访问网络了,那么就开启 NetworkManager 服务:

$ sudo systemctl enable NetworkManager.service
$ sudo systemctl start NetworkManager.service

如果你发现系统的时间不正确了,那么就在 /etc/systemd/system 中建立 hwclock.service 文件:

[Unit]
Description=hwclock

[Service]
Type=oneshot
ExecStart=/sbin/hwclock --hctosys --localtime
ExecStop=/sbin/hwclock --systohc --localtime

[Install]
WantedBy=multi-user.target

然后启用 hwclock 服务:

$ sudo systemctl enable hwclock.service
$ sudo systemctl start hwclock.service

差不多就这样了。具体的细节,我实在是懒得再去看资料了。

Avatar_small
依云 说:
2013年7月17日 21:52

我挺喜欢 openrc 的。

rca 说:
2013年7月18日 16:51

@依云: systemd 更快。这里有一个比较的视频 http://www.youtube.com/watch?v=4NXMmHYNYfA

Avatar_small
依云 说:
2013年7月18日 17:13

@rca: 启动速度再快,不好用还是不好用。对了,有空我给 Arch 弄个 systemd-rc-local 包好了。

Avatar_small
rca 说:
2013年7月18日 17:35

@依云: 嗯,反正两个东西我都不会用,下一步索性深入看看 systemd 的东西好了。

Avatar_small
依云 说:
2013年7月19日 23:34

打好包啦,在 archlinuxcn 源里~~~
这里是 PKGBUILD: https://github.com/archlinuxcn/repo/blob/master/systemd-rc-local/PKGBUILD

Avatar_small
rca 说:
2013年7月20日 10:30

@依云: 不明觉厉...... gentoo 里,要启用 openrc,还得有个 open-init.service,不过我在 wiki 上没有找到这个文件,也不会写 :(

ibrother 说:
2015年6月27日 22:21

@rca: gentoo使用openRC的可以使用/etc/local.d/下面的start文件提供SysV init里面rc.local的功能


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter