So how’s doing with systemd? The anwser is good. everything (including KDE, kdm, slim with awesome) works just fine under systemd, with a little tweaking needed – at least on Gentoo.

What will break

systemd by default, only start device service (what udev do), journald (which is for logging), dbus (systemd depends on it) and getty (yes, we didn’t need inittab anymore). All other service like vixie-cron, syslog-ng is disabled by default. We first probably want to start the service. So here I give the basic command and configurations.

# all service can be started with
$ systemctl start <service_name>[.service]

# to start on boot
$ systemctl enable <service_name>[.service]

# to stop
$ systemctl stop <service_name>[.service]

# to disable boot on start
$ systemctl disable <service_name>[.service]

If any service works just fine, I will not mention it any longer. I will try not be too detail about how to work with systemd. So you can consult systecmtl1 for more options for your own. :)

  • network

If you’re using DHCP for that, it just works fine with systemctl start dhcpcd on Gentoo. Static address and device-specific configurations are more complicated you can reference to the section blow. :/

  • local.d

scripts under /etc/local.d/ like foo.start will now be a service named gentoo-local-foo.service in systemd.

  • samba

/etc/init.d/samba does a lot of things for us, which can be summarized as starting smbd and nmbd. So we should start smbd.service and nmbd.service in systemd.

service cannot start by systemd (by default)

By now, any packages don’t have systemd support because they have no systemd unit file within the package. (Though some others do have, like openvpn!). Copy a unit file and put it in /usr/lib/systemd/system/ is a good idea, and those files from archlinux is a good start. :)

Though I suggest to submit a new request on Gentoo Bugs. But what if the Gentoo devs don’t accept them or we just want to use them NOW ?

We’ve setup a overlay for this. You can find patched version of packages. :)

So far I’ve done with these packages.

  • app-admin/supervisor: add systemd unit file
  • net-proxy/squid: add systemd unit file
  • net-misc/dhcpcd: add @ style support like dhcpcd@eth0.service

And one more thing. If you decide to write an unit file on your own. Here and here and many other unit file in packages will be a good start.

About network settings

More improvement ?

Yes, systemd just works. But We still need that things under traditional init system.

custome target (runlevels ?)

Because of systemd has no more concept like runlevel in SysV, it use target for that task. We could create custom target.

More tweaks can be found on archlinux systemd wiki page (oh year :/).

wireless

I haven’t use wireless network under systemd. I will try it recently and report back.

udev-rules

This is somehow related to dracut. The base module in dract depends on udev-rules, so udev will run before filesystem mounting. But there is a way to bypass.

Remember we have a local customed module last time? We need to add a empty file named 80-net-name-slot.rules and add a line to module-setup.sh

install() {
inst_hook pre-trigger 91 "$moddir/mount-local.sh"
inst_rules "$moddir/80-net-name-slot.rules"
}

Rebuild the initramfs and reboot. This rule will keep udev not touching the network device and follow the other rules on rootfs device. For me, I have a 70-persistent-network.rules which setting first NIC to lan.

It just works :)

issues

kernel log on tty1

Still no luck, all kernel log continue to output to my tty1 :(