-
Notifications
You must be signed in to change notification settings - Fork 126
Setting up Systemd
Note currently this setup is very experimental and a work in progress.
Note as part of this I'm using an initramfs generated from dracut and a custom kernel with some additional options.
I'm not sure if an initramfs is needed for systemd but I'd recommend on reading up on building your own kernel and generating an initramfs first.
- The custom openrc ebuild for gentoo-on-rpi-64bit needs a patch for gcc10 to allow it to be rebuilt (this is needed below when rebuilding openrc without netifrc to avoid blockages)
- The rpi-64bit-meta ebuilds need patching to not depend on eudev when using systemd
- Certain rpi related init scripts such as from rpi3-ethfix (genpi64-overlay) don't yet support systemd
- xdm is not currently working, currently I'm missing /dev/fb0, this could be related to the init scripts that need patching, or additional modules need to be specified to be loaded on bootup
- need to investigate the use of timedatectl for ntp time
Upsides include
- A little bit quicker on boot / shutdown
- May help with controlling the shutdown process with use with the rpi x735 board (still investigating)
- https://wiki.gentoo.org/wiki/Systemd
- https://github.com/hiroru/gentoo_install#rebooting-into-our-new-gentoo-systemd
First I updated the kernel options just to add a couple in based on the Gentoo wiki.
I'm not sure if these are needed but I wanted to make sure everything in the recommended list was included.
Config Option | Menu Location | State |
---|---|---|
CONFIG_CHECKPOINT_RESTORE | General Setup -> Checkpoint/restore support | Enabled |
CONFIG_IPV6 | Networking Support -> Networking Options -> The IPv6 Protocol | Changed from module to directly included |
CONFIG_EFS_VARS | Firmware Drivers -> EFI (Extensible Firmware Interface) Support -> EFI Variable Support via sysfs | Enabled |
CONFIG_CRYPTO_USER_API_HASH | Cryptographic API -> User-space interface for hash algorithms | Enabled |
CONFIG_CRYPTO_USER_API_AEAD | Cryptographic API -> User-space interface for AEAD cipher algorithms | Enabled |
Next we're going to do a depclean, then change some use flags
emerge --ask --depclean
euse -E systemd dbus warmstarts
euse -D consolekit elogind
If you want to use docker then I'd also suggest enabling cgroup-hybrid to prevent any blockages
euse -E cgroup-hybrid
Next we're going to disable netifrc for openrc then re-emerge.
This is to avoid some blockages that might crop up.
Followed by a depclean to clear out netifrc.
echo "sys-apps/openrc -netifrc" > /etc/portage/package.use/temp
emerge --oneshot sys-apps/openrc
emerge --ask --depclean
This should remove netifrc which is network support for openrc but since we're switching across to systemd we shouldn't need it anyway
Check for any conflicts
emerge -p -avDN @world
TODO I had to remove the meta for rpi-64bit and docker
emerge -C rpi-64bit-meta
emerge -C app-emulation/docker
emerge the world to install systemd
emerge -avDN @world
emerge @preserved-rebuild
etc-update
Lets rebuild the initramfs using dracut
dracut --force
For some reason we need to re-install network manager.
When I first tried the above I ended up with no network so had to do a "dhcpcd eth0" just to get some basic network working just to re-install it
net-misc/networkmanager
The first line sets up some defaults, the NetworkManager sets up eth0 / wlan0 for networking
sshd is for remote access
xdm is for the xfce desktop
systemctl preset-all --preset-mode=enable-only
systemctl enable NetworkManager
systemctl enable sshd
systemctl enable xdm
Next lets get systemd up and running
reboot
Afterwards try a world update
emerge -up --deep --newuse @world
emerge -up --deep --changed-use @world
revdep-rebuild
Lets make sure the server name is set
hostnamectl set-hostname <server name>
env-update && source /etc/profile
If you needed to uninstall docker during the install then re-install it
emerge app-emulation/docker
This should remove openrc
emerge --depclean
emerge --deselect sys-apps/openrc
emerge --unmerge sys-apps/openrc
Starting and stopping services under systemd is a little different
- systemctl daemon-reexec - Can be used after an in place systemd update to avoid a reboot
- systemctl start - Can be used to start a service
- systemctl enable - Can be used to specify a service should be started on bootup
- systemctl list-units --type=service - List all available services
Wiki content license: Creative Commons Attribution-ShareAlike 4.0 International License