The Epoch Init System: A New Beginning.

History

One day in July 2013, I decided that I wanted to write an init system to use with a custom linux system I was already working on, since I didn't want anything big like Upstart or systemd since this was a small system, and because none of the alternatives met my desires either. I didn't want to use busybox init because it wasn't featureful enough and to achieve the desired effect would require miles of shell script, and what I did before (using pure shell script with calls to the busybox binary for power control) was hideous and unsafe. I decided that I wanted to write an init system that kept things to the basics and kept size down, but had a reasonable amount of features, one that would make it easy for me to configure every service in a few minutes by hand, one that wouldn't require any real dependencies so I could cram it into a 2MB ramdisk, and one that had good facilities for managing services without actually having to open a configuration file. I wanted big init system features at a little init system price. Since I couldn't think of any that met all of the criteria, I pursued my little idea to write an init system of my own. I originally intended to keep it as my little secret, but since I greatly underestimated the work involved in my little project, as the project grew, it became obvious that hiding it wouldn't make much sense after all this work. The core features I wanted were quickly determined, and the new init system became functional around September 2013.

Release history

On January 24th 2014, the Epoch Init System version 1.0 "Sage" was released. On February 23rd 2014, the Epoch Init System version 1.0.1 "Sage" was released.

Features

Here is a list of notable features Epoch provides:
  • All services and options go in one configuration file, providing easy configuration and unrivaled control.
  • Built-in optional logging system capable of recording events even before the filesystem is writable, WITHOUT an initial ramdisk.
  • Epoch provides it's own implementation of killall5 and wall, though use of these is optional.
  • Epoch has no dependencies besides a linux kernel, libc, and pthreads, and a working /bin/sh is suggested, but Epoch can be built to not require it.
  • Epoch's MountVirtual configuration attribute can be used to automatically mount filesystems such as /dev/, /proc, /sys, /dev/pts, etc with the correct permissions, before any services are launched.
  • Epoch has support for automatically restarting stopped services via the AUTORESTART option.
  • Epoch provides service control through the 'epoch' command, including start and stop, disable and enable, status, runlevel management, and much more, all without dependencies such as dbus or piles of shell scripts.
  • Epoch tracks the PIDs of all services, supports PID files, and supports sending signals to a PID to stop a service.
  • Epoch provides support for a boot banner greeting message with color support, and the ability to read the banner from a file.
  • Epoch provides support for setting the hostname before any services are started, optionally from a file.
  • Epoch uses a protocol called the membus to send information over shared memory, making communication simple from Epoch's applets to init, and enabling the creation of C/C++ third party configuration GUIs etc.
  • All Epoch applets besides the root 'epoch' executable are symbolic links, meaning that you can choose which killall5 or wall binary you use, and that by replacing the 'epoch' binary, you update the entire init system.
  • Epoch does not require a tree of complicated directories scattered across the system to hold it's configuration and data, but rather requires one directory in /etc for it's one configuration file, and, if logging is desired, a location such as /var/log, though these options can be changed at compile time.
  • Epoch supports pivot_root/exec fully.
  • Epoch supports user/group setting.
  • Epoch supports the equivalent of 'cmd&' without /bin/sh, as the FORK option.
  • Epoch supports stdout/stderr redirection.
  • Ever have a task get stuck forever when booting or shutting down? Hit CTRL-ALT-DEL once to kill that pesky task, and hit it again within five seconds to reboot. This is, as far as I know, a unique and very useful feature.
  • Configuration and Support

    There is a basic configuration tutorial below, and our irc channel is #epoch on irc.freenode.net. Configuration File HOWTO Service Management Epoch Init System FAQ If you have other questions or need specific help, you can contact Subsentient here. I'll usually be happy to reply.

    Download the Epoch Init System

    To download the Epoch Init System, see below. Download 1.0.1 "Sage" Download tar.gz of git/master --- Epoch's github Epoch is public domain software. See unlicense.org.