Debian now boots to X!

finit.conf:
        Use this as /etc/finit.conf on a Debian 6.0 based system with X
        installed and sysklogd instead of rsyslogd.  Works.

services:
        Alternative method for extending the finit boot procedure. Simply
        place this script file in an /etc/finit.d/ directory.  The script
        uses the standard run-parts tool to chain load other start scripts.

helpers.c:
        o New functions:
          - run(): home grown system() replacement
          - run_interactive(): display progress and status when called

        o Bugfix start_process(), make sure to use same signal setup for
          children as in run() and run_interactive(). Also, use execvp()
          instead of execv() to allow searching $PATH for executables.

finit.h:
        o Move signal specific code to new signal.h.
        o Bypass verbosity setting to let echo() always print to screen.

finit.c:
        o Make run_parts() the default, remove external deps, it works.

        o Use run() and run_interactive() to speed up execution further
          on embedded systems where forking is expensive.

        o Kernel cmdline "quiet" should not close STDIO since this makes
          it impossible to run some daemons and start scripts.  Instead,
          we let "quiet" toggle the finit verbosity setting.

        o Remove kernel cmdline "--verbose" (Upstart compat), to be used
          to enable verbose finit when kernel should be quiet.

        o Setup kernel specific settings in /etc/sysctl.conf

        o Fix D-Bus startup problems. Probably what caused X from not
          working initially. Silly rabbit.

        o Use system() workaround to start X, cannot get it to start
          at all using run() or run_interactive() at the moment.

signal.h:
        New file, header file for signal.c.  Was about time.

signal.c:
        Remove blocking of SIGCHLD from sig_setup(), instead we setup
        SIGCHLD early in sig_init() to handle fork() in run() & C:o.

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
Joachim Nilsson committed 2012-09-20 17:50:53 +02:00
1 parent d21dc2b477
commit 077a7e82e0
13 files changed
+296 -131

No files matched your search

+11 -32
View File
@@ -43,48 +43,32 @@
#include "finit.h"
#include "helpers.h"
#define SETSIG(sa, sig, fun, flags) \
do { \
sa.sa_sigaction = fun; \
sa.sa_flags = SA_SIGINFO | flags; \
sigemptyset(&sa.sa_mask); \
sigaction(sig, &sa, NULL); \
} while (0)
#define IGNSIG(sa, sig, flags) \
do { \
sa.sa_handler = SIG_IGN; \
sa.sa_flags = flags; \
sigemptyset(&sa.sa_mask); \
sigaction(sig, &sa, NULL); \
} while (0)
#include "signal.h"
static int stopped = 0;
void do_shutdown (int sig)
{
touch(SYNC_SHUTDOWN);
if (sdown) {
_d("Calling shutdown hook: %s", sdown);
system(sdown);
}
if (sdown)
run_interactive(sdown, "Calling shutdown hook: %s", sdown);
_d("Sending SIGTERM to all processes.");
kill(-1, SIGTERM);
sleep(2);
system("/usr/sbin/alsactl store > /dev/null 2>&1");
run_interactive("/usr/sbin/alsactl store > /dev/null 2>&1", "Saving sound settings");
_d("Saving the system clock.");
system("/sbin/hwclock --systohc");
run_interactive("/sbin/hwclock --utc --systohc", "Saving system time (UTC) to RTC");
_d("Sending SIGKILL to remaining processes.");
kill(-1, SIGKILL);
sync();
sync();
_d("Unmounting file systems, remounting / read-only.");
system("/bin/umount -fa 2>/dev/null");
system("/bin/mount -n -o remount,ro / 2>/dev/null");
run("/bin/umount -fa 2>/dev/null");
run("/bin/mount -n -o remount,ro / 2>/dev/null");
_d("%s.", sig == SIGINT || sig == SIGUSR1 ? "Rebooting" : "Halting");
if (sig == SIGINT || sig == SIGUSR1)
@@ -146,7 +130,7 @@ int sig_stopped(void)
}
/*
* Inital signal setup - ignore everything until we're capable of responding
* Inital signal setup - ignore everything but SIGCHLD until we're capable of responding
*/
void sig_init(void)
{
@@ -155,6 +139,8 @@ void sig_init(void)
for (i = 1; i < NSIG; i++)
IGNSIG(sa, i, SA_RESTART);
SETSIG(sa, SIGCHLD, chld_handler, SA_RESTART);
}
/*
@@ -162,7 +148,6 @@ void sig_init(void)
*/
void sig_setup(void)
{
sigset_t nmask;
struct sigaction sa;
_d("Setup signals");
@@ -192,12 +177,6 @@ void sig_setup(void)
SETSIG(sa, SIGSTOP, sigstop_handler, 0);
SETSIG(sa, SIGTSTP, sigstop_handler, 0);
SETSIG(sa, SIGCONT, sigcont_handler, 0);
SETSIG(sa, SIGCHLD, chld_handler, SA_RESTART);
/* Block SIGCHLD while forking */
sigemptyset(&nmask);
sigaddset(&nmask, SIGCHLD);
sigprocmask(SIG_BLOCK, &nmask, NULL);
/* Disable CTRL-ALT-DELETE from kernel, we handle shutdown gracefully with SIGINT, above */
reboot(RB_DISABLE_CAD);