
Rick Moen via luv-talk wrote:
Quoting Trent W. Buck (trentbuck@gmail.com):
(Sorry this post is so long; I didn't have time to make it shorter.)
You and your friend Blaise. ;->
Speaking as someone who had to jump through many hoops to support Upstart when it was first rolled out in Ubuntu 8.04 and Ubuntu 10.04, and systemd on Debian 8, and who also watched on the sidelines when pere rolled out insserv/starpar parallel booting by default in Debian 7, I strongly believe it's *not* trivial.
Maybe it's only enough work for one full-time person, but it's more than I could easily cope with alongside my other regular responsibilities.
To be clear about what I meant, I am not being critical of DDs' refusal to commit to making sure that a whole flock of init systems have full-citizen support. What I was saying is that, if (say) I wanted to use OpenRC on Debian 8 and there weren't packages with the necessary plumbing for the 7 or 8 services I desire to run (init scripts or whatever), I'd just create that plumbing locally for the 7-8 services. It wouldn't be a big deal for a local admin to do that for local needs, IMO.
(Oh, I also tested cinit/minit back in the day, but I gave up on those before production rollout, because NO WAY was I going to write job descriptions for every system component.)
Well, honestly, how many system components require init plumbing on a typical system? In my experience, not many.
For hard numbers, I'll look at two Debian 8 systemd systems I have in front of me: a shell server and a locked-down diskless GUI kiosk. Basic Debian 8 install, w/o GUI, w/ NFS client, w/ ISC NTP client: root@zygon:~# systemctl list-units | wc -l 89 root@zygon:~# systemctl list-unit-files | wc -l 208 Debian 8 XFCE kiosk, custom units: # In-house services disc-snitchd.service e-s-c.service firewall.service tablet-snitchd.service udev.service usb-snitchd.service zramon.service # Bug fixes (rewritten / patched) display-manager.service multi-user.target nslcd.service prayer.service prayer.socket remote-fs.target rpcbind.service srv-share.mount srv-tv.mount statd.service unscd.service xdm.service # Masking/deleting unwanted units # (These are mostly things that were separate opt-in packages in Debian 7, # but are now opt-out parts of the Debian 8 systemd core package.) removed 'lib/systemd/system/cryptdisks-early.service' removed 'lib/systemd/system/cryptdisks.service' removed 'lib/systemd/system/cryptsetup-pre.target' removed 'lib/systemd/system/cryptsetup.target' removed 'lib/systemd/system/multi-user.target.wants/systemd-ask-password-wall.path' removed 'lib/systemd/system/sysinit.target.wants/cryptsetup.target' removed 'lib/systemd/system/sysinit.target.wants/systemd-ask-password-console.path' removed 'lib/systemd/system/systemd-ask-password-console.path' removed 'lib/systemd/system/systemd-ask-password-console.service' removed 'lib/systemd/system/systemd-ask-password-plymouth.path' removed 'lib/systemd/system/systemd-ask-password-plymouth.service' removed 'lib/systemd/system/systemd-ask-password-wall.path' removed 'lib/systemd/system/systemd-ask-password-wall.service' removed 'lib/systemd/system/container-getty@.service' removed 'lib/systemd/system/dbus-org.freedesktop.machine1.service' removed 'lib/systemd/system/machine.slice' removed 'lib/systemd/system/systemd-machined.service' removed 'lib/systemd/system/systemd-nspawn@.service' removed 'etc/systemd/system/getty.target.wants/getty@tty1.service' removed directory: 'etc/systemd/system/getty.target.wants' removed 'lib/systemd/system/autovt@.service' removed 'lib/systemd/system/console-getty.service' removed 'lib/systemd/system/console-shell.service' removed 'lib/systemd/system/debug-shell.service' removed 'lib/systemd/system/emergency.service' removed 'lib/systemd/system/emergency.target' removed 'lib/systemd/system/getty-static.service' removed 'lib/systemd/system/getty.target' removed 'lib/systemd/system/getty.target.wants/getty-static.service' removed directory: 'lib/systemd/system/getty.target.wants' removed 'lib/systemd/system/getty@.service' removed 'lib/systemd/system/multi-user.target.wants/getty.target' removed 'lib/systemd/system/rescue.service' removed 'lib/systemd/system/rescue.target' removed 'lib/systemd/system/rescue.target.wants/systemd-update-utmp-runlevel.service' removed directory: 'lib/systemd/system/rescue.target.wants' removed 'lib/systemd/system/serial-getty@.service' removed 'lib/systemd/system/sys-kernel-debug.mount' removed 'lib/systemd/system/sysinit.target.wants/sys-kernel-debug.mount' removed 'lib/systemd/system/user.slice' removed 'lib/systemd/system/user@.service' removed 'lib/systemd/system/hibernate.target' removed 'lib/systemd/system/hybrid-sleep.target' removed 'lib/systemd/system/sleep.target' removed 'lib/systemd/system/suspend.target' removed 'lib/systemd/system/systemd-hibernate.service' removed 'lib/systemd/system/systemd-hybrid-sleep.service' removed 'lib/systemd/system/systemd-suspend.service' removed 'lib/systemd/system/bluetooth.target' removed 'lib/systemd/system/smartcard.target' removed 'lib/systemd/system/systemd-rfkill@.service' removed 'lib/systemd/system/system-update.target' removed 'lib/systemd/system/ifup@.service' removed 'etc/systemd/system/multi-user.target.wants/quotarpc.service' removed 'etc/systemd/system/sysinit.target.wants/quota.service' removed 'lib/systemd/system/alsa-restore.service' removed 'lib/systemd/system/alsa-state.service' removed 'lib/systemd/system/alsa-store.service' removed 'lib/systemd/system/alsa-utils.service' removed 'lib/systemd/system/basic.target.wants/alsa-restore.service' removed 'lib/systemd/system/basic.target.wants/alsa-state.service' removed 'lib/systemd/system/dev-mqueue.mount' removed 'lib/systemd/system/network-online.target' removed 'lib/systemd/system/network-pre.target' removed 'lib/systemd/system/network.target' removed 'lib/systemd/system/networking.service.d/network-pre.conf' removed directory: 'lib/systemd/system/networking.service.d' removed 'lib/systemd/system/proc-sys-fs-binfmt_misc.automount' removed 'lib/systemd/system/proc-sys-fs-binfmt_misc.mount' removed 'lib/systemd/system/quota.service' removed 'lib/systemd/system/quotaon.service' removed 'lib/systemd/system/quotarpc.service' removed 'lib/systemd/system/shutdown.target.wants/alsa-store.service' removed 'lib/systemd/system/sys-kernel-config.mount' removed 'lib/systemd/system/sysinit.target.wants/dev-mqueue.mount' removed 'lib/systemd/system/sysinit.target.wants/proc-sys-fs-binfmt_misc.automount' removed 'lib/systemd/system/sysinit.target.wants/sys-kernel-config.mount' removed 'lib/systemd/system/sysinit.target.wants/systemd-binfmt.service' removed 'lib/systemd/system/sysinit.target.wants/systemd-journal-flush.service' removed 'lib/systemd/system/sysinit.target.wants/systemd-random-seed.service' removed 'lib/systemd/system/systemd-backlight@.service' removed 'lib/systemd/system/systemd-binfmt.service' removed 'lib/systemd/system/systemd-fsck-root.service' removed 'lib/systemd/system/systemd-fsck@.service' removed 'lib/systemd/system/systemd-journal-flush.service' removed 'lib/systemd/system/systemd-networkd-wait-online.service' removed 'lib/systemd/system/systemd-networkd.service' removed 'lib/systemd/system/systemd-quotacheck.service' removed 'lib/systemd/system/systemd-random-seed.service' removed 'lib/systemd/system/systemd-readahead-collect.service' removed 'lib/systemd/system/systemd-readahead-done.service' removed 'lib/systemd/system/systemd-readahead-done.timer' removed 'lib/systemd/system/systemd-readahead-drop.service' removed 'lib/systemd/system/systemd-readahead-replay.service' removed 'lib/systemd/system/systemd-resolved.service' removed 'lib/systemd/system/urandom.service' removed 'lib/systemd/system/dbus-org.freedesktop.hostname1.service' removed 'lib/systemd/system/systemd-hostnamed.service' removed 'lib/systemd/system/initrd-cleanup.service' removed 'lib/systemd/system/initrd-fs.target' removed 'lib/systemd/system/initrd-parse-etc.service' removed 'lib/systemd/system/initrd-root-fs.target' removed 'lib/systemd/system/initrd-switch-root.service' removed 'lib/systemd/system/initrd-switch-root.target' removed 'lib/systemd/system/initrd-switch-root.target.wants/plymouth-start.service' removed 'lib/systemd/system/initrd-switch-root.target.wants/plymouth-switch-root.service' removed directory: 'lib/systemd/system/initrd-switch-root.target.wants' removed 'lib/systemd/system/initrd-udevadm-cleanup-db.service' removed 'lib/systemd/system/initrd.target' removed 'lib/systemd/system/plymouth-switch-root.service' removed 'lib/systemd/system/plymouth-start.service' removed 'lib/systemd/system/sysinit.target.wants/plymouth-start.service' removed 'lib/systemd/system/debian-fixup.service' removed 'lib/systemd/system/sysinit.target.wants/debian-fixup.service' removed 'lib/systemd/system/halt-local.service' removed 'lib/systemd/system/rc-local.service' removed 'lib/systemd/system/rc.local.service' removed 'lib/systemd/system/mail-transport-agent.target' removed 'lib/systemd/system/nss-lookup.target' removed 'lib/systemd/system/rpcbind.target' removed 'lib/systemd/system/bootlogd.service' removed 'lib/systemd/system/bootlogs.service' removed 'lib/systemd/system/bootmisc.service' removed 'lib/systemd/system/checkfs.service' removed 'lib/systemd/system/checkroot-bootclean.service' removed 'lib/systemd/system/checkroot.service' removed 'lib/systemd/system/fuse.service' removed 'lib/systemd/system/halt.service' removed 'lib/systemd/system/hostname.service' removed 'lib/systemd/system/hwclock.service' removed 'lib/systemd/system/hwclockfirst.service' removed 'lib/systemd/system/killprocs.service' removed 'lib/systemd/system/kmod.service' removed 'lib/systemd/system/module-init-tools.service' removed 'lib/systemd/system/motd.service' removed 'lib/systemd/system/mountall-bootclean.service' removed 'lib/systemd/system/mountall.service' removed 'lib/systemd/system/mountdevsubfs.service' removed 'lib/systemd/system/mountkernfs.service' removed 'lib/systemd/system/mountnfs-bootclean.service' removed 'lib/systemd/system/mountnfs.service' removed 'lib/systemd/system/procps.service' removed 'lib/systemd/system/reboot.service' removed 'lib/systemd/system/rmnologin.service' removed 'lib/systemd/system/sendsigs.service' removed 'lib/systemd/system/single.service' removed 'lib/systemd/system/stop-bootlogd-single.service' removed 'lib/systemd/system/stop-bootlogd.service' removed 'lib/systemd/system/umountfs.service' removed 'lib/systemd/system/umountnfs.service' removed 'lib/systemd/system/umountroot.service' removed 'lib/systemd/system/x11-common.service' removed 'etc/systemd/system/halt.target.wants/hwclock-save.service' removed 'etc/systemd/system/poweroff.target.wants/hwclock-save.service' removed 'etc/systemd/system/reboot.target.wants/hwclock-save.service' removed 'lib/systemd/system/hwclock-save.service' If we look at *all* of Debian, we can quickly see what needs unit files: -bash4$ zgrep --no-filename /srv/apt/debian*/dists/testing*/main/Contents-amd64.gz -E -e ^lib/systemd/system/ | grep -vE -e admin/systemd$ | sort -u | wc -l 944 -bash4$ zgrep --no-filename /srv/apt/debian*/dists/stable*/main/Contents-amd64.gz -E -e ^lib/systemd/system/ | grep -vE -e admin/systemd$ | sort -u | wc -l 426 -bash4$ zgrep --no-filename /srv/apt/debian*/dists/stable*/main/Contents-amd64.gz -E -e ^etc/init.d/ | grep -vE -e admin/systemd$ | sort -u | wc -l 1165 -bash4$ zgrep --no-filename /srv/apt/debian*/dists/oldstable*/main/Contents-amd64.gz -E -e ^etc/init.d/ | grep -vE -e admin/systemd$ | sort -u | wc -l 1080 i.e. to fully support a new init system on Debian, you need to write around a thousand services. When Debian 8 was released, about half the packages had native systemd units, the other half relied on systemd's partial sysvinit backcompat. By today's Debian 9, almost all have native units.
PPS: systemd really wants to be in charge of the initrd, too.
I have no problem with it wanting. ;->
(With luck, my next server build won't need an initrd. I'm going to see if I can just compile in what the machine needs.)
I trust you already know about make localmodconfig / localyesconfig and LSMOD=./lsmod-otherhost-stdout.txt I've tried this in the past and it mostly works. The main reason to keep an initrd around in such cases is when the root filesystem is on an LUKS or RAID or btrfs or zfs. It's also convenient for emergency debugging, but >meh< you can always just keep a live CD in /boot or the UEFI ESP.
though for my own uses on servers, it looks _way_ overengineered.
Strongly recommend you check out busybox mdev, then. I've had good reports from a couple of friends with, um, similar temperaments to yours :-)
What I'll be using on my upcoming server rebuild will depend on testing, but the first thing I'll be trying is just plain static /dev . If there turn out to be problems with that, I'd have a go with mdev -- and I strongly doubt that there'll be any need whatsoever for anything more complicated than that.
Ah yeah purely static /dev should be about as good, for you. IIRC mdev is mainly about letting the kernel auto-create devices in /dev (devfs?) and then mdev just loosening the permissions, e.g. "chgrp -h audio /dev/snd/*". If yours is literally static (& persistent), and the kernel isn't creating new devices, you can probably just do that by hand. I don't remember why I dismissed that for my own schemes...
Back a number of years ago on Don Marti's linux-elitists mailing list, I remember politely questioning whether then-new udev was actually necessary, especially on servers, and Greg K-H rather hotly responded with a well-practiced tale of how it was needed so that his daughter could connect and disconnect USB printers without needing to wield root authority.
I was impressed by the passion in his defence of his daughter's interests, so much so that I was very gentle when I told Greg that his daughter would not be permitted to connect her USB printer to my server.
Thank you, I enjoyed that anecdote immensely :-)