From 858f793ad26551722e6d31ef1d5d401b3986da85 Mon Sep 17 00:00:00 2001 From: Joachim Nilsson Date: Tue, 17 Oct 2017 23:52:07 +0200 Subject: [PATCH] Initial support for Void Linux Signed-off-by: Joachim Nilsson --- contrib/void/README.md | 48 ++++++++++++++++ contrib/void/build.sh | 39 +++++++++++++ contrib/void/finit.conf | 10 ++++ contrib/void/finit.d/acpid.conf | 1 + contrib/void/finit.d/available/acpid.conf | 3 + contrib/void/finit.d/available/crond.conf | 1 + contrib/void/finit.d/available/dhcpcd.conf | 1 + contrib/void/finit.d/available/dmeventd.conf | 1 + contrib/void/finit.d/available/getty.conf | 4 ++ contrib/void/finit.d/available/keymap.conf | 2 + contrib/void/finit.d/available/klogd.conf | 2 + contrib/void/finit.d/available/lxdm.conf | 1 + contrib/void/finit.d/available/modules.conf | 6 ++ contrib/void/finit.d/available/ntpd.conf | 2 + contrib/void/finit.d/available/sshd.conf | 2 + contrib/void/finit.d/available/syslogd.conf | 2 + contrib/void/finit.d/available/uuidd.conf | 1 + contrib/void/finit.d/dhcpcd.conf | 1 + contrib/void/finit.d/getty.conf | 1 + contrib/void/finit.d/sshd.conf | 1 + contrib/void/finit.d/uuidd.conf | 1 + contrib/void/install.sh | 59 ++++++++++++++++++++ contrib/void/xbps | 0 23 files changed, 189 insertions(+) create mode 100644 contrib/void/README.md create mode 100755 contrib/void/build.sh create mode 100644 contrib/void/finit.conf create mode 120000 contrib/void/finit.d/acpid.conf create mode 100644 contrib/void/finit.d/available/acpid.conf create mode 100644 contrib/void/finit.d/available/crond.conf create mode 100644 contrib/void/finit.d/available/dhcpcd.conf create mode 100644 contrib/void/finit.d/available/dmeventd.conf create mode 100644 contrib/void/finit.d/available/getty.conf create mode 100644 contrib/void/finit.d/available/keymap.conf create mode 100644 contrib/void/finit.d/available/klogd.conf create mode 100644 contrib/void/finit.d/available/lxdm.conf create mode 100644 contrib/void/finit.d/available/modules.conf create mode 100644 contrib/void/finit.d/available/ntpd.conf create mode 100644 contrib/void/finit.d/available/sshd.conf create mode 100644 contrib/void/finit.d/available/syslogd.conf create mode 100644 contrib/void/finit.d/available/uuidd.conf create mode 120000 contrib/void/finit.d/dhcpcd.conf create mode 120000 contrib/void/finit.d/getty.conf create mode 120000 contrib/void/finit.d/sshd.conf create mode 120000 contrib/void/finit.d/uuidd.conf create mode 100755 contrib/void/install.sh create mode 100644 contrib/void/xbps diff --git a/contrib/void/README.md b/contrib/void/README.md new file mode 100644 index 00000000..261030b2 --- /dev/null +++ b/contrib/void/README.md @@ -0,0 +1,48 @@ +HowTo: Finit on Void Linux 3.4-3.6 +==================================== + +HowTo use Finit to boot an [Void Linux][] system. It is assumed that +the user has already installed make, a compiler, C library header files, +and other tools needed to build a GNU configure based project. + +To start with you need to first install [libuEv][] and [libite][]. They +default to install to `/usr/local`, but unlike Debian and Ubuntu based +distros, Void's `pkg-config` does not look for libraries and header +files there. So the `PKG_CONFIG_LIBDIR` environment variable must be +used, or change the install prefix to `/usr`. + +The bundled [build.sh](build.sh) script can be used to configure and +build finit: + + void:~# cd finit + void:~/finit# ./contrib/void/build.sh + +Then run the [install.sh](install.sh) script to install all necessary +files, including the sample `finit.conf` and `finit.d/*.conf` files. +More on that below. + + void:~/finit# ./contrib/void/install.sh + +The install script is non-destructive by default, you have to answer +*Yes* twice to set up Finit as the system default init. Pay close +attention to the last question: + + *** Install Finit as the system default Init (y/N)? + +If you answer `No`, simply by pressing enter, you can change the symlink +yourself later on, to point to `finit` instead of `/bin/busybox`: + + void:~/finit# cd /sbin + void:/sbin# rm init + void:/sbin# ln -s finit init + +Before rebooting, make sure to set up a [/etc/finit.conf](finit.conf), +and [/etc/finit.d/](finit.d/) for your services. Samples are included +in this directory. Notice the symlinks in `/etc/finit.d/`, which can be +managed by the operator at runtime using `initctl enable SERVICE`. You +can also use a standard [/etc/rc.local](rc.local) for one-shot tasks and +initialization like keyboard language etc. + +[libuEv]: https://github.com/troglobit/libuev +[libite]: https://github.com/troglobit/libite +[Void Linux]: https://www.voidlinux.eu/ diff --git a/contrib/void/build.sh b/contrib/void/build.sh new file mode 100755 index 00000000..763a605c --- /dev/null +++ b/contrib/void/build.sh @@ -0,0 +1,39 @@ +#!/bin/sh -e + +echo +echo "*** Configuring Finit for Void Linux" + +if [ ! -e configure ]; then + echo " The configure script is missing, maybe you're using a version from GIT?" + echo " Attempting to run the autogen.sh script, you will need these tools:" + echo " autoconf, automake, libtool, pkg-config ..." + echo + ./autogen.sh +fi + +# The plugins are optional, but you may need D-Bus and X11 if you want +# to run X-Window, the other configure flags are however required. +PKG_CONFIG_LIBDIR=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig ./configure \ + --enable-rw-rootfs --enable-progress \ + --enable-dbus-plugin --enable-x11-common-plugin \ + --enable-alsa-utils-plugin --enable-inetd-echo-plugin \ + --enable-inetd-chargen-plugin --enable-inetd-daytime-plugin \ + --enable-inetd-discard-plugin --enable-inetd-time-plugin \ + --with-heading="Void Linux" --with-hostname=void + +echo +echo "*** Building ..." +echo +make + +if [ $? -ne 0 ]; then + echo + echo "*** The build failed for some reason" + echo + exit 1 +fi + +echo +echo "*** Done" +echo + diff --git a/contrib/void/finit.conf b/contrib/void/finit.conf new file mode 100644 index 00000000..4c32d330 --- /dev/null +++ b/contrib/void/finit.conf @@ -0,0 +1,10 @@ +# /etc/finit.conf: Example for Alpine Linux +# See /etc/finit.d/*.conf and `initctl list` for other services + +## Runlevel to start after bootstrap, runlevel 'S' +# Default is 2 +#runlevel 2 + +## Bootstrap services and tasks +# Can be listed here or in /etc/finit.d/*.conf + diff --git a/contrib/void/finit.d/acpid.conf b/contrib/void/finit.d/acpid.conf new file mode 120000 index 00000000..33a935c3 --- /dev/null +++ b/contrib/void/finit.d/acpid.conf @@ -0,0 +1 @@ +available/acpid.conf \ No newline at end of file diff --git a/contrib/void/finit.d/available/acpid.conf b/contrib/void/finit.d/available/acpid.conf new file mode 100644 index 00000000..c048d4ef --- /dev/null +++ b/contrib/void/finit.d/available/acpid.conf @@ -0,0 +1,3 @@ +# Handle PWR button to shutdown/reboot -- useful in Qemu (virt-manager) +# Depends on syslogd having started. Redirect any output to log. +service [2345] log /sbin/acpid -f -- ACPI daemon diff --git a/contrib/void/finit.d/available/crond.conf b/contrib/void/finit.d/available/crond.conf new file mode 100644 index 00000000..9f7cda64 --- /dev/null +++ b/contrib/void/finit.d/available/crond.conf @@ -0,0 +1 @@ +service [2345] /usr/sbin/crond -f -S -c /etc/crontabs -- Cron daemon diff --git a/contrib/void/finit.d/available/dhcpcd.conf b/contrib/void/finit.d/available/dhcpcd.conf new file mode 100644 index 00000000..ebde73b6 --- /dev/null +++ b/contrib/void/finit.d/available/dhcpcd.conf @@ -0,0 +1 @@ +service [2345] /usr/sbin/dhcpcd -B -M -- DHCP client diff --git a/contrib/void/finit.d/available/dmeventd.conf b/contrib/void/finit.d/available/dmeventd.conf new file mode 100644 index 00000000..64c3af1d --- /dev/null +++ b/contrib/void/finit.d/available/dmeventd.conf @@ -0,0 +1 @@ +service [S12345] /sbin/dmeventd -f -- Device mapper event daemon diff --git a/contrib/void/finit.d/available/getty.conf b/contrib/void/finit.d/available/getty.conf new file mode 100644 index 00000000..080112eb --- /dev/null +++ b/contrib/void/finit.d/available/getty.conf @@ -0,0 +1,4 @@ +# Consoles to start Finit built-in getty on when system is up +tty /dev/tty1 noclear nowait +tty /dev/tty2 noclear nowait +tty /dev/tty3 noclear nowait diff --git a/contrib/void/finit.d/available/keymap.conf b/contrib/void/finit.d/available/keymap.conf new file mode 100644 index 00000000..203253b3 --- /dev/null +++ b/contrib/void/finit.d/available/keymap.conf @@ -0,0 +1,2 @@ +# Oneshot task to run once at bootstrap +task [S] zcat /etc/keymap/se.bmap.gz | loadkmap -- Loading keymap diff --git a/contrib/void/finit.d/available/klogd.conf b/contrib/void/finit.d/available/klogd.conf new file mode 100644 index 00000000..1ce3570b --- /dev/null +++ b/contrib/void/finit.d/available/klogd.conf @@ -0,0 +1,2 @@ +# Start klogd as soon as possible, should always run +service [S12345] /sbin/klogd -n -- Kernel log daemon diff --git a/contrib/void/finit.d/available/lxdm.conf b/contrib/void/finit.d/available/lxdm.conf new file mode 100644 index 00000000..aa8459ab --- /dev/null +++ b/contrib/void/finit.d/available/lxdm.conf @@ -0,0 +1 @@ +service [2345] /usr/sbin/lxdm -- Lightweight Login Manager diff --git a/contrib/void/finit.d/available/modules.conf b/contrib/void/finit.d/available/modules.conf new file mode 100644 index 00000000..1f1ec5b3 --- /dev/null +++ b/contrib/void/finit.d/available/modules.conf @@ -0,0 +1,6 @@ +## Linux kernel modules to load +#module fbcon +module button +module evdev +module mousedev +module 8139cp diff --git a/contrib/void/finit.d/available/ntpd.conf b/contrib/void/finit.d/available/ntpd.conf new file mode 100644 index 00000000..491f8709 --- /dev/null +++ b/contrib/void/finit.d/available/ntpd.conf @@ -0,0 +1,2 @@ +# Silly Busybox ntpd has no option to use syslog when running in foreground +service [2345] log /usr/sbin/ntpd -n -N -p pool.ntp.org -- NTP daemon diff --git a/contrib/void/finit.d/available/sshd.conf b/contrib/void/finit.d/available/sshd.conf new file mode 100644 index 00000000..0bc6a63f --- /dev/null +++ b/contrib/void/finit.d/available/sshd.conf @@ -0,0 +1,2 @@ +# Start SSH daemon as soon as basic networking comes up +service [2345] /usr/sbin/sshd -D -- OpenSSH daemon diff --git a/contrib/void/finit.d/available/syslogd.conf b/contrib/void/finit.d/available/syslogd.conf new file mode 100644 index 00000000..013b7c60 --- /dev/null +++ b/contrib/void/finit.d/available/syslogd.conf @@ -0,0 +1,2 @@ +# Start syslogd as soon as possible, should always run +service [S12345] /sbin/syslogd -n -- Syslog daemon diff --git a/contrib/void/finit.d/available/uuidd.conf b/contrib/void/finit.d/available/uuidd.conf new file mode 100644 index 00000000..f00fe320 --- /dev/null +++ b/contrib/void/finit.d/available/uuidd.conf @@ -0,0 +1 @@ +service [2345] /sbin/uuidd -F -- Secure UUID generation daemon diff --git a/contrib/void/finit.d/dhcpcd.conf b/contrib/void/finit.d/dhcpcd.conf new file mode 120000 index 00000000..ae165c53 --- /dev/null +++ b/contrib/void/finit.d/dhcpcd.conf @@ -0,0 +1 @@ +available/dhcpcd.conf \ No newline at end of file diff --git a/contrib/void/finit.d/getty.conf b/contrib/void/finit.d/getty.conf new file mode 120000 index 00000000..67f7020f --- /dev/null +++ b/contrib/void/finit.d/getty.conf @@ -0,0 +1 @@ +available/getty.conf \ No newline at end of file diff --git a/contrib/void/finit.d/sshd.conf b/contrib/void/finit.d/sshd.conf new file mode 120000 index 00000000..724a9614 --- /dev/null +++ b/contrib/void/finit.d/sshd.conf @@ -0,0 +1 @@ +available/sshd.conf \ No newline at end of file diff --git a/contrib/void/finit.d/uuidd.conf b/contrib/void/finit.d/uuidd.conf new file mode 120000 index 00000000..ddedd40a --- /dev/null +++ b/contrib/void/finit.d/uuidd.conf @@ -0,0 +1 @@ +available/uuidd.conf \ No newline at end of file diff --git a/contrib/void/install.sh b/contrib/void/install.sh new file mode 100755 index 00000000..df155b3b --- /dev/null +++ b/contrib/void/install.sh @@ -0,0 +1,59 @@ +#!/bin/sh + +if [ "x`id -u`" != "x0" ]; then + echo + echo "*** This script must run as root" + echo + exit 1 +fi + +# Adjust base directory +if [ -e xbps ]; then + cd ../.. +elif [ ! -e autogen.sh ]; then + echo "Please run this script from the Finit base directory." + exit 1 +fi + +echo +echo "Install Finit on Void Linux" +echo "========================================================================" +echo "/sbin/finit - PID 1" +echo "/lib/finit/plugins/* - All enabled Finit plugins" +echo "/etc/finit.conf - Finit configuration file" +echo "/etc/finit.d/ - Finit services" +echo "/etc/grub.d/40_custom - Add menu entry to the Grub boot loader" +echo +read -p "Do you want to continue (y/N)? " yorn + +if [ "x$yorn" = "xy" -o "x$yorn" = "xY" ]; then + echo + echo "*** Installing Finit files ..." + make install + cd `dirname $0` + install -vbD finit.conf /etc/finit.conf + cp -va finit.d /etc/ + + read -p "*** Install Finit as the system default Init (y/N)? " yorn + if [ "x$yorn" = "xy" -o "x$yorn" = "xY" ]; then + echo "*** Updating /sbin/init symlink --> finit ..." + cd /sbin + rm init + ln -s finit init + fi + + echo "*** Setting up a GRUB boot entry ..." + MENU=`grep gnu-linux /boot/grub/grub.cfg |head -1 |sed "s/menuentry '\([^']*\).*/\1/"` + TYPE=`grep gnu-linux /boot/grub/grub.cfg |head -1 |sed "s/.*' --class \([a-z]*\).*/\1/"` + BOOT=`grep set=root /boot/grub/grub.cfg |head -1 |sed 's/.* \([a-f0-9]*-[a-f0-9]*-[a-f0-9]*-[a-f0-9]*-[a-f0-9]*\).*/\1/'` + ROOT=`grep root=UUID /boot/grub/grub.cfg |head -1 |sed 's/.*UUID=\([a-f0-9]*-[a-f0-9]*-[a-f0-9]*-[a-f0-9]*-[a-f0-9]*\).*/\1/'` + cat grub.d/40_custom | sed "s,\$BOOT,$BOOT,;s,\$ROOT,$ROOT,;s,\$TYPE,$TYPE,;s,\$MENU,$MENU," >/etc/grub.d/40_custom + update-grub + + echo "*** Done" + echo +else + echo + echo "*** Aborting install." + echo +fi diff --git a/contrib/void/xbps b/contrib/void/xbps new file mode 100644 index 00000000..e69de29b