Hi,

runsvdir and runit-init work fine so far on i386 (-current), even if
I find it weird that upstream goes back to /service - I just symlinked
/service to /var/service, the ''install -d /service'' step in rc_pre()
does respect that.

etc/openbsd/3 would obviously need patching to work properly out of the
box (it calls sv(8) while this one isn't in PATH); perl -pie can help
but caring about this could be interpreted as "remplacing init with
runit is supported", so... :)

Attached is a lightly tested patch to handle ctrlaltdel.  The OpenBSD
kernel sends pid 1 SIGUSR1, not SIGINT, the patch basically makes runit
consider both as equivalent; that is different from the way our init
handles them but that's good enough at least for my use case.  It would
of course need more tweaking before being sent upstream.

-- 
Jérémie Courrèges-Anglas
GPG Key fingerprint: 61DB D9A0 00A4 67CF 2A90  8961 6191 8FBF 06A1 1494
diff -pruN /usr/ports/sysutils/runit/patches/patch-src_runit_c /usr/ports/mystuff/sysutils/runit/patches/patch-src_runit_c
--- /usr/ports/sysutils/runit/patches/patch-src_runit_c	Thu Jan  1 01:00:00 1970
+++ /usr/ports/mystuff/sysutils/runit/patches/patch-src_runit_c	Mon Dec 10 04:03:46 2012
@@ -0,0 +1,38 @@
+$OpenBSD$
+Add SIGUSR1 support.
+--- src/runit.c.orig	Sun Dec  9 19:35:19 2012
++++ src/runit.c	Sun Dec  9 19:38:42 2012
+@@ -66,6 +66,8 @@ int main (int argc, const char * const *argv, char * c
+   sig_block(sig_hangup);
+   sig_block(sig_int);
+   sig_catch(sig_int, sig_int_handler);
++  sig_block(sig_usr1);
++  sig_catch(sig_usr1, sig_int_handler);
+   sig_block(sig_pipe);
+   sig_block(sig_term);
+ 
+@@ -129,6 +131,8 @@ int main (int argc, const char * const *argv, char * c
+       sig_unblock(sig_hangup);
+       sig_unblock(sig_int);
+       sig_uncatch(sig_int);
++      sig_unblock(sig_usr1);
++      sig_uncatch(sig_usr1);
+       sig_unblock(sig_pipe);
+       sig_unblock(sig_term);
+             
+@@ -145,6 +149,7 @@ int main (int argc, const char * const *argv, char * c
+       sig_unblock(sig_child);
+       sig_unblock(sig_cont);
+       sig_unblock(sig_int);
++      sig_unblock(sig_usr1);
+ #ifdef IOPAUSE_POLL
+       poll(&x, 1, 14000);
+ #else
+@@ -156,6 +161,7 @@ int main (int argc, const char * const *argv, char * c
+       sig_block(sig_cont);
+       sig_block(sig_child);
+       sig_block(sig_int);
++      sig_block(sig_usr1);
+       
+       while (read(selfpipe[0], &ch, 1) == 1) {}
+       while ((child =wait_nohang(&wstat)) > 0)
diff -pruN /usr/ports/sysutils/runit/patches/patch-src_sig_c /usr/ports/mystuff/sysutils/runit/patches/patch-src_sig_c
--- /usr/ports/sysutils/runit/patches/patch-src_sig_c	Thu Jan  1 01:00:00 1970
+++ /usr/ports/mystuff/sysutils/runit/patches/patch-src_sig_c	Mon Dec 10 04:03:58 2012
@@ -0,0 +1,12 @@
+$OpenBSD$
+Add SIGUSR1 support.
+--- src/sig.c.orig	Sun Oct  4 22:44:02 2009
++++ src/sig.c	Sun Dec  9 19:31:42 2012
+@@ -10,6 +10,7 @@ int sig_hangup = SIGHUP;
+ int sig_int = SIGINT;
+ int sig_pipe = SIGPIPE;
+ int sig_term = SIGTERM;
++int sig_usr1 = SIGUSR1;
+ 
+ void (*sig_defaulthandler)() = SIG_DFL;
+ void (*sig_ignorehandler)() = SIG_IGN;
diff -pruN /usr/ports/sysutils/runit/patches/patch-src_sig_h /usr/ports/mystuff/sysutils/runit/patches/patch-src_sig_h
--- /usr/ports/sysutils/runit/patches/patch-src_sig_h	Thu Jan  1 01:00:00 1970
+++ /usr/ports/mystuff/sysutils/runit/patches/patch-src_sig_h	Mon Dec 10 04:04:04 2012
@@ -0,0 +1,12 @@
+$OpenBSD$
+Add SIGUSR1 support.
+--- src/sig.h.orig	Sun Dec  9 19:48:13 2012
++++ src/sig.h	Sun Dec  9 19:48:04 2012
+@@ -10,6 +10,7 @@ extern int sig_hangup;
+ extern int sig_int;
+ extern int sig_pipe;
+ extern int sig_term;
++extern int sig_usr1;
+ 
+ extern void (*sig_defaulthandler)();
+ extern void (*sig_ignorehandler)();

Reply via email to