Skip to content

Another minimal init system for Unix/Linux containers

License

Notifications You must be signed in to change notification settings

SwagDevOps/ylem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

f95729a · May 17, 2021
May 17, 2021
May 17, 2021
Jul 28, 2017
Jul 20, 2019
Jun 2, 2018
Aug 5, 2017
Jun 2, 2018
Jul 20, 2019
Dec 18, 2020
Feb 28, 2021
May 18, 2017
Jun 25, 2018
Jun 10, 2018
May 16, 2021
Mar 18, 2021
May 16, 2021
May 17, 2021

Repository files navigation

Ylem /ˈiːlɛm/ the primordial matter of the universe

Principles

During the Linux startup process, ylem is intended to sequentially execute arbitrary "user scripts" (alphabetically sorted). Moreover ylem provides logging which facilitates startup debugging.

Startup scripts executed through ylem SHOULD be aimed to:

  • create required files and directories
  • setup users and permissions
  • prepare the system to run deamons

For example, ylem COULD start supervisor, to manage daemons, as soon as the system is sufficiently ready.

Create an /etc/ylem/scripts directory and put your bootstraping scripts. Then scripts are executed alphabetically sorted.

Sample of use

In a Dockerfile:

ENTRYPOINT ["dumb-init", "-c", "--", "ylem", "start", "--"]
CMD ["sleep", "infinity"]

Configuration

The configuration uses a YAML syntax and remains in /etc/#{progname}/config.yml, where progname is ylem. Furthermore configuration filepath can be set on the CLI.

Available configuration keys are:

  • scripts.path
    where bootstraping scripts are stored
    default value is: /etc/#{progname}/scripts
  • logger.file
    default value is: /var/log/#{progname}.log
  • logger.level
    default value is: INFO (see: Logger::Severity)
  • environment.file
    default value is: /etc/environment (System-wide environment variables)

Missing configuration keys use default values. Configuration file can be: complete, partial or empty.

Logging

Ylem provides its own logging mechanism, based on Logger. During its init process, each handled script is logged to logger.file. Depending on logger.level only the messages with a level greater or equal will be published to the log file.

Level Format Summary
DEBUG /"BEGIN"/ script started
INFO /".*"/ script message echoed to STDOUT
WARN /".*"/ script message echoed to STDERR
DEBUG /"ENDED \[0\]/" script ended (success)
ERROR /"ERROR \[[0-9]+\]"/ script error

Resources