Hello,
Am Freitag, 16. Dezember 2011 schrieb Cristian Rodríguez:
On 17/12/11 17:41, Bernhard M. Wiedemann wrote:
As I understood it, native unit files are not needed for the goal of fully switching to systemd and dropping sysvinit - so this step (and all other steps about /etc/init.d/ replacement) should be optional.
no, there should not be optional, as does solve the problem of supporting two different ways to do things.
So I have to add this line to %build: mv $BUILDROOT/etc/init.d/boot.apparmor $BUILDROOT/lib/apparmor/ and to add an apparmor.service file that calls /lib/apparmor/boot.apparmor start
Mission accomplished, according to your proposal, and rpmlint will also be happy *eg*
Don't get me wrong: I fully understand that maintaining systemd _and_ sysvinit will become a pain, but I don't see a point in forcing everybody to migrate to *.service files instantly. (And I'm saying this as someone who really prefers the short *.service files over the quite long and verbose initscripts because the initscripts contain lots of duplicated code.)
The migration might make sense (and is easy) for starting programs where you can "write" an initscript with sed 's/FOO/mydaemon' < /etc/init.d/skeleton > /etc/init.d/mydaemon
OTOH, there are init scripts like boot.apparmor which don't start a daemon, but instead do lots of other things (like loading all AppArmor profiles in /etc/apparmor.d/). AFAIK I _have to_ use a script for doing that, and it would probably double the maintenance effort if you force me not to use the existing init script.
Now tell me how to do this in a *.service file without using a script (extremely simplified version of loading the AppArmor profiles):
ls -1 /etc/apparmor.d/ | grep -v 'rpmnew$|rpmold$' | \ while read profile ; do apparmor_parser "/etc/apparmor.d/$profile" done
To avoid over-simplifying it, let me just mention that you have to use apparmor_parser -r "$profile" on reload, except if a profile was not loaded previously (which you can find out by reading somewhere in /proc). And you have to unload all profiles listed somewhere in /proc on "stop".
Is there a better solution than calling the good old initscript? ;-)
I already mentioned the easiest "fix" I could use at the beginning of the mail, but IMHO it's pointless because systemd supports sysvinit- style initscripts, and we won't get rid of all of them in the next years - even if there are "only" some external packages that still come with initscripts, we can't drop the backwards compatibility.
There is more documentation, than the old system ever had, including full grown how-tos to convert both units and daemons, example c code, libraries, tools, whatever..
Yes, but OTOH the old initscripts are plain shell code and therefore grep-able and somehow self-documenting.
Additionally there's the usual (non)argument that everybody knows initscripts quite well, so nobody needs documentation. (I know that learning new things is part of the game, that's why I wrote "(non)argument" ;-)
Sorry if this mail sounds like a flame, I'm probably influenced by the 4 flames on my advent wreath ;-))
Regards,
Christian Boltz