Compare commits

..

9 commits

Author SHA1 Message Date
Petr Lautrbach
5cc7093c76 upstart-1.2-4.fc15 2011-05-26 11:17:31 +02:00
Petr Lautrbach
3c449f790a remove Obsoletes: upstart-sysvinit and clean spec file 2011-05-26 11:09:43 +02:00
Petr Lautrbach
9189b2e1cd /etc/init.conf, upstart-1.2-3.fc15 2011-05-13 10:44:00 +02:00
Petr Lautrbach
37dc1d3395 upstart-1.2-2.fc15 2011-05-05 13:02:20 +02:00
Petr Lautrbach
9b59ca86df move binaries to /lib/upstart, add /lib/upstart to default PATH, handle /run in tmpfiles.d 2011-05-05 13:01:20 +02:00
Petr Lautrbach
011ca1e5bb use only spaces in spec file 2011-05-05 13:00:06 +02:00
Petr Lautrbach
c144ab30b3 upstart-1.2-1.fc16 2011-03-23 09:48:10 +01:00
Petr Lautrbach
03a2a6176d upstart-1.1-1.fc15, enable .override files 2011-03-21 10:04:53 +01:00
Petr Lautrbach
4a7311a341 upstart-1.0-1.fc15 2011-03-04 16:38:10 +01:00
17 changed files with 6263 additions and 1 deletions

View file

@ -1 +0,0 @@
This package was retired on 2012-08-06 due to no active maintainers for the package.

8
fix-selinux-on-run.conf Normal file
View file

@ -0,0 +1,8 @@
# fix selinux context on /run created and mounted by dracut
# original context is tmpfs_t while we need var_run_t and others
start on starting rcS
task
exec /sbin/restorecon -R /run

6
init-system-dbus.conf Normal file
View file

@ -0,0 +1,6 @@
# init-system-dbus - tell init process to connect to system dbus server
start on started messagebus
task
exec /bin/kill -USR1 1

0
init.conf Normal file
View file

2
sources Normal file
View file

@ -0,0 +1,2 @@
c1b1bab5c1c1ed2595081d8178542b37 upstart-1.2.tar.gz
dce904a3284fb76fa136c618b9e8a80c initjobs-20110502.tar.gz

46
tmpfiles.conf Normal file
View file

@ -0,0 +1,46 @@
# tmpfiles - create missing directories in /var/{lock,run} according to
# /etc/tmpfiles.d/
start on stopping rcS
task
script
[ -d /etc/tmpfiles.d ] || exit 0
SELINUX_RESTORE=
# Check SELinux status
SELINUX_STATE=
if [ -e "/selinux/enforce" ] && [ "$(cat /proc/self/attr/current)" != "kernel" ]; then
if [ -r "/selinux/enforce" ] ; then
SELINUX_STATE=$(cat "/selinux/enforce")
else
# assume enforcing if you can't read it
SELINUX_STATE=1
fi
fi
for i in /etc/tmpfiles.d/*; do
while read type path mode uid gid age; do
# only directories
[ -n "$type" ] || continue
[ $type = "d" ] || [ $type = "D" ] || continue
# only /run /var/run and /var/lock
[ $path != ${path#/run/} ] ||
[ $path != ${path#/var/run/} ] ||
[ $path != ${path#/var/lock/} ] ||
continue
if [ ! -d $path ]; then
mkdir -p $path || continue
SELINUX_RESTORE=1
chmod $mode $path
chown $uid:$gid $path
fi
done < $i;
done
if [ -n "$SELINUX_STATE" ] && [ -n "$SELINUX_RESTORE" ]; then
/sbin/restorecon -R /run /var/run /var/lock 2> /dev/null
fi
end script

271
upstart-audit-events.patch Normal file
View file

@ -0,0 +1,271 @@
diff --git a/aclocal.m4 b/aclocal.m4
index 3d3673e..6e09291 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1066,6 +1066,7 @@ m4_include([m4/lcmessage.m4])
m4_include([m4/lib-ld.m4])
m4_include([m4/lib-link.m4])
m4_include([m4/lib-prefix.m4])
+m4_include([m4/libaudit.m4])
m4_include([m4/libnih.m4])
m4_include([m4/libtool.m4])
m4_include([m4/lock.m4])
diff --git a/config.h.in b/config.h.in
index 8a7d63f..8d000aa 100644
--- a/config.h.in
+++ b/config.h.in
@@ -118,6 +118,9 @@
/* Define if your <locale.h> file defines LC_MESSAGES. */
#undef HAVE_LC_MESSAGES
+/* linux audit support */
+#undef HAVE_LIBAUDIT
+
/* Define to 1 if you have the <limits.h> header file. */
#undef HAVE_LIMITS_H
diff --git a/configure.ac b/configure.ac
index 49544e3..1513500 100644
--- a/configure.ac
+++ b/configure.ac
@@ -40,6 +40,7 @@ AM_PROG_CC_C_O
NIH_C_THREAD
# Checks for library functions.
+LINUX_AUDIT
# Other checks
AC_MSG_CHECKING([whether to include sbindir in PATH])
diff --git a/m4/libaudit.m4 b/m4/libaudit.m4
new file mode 100644
index 0000000..6865fb8
--- /dev/null
+++ b/m4/libaudit.m4
@@ -0,0 +1,25 @@
+# libaudit.m4 - Checks for the Linux Audit System support
+# Copyright (c) 2009 Steve Grubb sgrubb@redhat.com
+#
+AC_DEFUN([LINUX_AUDIT],
+[
+ AC_ARG_WITH(libaudit,
+ [ --with-libaudit=[auto/yes/no] Add Linux audit support [default=auto]],,
+ with_libaudit=auto)
+
+ # Check for Linux auditing API
+ #
+ # libaudit detection
+
+ if test x$with_libaudit = xno ; then
+ have_libaudit=no;
+ else
+ # See if we have audit daemon library
+ AC_CHECK_LIB(audit, audit_log_user_message,
+ AUDIT_LDADD=-laudit,)
+ fi
+ AC_SUBST(AUDIT_LDADD)
+ if test x$AUDIT_LDADD != x ; then
+ AC_DEFINE(HAVE_LIBAUDIT,1,[linux audit support])
+ fi
+])
diff --git a/util/Makefile.am b/util/Makefile.am
index 0b49c10..9a772d5 100644
--- a/util/Makefile.am
+++ b/util/Makefile.am
@@ -45,14 +45,17 @@ reboot_SOURCES = \
utmp.c utmp.h
reboot_LDADD = \
$(LTLIBINTL) \
- $(NIH_LIBS)
+ $(NIH_LIBS) \
+ $(AUDIT_LDADD)
+
runlevel_SOURCES = \
runlevel.c \
utmp.c utmp.h
runlevel_LDADD = \
$(LTLIBINTL) \
- $(NIH_LIBS)
+ $(NIH_LIBS) \
+ $(AUDIT_LDADD)
shutdown_SOURCES = \
shutdown.c \
@@ -64,7 +67,8 @@ shutdown_LDADD = \
$(LTLIBINTL) \
$(NIH_LIBS) \
$(NIH_DBUS_LIBS) \
- $(DBUS_LIBS)
+ $(DBUS_LIBS) \
+ $(AUDIT_LDADD)
telinit_SOURCES = \
telinit.c \
@@ -76,7 +80,8 @@ telinit_LDADD = \
$(LTLIBINTL) \
$(NIH_LIBS) \
$(NIH_DBUS_LIBS) \
- $(DBUS_LIBS)
+ $(DBUS_LIBS) \
+ $(AUDIT_LDADD)
com_ubuntu_Upstart_OUTPUTS = \
@@ -201,7 +206,8 @@ test_sysv_LDADD = \
$(LTLIBINTL) \
$(NIH_LIBS) \
$(NIH_DBUS_LIBS) \
- $(DBUS_LIBS)
+ $(DBUS_LIBS) \
+ $(AUDIT_LDADD)
test_telinit_SOURCES = tests/test_telinit.c telinit.c
test_telinit_CFLAGS = $(AM_CFLAGS) -DTEST
@@ -211,7 +217,8 @@ test_telinit_LDADD = \
com.ubuntu.Upstart.Job.o com.ubuntu.Upstart.Instance.o \
$(NIH_LIBS) \
$(NIH_DBUS_LIBS) \
- $(DBUS_LIBS)
+ $(DBUS_LIBS) \
+ $(AUDIT_LDADD)
.PHONY: tests
diff --git a/util/reboot.c b/util/reboot.c
index 7a9c071..15028eb 100644
--- a/util/reboot.c
+++ b/util/reboot.c
@@ -36,6 +36,10 @@
#include <nih/logging.h>
#include <nih/error.h>
+#ifdef HAVE_LIBAUDIT
+#include <libaudit.h>
+#endif
+
#include "utmp.h"
@@ -103,7 +107,6 @@ static int poweroff = FALSE;
**/
static int exit_only = FALSE;
-
/**
* options:
*
@@ -127,6 +130,7 @@ static NihOption options[] = {
NIH_OPTION_LAST
};
+static void send_audit_event(void);
int
main (int argc,
@@ -227,6 +231,8 @@ main (int argc,
/* Re-enable Control-Alt-Delete in case it breaks */
reboot (RB_ENABLE_CAD);
+ send_audit_event ();
+
/* Do the syscall */
switch (mode) {
case REBOOT:
@@ -248,3 +254,21 @@ main (int argc,
return 0;
}
+
+/**
+ * send_audit_event
+ *
+ * Send system shutdown audit event
+ **/
+static void
+send_audit_event (void)
+{
+#ifdef HAVE_LIBAUDIT
+ int fd = audit_open ();
+ if (fd < 0)
+ return;
+ audit_log_user_message (fd, AUDIT_SYSTEM_SHUTDOWN, "init",
+ NULL, NULL, NULL, 1);
+ close (fd);
+#endif
+}
diff --git a/util/sysv.c b/util/sysv.c
index fbca39f..5476f79 100644
--- a/util/sysv.c
+++ b/util/sysv.c
@@ -36,6 +36,12 @@
#include <nih/logging.h>
#include <nih/error.h>
+#include <unistd.h>
+#ifdef HAVE_LIBAUDIT
+#include <stdio.h>
+#include <libaudit.h>
+#endif
+
#include "dbus/upstart.h"
#include "utmp.h"
@@ -54,6 +60,7 @@
/* Prototypes for static functions */
static void error_handler (NihError **err, NihDBusMessage *message);
+static void send_audit_event (int old, int level);
/**
@@ -161,6 +168,8 @@ sysv_change_runlevel (int runlevel,
runlevel, prevlevel) < 0)
nih_free (nih_error_get ());
+ send_audit_event(prevlevel, runlevel);
+
/* Make the EmitEvent call, we don't wait for the event to finish
* because sysvinit never did.
*/
@@ -199,3 +208,41 @@ error_handler (NihError ** err,
{
*err = nih_error_steal ();
}
+
+/**
+ * send_audit_event
+ * @old: current run level
+ * @level: new run level
+ *
+ * Send system runlevel change audit event. If level is 0, then
+ * we consider this to be a reboot event.
+ **/
+static void
+send_audit_event (int old, int level)
+{
+#ifdef HAVE_LIBAUDIT
+ int fd = audit_open ();
+
+ if (fd < 0)
+ return;
+
+ /* first runlevel change after boot */
+ if (old == 'N')
+ audit_log_user_message (fd, AUDIT_SYSTEM_BOOT, "init",
+ NULL, NULL, NULL, 1);
+
+ char buf[64];
+
+ snprintf (buf, sizeof (buf),
+ "old-level=%c new-level=%c", old, level);
+ audit_log_user_message (fd, AUDIT_SYSTEM_RUNLEVEL, buf,
+ NULL, NULL, NULL, 1);
+
+ /* shutdown or reboot */
+ if (level == '0' || level == '6')
+ audit_log_user_message (fd, AUDIT_SYSTEM_SHUTDOWN, "init",
+ NULL, NULL, NULL, 1);
+
+ close (fd);
+#endif
+}

23
upstart-close-fd.patch Normal file
View file

@ -0,0 +1,23 @@
diff --git a/init/job_process.c b/init/job_process.c
index 8ce2f72..c2c96cb 100644
--- a/init/job_process.c
+++ b/init/job_process.c
@@ -298,6 +298,7 @@ job_process_run (Job *job,
/* Feed the script to the child process */
if (shell) {
+ nih_local char *cmd = NULL;
NihIo *io;
/* Clean up and close the reading end (we don't need it) */
@@ -317,6 +318,10 @@ job_process_run (Job *job,
nih_free (err);
}
+ /* Close leaking fd first */
+ cmd = NIH_MUST (nih_sprintf (NULL, "<&%d- ;", fds[0]));
+ NIH_ZERO (nih_io_write (io, cmd, strlen (cmd)));
+
NIH_ZERO (nih_io_write (io, script, strlen (script)));
nih_io_shutdown (io);
}

13
upstart-lib-upstart.patch Normal file
View file

@ -0,0 +1,13 @@
diff --git a/init/paths.h b/init/paths.h
index c7ddec1..1402e9d 100644
--- a/init/paths.h
+++ b/init/paths.h
@@ -26,7 +26,7 @@
* This is the default PATH set by the init process itself.
**/
#ifndef PATH
-#define _PATH "/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin"
+#define _PATH "/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/lib/upstart:/sbin:/bin"
#ifdef EXTRA_PATH
#define PATH _PATH ":" EXTRA_PATH
#else

5145
upstart-override.patch Normal file

File diff suppressed because it is too large Load diff

65
upstart-reexec.patch Normal file
View file

@ -0,0 +1,65 @@
diff -up upstart-0.6.5/init/main.c.foo upstart-0.6.5/init/main.c
--- upstart-0.6.5/init/main.c.foo 2010-04-30 19:38:07.846260462 -0400
+++ upstart-0.6.5/init/main.c 2010-04-30 21:35:38.690487114 -0400
@@ -67,6 +67,7 @@ static void kbd_handler (void *data,
static void pwr_handler (void *data, NihSignal *signal);
static void hup_handler (void *data, NihSignal *signal);
static void usr1_handler (void *data, NihSignal *signal);
+static void term_handler (void *data, NihSignal *signal);
#endif /* DEBUG */
@@ -241,6 +242,10 @@ main (int argc,
/* SIGUSR1 instructs us to reconnect to D-Bus */
nih_signal_set_handler (SIGUSR1, nih_signal_handler);
NIH_MUST (nih_signal_add_handler (NULL, SIGUSR1, usr1_handler, NULL));
+
+ /* SIGTERM instructs us to re-exec ourselves */
+ nih_signal_set_handler (SIGTERM, nih_signal_handler);
+ NIH_MUST (nih_signal_add_handler (NULL, SIGTERM, term_handler, NULL));
#endif /* DEBUG */
@@ -485,4 +490,42 @@ usr1_handler (void *data,
}
}
}
+
+/**
+ * term_handler:
+ * @data: unused,
+ * @signal: signal that called this handler
+ *
+ * This is called when we recieve the TERM signal, which instructs us
+ * to reexec ourselves.
+ **/
+static void
+term_handler (void *data,
+ NihSignal *signal)
+{
+ NihError *err;
+ sigset_t mask, oldmask;
+
+ nih_assert (argv0 != NULL);
+ nih_assert (signal != NULL);
+
+ nih_warn (_("Re-executing %s"), argv0);
+
+ /* Block signals while we work. We're the last signal handler
+ * installed so this should mean that they're all handled now.
+ *
+ * The child must make sure that it unblocks these again when
+ * it's ready.
+ */
+ sigfillset (&mask);
+ sigprocmask (SIG_BLOCK, &mask, &oldmask);
+ execl (argv0, argv0, "--restart", NULL);
+ nih_error_raise_system ();
+
+ err = nih_error_get ();
+ nih_error (_("Failed to re-execute %s: %s"), argv0, err->message);
+ nih_free (err);
+
+ sigprocmask (SIG_SETMASK, &oldmask, NULL);
+}
#endif /* DEBUG */

213
upstart-remove-tests.patch Normal file
View file

@ -0,0 +1,213 @@
diff -up upstart-0.6.3/nih-dbus/tests/test_dbus_connection.c.tests upstart-0.6.3/nih-dbus/tests/test_dbus_connection.c
--- upstart-0.6.3/nih-dbus/tests/test_dbus_connection.c.tests 2009-12-14 15:51:25.323430105 +0100
+++ upstart-0.6.3/nih-dbus/tests/test_dbus_connection.c 2009-12-14 15:51:25.323430105 +0100
@@ -1521,7 +1521,6 @@ main (int argc,
nih_error_init ();
test_connect ();
- test_bus ();
test_setup ();
test_server ();
diff -up upstart-0.6.3/nih/tests/test_child.c.tests upstart-0.6.3/nih/tests/test_child.c
--- upstart-0.6.3/nih/tests/test_child.c.tests 2009-12-14 15:51:25.910710749 +0100
+++ upstart-0.6.3/nih/tests/test_child.c 2009-12-14 15:51:25.888145178 +0100
@@ -328,186 +328,6 @@ test_poll (void)
nih_free (watch);
- /* Check that a signal raised from a traced child causes the reaper
- * to be called with a traced event and the event in the status
- * field. It should not be removed from the list since the child
- * hasn't gone away.
- */
- TEST_FEATURE ("with signal from traced child");
-
- TEST_CHILD (pid) {
- assert0 (ptrace (PTRACE_TRACEME, 0, NULL, NULL));
-
- raise (SIGSTOP);
- raise (SIGCHLD);
- pause ();
- exit (0);
- }
-
- waitid (P_PID, pid, &siginfo, WSTOPPED);
-
- assert0 (ptrace (PTRACE_SETOPTIONS, pid, NULL, PTRACE_O_TRACESYSGOOD));
- assert0 (ptrace (PTRACE_CONT, pid, NULL, SIGCONT));
-
- waitid (P_PID, pid, &siginfo, WSTOPPED | WNOWAIT);
-
- watch = nih_child_add_watch (NULL, pid, NIH_CHILD_TRAPPED,
- my_handler, &watch);
-
- TEST_FREE_TAG (watch);
-
- handler_called = 0;
- last_data = NULL;
- last_pid = 0;
- last_event = -1;
- last_status = 0;
-
- nih_child_poll ();
-
- TEST_TRUE (handler_called);
- TEST_EQ (last_pid, pid);
- TEST_EQ (last_event, NIH_CHILD_TRAPPED);
- TEST_EQ (last_status, SIGCHLD);
- TEST_NOT_FREE (watch);
-
- assert0 (ptrace (PTRACE_DETACH, pid, NULL, 0));
-
- kill (pid, SIGTERM);
- waitid (P_PID, pid, &siginfo, WEXITED);
- nih_free (watch);
-
-
-#if HAVE_VALGRIND_VALGRIND_H
- /* These tests fail when running under valgrind.
- */
- if (! RUNNING_ON_VALGRIND) {
-#endif
- /* Check that when a traced child forks it causes the reaper
- * to be called with a ptrace event and the fork event in the
- * status field. It should not be removed from the list since the
- * child hasn't gone away.
- */
- TEST_FEATURE ("with fork by traced child");
-
- TEST_CHILD (pid) {
- assert0 (ptrace (PTRACE_TRACEME, 0, NULL, NULL));
-
- raise (SIGSTOP);
-
- child = fork ();
- assert (child >= 0);
-
- pause ();
-
- exit (0);
- }
-
- waitid (P_PID, pid, &siginfo, WSTOPPED);
-
- assert0 (ptrace (PTRACE_SETOPTIONS, pid, NULL,
- PTRACE_O_TRACESYSGOOD | PTRACE_O_TRACEFORK));
- assert0 (ptrace (PTRACE_CONT, pid, NULL, SIGCONT));
-
- /* Wait for ptrace to stop the parent (signalling the fork) */
- waitid (P_PID, pid, &siginfo, WSTOPPED | WNOWAIT);
-
- /* Will be able to get the child pid now, we have to do it here
- * because we want to wait on it to ensure the test is synchronous;
- * otherwise nih_child_poll() could actually eat the child event
- * before it returns -- normally we'd do this inside the handler,
- * so things would probably work (we iter the handlers for each
- * event, so you can add one).
- */
- data = 0;
- assert0 (ptrace (PTRACE_GETEVENTMSG, pid, NULL, &data));
- assert (data != 0);
- child = (pid_t)data;
-
- /* Wait for ptrace to stop the child, otherwise it might not be
- * ready for us to actually detach from.
- */
- waitid (P_PID, child, &siginfo, WSTOPPED | WNOWAIT);
-
- watch = nih_child_add_watch (NULL, pid, NIH_CHILD_PTRACE,
- my_handler, &watch);
-
- TEST_FREE_TAG (watch);
-
- handler_called = 0;
- last_data = NULL;
- last_pid = 0;
- last_event = -1;
- last_status = 0;
-
- nih_child_poll ();
-
- TEST_TRUE (handler_called);
- TEST_EQ (last_pid, pid);
- TEST_EQ (last_event, NIH_CHILD_PTRACE);
- TEST_EQ (last_status, PTRACE_EVENT_FORK);
- TEST_NOT_FREE (watch);
-
- assert0 (ptrace (PTRACE_DETACH, child, NULL, SIGCONT));
- kill (child, SIGTERM);
-
- assert0 (ptrace (PTRACE_DETACH, pid, NULL, SIGCONT));
- kill (pid, SIGTERM);
- waitid (P_PID, pid, &siginfo, WEXITED);
- nih_free (watch);
-
-
- /* Check that when a traced child execs it causes the reaper
- * to be called with a ptrace event and the exec event in the
- * status field. It should not be removed from the list since the
- * child hasn't gone away.
- */
- TEST_FEATURE ("with exec by traced child");
-
- TEST_CHILD (pid) {
- assert0 (ptrace (PTRACE_TRACEME, 0, NULL, NULL));
-
- raise (SIGSTOP);
-
- execl ("/bin/true", "true", NULL);
- exit (255);
- }
-
- waitid (P_PID, pid, &siginfo, WSTOPPED);
-
- assert0 (ptrace (PTRACE_SETOPTIONS, pid, NULL,
- PTRACE_O_TRACESYSGOOD | PTRACE_O_TRACEEXEC));
- assert0 (ptrace (PTRACE_CONT, pid, NULL, SIGCONT));
-
- waitid (P_PID, pid, &siginfo, WSTOPPED | WNOWAIT);
-
- watch = nih_child_add_watch (NULL, pid, NIH_CHILD_PTRACE,
- my_handler, &watch);
-
- TEST_FREE_TAG (watch);
-
- handler_called = 0;
- last_data = NULL;
- last_pid = 0;
- last_event = -1;
- last_status = 0;
-
- nih_child_poll ();
-
- TEST_TRUE (handler_called);
- TEST_EQ (last_pid, pid);
- TEST_EQ (last_event, NIH_CHILD_PTRACE);
- TEST_EQ (last_status, PTRACE_EVENT_EXEC);
- TEST_NOT_FREE (watch);
-
- assert0 (ptrace (PTRACE_DETACH, pid, NULL, SIGCONT));
-
- waitid (P_PID, pid, &siginfo, WEXITED);
- nih_free (watch);
-#if HAVE_VALGRIND_VALGRIND_H
- }
-#endif
-
-
/* Check that we can watch for events from any process, which
* shouldn't be freed when the child dies.
*/
diff -up upstart-0.6.3/nih/tests/test_string.c.tests upstart-0.6.3/nih/tests/test_string.c
--- upstart-0.6.3/nih/tests/test_string.c.tests 2009-12-17 12:34:43.357844975 +0100
+++ upstart-0.6.3/nih/tests/test_string.c 2009-12-17 12:38:41.911484010 +0100
@@ -1511,8 +1511,6 @@ main (int argc,
test_array_copy ();
test_array_append ();
test_str_wrap ();
- test_str_screen_width ();
- test_str_screen_wrap ();
return 0;
}

View file

@ -0,0 +1,28 @@
diff --git a/util/shutdown.c b/util/shutdown.c
index 0a6d8bf..2ef847a 100644
--- a/util/shutdown.c
+++ b/util/shutdown.c
@@ -459,6 +459,7 @@ shutdown_now (void)
{
nih_local char **extra_env = NULL;
NihDBusError * dbus_err;
+ int exit_val = 0;
if (init_halt) {
char *e;
@@ -486,12 +487,14 @@ shutdown_now (void)
* yet rebooted ... so try /dev/initctl
*/
sysvinit_shutdown ();
+ nih_fatal ("Unable to shutdown system");
+ exit_val = 1;
}
unlink (ETC_NOLOGIN);
nih_main_unlink_pidfile ();
- exit (0);
+ exit (exit_val);
}
/**

13
upstart-telinit.patch Normal file
View file

@ -0,0 +1,13 @@
diff -up upstart-0.6.3/util/telinit.c.foo upstart-0.6.3/util/telinit.c
--- upstart-0.6.3/util/telinit.c.foo 2009-12-03 14:52:58.000000000 -0500
+++ upstart-0.6.3/util/telinit.c 2009-12-03 14:53:06.000000000 -0500
@@ -174,9 +174,6 @@ main (int argc,
break;
case 'U':
case 'u':
- ret = kill (1, SIGTERM);
- if (ret < 0)
- nih_error_raise_system ();
break;
default:
nih_assert_not_reached ();

80
upstart-utmp.patch Normal file
View file

@ -0,0 +1,80 @@
diff --git a/init/job_class.c b/init/job_class.c
index eeec83d..00eb13d 100644
--- a/init/job_class.c
+++ b/init/job_class.c
@@ -219,6 +219,8 @@ job_class_new (const void *parent,
class->chroot = NULL;
class->chdir = NULL;
+ class->utmp_id = NULL;
+
class->deleted = FALSE;
class->debug = FALSE;
diff --git a/init/job_class.h b/init/job_class.h
index d40e750..e5b5190 100644
--- a/init/job_class.h
+++ b/init/job_class.h
@@ -145,6 +145,7 @@ typedef struct job_class {
struct rlimit *limits[RLIMIT_NLIMITS];
char *chroot;
char *chdir;
+ char *utmp_id;
int deleted;
int debug;
diff --git a/init/job_process.c b/init/job_process.c
index 70fa2bf..544f5e3 100644
--- a/init/job_process.c
+++ b/init/job_process.c
@@ -361,11 +361,13 @@ job_process_spawn (JobClass *class,
char * const *env,
int trace)
{
- sigset_t child_set, orig_set;
- pid_t pid;
- int i, fds[2];
- char filename[PATH_MAX];
- FILE *fd;
+ sigset_t child_set, orig_set;
+ pid_t pid;
+ int i, fds[2];
+ char filename[PATH_MAX];
+ FILE *fd;
+ struct utmpx utmp;
+ struct timeval tv;
nih_assert (class != NULL);
@@ -558,6 +560,20 @@ job_process_spawn (JobClass *class,
}
}
+ /* Write utmp INIT_PROCESS entry */
+ if (class->utmp_id) {
+ memset(&utmp, 0, sizeof(struct utmpx));
+ strncpy(utmp.ut_id, class->utmp_id, sizeof(utmp.ut_id));
+ utmp.ut_pid = getpid();
+ utmp.ut_type = INIT_PROCESS;
+ gettimeofday(&tv, NULL);
+ utmp.ut_tv.tv_sec = tv.tv_sec;
+ utmp.ut_tv.tv_usec = tv.tv_usec;
+ setutxent();
+ pututxline(&utmp);
+ endutxent();
+ }
+
/* Execute the process, if we escape from here it failed */
if (execvp (argv[0], argv) < 0) {
nih_error_raise_system ();
@@ -1176,6 +1192,10 @@ job_process_terminated (Job *job,
memset(utmptr->ut_user, 0, UT_NAMESIZE);
memset(utmptr->ut_host, 0, UT_HOSTSIZE);
utmptr->ut_time = 0;
+
+ /* Set class utmp_id for next spawn */
+ job->class->utmp_id = nih_strdup (job->class, utmptr->ut_id);
+
/* Update existing utmp file. */
pututxline(utmptr);

4
upstart.sh Normal file
View file

@ -0,0 +1,4 @@
# check if upstart is running
if /lib/upstart/initctl list > /dev/null 2> /dev/null; then
export PATH=/lib/upstart:$PATH
fi

346
upstart.spec Normal file
View file

@ -0,0 +1,346 @@
%define initscripts 20110502
Name: upstart
Version: 1.2
Release: 4%{?dist}
Summary: An event-driven init system
Group: System Environment/Base
License: GPLv2 and LGPLv2+
URL: https://launchpad.net/upstart
Source0: http://launchpad.net/upstart/1.x/%{version}/+download/upstart-%{version}.tar.gz
Source1: init-system-dbus.conf
# These are taken from http://git.fedorahosted.org/git/?p=initscripts.git
Source2: initjobs-%{initscripts}.tar.gz
# create missing files and directories according to /etc/tmpfiles.d/
Source3: tmpfiles.conf
# fix selinux context on /run created and mounted by dracut
Source4: fix-selinux-on-run.conf
# add /lib/upstart to shell PATH if upstart is running
Source5: upstart.sh
Source6: init.conf
Patch1: upstart-telinit.patch
Patch2: upstart-audit-events.patch
# set DEAD_PROCESS for dead process with pid in utmp table (#572199, #632568)
Patch3: upstart-utmp.patch
Patch4: upstart-reexec.patch
# allow job override files
Patch7: upstart-override.patch
# add /lib/upstart to default PATH set by init process
Patch10: upstart-lib-upstart.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: autoconf, automake, gettext, audit-libs-devel, expat-devel
BuildRequires: dbus-devel >= 1:1.2.16, libnih-devel >= 1.0.1
Conflicts: initscripts < 9.12
Requires: sysvinit-userspace /etc/rc.d/rc.sysinit
%description
Upstart is an event-based replacement for the /sbin/init daemon which
handles starting of tasks and services during boot, stopping them
during shutdown and supervising them while the system is running.
%prep
%setup -q -a 2
%patch1 -p1 -b .u
%patch2 -p1 -b .audit
%patch3 -p1 -b .utmp
%patch4 -p1 -b .reexec
%patch7 -p1 -b .override
%patch10 -p1 -b .lib-upstart
%build
autoreconf
%configure --sbindir=/lib/upstart --libdir=/%{_lib}
make %{?_smp_mflags}
%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}
# Rename common SysV binaries and symlink them to allow parallel
# installation with systemd. We move the utility binaries into a
# subdirectory, so that program_name stays the same and Upstart still
# can check argv[0] properly in various places.
mkdir -p %{buildroot}/sbin/
ln -sf ../lib/upstart/init %{buildroot}/sbin/upstart
ln -sf ../lib/upstart/initctl %{buildroot}/sbin/initctl
ln -sf ../lib/upstart/start %{buildroot}/sbin/start
ln -sf ../lib/upstart/status %{buildroot}/sbin/status
ln -sf ../lib/upstart/stop %{buildroot}/sbin/stop
ln -sf ../lib/upstart/restart %{buildroot}/sbin/restart
ln -sf ../lib/upstart/reload %{buildroot}/sbin/reload
ln -sf reboot %{buildroot}/lib/upstart/poweroff
ln -sf reboot %{buildroot}/lib/upstart/halt
# Rename init.8.gz to upstart.7.gz (#644249)
mv %{buildroot}/%{_mandir}/man8/init.8 %{buildroot}/%{_mandir}/man7/upstart.7
# Remove these files due the conflicts with systemd
rm -f %{buildroot}/%{_mandir}/man8/{halt,init,poweroff,reboot,runlevel,shutdown,telinit}.*
# don't ship default jobs
rm -f %{buildroot}/%{_sysconfdir}/init/*
install -m 644 %{SOURCE1} %{buildroot}/%{_sysconfdir}/init/
install -m 644 %{SOURCE3} %{buildroot}/%{_sysconfdir}/init/
install -m 644 %{SOURCE4} %{buildroot}/%{_sysconfdir}/init/
for file in initjobs-%{initscripts}/*.conf ; do
install -m 644 $file %{buildroot}/%{_sysconfdir}/init/
done
mkdir -p -m 755 %{buildroot}/%{_sysconfdir}/profile.d/
install -m 644 %{SOURCE5} %{buildroot}/%{_sysconfdir}/profile.d/
install -m 644 %{SOURCE6} %{buildroot}/%{_sysconfdir}/init.conf
%find_lang %{name}
%check
#some tests fail in koji while pass in mock and local build
#to run make check use "--with check"
%if %{?_with_check:1}%{!?_with_check:0}
make check
%endif
%clean
rm -rf %{buildroot}
%triggerpostun -- upstart < 0.6.0
[ -f /proc/1/exe -a -d /proc/1/root ] && kill -TERM 1
%files -f %{name}.lang
%defattr(-,root,root,-)
%doc AUTHORS
%doc COPYING
%doc NEWS
%doc README
%doc TODO
%doc HACKING
%{_sysconfdir}/init/
%config(noreplace) %{_sysconfdir}/init.conf
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/Upstart.conf
/sbin/upstart
/sbin/initctl
/sbin/start
/sbin/status
/sbin/stop
/sbin/restart
/sbin/reload
%dir /lib/upstart
/lib/upstart/init
/lib/upstart/initctl
/lib/upstart/poweroff
/lib/upstart/reboot
/lib/upstart/runlevel
/lib/upstart/shutdown
/lib/upstart/halt
/lib/upstart/start
/lib/upstart/status
/lib/upstart/stop
/lib/upstart/restart
/lib/upstart/telinit
/lib/upstart/reload
/etc/profile.d/upstart.sh
%{_mandir}/man5/init.5.gz
%{_mandir}/man5/inittab.5.gz
%{_mandir}/man7/control-alt-delete.7.gz
%{_mandir}/man7/keyboard-request.7.gz
%{_mandir}/man7/power-status-changed.7.gz
%{_mandir}/man7/runlevel.7.gz
%{_mandir}/man7/started.7.gz
%{_mandir}/man7/starting.7.gz
%{_mandir}/man7/startup.7.gz
%{_mandir}/man7/stopped.7.gz
%{_mandir}/man7/stopping.7.gz
%{_mandir}/man7/upstart.7.gz
%{_mandir}/man8/restart.8.gz
%{_mandir}/man8/initctl.8.gz
%{_mandir}/man8/start.8.gz
%{_mandir}/man8/status.8.gz
%{_mandir}/man8/stop.8.gz
%{_mandir}/man8/reload.8.gz
%changelog
* Wed May 25 2011 Petr Lautrbach <plautrba@redhat.com> 1.2-4
- drop Obsoletes: upstart-sysvinit (#707507)
- clean upstart-sysvinit stuff from spec file
* Fri May 13 2011 Petr Lautrbach <plautrba@redhat.com> 1.2-3
- add /etc/init.conf file
* Wed May 04 2011 Petr Lautrbach <plautrba@redhat.com> 1.2-2
- /run - fix selinux context and check for tmpfiles.d
- physically move binaries to /lib/upstart
- add /lib/upstart to default PATH
* Wed Mar 23 2011 Petr Lautrbach <plautrba@redhat.com> 1.2-1
- upgrade to 1.2
- update upstream URL
* Mon Mar 21 2011 Petr Lautrbach <plautrba@redhat.com> 1.1-1
- upgrade to 1.1 - https://launchpad.net/upstart/1.x/1.1
- allow job override files
* Thu Mar 03 2011 Petr Lautrbach <plautrba@redhat.com> 1.0-1
- upgrade to 1.0 - https://launchpad.net/upstart/1.x/1.0
* Mon Feb 07 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.6.7-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
* Fri Dec 17 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.7-1
- upgrade to 0.6.7
* Mon Dec 06 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.6-4
- Stop tty and serial also on runlevel 's'
* Fri Nov 26 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.6-3
- create missing files and directories according to /etc/init/tmpfiles.conf
* Tue Nov 16 2010 Bill Nottingham <notting@redhat.com> 0.6.6-2
- require /etc/rc.d/rc.sysinit to pull in new initscripts-legacy package where needed
* Wed Oct 27 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.6-1
- upgrade to 0.6.6
- boot jobs source renamed
* Tue Oct 26 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.5-14
- send close fd command to shell first (#646894)
* Tue Oct 19 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.5-13
- Rename init(8) to upstart(7) (#644249)
* Thu Oct 14 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.5-12
- Disable -sysvinit to avoid conflicts with systemd (#635323)
* Wed Sep 29 2010 jkeating - 0.6.5-11
- Rebuilt for gcc bug 634757
* Fri Sep 24 2010 Bill Nottingham <notting@redhat.com> 0.6.5-10
- merge in basic boot jobs here (#637099)
* Tue Sep 21 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.5-9
- set DEAD_PROCESS for dead process with pid in utmp table (#572199, #632568)
- exit shutdown with nonzero exitcode when fails shutdown
* Fri Sep 17 2010 Bill Nottingham <notting@redhat.com> - 0.6.5-8
- ensure F15 version is newer than F-14
* Sat Jul 24 2010 Casey Dahlin <cdahlin@redhat.com> - 0.6.5-7
- Make upgrades work correctly now that -sysvinit is split off
* Sat Jul 24 2010 Lennart Poettering <lpoetter@redhat.com> - 0.6.5-6
- Split off -sysvinit to make Upstart parallel installable with systemd
* Tue May 4 2010 Bill Nottingham <notting@redhat.com> 0.6.5-5
- re-add SIGTERM handler so restart on shutdown works, avoiding dirty inodes (#576662)
* Tue Apr 6 2010 Casey Dahlin <cdahlin@redhat.com> 0.6.5-4
- Reload init after install
* Wed Feb 24 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.5-3
- run "make check" only with --with check
* Fri Feb 19 2010 Casey Dahlin <cdahlin@redhat.com> 0.6.5-2
- be more specific about which libnih we need.
* Wed Feb 17 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.5-1
- upgrade to 0.6.5
* Fri Jan 29 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.3-7
- add SIGUSR1 handler and init-system-dbus.conf (#559660)
* Sun Jan 17 2010 Dennis Gilmore <dennis@ausil.us> - 0.6.3-6
- add patch from upstream fixing sparc alignment issues
* Mon Jan 11 2010 Petr Lautrbach <plautrba@redhat.com> 0.6.3-5
- License changed to GPLv2 and LGPLv2+
* Wed Dec 16 2009 Petr Lautrbach <plautrba@redhat.com> 0.6.3-4
- audit events patch rebased for 0.6 (#470661)
* Thu Dec 3 2009 Bill Nottingham <notting@redhat.com> 0.6.3-3
- make 'telinit u' a no-op, temporarily
* Fri Nov 27 2009 Petr Lautrbach <plautrba@redhat.com> 0.6.3-2
- Removed tests which fail in koji
* Fri Nov 20 2009 Casey Dahlin <cdahlin@redhat.com> - 0.6.3-1
- Upgrade to 0.6.3
* Fri Aug 21 2009 Tomas Mraz <tmraz@redhat.com> - 0.3.11-3
- rebuilt with new audit
* Sun Jul 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.3.11-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
* Mon Jun 22 2009 Petr Lautrbach <plautrba@redhat.com> - 0.3.11-1
- Update to 0.3.11
* Mon Apr 27 2009 Bill Nottingham <notting@redhat.com> - 0.3.9-24
- Apply the audit patch correctly (#470661)
* Fri Apr 3 2009 Casey Dahlin <cdahlin@redhat.com> - 0.3.9-23
- Add audit events patch from Steve Grubb <sgrubb@redhat.com> (Bug #470661)
* Fri Jan 23 2009 Casey Dahlin <cdahlin@redhat.com> - 0.3.9-22
- Re-add 'telinit u' support along with patch to fix it (#450488). Patch due to
<pspencer@fields.utoronto.ca>
* Mon Jan 12 2009 Bill Nottingham <notting@redhat.com> - 0.3.9-21
- Remove 'telinit u' support as it is broken (#450488, <cjdahlin@ncsu.edu>)
* Fri Apr 25 2008 Bill Nottingham <notting@redhat.com> - 0.3.9-19
- with the merge of event-compat-sysv, move the sysvinit obsoletes/provides here
* Thu Apr 24 2008 Bill Nottingham <notting@redhat.com> - 0.3.9-18
- fix some man page typos (#444008, <archimerged@gmail.com>)
* Wed Apr 09 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-17
- Added list of stock events to events(5)
* Tue Apr 08 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-16
- Add telinit u support
* Fri Apr 04 2008 Bill Nottingham <notting@redhat.com> - 0.3.9-15
- Add a events(5) manpage that describes event syntax
* Thu Apr 03 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-14
- Change bug report email address to fedora-devel-list@redhat.com
* Thu Mar 14 2008 Bill Nottingham <notting@redhat.com> - 0.3.9-13
- Ignore rpm temporary files of the foo;<somehex> format
- Make ignores of .rpm{new,orig,save} match only at the end of the name
* Wed Mar 13 2008 Bill Nottingham <notting@redhat.com> - 0.3.9-12
- forgot about rpmorig too (ugh)
* Wed Mar 13 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-11
- Make logd a noreplace
* Wed Mar 13 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-10
- Add patch to ignore .rpm{new,save} files
* Sun Mar 03 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-9
- Remove automake dependency, build Makefile.in changes into patch
* Sun Mar 03 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-8
- Run automake after patching
* Sun Mar 03 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-7
- Added BuildRequires: automake
* Sun Mar 03 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-6
- Added patch to allow runtime tty changes
* Fri Feb 15 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-5
- Added patch to imply --force on runlevels 0 and 6
* Wed Feb 06 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-4
- Patched for GCC 4.3
* Thu Jan 31 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-3
- Added AUTHORS, COPYING, etc.
- Made config --libdir option relative
* Mon Jan 21 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-2
- Remove libnih and libupstart
* Sun Jan 13 2008 Casey Dahlin <cjdahlin@ncsu.edu> - 0.3.9-1
- Initial packaging