Total Pageviews

Friday, 2 August 2013

终结init scripts,彻底systemd化


systemd 是 Linux 下的一款系统和服务管理器,兼容 SysV 和 LSB 的启动脚本(init scripts)。systemd的特性有:支持积极并行化任务;同时采用 socket 式与 D-Bus 总线式激活服务;按需启动守护进程(daemon);利用 Linux 的 cgroups 监视进程;支持快照和系统恢复;维护挂载点;各服务间基于依赖关系进行精密控制。systemd 完全可以替代 Arch 默认的 sysvinit 启动系统。
今天更新时询问是否更新到systemd,既然官方推了就干脆迁移到systemd。已经有不少小白鼠了,普遍反映迁移后开机刷刷的,早就想试试因为懒才拖到现在。
迁移到systemd不是安装下systemd就完事了,但是也不难 ,照着archwiki做一遍就成了。
中文版教程:systemd (简体中文) – ArchWiki
英文版教程:systemd – ArchWiki(最新)
根据“ 纯 systemd 安装 ”的步骤执行下来都很顺利,就是用systemctl enable启动服务替换rc.conf里的daemons时trackpoint不在官方支持列表里。aur安装的官方支持就是不及时,还好现在还兼容 rc.conf,还是可以通过rc.conf启动。
配置好后重启系统,开机跑码界面变了,开机速度的确明显变快了,之前跑码是一行一行出来,现在刷刷的几行几行飙。
给后来者:迁移不难,效果明显.

----------------------------------------------
转到systemd很久了,今天升级时发现initscripts被清理出源了,于是就把initscripts, sysvinit和sysvinit-tools都卸载了.
卸载initscripts后发现rc.local是依赖于它的,systemd一直对rc.local兼容,里面的代码一样能用,但是卸载initscripts后rc.local就失去作用了。只能用systemd加载了,翻了翻几个熟悉的Systemd的service文件,看了下结构还是很简单的,依葫芦画瓢应该没问题。

先把rc.local里的代码按功能分到几个脚本里,再把脚本放到/user/sbin之类的地方,加上执行权限。自定义的service文件可以放在/etc/systemd/system下,ExecStart就是上面创建的脚本路径,再用
systemctl enable name.service
启用即可。

重启了下都正常工作,systemctl status name.service查看状态也都正常。

这下彻底systemd化了.
---------------------------



一直设置笔记本合上什么都不做,昨晚突然发现合上盖子后就待机了。看了下/etc/acpi/handler.sh里lid close那段设置的是无动作,xfce4-power-manager里的设置也无效了,真是一头雾水。
今天搜索了下终于找到了答案,原来是systemd作怪。升级到systemd 192-1后,合盖动作,按下电源、休眠键等都被systemd接管了。想要自定义这些需要编辑/etc/systemd/logind.conf,默认 所有的设置项都被注释了即使用默认动作。把HandleLidSwitch=这行去掉注释,设置成ignore或者其它动作即可,包括:ignore, poweroff, reboot, halt, kexec 和 hibernate。
其它项具体设置可参考:3.10 Replacing acpid with systemd或者手册:man logind.conf