Files
finit/doc/build.md
T
2016-07-23 00:25:14 +02:00

3.3 KiB

Building

Finit comes with a traditional configure script to control features and optional plugins to enable. It does however depend on two external libraries that provide some frog DNA needed:

Like most free/open source software that uses configure they deafult to install to /usr/local. However, some Linux distributions do no longer search that path for installed software, e.g. Fedora and Alpine Linux. To get finit's configure script to find its dependencies you have to help the pkg-config tool a bit if you do not change the default prefix path:

PKG_CONFIG_LIBDIR=/usr/local/lib/pkgconfig ./configure

Below are a few of the main switches to configure:

  • --disable-inetd: Disable the built-in inetd server.

  • --enable-embedded: Target finit for BusyBox getty and mdev instead of a standard Linux distribution with GNU tools and udev.

  • --enable-rw-rootfs: Most desktop and server systems boot with the root file stystem read-only. With this setting Finit will remount it as read-write early at boot so the bootmisc.so plugin can run. Usually not needed on embedded systems.

  • --enable-static: Build Finit statically. The plugins will be built-ins (.o files) and all external libraries, except the C library will be linked statically.

  • --enable-alsa-utils: Enable the optional alsa-utils.so sound plugin.

  • --enable-dbus: Enable the optional D-Bus dbus.so plugin.

  • --enable-lost: Enable noisy example plugin for HOOK_SVC_LOST.

  • --enable-resolvconf: Enable the resolvconf.so optional plugin.

  • --enable-x11-common: Enable the optional X Window x11-common.so plugin.

For more configure flags, see ./configure --help

Example

First, unpack the archive:

    $ tar xf finit-3.0.tar.xz
    $ cd finit-3.0/

Then configure, build and install:

    $ ./configure --enable-embedded --enable-rw-rootfs --enable-inetd-echo-plugin \
                  --enable-inetd-chargen-plugin --enable-inetd-daytime-plugin     \
                  --enable-inetd-discard-plugin --enable-inetd-time-plugin        \
                  --with-heading="Alpine Linux 3.4" --with-hostname=alpine
    $ make
    .
    .
    .
    $ DESTDIR=/tmp/finit make install

In this example the finit-3.0.tar.xz archive is unpacked to the user's home directory, configured, built and installed to a temporary staging directory. The environment variable DESTDIR controls the destination directory when installing, very useful for building binary standalone packages.

To target an embedded Linux system, usally a system that use BusyBox tools instead of udev & C:o, add --enable-embedded to the configure command above. This enables mdev instead of udev and the BusyBox getty syntax. Remember to also change the Linux config to:

CONFIG_UEVENT_HELPER_PATH="/sbin/mdev"

Note: If you run into problems starting Finit, take a look at finit.c. One of the most common problems is a custom Linux kernel build that lack CONFIG_DEVTMPFS. Another is too much cruft in the system /etc/fstab.