diff --git a/meson.build b/meson.build index fc83422..d6b958c 100644 --- a/meson.build +++ b/meson.build @@ -1,18 +1,20 @@ # Project definition -project('zlevis-mkinitfs', license: 'GPL-2.0-only') +project('zlevis-mkinitfs', license: 'GPL-2.0-only', version: '3.12') -# Define mkinitfs features and data dir +# Define bin, mkinitfs features and data dir +bin_dir = join_paths(get_option('prefix'), get_option('bindir')) features_dir = '/etc/mkinitfs/features.d/' -data_dir = '/usr/share/mkinitfs/' +data_dir = '/usr/share/zlevis-mkinitfs/' # Define features and data list features = [] data = [] -# Define subdir with features and subdir with data +# Define subdir with src, subdir with features and subdir with data +subdir('src') subdir('features') subdir('data') # Install features in features dir and data in data dir install_data(features, install_dir: features_dir) -install_data(data, install_dir: data_dir) \ No newline at end of file +install_data(data, install_dir: data_dir) diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 0000000..63f9fde --- /dev/null +++ b/src/meson.build @@ -0,0 +1,14 @@ +# Find the script +script = find_program(meson.current_source_dir(), 'zlevis-mkinitfs.in') + +# Test the script +test('zlevis-mkinitfs.in', script, args: '--summary') + +# Configure script +configure_file( + input: 'zlevis-mkinitfs.in', + output: 'zlevis-mkinitfs', + configuration: {'VERSION': meson.project_version()}, + install: true, + install_dir: bin_dir +) diff --git a/src/zlevis-mkinitfs.in b/src/zlevis-mkinitfs.in new file mode 100755 index 0000000..e8b3dc9 --- /dev/null +++ b/src/zlevis-mkinitfs.in @@ -0,0 +1,103 @@ +#!/bin/sh + +# Exit immediately if a command exits with a non-zero status +set -e + +# Summary of the functionality of zlevis-mkinitfs +summary="A tool that implements zlevis into mkinitfs" + +# Version of zlevis-mkinitfs +version="@VERSION@" + +# Display summary +if [ "$1" = "--summary" ]; then + echo "$summary" + exit 0 +fi + +# Display version +if [ "$1" = "--version" ]; then + echo "$version" + exit 0 +fi + +# Function to display usage information of zlevis-mkinitfs +info() { + exec >&2 + echo "Usage: \"zlevis-mkinitfs {install|uninstall}\"" + exit 2 +} + +# Define locations +loc_zlevis_mkinitfs="/usr/share/zlevis-mkinitfs" +loc_mkinitfs="/usr/share/mkinitfs" +loc_conf="/etc/mkinitfs/mkinitfs.conf" + +# Function to install zlevis into mkinitfs +install() { + if [ -f "${loc_zlevis_mkinitfs}/initramfs-init" ]; then + continue + else + echo "cannot install zlevis-mkinitfs: zlevis-mkinitfs not present on system" + exit 1 + fi + + if [ -f "${loc_mkinitfs}/initramfs-init" ]; then + continue + else + echo "cannot install zlevis-mkinitfs: mkinitfs not present on system" + exit 1 + fi + + cp "${loc_mkinitfs}/initramfs-init" "${loc_mkinitfs}/initramfs-init.bak" + echo "cp: ${loc_mkinitfs}/initramfs-init to ${loc_mkinitfs}/initramfs-init.bak" + + cp "${loc_zlevis_mkinitfs}/initramfs-init" "${loc_mkinitfs}/initramfs-init" + echo "cp: ${loc_zlevis_mkinitfs}/initramfs-init to ${loc_mkinitfs}/initramfs-init" + + if grep -q "^features=" "$loc_conf"; then + if grep -q "^features=.*zlevis" "$loc_conf"; then + echo "zlevis is already in features" + exit 0 + else + sed -i '/^features=/s/"$/ zlevis"/' "$loc_conf" + echo "zlevis has been added to features" + exit 0 + fi + else + echo "partially installed zlevis-mkinitfs: mkinitfs features does not exist" + exit 1 + fi +} + +# Function to uninstall zlevis from mkinitfs +uninstall() { + if [ -f "${loc_mkinitfs}/initramfs-init.bak" ]; then + mv "${loc_mkinitfs}/initramfs-init.bak" "${loc_mkinitfs}/initramfs-init" + echo "mv: ${loc_mkinitfs}/initramfs-init.bak to ${loc_mkinitfs}/initramfs-init" + + if grep -q "^features=" "$loc_conf"; then + if grep -q "^features=.*zlevis" "$loc_conf"; then + sed -i '/^features=/s/ zlevis//g' "${loc_conf}" + echo "zlevis has been removed from features" + exit 0 + else + echo "cannot remove zlevis from features: zlevis not present" + exit 2 + fi + else + echo "uninstalled zlevis-mkinitfs: mkinitfs features does not exist" + exit 2 + fi + else + echo "cannot uninstall zlevis-mkinitfs: zlevis-mkinitfs not installed" + exit 2 + fi +} + +# Determine the argument path and execute the relevant function +case "$1" in + "install") install;; + "uninstall") uninstall;; + *) info;; +esac