• ZephrC@lemm.ee
    link
    fedilink
    arrow-up
    0
    ·
    8 months ago

    Sure, that seems pretty reasonable. Here’s the init script for sddm:

    #!/usr/bin/openrc-run
    
    supervisor=supervise-daemon
    command="/usr/bin/sddm"
    
    depend() {
        need localmount
    
        after bootmisc consolefont modules netmount
        after ypbind autofs openvpn gpm lircmd
        after quota keymaps
        before alsasound
        want logind
        use xfs
    
        provide xdm display-manager
    }
    

    That’s it. That’s the whole thing.

    That’s a pretty simple one though, so here’s Alsa. It’s a more complex one:

    code
    #!/usr/bin/openrc-run
    # Copyright 1999-2019 Gentoo Authors
    # Distributed under the terms of the GNU General Public License v2
    
    alsastatedir=/var/lib/alsa
    alsascrdir=/etc/alsa.d
    alsahomedir=/run/alsasound
    
    extra_commands="save restore"
    
    depend() {
    	need localmount
    	after bootmisc modules isapnp coldplug hotplug
    }
    
    restore() {
    	ebegin "Restoring Mixer Levels"
    
    	checkpath -q -d -m 0700 -o root:root ${alsahomedir} || return 1
    
    	if [ ! -r "${alsastatedir}/asound.state" ] ; then
    		ewarn "No mixer config in ${alsastatedir}/asound.state, you have to unmute your card!"
    		eend 0
    		return 0
    	fi
    
    	local cards="$(sed -n -e 's/^ *\([[:digit:]]*\) .*/\1/p' /proc/asound/cards)"
    	local CARDNUM
    	for cardnum in ${cards}; do
    		[ -e /dev/snd/controlC${cardnum} ] || sleep 2
    		[ -e /dev/snd/controlC${cardnum} ] || sleep 2
    		[ -e /dev/snd/controlC${cardnum} ] || sleep 2
    		[ -e /dev/snd/controlC${cardnum} ] || sleep 2
    		alsactl -E HOME="${alsahomedir}" -I -f "${alsastatedir}/asound.state" restore ${cardnum} \
    			|| ewarn "Errors while restoring defaults, ignoring"
    	done
    
    	for ossfile in "${alsastatedir}"/oss/card*_pcm* ; do
    		[ -e "${ossfile}" ] || continue
    		# We use cat because I'm not sure if cp works properly on /proc
    		local procfile=${ossfile##${alsastatedir}/oss}
    		procfile="$(echo "${procfile}" | sed -e 's,_,/,g')"
    		if [ -e /proc/asound/"${procfile}"/oss ] ; then
    		    cat "${ossfile}" > /proc/asound/"${procfile}"/oss 
    		fi
    	done
    
    	eend 0
    }
    
    save() {
    	ebegin "Storing ALSA Mixer Levels"
    
    	checkpath -q -d -m 0700 -o root:root ${alsahomedir} || return 1
    
    	mkdir -p "${alsastatedir}"
    	if ! alsactl -E HOME="${alsahomedir}" -f "${alsastatedir}/asound.state" store; then
    		eerror "Error saving levels."
    		eend 1
    		return 1
    	fi
    
    	for ossfile in /proc/asound/card*/pcm*/oss; do
    		[ -e "${ossfile}" ] || continue
    		local device=${ossfile##/proc/asound/} ; device=${device%%/oss}
    		device="$(echo "${device}" | sed -e 's,/,_,g')"
    		mkdir -p "${alsastatedir}/oss/"
    		cp "${ossfile}" "${alsastatedir}/oss/${device}"
    	done
    
    	eend 0
    }
    
    start() {
    	if [ "${RESTORE_ON_START}" = "yes" ]; then
    		restore
    	fi
    
    	return 0
    }
    
    stop() {
    	if [ "${SAVE_ON_STOP}" = "yes" ]; then
    		save
    	fi
    	return 0
    }
    

    That’s definitely longer than a systemd service, but you’d have to write an awful lot of them to be more code than all of systemd. Overall the entire /etc/init.d folder on my PC where all the init scripts even for the stuff I’m not using are stored is a grand total of 147.7 KiB. Not exactly an unmanageable amount of code, in my humble opinion.

    • waitmarks@lemmy.world
      link
      fedilink
      English
      arrow-up
      1
      ·
      8 months ago

      Its certainly easier to read than most old init scripts and I can see why some distros and openbsd would pick it over systemd for more control. I’m not likely to pick a distro that uses it anytime soon, but i can see why some do.