aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--lib/main.bash37
2 files changed, 37 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 159d468..e31930f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -26,6 +26,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
the box.
- The `Makefile` has been extended with targets for creating packages for
GNU+Linux distributions.
+- The `$BASHTARD_PLATFORM` variable now contains an additional entry, `init`, to
+ allow for handling different init systems on GNU+Linux in a cleaner fashion.
### Changed
diff --git a/lib/main.bash b/lib/main.bash
index cf3e069..bbfd602 100644
--- a/lib/main.bash
+++ b/lib/main.bash
@@ -138,6 +138,7 @@ discover_system() {
BASHTARD_PLATFORM["version"]="$(discover_system_version)"
BASHTARD_PLATFORM["term"]="$TERM"
BASHTARD_PLATFORM["fqdn"]="$(hostname -f)"
+ BASHTARD_PLATFORM["init"]="$(discover_system_init)"
# When on a Linux-using OS, check for the specific distribution in use.
if [[ ${BASHTARD_PLATFORM[os]} == *"linux"* ]]
@@ -174,8 +175,36 @@ discover_system_distro() {
fi
}
-discover_system_version() {
- printf "%s" "$(uname -r | awk '{print tolower($0)}')"
+discover_system_init() {
+ local sbin_init
+
+ # Differing init systems seems to only be a thing on GNU+Linux
+ if [[ ${BASHTARD_PLATFORM["os"]} != "linux" ]]
+ then
+ return
+ fi
+
+ sbin_init="$(readlink -f "/sbin/init" | awk -F/ '{ print $NF }')"
+
+ # If /sbin/init is a symlink, it will point us towards the right thing
+ if [[ $sbin_init != "init" ]]
+ then
+ printf "%s" "$sbin_init"
+ return
+ fi
+
+ # Otherwise we try out /etc/inittab
+ if [[ -f "/etc/inittab" ]]
+ then
+ awk -F: '/^rc:/ { print $4 }' /etc/inittab \
+ | awk '{ print $1 }' \
+ | awk -F/ '{ print $NF }'
+
+ return
+ fi
+
+ # If we can't figure it out, show a warning
+ warn "$BASHTARD_NAME/util" "Can't figure out system init"
}
discover_system_key() {
@@ -199,4 +228,8 @@ discover_system_os() {
fi
}
+discover_system_version() {
+ printf "%s" "$(uname -r | awk '{print tolower($0)}')"
+}
+
main "$@"