Booting with runit
The first tutorial coming from my custom-distro experiments. Since it's a good idea to start at the beginning, here is... Booting with runit.
The first tutorial coming from my custom-distro experiments. Since it's a good idea to start at the beginning, here is... Booting with runit.
I was curious about something. Is there a better way to generalize services?
For instance, assume a service x, with requirements a and b. Assume there are more than one services which can satisfy these requirements. All of them are authored and distributed by separate groups and so there isn't necessarily a lot of awareness about each other.
It seems to me that service x would explicitly be required to know about services that fulfill the requirements a and b. Or meta-services are made, called a and b, which can then be used by service x. Neither of these seem particularly nice.
Is there a facility for services to query the system for fulfillment of a set of requirements? Requirements would of course require standardized names, but that shouldn't be too hard. Administrators could either pass the service an argument telling it to explicitly fulfill all or some of its requirements with a particular service(s) or could setup a prioritized list of which services to use. Intelligent defaults will be a must and likely up to the distribution.
I like the metaservices stuff better.
Suppose you have qmail and sendmail, and a service that requires a mail server, but both would do.
You install the qmail service in /var/qmail/service, sendmail in /var/sendmail/service and link the right one to /var/service/mail
Then, make stuff depend on /var/service/mail
Standardized service names are part of the LSB, too (I think), so chosing them should be simple.
"if someone knows how to get the name of the parent folder in shell scripts, we can make that really universal ;-)"
I am no guru, so dont trust me on this:
Here is a little piece of code I hacked together that seems to do just that. Kick me, if I am wrong ;)
echo `cd .. && pwd | sed 's/.*///'`
Parent dir in shell:
in zsh you can use ${${PWD%/*}##*/}
in POSIX shell you'll have to use a tmp var:
foo=${PWD%/*}
foo=${foo##*/}
(assuming you get a PWD var ... if not $(pwd) works)
Ok, here's my version ;-)
parent=`cd .. ; basename $(pwd)`
Will fix the article.
Annvix uses runit by default for all services and comes with a "chkconfig-like" utility called srv for handling the stopping/starting/adding/deleting of services to make things a little simpler.
Every service in Annvix runs via runit although in stage 1 it still calls what few initscripts there are (rather than putting it all into /etc/runit/1); this will change eventually.
To complement the examples on the runit site, anyone can poke through the Annvix CVS to view the run scripts we have.
(I think Annvix is the only distro that is fully runit-enabled out of the box).
Okay, meta-services seem more bare-able, now. Considering that there are standards via the LSB and there could be some sane ways to manage it.
Hi!
I think is missing one file. The /etc/runit/3. It is responsable for the shutdown.