supervision - discussion about system services, daemon supervision, init, runlevel management, and tools such as s6 and runit
 help / color / mirror / Atom feed
From: Mike Buland <mike@geekgene.com>
To: supervision@list.skarnet.org
Subject: Re: using runit as init
Date: Thu, 3 Jan 2008 17:22:26 -0700	[thread overview]
Message-ID: <200801031722.26992.mike@geekgene.com> (raw)
In-Reply-To: <200801032151.21524.list-supervision@augensalat.de>

In general, if you want to retain init-style runlevels, then you don't want to 
replace SysV init.  I have switched to runit entirely, it manages every 
service, and it does indeed support "runlevels."  See 
http://smarden.org/runit/runsvchdir.8.html for details.  Each runit runlevel 
is really just another service directory, runsvchdir changes which service 
directory you are using.  the runit "init" program is provided mainly for 
compatibility.

There is no reason for runlevels to be numbered, and the kernel offers no 
support for runlevels, nor do any bootloaders.  When you pass 2, 3, 4, S, 
etc. to the kernel, it is ignored as an unrecognized parameter, but made 
available to running processes a number of ways.  Runit makes the commandline 
as well as any variables that are set on the kernel commandline available to 
the script 1 (and maybe 2 and 3, but I use it in 1).  Therefore if you set a 
variable in the bootloader on the kernel commandline named "runlevel" then 
you can use that in script 1 to change your runlevel.

However, I would say based on the way you are using runit as process 1, you 
would probably be better off sticking with sysvinit and adding runsvdir to 
your inittab (a script very similar to the example script 2 provided with 
runit is just what you want).

As for the runlevel code, I got this from this very list a long time ago, give 
it a shot in script 1:

# Set runlevel to:
# - single       if kernel has param: S
# - RUNLEVELNAME if kernel has param: runlevel=RUNLEVELNAME
# - default      if kernel has no params or unable to set requested runlevel
grep -q '\(^\| \)S\( \|$\)' /proc/cmdline && runlevel='single'
runsvchdir ${runlevel:-default} || runsvchdir default

This wored great for me, then in grub I added "runlevel=X" 
or "runlevel=console"

And finally, you want the normal setup, but point /var/service 
to /etc/runit/runsvdir/current, if it's not there, it will be created when 
runsvchdir is called, or you can create it yourself, it's a symlink to the 
current service directory.  Each directory in  /etc/runit/runsvdir is a 
complete (and normal) service directory.

utmp/wtmp support is done, I believe, through an external program, check out 
the getty*/finish scripts that are provided with the default distribution.

--Mike

On Thursday 03 January 2008 01:51:21 pm Bernhard Graf wrote:
> Hi list, happy new year!
>
> I'm playing a little with runit as replacement for SysV init as roughly
> described in http://smarden.org/runit/replaceinit.html .
>
> I adjusted the three runit stage scripts to play with an OpenSUSE 10.3
> Linux system. So far runit only supervises the (min)gettys, whereas all
> services that come with the distribution are still managed
> from /etc/init/rc that gets executed at the end of /etc/runit/1 .
> The whole thing is wrapped into two RPMs (runit and
> runit-sysvinit-compat) that replace the sysvinit RPM installation.
>
> Seems to work quite well, provided that I didn't do much more testing
> than boot, reboot, halt for now.
>
> What worries me now is a smooth transition for running systems from init
> to runit.
>
> In general I'd prefer to leave most service where they are, and just
> supervise certain ones, e.g. ssh, web server, all the djb s/w and
> custom daemons like FastCGI processes.
>
> The problem is that runit makes (nearly) no effort to support a system
> with supervised and "traditional" non-supervised daemons.
> Perhaps this is also the reason why runit didn't gain much attention in
> all the years, because concept and code are very well done AFAICT.
>
> At the moment I'm struggling with these questions:
>
> - A way to boot into a certain runlevel (say "init xxx" at boot prompt).
>   runit and runit-init don't care about these, where as (Smoorenburg's)
>   init passes the current runlevel in environment variable RUNLEVEL.
> - Changing runlevels. There is no way to say "init 3" anymore.
>   runsvchdir doesn't care about the SysV init scripts that are started
>   in /etc/runit/1.
>   runit-init only supports SysV init args "0" and "6" when not runing as
>   process 1.
> - utmp/wtmp support is missing completely, besides utmpset which should
>   be named utmpclr or so.
>
> Maybe somebody can give some advice or can share some example code or
> ideas.
>
> In case of interest and if someone has some public space at hand I would
> upload the SRPMs.



  reply	other threads:[~2008-01-04  0:22 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-03 20:51 Bernhard Graf
2008-01-04  0:22 ` Mike Buland [this message]
2008-01-05  0:06   ` Bernhard Graf
     [not found]   ` <12EC84FDD73F4BD8A78E7501EB19F1E2@home.internal>
2008-01-05  7:45     ` rehan khan
2008-01-05 23:17       ` Bernhard Graf
2008-01-08  7:11         ` Vincent Danen
2008-01-08 22:28           ` Bernhard Graf
2008-01-09  2:05             ` Vincent Danen
2008-01-09 23:06               ` Bernhard Graf
2008-01-09 23:34                 ` Mike Buland
2008-01-09 23:51                   ` Charlie Brady
2008-01-10  9:22                     ` Bernhard Graf
2008-01-10  9:20                   ` Bernhard Graf
2008-01-10 20:06                     ` Mike Buland
2008-01-11  7:58                       ` Bernhard Graf
2008-01-11 14:30                         ` Mike Buland
2008-01-12 10:18                           ` Bernhard Graf
2008-01-12 17:13                             ` supervising (Re: using runit as init) Charlie Brady
2008-01-12 17:32                               ` supervising mysql (Re: supervising (Re: using runit as init)) Charlie Brady
2008-01-13  4:40                             ` using runit as init Vincent Danen
2008-01-13 15:36                               ` Charlie Brady
2008-01-13 18:28                                 ` Mike Buland
2008-01-13 18:39                                   ` Charlie Brady
2008-01-13 18:49                                     ` Mike Buland
2008-01-14  3:55                                       ` Vincent Danen
2008-01-14 15:11                                         ` Charlie Brady
2008-01-14 15:21                                           ` Vincent Danen
     [not found]                                     ` <6A64B0D384404190ACB76E0A376CD148@home.internal>
2008-01-13 21:06                                       ` rehan khan
2008-01-14  3:53                                 ` Vincent Danen
     [not found]                             ` <CDFFB8AF013F4762AE02CF6A1BDCB27A@home.internal>
2008-01-13 10:35                               ` rehan khan
2008-01-14  3:50                                 ` Vincent Danen
2008-01-13 18:52                             ` Mike Buland
     [not found]                     ` <85040AD9CA634253A8FDB9F7DA6BD200@home.internal>
2008-01-10 22:08                       ` rehan khan
2008-01-11  1:28                         ` Charlie Brady
     [not found]                   ` <C1A5323F485E4A75B75ADB58B664E35E@home.internal>
2008-01-10 21:56                     ` rehan khan
2008-01-09 23:35                 ` KORN Andras
2008-01-10  8:39                   ` Bernhard Graf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200801031722.26992.mike@geekgene.com \
    --to=mike@geekgene.com \
    --cc=supervision@list.skarnet.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).