From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.sysutils.supervision.general/1608 Path: news.gmane.org!not-for-mail From: Bernhard Graf Newsgroups: gmane.comp.sysutils.supervision.general Subject: Re: using runit as init Date: Thu, 10 Jan 2008 10:20:51 +0100 Message-ID: <200801101020.51580.list-supervision@augensalat.de> References: <200801032151.21524.list-supervision@augensalat.de> <200801100006.54381.list-supervision@augensalat.de> <200801091634.06623.mike@geekgene.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1199956861 17437 80.91.229.12 (10 Jan 2008 09:21:01 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 10 Jan 2008 09:21:01 +0000 (UTC) To: supervision@list.skarnet.org Original-X-From: supervision-return-1843-gcsg-supervision=m.gmane.org@list.skarnet.org Thu Jan 10 10:21:22 2008 Return-path: Envelope-to: gcsg-supervision@gmane.org Original-Received: from antah.skarnet.org ([212.85.147.14]) by lo.gmane.org with smtp (Exim 4.50) id 1JCtbB-0000Mr-As for gcsg-supervision@gmane.org; Thu, 10 Jan 2008 10:21:17 +0100 Original-Received: (qmail 31961 invoked by uid 76); 10 Jan 2008 09:21:00 -0000 Mailing-List: contact supervision-help@list.skarnet.org; run by ezmlm List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Archive: Original-Received: (qmail 31955 invoked from network); 10 Jan 2008 09:21:00 -0000 User-Agent: KMail/1.9.1 In-Reply-To: <200801091634.06623.mike@geekgene.com> Content-Disposition: inline Xref: news.gmane.org gmane.comp.sysutils.supervision.general:1608 Archived-At: On Thursday 10 January 2008 00:34, Mike Buland wrote: > Regaurding service dependancies, Richard Gooch's method is actually > unnecesarry in a sytem such as runit, and service dependancy is > already handled in an almost identicle way, but with less system > overhead. > > At the begining of a run script just start the services you depend > on, and exit if the sv command returns non-zero. I.e. from hal's run > script: sv start /etc/service/dbus || exit 1 I tend to object: You mean starting a bunch of programs over and over again, because many of them quit immediatly is less system overhead than starting programs that pause until those programs they depend on are started? Also imagine one service A that depends on service B, C and D. You have to put the checks for availability of B, C, D into A's run script. In a complex system more services depend on B, C and D and probably others. You have to put the same checks (and others) in all those services. Also those checks tend to be more complicated than just saying "need B C D". > As far as running SysV init style scripts, usually handled on modern > linux systems (redhat, slackware, debian, etc) by the master rc > script, are you suggesting that rc, to control runlevel changes be > placed in it's own service, or that each SysV "service" gets it's own > runit service? The latter. > If you're referring to the later case, you'll need to do a lot more > work to synchronize the rc scripts and the runit services, I can't > imagine how just making symlinks between the init.d runlevel > directories and runsvdir service directories will actually work. In current distributions (hopefully) an init.d script is configured using a program that sets the appropriate symlinks. The information for run levels and dependencies are taken from the init scripts [5], [6]. If you'd replace init by runit, you had to replace those installtion programs as well. This installer would install the example from [5] as: # ls -l /etc/runit/sv/lsb-ourdb -rw------- 1 root root 0 Jan 10 09:00 initd -rw------- 1 root root 30 Jan 10 09:00 need lrwxrwxrwx 1 root root 19 Jan 10 09:00 run -> /etc/init.d/lsb-ourdb # cat /etc/runit/sv/lsb-ourdb/need $local_fs $network $remote_fs # ls -l /etc/runit/runsvdir/2/lsb-ourdb lrwxrwxrwx 1 root root 19 Jan 10 09:00 /etc/runit/runsvdir/2/lsb-ourdb -> /etc/runit/sv/lsb-ourdb # ls -l /etc/runit/runsvdir/3/lsb-ourdb lrwxrwxrwx 1 root root 19 Jan 10 09:00 /etc/runit/runsvdir/3/lsb-ourdb -> /etc/runit/sv/lsb-ourdb # ls -l /etc/runit/runsvdir/4/lsb-ourdb lrwxrwxrwx 1 root root 19 Jan 10 09:00 /etc/runit/runsvdir/4/lsb-ourdb -> /etc/runit/sv/lsb-ourdb # ls -l /etc/runit/runsvdir/5/lsb-ourdb lrwxrwxrwx 1 root root 19 Jan 10 09:00 /etc/runit/runsvdir/5/lsb-ourdb -> /etc/runit/sv/lsb-ourdb File initd is a flag for runit to run the script with argument "start" first, then wait for SIGINT and run the script with argument "stop". File need contains services that runit has to be started first. "$service" for "meta services" as set with "provide" in Gooch's concept. > Finally, if you really do want to start an rc script and make it > appear as though it were a normal runit system service, then I would > reccomend starting it in a run script, then executing a command that > blocks forever. The service will use effectively no CPU time, but > will stay running, forever. Then you can call the corrisponding rc 6 > or whatever you want in the finish script of the service. I will try this, and see how far I get... [5] http://refspecs.linux-foundation.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html [6] http://refspecs.linux-foundation.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/initsrcinstrm.html -- Bernhard Graf