0.6.5 2010-02-04 "Our last, best hope for victory" * Since libnih has been separated out into its own project, Upstart no longer includes its source and now uses the installed version by default. * The external nih-dbus-tool means that cross-compilation is trivial, the path to it may be overriden with NIH_DBUS_TOOL=... as an argument to configure. (Bug: #426740) * Developers may still build against a local libnih source tree by passing --with-local-libnih=/path/to/libnih to configure. * There is a new initctl "reload" command, with matching /sbin/reload symlink. This sends the SIGHUP signal to the running main process of the named job instance. * Event operator matches in jobs now support "!=" in addition to the usual "=", e.g.: start on net-device-added INTERFACE!=eth* (Bug: #513035) * Moved D-Bus system bus reconnection trigger from SIGHUP to SIGUSR1, since SIGHUP is already used for a forced configuration reload and causes Upstart to "forget" state. * Fixed bug where the default runlevel would be lost when an /etc/inittab file exists without an initdefault line. (Bug: #405847) * Fixed "Unhandled error" message from shutdown. (Bug: #426332) * Fixed "Unhandled error" assertion crash from Upstart child processes when failing to spawn a job. (Bug: #451917) * No longer holds /dev/console open, so the SAK SysRq key will not kill Upstart. (Bug: #486005) * Restored sync() call before reboot(). * Added missing OPTIONS section to init(8) manpage. (Bug: #449883) 0.6.3 2009-08-02 "Our last, best hope for peace" * Fixed an assertion when a job's main process is terminated while in the stopping state. (Bug: #406408) * Fixed compilation on ia64. * nih-dbus-tool(1) manpage will not be installed, since the binary is not. (Bug: #403103) 0.6.2 2009-07-21 "Buggrit, millennium hand and shrimp" * Fixed an assertion when a job receives a stop event or the stop command while still in the starting state. * Changed exec() trace handling to allow the main process to exec another before fork()ing while still following (e.g. main script exec'ing a daemon) * Restored missing chdir("/") call when catching crashes. 0.6.1 2009-07-16 "Born in the wagon of a travelling show" * D-Bus 1.2.16 is now required. * Updated ptrace() code to handle receiving the trapped stopped child _before_ we receive the trapped fork() syscall, which seems to be the most common way the race goes when running as init. This seems to make "expect fork/daemon" largely work. (Bug: #264711) * runlevel will now output "unknown" and exit with an error when called before the first telinit call. (Bug: #400248) * runlevel will prefix error messages with the utmp filename being used. (Bug: #400241) 0.6.0 2009-07-09 "How appropriate, you fight like a cow" * The licence for Upstart has been changed back to version 2 of the GNU GPL. * D-Bus 1.2.15 is now required, this is the current GIT HEAD pending a 1.2.16 release. * Configuration paths have changed. Global configuration now resides in "/etc/init.conf" while jobs are now configured in "/etc/init" * Job configuration filenames must now end in ".conf" * Default configuration files are now supplied in the "conf" sub-directory of the source, and installed into "/etc/init". These match the Debian/Ubuntu sysvinit configuration so may require some tweaking for other distributions, but provide an excellent base. The old example-jobs tarballs are deprecated. * The D-Bus interface remains unstable, to reflect this the current interface name has changed to "com.ubuntu.Upstart0_6" and the name of the job and instance interfaces have changed to match. * The "EmitEvent" D-Bus method gains a wait argument, when given as TRUE (the recommended setting) the method call will be blocked until all effects of the event have finished. When FALSE the method call will return once the event has been queued. * The "Start", "Stop" and "Restart" D-Bus methods of jobs and instances gain a similar wait argument. * The Upstart D-Bus object now has "version" and "log_priority" properties. The former is to obtain the version of the init daemon, the latter allows you to obtain and change the logging priority. * Job D-Bus objects now have "name", "description", "author" and "version" properties to obtain the job name and the contents of the equivalent job file fields for the others. * Instance D-Bus objects now have "name", "goal", "state" and "processes" properties to obtain the instance name, goal, state and list of running processes and their pids respectively. * The default D-Bus security policy now permits use of the "Get" methods by all users, including obtaining values of properties. * initctl has been rewritten with functionality more along the lines of Upstart 0.3.x than before; since many distributions are still shipping 0.3.x the summary of changes for the tool reflects both changes from 0.3.x and 0.5.x * The global "-p"/"--pid" argument has been dropped, since communication is over D-Bus. New "--system" and "--dest" arguments have been added to force communication over the system bus, and specify the destination, instead of using the private socket (this is the default when run as non-root to permit "list" and "status" to work for ordinary users). * The "-i"/"--id" and "--show-ids" options to commands have been dropped since jobs no longer have ids. * Since instances may now have names, these will be displayed in brackets after the job name when one is present. The output of the goal and state are now expressed as "start/running" instead of "(start) running" to disambiguate. * initctl "start" and "stop" now only output the final state of the job, not intermediate states it passes through. When called with "--no-wait", the commands now output a status before returning (which may not be the final status). * initctl "start", "stop" and "status" now only accept a single job name. Further arguments are taken as KEY=VALUE environment variables to pass to the job, replacing the previous "-e" option. * There is a new initctl "restart" command, with matching /sbin/restart symlink. This is the atomic equivalent of calling "stop" and "start" with the exception that a stopped job will not be started again. * In keeping with the newer instance model, instance jobs are now output on separate lines with their full names rather than indented under a "master" instance. * initctl "status" will exit non-zero if the job name was not found. (Bug: #328323) * initctl "status" now outputs information for multi-instance jobs. (Bug: #331407) * initctl "list" no longer accepts a pattern, use grep. Output is no longer sorted. * initctl "emit" no longer outputs changes that occur as a result of the event. * When initctl "emit" is called with "--no-wait", it will return immediately. (Bug: #324890) * initctl "emit" now only accepts a single event name. Further arguments are taken as KEY=VALUE environment for the event, replacing the previous "-e" option. * initctl "jobs" and "events" have been dropped. * initctl "log-priority" may be called without arguments, in which case it will output the current priority. (Bug: #280529) * initctl "reload" has been renamed to "reload-configuration" to avoid confusion with reloading a job's configuration. * initctl(8) man page updated. (Bug: #285753) * runlevel no longer accepts the --set and --reboot arguments, instead telinit and shutdown write these records into utmp and wtmp. * runlevel(7) man page added to describe the runlevel event, and the implementation of runlevels and System V compatibility in Upstart. (Bug: #60429) * telinit will no longer silently ignore the "a", "b" or "c" runlevels. * telinit now accepts the previously ignored "-e" argument, passing the environment variables given along with the runlevel event. * telinit now officially accepts the "q"/"Q" and "u"/"U" arguments, the former will reload the Upstart configuration while the latter will re-execute Upstart. * telinit q will also attempt to reconnect to the D-Bus system bus if the connection has not been made, or has been lost. (Bug: #323022) * reboot no longer silently ignores the "-t" option. * reboot now silently ignores the "-n", "-i" and "-h" options; it will no longer sync your disks, down your network interfaces or spin down your hard drives. This functionality is all handled by the kernel on a modern system. (Bug: #92685) * reboot now writes a "shutdown" record to /var/log/wtmp, this means that the "-w" option is honoured with its original intent. We still silently ignore the "-d" option. * shutdown message generation fixed to be more easily translatable. (Bug: #102565) * The TERM/KILL timeout, and other system timeouts, now use the monotonic clock so are unaffected by system clock changes. (Bug: #389588) * Respawn detection now uses the monotonic clock so is unaffected by system clock changes. (Bug: #389586) * Significant improvement in the amount of manual pages included with Upstart and their content. (Bug: #60429) * A manual page refering people from /etc/inittab to /etc/init is also included. (Bug: #72058) 0.5.3 2009-06-22 "Britain's Flag Carrier" * Fixed segfault when initctl status called with arguments. (Bug: #388753) * Fixed segfault when initctl log-priority called with no argument. (Bug: #280529) * Fixed shutdown to pass $INIT_HALT variable as last argument, not as first. (Bug: #303574) * Added temporary support for "telinit u" until we have true re-exec support. This will be replaced by an initctl command in future. (Bug: #388742) * Corrected formatting of initctl(8) manpage. (Bug: #388745) 0.5.2 2009-06-17 "Something, something, something, D-Bus" * The licence for Upstart has been updated to GNU GPL v3. * Overhaul of the automatically generated D-Bus bindings code, fixing many issues with memory leaks, inconsistent return values and loss of method returns after the method has taken place. * D-Bus 1.2.4 is now required, and must be patched to fix https://bugs.freedesktop.org/show_bug.cgi?id=22316 * D-Bus Job objects now have "name", "description", "author" and "version" properties. * D-Bus Instance object now have "name", "goal" and "state" properties. * initctl now obtains the name properties for display instead of printing the mangled object path component. (Bug: #299290) * D-Bus configuration updated now that the daemon is fixed to be deny-by-default, and updated to avoid bare "send_interface" stanzas. (Bug: #323021) * Fixed assertion caused by the post-start or pre-stop scripts exiting after the main process of a respawning job had exited (Bug: #381048) * The /proc filesystem need not be mounted if the "oom_adj" configuration stanza is not used. (Bug: #259801) * Overly large values to configuration stanzas are now caught and rejected. (Bug: #340134) * The --enable-compiler-warnings configure option has been extended to add -Wextra, but turns off a few of the more extreme warnings * GNU C Library v2.4 (or backported inotify support) is required * pkg-config 0.22 is now required, it probably was anyway but we now explicitly check for it. * Dependency on Python for the D-Bus binding tool has been dropped and replaced with a dependency on expat 2.0.0 0.5.1 2009-01-29 "Unexpected item in bagging area" * Major rewrite of the memory allocator used by Upstart; the old allocator had several limitations and a few issues. I must stress that none of the issues were known to affect Upstart itself, however it pays to be prudent. * An issue where an object in a linked list would be freed after the linked list was freed was fixed. Upstart had some twisty code logic to work around it, which has now been dropped. * An issue where a string could fail to be appended in an OOM situation was fixed; if Upstart is affected, this could cause D-Bus Introspection data to be corrupted. * An issue where multiple socket watches being freed could lead to bad memory access has been fixed; Upstart 0.5.0 included a temporary fix for the D-Bus connection handling, this replaces that with a proper fix that also corrects the same problem for timers and other main loop watches that Upstart was not believed to be affected by. * Compiler warnings when compiling the test suite with -O1 and above have been fixed where found. * A race condition in the test cases for a process stopping with SIGSTOP has been fixed, this could sometimes cause this test to hang. 0.5.0 2008-08-12 "One of those deaf-mutes" * The relationship between job definitions and their running instances has been overhauled completely. Jobs may have zero or more instances, each one uniquely identified by their instance name which is set by expanding the argument to the "instance" stanza against the instance's environment. For example, a job with "instance $TTY" in its definition will have new instances created when started with TTY=tty1 and TTY=tty2, but starting again with TTY=tty1 will fail if that instance is already running. * The default job configuration remains to be a singleton, however this is now accomplished simply by having the default for the instance stanza set to a static string. * Job events now include the instance name in a new $INSTANCE variable, and will always have $UPSTART_INSTANCE set in the environment of their processes. * Jobs may export environment from themselves into the job events using the new "export" stanza. * Events no longer have both arguments and environment, instead the order the environment is specified in is remembered and is used when matching. * The "start on" and "stop on" stanzas may now only be specified once, multiple events should be joined with the new "or" operator. A new "and" operator exists as well, and parentheses are permitted, allowing arbitrarily complicated expression matches. * All environment from the matched start events is placed in the job, with the list of matched events placed in the $UPSTART_EVENTS variable, replacing the previous singular $UPSTART_EVENT variable. * The matches for the "stop on" stanza may refer to variables from the job environment, which comes from the "start on" stanza. For example: start on started apache or started httpd stop on stopping $JOB * Job environment from the start command or events is available to all scripts, including "pre-stop" and "post-stop". * Environment from the matched stop events is only available to the "pre-stop" script, with the list of matched events placed in the $UPSTART_STOP_EVENTS variable so that the list of events that started the job is still available. * Environment is no longer lost after a respawn. * Environment from the kernel or initramfs may be included in a job by use of the "env NAME" stanza without a value set. * The "started" event is no longer emitted if the pre-stop script restarts the job, since the "stopping" event was never emitted. * By default, jobs now have the most suitable settings for a daemon process that would match what they would have had by calling daemon(). In particular, this means that the previous "service" stanza is now the default and tasks need to specify a "task" stanza. It also means that if the job really wishes to be a session leader (e.g. getty), it must specify the new "session leader" stanza. * Processes that fork once may be supervised with the new "expect fork" stanza, processes that fork twice (most daemons) may be supervised with the new "expect daemon" stanza and processes that do not fork may signal readiness by SIGSTOP with the new "expect stop" stanza. * The "pid file", "pid timeout" and "daemon" stanzas have been removed in favour of the new functionality. * "respawn" now works for tasks, this will repeat the task until it finishes with a zero exit status or any other specified by "normal exit". * "respawn limit" now only affects automatic respawns, not those done by command. * If the main process fails to start due to exec() error, or other process setup error, it will not be respawned. * "respawn limit" may be "unlimited". * The "stalled" event has been removed. * "logd" was not maintained, and did not function correctly, so has been removed from the source. The "console logged" stanza has also been removed. * New "oom" stanza allows adjustment of the OOM killer priority of the process and may be "never" to inhibit it. * The configuration directory has now changed to /etc/init/jobs.d * Configuration is still reloaded with inotify, but may be forced by sending init a HUP signal or with "initctl reload". * Support for the STOP, CONT and TERM signals has been removed. * libupstart and the native IPC mechanism has been removed, communication is now via D-Bus which is a new dependency. * The dependency on D-Bus introduces build-dependencies on pkg-config and Python. * The minimal recommended kernel version is now 2.6.24 * The compat directory has been removed, the utilities are now considered part of Upstart. * initctl jobs has been dropped. * initctl commands do not support --no-wait yet * initctl status with no arguments now shows all jobs. * initctl events no longer exists 0.3.10 2009-06-17 "Two minutes to Belgium" * Compilation fixes * Fixed assertion caused by the post-start or pre-stop scripts exiting after the main process of a respawning job had exited (Bug: #381048) 0.3.9 2007-10-11 "Highway to the Danger Zone" * Fixed crasher caused by starting a job with a no-arguments event. * Initialisation order changed so that the control socket is opened and configuration parsed after inherited file descriptors are closed and the console opened. Otherwise if we inherit fewer than the standard three file descriptors (e.g. from OpenVZ) we closed our own control socket, etc. (Bug: #87173) * Kill all processes in a supervised process's process group so that we catch looping or sleeping processes that a shell is waiting for. (Bug: #121733) * Missing inotify support detected correctly and warning suppressed. * Stanza names in configuration may no longer be placed inside quotes. * Fix dangling halt and poweroff symlinks when Upstart compiled without --enable-compat=sysv. (Bug: #93356) * Fix that --with-included-gettext did not include libintl.a as it should have. (Bug: #117848) * Updated hacking requirements to Automake 1.10 and Gettext 0.16.1 since this version of Automake makes it easier for package maintainers because it causes us to ship libtool.m4 ourselves. 0.3.8 2007-03-11 "I had a little drink about an hour ago" * Fix an assertion error that occurred whenever a stop event for an instance job was emitted. * Correct a bug where calling "stop" from a job without arguments would stop the running job, and attempt to block until it was stopped. This can obviously never happen since it won't stop until stop unblocks. * Add "version" and "log-priority" commands to initctl. 0.3.7 2007-03-09 "Lines of communication" * The "normalexit" stanza has been changed to "normal exit". * The "respawn COMMAND" short-cut for specifying both "respawn" and "exec" in the same stanza has been removed. Jobs that previously used syntax such as: respawn /sbin/getty 38400 tty1 Should be changed to use: exec /sbin/getty 38400 tty1 respawn While the shortcut saved a little typing, it caused confusion and hid the fact that "exec" and "script" were both options for respawning services. * The "on EVENT" stanza has been removed, change your jobs to use the identical "start on EVENT" instead. This is because the "on" stanza may be useful for other things in future. * Stanzas in job definitions may no longer be surrounded by single or double quotes, allowing them to be turned into ordinary tokens by quoting them. * Configuration of running jobs is no longer immediately changed when the definition is changed on disk; the job must be stopped first. If the job is an instance job, all instances must be stopped before an instance of the changed job definition will be started. This ensures that the post-stop process run when the job is stopped matches the pre-start process run when it was started, and for instance jobs ensures that any locking between them is identical. Jobs marked for deletion, or jobs that have not yet replaced another, will not ordinarily show up in the output of initctl "status" or "list" unless addressed by id. They cannot be started or stopped, even when addressed by id. * Job definitions may safely omit "exec"/"script"; the job will stay in the running state with no process until it is stopped manually or by an event. This allows a service to define hardware configuration; for example the mixer service could restore the ALSA mixer in its pre-start script and save the mixer state in its stop script. "start mixer" would restore the state, "status mixer" would show it was running and "stop mixer" would save the state again and presumably mute it. * Sending the SIGPWR signal to init will emit the power-status-changed event. A simple job can hook this event, check the /etc/powerstatus file and take further action. * As well as their name, all jobs now also have a unique id exported in the UPSTART_JOB_ID environment variable and viewable with initctl by using the "--show-ids" option to "status" or "list". The unique id is changed whenever the job is reloaded from disk, or whenever a new instance is started. "start" and "stop" now default to UPSTART_JOB_ID if no arguments are given (falling back to UPSTART_JOB if that is not present either). This means they act on the current instance of the job, rather than spawning a new instance or stopping all instances. "start", "status" and "stop" also accept a new "--by-id" option which makes them expect job ids as arguments instead of job names. * The initctl "status" and "list" commands group instances of instance jobs together in their output, rather than repeating them without further clarification. E.g.: foo (instance) (start) starting (start) running, process 1000 (stop) post-stop, process 1050 The "stop" command will stop all instances when given the name of an instance job; individual instances can be stopped using "--by-id" after obtaining the id from "status --show-ids". * Wildcard patterns of job names to be listed can be given as an argument to the initctl "list" command. * Starting and stopping jobs with initctl will now block until the job reaches its goal state, outputting all status changes and process ids until the goal is reached and will also output an error and exit with a non-zero status if the job fails. Remember that jobs default to being tasks, so "start" will actually block until the job finishes and returns back to "(stop) waiting". Use the "service" or "respawn" stanza to turn them into services to that they only block until the "(start) running" state is reached. 0.3.5 2007-02-10 "Wear flowers in your hair" * Serialisation of job state between upstart processes is disabled; though upstart will still re-exec itself when sent the TERM signal, the new copy will not have any of the state of the old. This will be restored in a later release. * WARNING: if you have any job declared "console owner" which is run by the "stalled" event, comment out the "start on" stanza before sending the TERM signal -- otherwise the newly started process will start that job, which will kill your running X server. * logd and the "console logged" (default) option are currently disabled, pending large-scale changes to the way that this works. * Job scripts have been renamed; "start" to "pre-start" and "stop" to "pre-stop". * A new "post-start" script has been added, it's run after the main process has been started and the "started" event is not emitted until it finished. * A new "pre-stop" script has also been added, it's run when a request or event comes in to stop a job, before the "stopping" event is emitted and before the job is killed. If this restarts the job, it will not be stopped. * Job processes now have an UPSTART_JOB environment variable containing the name of the job. * initctl start, stop and status will default to using UPSTART_JOB if no arguments are given. Therefore you can just put "stop" or "start" into a job script. * Where a job was started or stopped by an event, the processes now have an UPSTART_EVENT environment variable containing the name of the event. * Events may now have arguments and environment variables attached, these can be specified with initctl, e.g. # initctl emit network-interface-up eth0 -eADDR=00:11:22:33:44:55:66 * These arguments can be matched in the job by placing them after the event name for the "start on" or "stop on" stanzas: start on network-interface-up eth* Additional arguments in the event are assumed to match if not specified in the job definition, and wildcards may be used within the job definition as shown above. * The arguments are also passed to the script of any job started or stopped by this event as positional arguments, and the environment variables are placed into the environment of the job. * The set of events emitted due to a job state change have been completely changed. The new events are as follows: started: this is emitted once the job is running and ready, and receives the job name as an argument. stopped: this is emitted once the job has been fully stopped. As well as the job name, if the job terminated normally it will have the "ok" argument; otherwise it will have the "failed" argument followed by the name of the script that failed ("running" for the main job) and either an EXIT_STATUS or EXIT_SIGNAL environemtn variable indicating why it failed. starting: this is emitted before the job is started (before even the pre-start script is run). Arguments are as "started". The job will not be started until this event has finished. stopping: this is emitted before the job is stopped (but after the pre-stop script is run). Arguments are as "stopped". The job will not be stopped until this event has finished. These events can be usefully combined as follows. If the "hal" job requires "dbus" to be running, and "hal" must be stopped before "dbus" may stop: start on started dbus stop on stopping dbus If the "tomcat" job believes that it must be running before "apache" can run, and should not be stopped until "apache" has been stopped: start on starting apache stop on stopped apache * The event named for the job has been completely removed; thus jobs and events no longer share a namespace. * Jobs have goals to reach; for a task (the default), the goal is to go from stopped, to started and back to stopped again. This means that when used for the "starting" or "stopping" event, the entire task has to complete before the referenced job can actually be started or stopped. Services will normally only want the goal to be to go from stopped to started; thus when used in "starting" in the example above, the referenced job can be started once the service has been started (and not stopped again). A service is defined by specifying either "respawn" or "service" in the definition. * The list of exit codes that determine whether the main process failed or succeeded can be specified by the "normalexit" configuration stanza. The arguments to this stanza can be exit codes or signal names, e.g. normalexit 1 99 100 INT QUIT Zero is implied in the list, unless the job is marked "respawn" since for those jobs, this is the list of exit codes and signals that cause the job to be not respawned. * There is no longer a respawning state, or "respawn script". Jobs will instead be stopped and started through the same scripts. * Jobs marked with the "instance" stanza can be started multiple times; each time they are started, a new instance is created. * If any job whose goal is changed by an event fail to reach their new goal, a further "EVENT-NAME/failed" event will be emitted once the event has finished being handled. This can be used to emit, for example, a "path-unmounting" event and to not proceed to "path-unmounted" unless it succeeds. * initctl emit will block until the event has been handled; it will also output job status information for any job changed by the event and terminate with an exit status of 1 if any of those jobs failed to reach their new goal. * The set of events emitted by the "telinit" compatibility command have been changed. It now only emits a single "runlevel" event, and supplies the new runlevel as an argument to it. You should change job files that use: start on runlevel-2 to use the following: start on runlevel 2 This means also that "stop on runlevel" would stop the job on any runlevel change. * Neither the "telinit" nor "shutdown" commands now emit a "shutdown" event, in fact, this event has been removed altogether. "shutdown" now simply emits the appropriate runlevel event; the -H and -P arguments set the INIT_HALT variable in the environment of that event, just as it does in sysvinit. * Normal output from initctl, etc. is no longer prefixed "initctl:" * The "ctrlaltdel" event has been renamed to "control-alt-delete". 0.3.2 2007-02-06 "Could anybody have tampered with your luggage?" * Fix leak of inotify file descriptor that could allow any process on the system to remove upstart's watch on its configuration directory. * New "emits" configuration stanza, used to list events that are emitted by the job itself. Intended for use by front-ends to draw event graphs and the like. * Dropped "depends" configuration stanza and all related code. This will be replaced by the complex state mechanism. * Rewritten IPC code to be significantly simpler, with the goal of having a stable interface once we hit the end of this milestone series. * Rewritten configuration parser and inotify watch infrastructure to be more maintainable in future. * Now supports systems where inotify is disabled. * Duplicate configuration stanzas are no longer permitted. * Bug fixes, especially concerning malloc failure. 0.3.1 2006-12-13 "The Gathering" * Compilation fixes * Bug fixes. * Massive improvement to test framework, which should make it much easier to test new features. 0.3.0 2006-10-17 * Reverted logd behaviour from previous version, it's up to the init scripts to send messages to the console if they wish. * Compatibility programs must now be explicitly enabled by using ./configure --enable-compat=sysv * "shutdown" and "reboot" are now considered System V compatibility programs, as they emulate the behaviour of those. Dropped some added options to make them fit. * All programs given improved --help text. * "initctl" rewritten, any sub-command can be run directly by making it a symlink to "initctl" itself. * "start", "stop" and "status" are now just symlinks to "initctl"; not a separate binary. 0.2.7 2006-09-20 * logd writes received messages to the console unless "quiet" is on the kernel command-line * runaway jobs are now caught when they start, rather than respawn, so stop/start loops are caught * Include inotify support for compiling under glibc 2.3 0.2.6 2006-09-13 * Fix major bug on architectures with 64-bit kernel and 32-bit user-land caused by an inconsitency between the behaviour of kernel's compat_sys_waitid() vs. sys_waitid() functions. * "halt" now only calls "shutdown -h now" 0.2.5 2006-09-09 * "control-alt-delete" event name changed to "ctrlaltdel". * "initctl shutdown EVENT" added that performs the same job as "shutdown" but without all the usual warnings, timings, etc. * "logd" has now been written, if installed this is started by init before sending the "startup" call and all jobs with "console logged" (the default) will have their output sent to this daemon. It currently just logs to /var/log/boot. * "shutdown -k" implemented. * The "shutdown" utility has been changed to generate "system-halt" for "-H", "power-off" for "-P" and just "halt" if only "-h" given. * If "shutdown" is run when running under sysvinit, it will now send the appropriate /dev/initctl message to allow upgrades. * "telinit S" implemented. * Instead of trying to start or stop jobs, "telinit" now just sends "runlevel-X" events. * The "telinit" utility now ensures a "shutdown" event is sent before switching to runlevel 0, 1 or 6. * If "telinit" is installed and init is called by the super-user, "telinit" is invoked instead. * Basic manual pages included. 0.2.1 2006-09-01 * Compilation fixes 0.2.0 2006-09-01 * "shutdown", "reboot", "halt" and "poweroff" utilities provided that match their traditional equivalents. * "start", "stop" and "status" utilities provided to start, stop and query the status of jobs respectively. * "runlevel" and "telinit" utilities provided for compatibility. * "initctl list" will list active jobs. * Events vastly simplified to just simple strings. * Jobs now generate "jobname/start", "jobname/started", "jobname/stop" and "jobname/stopped" events as they go through state transitions. * Services generate a "jobname" event when they are running. * Tasks generate a "jobname" event when they have finished. * The "shutdown" utility will generate a "shutdown" event followed by one of "maintenance", "reboot", "halt" or "poweroff" or any admin-specified event. * "stalled" event generated when no jobs are running or queued. * "control-alt-delete" event generated when that key combination is pressed * "kbdrequest" event generated when Alt-UpArrow is pressed * Runaway respawning services will now be caught. * init will re-exec on receipt of the SIGUSR1 signal. 0.1.1 2006-08-25 * Minor bug fixes. 0.1.0 2006-08-24 * Initial public release.