diff -Naur busybox.orig/include/applets.h busybox/include/applets.h
--- busybox.orig/include/applets.h	2008-07-19 14:21:05 +0000
+++ busybox/include/applets.h	2008-08-16 18:17:07 +0000
@@ -187,6 +187,7 @@
 USE_IFUPDOWN(APPLET_ODDNAME(ifup, ifupdown, _BB_DIR_SBIN, _BB_SUID_NEVER, ifup))
 USE_INETD(APPLET(inetd, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
 USE_INIT(APPLET(init, _BB_DIR_SBIN, _BB_SUID_NEVER))
+USE_RUNIT(APPLET_ODDNAME(init, runit, _BB_DIR_SBIN, _BB_SUID_NEVER, init))
 USE_INOTIFYD(APPLET(inotifyd, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_INSMOD(APPLET(insmod, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_MODPROBE_SMALL(APPLET_ODDNAME(insmod, modprobe, _BB_DIR_SBIN, _BB_SUID_NEVER, modprobe))
@@ -279,6 +280,7 @@
 USE_PIVOT_ROOT(APPLET(pivot_root, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_PKILL(APPLET_ODDNAME(pkill, pgrep, _BB_DIR_USR_BIN, _BB_SUID_NEVER, pkill))
 USE_HALT(APPLET_ODDNAME(poweroff, halt, _BB_DIR_SBIN, _BB_SUID_NEVER, poweroff))
+USE_RUNIT(APPLET_ODDNAME(poweroff, runit, _BB_DIR_SBIN, _BB_SUID_NEVER, poweroff))
 USE_PRINTENV(APPLET(printenv, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_PRINTF(APPLET_NOFORK(printf, printf, _BB_DIR_USR_BIN, _BB_SUID_NEVER, printf))
 USE_PS(APPLET(ps, _BB_DIR_BIN, _BB_SUID_NEVER))
@@ -291,6 +293,7 @@
 USE_READPROFILE(APPLET(readprofile, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
 USE_REALPATH(APPLET(realpath, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_HALT(APPLET_ODDNAME(reboot, halt, _BB_DIR_SBIN, _BB_SUID_NEVER, reboot))
+USE_RUNIT(APPLET_ODDNAME(reboot, runit, _BB_DIR_SBIN, _BB_SUID_NEVER, reboot))
 USE_RENICE(APPLET(renice, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_RESET(APPLET(reset, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_RESIZE(APPLET(resize, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
@@ -305,6 +308,7 @@
 USE_RTCWAKE(APPLET(rtcwake, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_RUN_PARTS(APPLET_ODDNAME(run-parts, run_parts, _BB_DIR_BIN, _BB_SUID_NEVER, run_parts))
 USE_RUNCON(APPLET(runcon, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
+USE_RUNIT(APPLET(runit, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_RUNLEVEL(APPLET(runlevel, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_RUNSV(APPLET(runsv, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_RUNSVDIR(APPLET(runsvdir, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
diff -Naur busybox.orig/include/usage.h busybox/include/usage.h
--- busybox.orig/include/usage.h	2008-08-07 22:25:42 +0000
+++ busybox/include/usage.h	2008-08-16 18:17:07 +0000
@@ -3348,6 +3348,11 @@
      "\n	-l RNG	Levelrange" \
 	)
 
+#define runit_trivial_usage \
+       ""
+#define runit_full_usage "\n\n" \
+       "Startup system and services"
+
 #define run_parts_trivial_usage \
        "[-t] "USE_FEATURE_RUN_PARTS_FANCY("[-l] ")"[-a ARG] [-u MASK] DIRECTORY"
 #define run_parts_full_usage "\n\n" \
diff -Naur busybox.orig/init/Config.in busybox/init/Config.in
--- busybox.orig/init/Config.in	2008-07-22 23:36:30 +0000
+++ busybox/init/Config.in	2008-08-16 18:17:07 +0000
@@ -8,6 +8,7 @@
 config INIT
 	bool "init"
 	default n
+	depends on !RUNIT
 	select FEATURE_SYSLOG
 	help
 	  init is the first program run when the system boots.
@@ -99,6 +100,7 @@
 config HALT
 	bool "poweroff, halt, and reboot"
 	default n
+	depends on INIT
 	help
 	  Stop all processes and either halt, reboot, or power off the system.
 
diff -Naur busybox.orig/runit/Config.in busybox/runit/Config.in
--- busybox.orig/runit/Config.in	2008-07-15 22:00:55 +0000
+++ busybox/runit/Config.in	2008-08-16 18:17:07 +0000
@@ -5,6 +5,19 @@
 
 menu "Runit Utilities"
 
+config RUNIT
+	bool "runit, reboot, poweroff"
+	default n
+	help
+	  runit is alternate init.
+
+config FEATURE_RUNIT_VERBOSE
+	bool "debug messages"
+	default y
+	depends on RUNIT
+	help
+	  Print debug messages.
+
 config RUNSV
 	bool "runsv"
 	default n
diff -Naur busybox.orig/runit/Kbuild busybox/runit/Kbuild
--- busybox.orig/runit/Kbuild	2008-07-15 22:00:55 +0000
+++ busybox/runit/Kbuild	2008-08-16 18:17:07 +0000
@@ -5,6 +5,7 @@
 # Licensed under the GPL v2, see the file LICENSE in this tarball.
 
 lib-y:=
+lib-$(CONFIG_RUNIT) += runit.o
 lib-$(CONFIG_RUNSV) += runsv.o runit_lib.o
 lib-$(CONFIG_RUNSVDIR) += runsvdir.o runit_lib.o
 lib-$(CONFIG_SV) += sv.o runit_lib.o
diff -Naur busybox.orig/runit/runit.c busybox/runit/runit.c
--- busybox.orig/runit/runit.c	1970-01-01 00:00:00 +0000
+++ busybox/runit/runit.c	2008-08-16 18:17:07 +0000
@@ -0,0 +1,156 @@
+/*
+Copyright (c) 2001-2005, Gerrit Pape
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+   1. Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the author may not be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*
+ * Busybox version of Gerrit Pape's http://smarden.org/socklog/
+ *
+ * Stripped and busyboxed by Vladimir Dronnikov <dronnikov@gmail.com>
+*/
+
+#include "libbb.h"
+#include <sys/reboot.h>
+
+static void bb_signals_block(int sigs)
+{
+	int sig_no = 0;
+	int bit = 1;
+
+	while (sigs) {
+		if (sigs & bit) {
+			sigs &= ~bit;
+			sig_block(sig_no);
+		}
+		sig_no++;
+		bit <<= 1;
+	}
+}
+
+static void gain_console(void)
+{
+	int fd;
+	close(STDIN_FILENO);
+	fd = xopen(DEV_CONSOLE, O_RDWR);
+	if (fd != -1) {
+		dup2(fd, STDOUT_FILENO);
+		dup2(fd, STDERR_FILENO);
+	}
+}
+
+static pid_t pid;
+
+#define STAGE	"/etc/runit/0"
+#define STOPIT	"/etc/runit/stopit"
+#define REBOOT	"/etc/runit/reboot"
+
+static void sig_handler(int signo UNUSED_PARAM)
+{
+	if (execable_file(STOPIT)) {
+		sync();
+		kill(pid, SIGTERM);
+		kill(pid, SIGCONT);
+		sleep(3);
+		sync();
+		kill(pid, SIGKILL);
+		sleep(3);
+		sync();
+		//kill(-1, SIGKILL);
+	}
+}
+
+int runit_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+int runit_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
+{
+	char *c;
+#define stage (*c)
+
+	// check we are init or poweroff or reboot
+	if (1 != getpid()) {
+		// setup action
+		close(xopen3(STOPIT, O_CREAT | O_TRUNC, 0100));
+		close(xopen3(REBOOT, O_CREAT | O_TRUNC, ('p' == applet_name[0]) ? 0000 : 0100));
+		// notify init and bye!
+		if ('p' == applet_name[0] || 'e' == applet_name[1]) {
+			int opt;
+			int delay = 0;
+			opt_complementary = "d+";
+			opt = getopt32(argv, "d:nf", &delay); // nosync is ignored
+			if (delay)
+				sleep(delay);
+			if (opt & 4)
+				goto force;
+			kill(1, SIGCONT);
+			return EXIT_SUCCESS;
+		}
+		// init must be run as #1
+		bb_error_msg_and_die("pid != 1");
+	}
+
+	setsid();
+
+	// signals off
+	bb_signals_block(
+		(1<<SIGALRM) +
+		(1<<SIGHUP) +
+		(1<<SIGPIPE) +
+		(1<<SIGTERM) +
+		(1<<SIGINT)
+	);
+
+	// gain console
+	gain_console();
+
+	// run stages 1,2 and 3
+	*argv = xstrdup(STAGE);
+	c = argv[0]+(sizeof(STAGE)-2);
+	while (++stage <= '3') {
+		USE_FEATURE_RUNIT_VERBOSE( bb_error_msg("%s stage: %s", "enter", *argv); )
+		// spawn stage
+		pid = spawn(argv);
+		if (pid < 0) {
+			USE_FEATURE_RUNIT_VERBOSE( bb_perror_msg("%s stage: %s", "failed", *argv); )
+			// skip 2 if 1 failed
+			if ('1' == stage) {
+				++stage;
+				USE_FEATURE_RUNIT_VERBOSE( bb_error_msg("%s stage: %s", "skip", *argv); )
+			}
+		} else {
+			if ('2' == stage)
+				bb_signals((1<<SIGCONT), sig_handler);
+			// wait for stage terminated
+			wait4pid(pid);
+			if ('2' == stage)
+				sig_block(SIGCONT);
+			USE_FEATURE_RUNIT_VERBOSE( bb_error_msg("%s stage: %s", "leave", *argv); )
+		}
+	}
+
+ force:
+	// poweroff system
+	reboot(execable_file(REBOOT) ? RB_AUTOBOOT : RB_POWER_OFF /*RB_HALT_SYSTEM*/);
+
+	return EXIT_SUCCESS;
+}
