A simple pure-Go Linux init system.
Dashie der otter 49acf3294d
Add rsyslogd service
10 months ago
conf Add rsyslogd service 10 months ago
conftest Add rsyslogd service 10 months ago
lutractl Ignore targets in lutractl status command 10 months ago
lutrainit Move the fix of rights for socket and fix his exec 10 months ago
shared/ipc Ignore targets in lutractl status command 10 months ago
.dockerignore Add sample LXC and docker configs 10 months ago
.drone.yml Add drone config 10 months ago
.gitignore Todo: nothing 10 months ago
Dockerfile Add sample LXC and docker configs 10 months ago
LICENSE License update 10 months ago
MAIN_CONFIG.md Update of configurations and documentations 1 year ago
Makefile It magically works 10 months ago
README.md Make markdown linter happy 10 months ago
SERVICES.md Remove some unused older references to Needs and Provides 10 months ago
common.mk Split makefiles 10 months ago
lxc-config Add sample LXC and docker configs 10 months ago

README.md

lutrainit

Main repository at https://dev.sigpipe.me/dashie/lutrainit

lutrainit is an init system for Linux written in Go.

lutrainit will do the following:

  1. Set the hostname
  2. Remount the root filesystem[1]
  3. Mount all other non-network filesystems and activate swap partitions
  4. Start processes with config files in /etc/lutrainit/lutra.d/ after their dependencies (“Requires”) are started. See conf/ for a samples config.
  5. Start some TTY or anything other user-specified.
  6. Kill running processes, unmount filesystems, and poweroff the system once that last login session ends.

(The way step 4 is handled isn’t very elegant and will likely fail if you have too many slow startup processes.)

You can also create a file /etc/lutrainit/lutra.conf for some basic configuration.

If there are any lines of the form autologin: username it will automatically log in as that username. (If there’s multiple autologin directives, it will create the appropriate number of ttys.) If any line contains persist: true, then when a tty exits, it’ll respawn the tty instead of powering down the system once all the ttys are gone.

See the conf/ folder for what you can put in /etc/lutrainit/ including services files in /etc/lutrainit/lutra.d/.

lutractl

A tool exists and communicate with the init daemon using RPC on socket /run/ottersock, it can then show init version, statistics about goroutines, memory, etc.

Installation/Usage

sudo cp lutrainit/lutrainit /sbin
sudo cp lutractl/lutractl /sbin

then add init=/sbin/lutrainit to your grub configuration. (Or alternatively, make /sbin/init a symlink to lutrainit.)

[1] This shouldn’t be required, since mount -a should take care of it in step 3 according to mount(8), but as far as I can tell it doesn’t.