From 5ad4393d9b8689476b8ede03f2b7d9c7ce7da683 Mon Sep 17 00:00:00 2001 From: ghe0 Date: Tue, 5 Nov 2024 03:36:13 +0200 Subject: [PATCH] first scripts --- create.sh | 12 +++++++++ creator_exports.sh | 6 +++++ creator_functions.sh | 63 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100755 create.sh create mode 100755 creator_exports.sh create mode 100644 creator_functions.sh diff --git a/create.sh b/create.sh new file mode 100755 index 0000000..568e7c4 --- /dev/null +++ b/create.sh @@ -0,0 +1,12 @@ +#!/bin/bash +cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" +source creator_exports.sh +source creator_functions.sh +rm -rf "$ROOT" 2>/dev/null +mkdir -p build "$ROOT" "${ROOT}/usr/bin/" +cd build + +echo_blue "Starting installation at $ROOT." + +install_busybox || exit 1 +create_archive diff --git a/creator_exports.sh b/creator_exports.sh new file mode 100755 index 0000000..16baf15 --- /dev/null +++ b/creator_exports.sh @@ -0,0 +1,6 @@ +#!/bin/bash +script_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +# root of the initrd, that will be used to create the cpio archive +export ROOT="${script_dir}/build/initrd_root" +export BUSYBOX_PATH="/usr/lib/initcpio/busybox" diff --git a/creator_functions.sh b/creator_functions.sh new file mode 100644 index 0000000..079bca8 --- /dev/null +++ b/creator_functions.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +echo_blue() { + echo -e "\033[34m$1\033[0m" +} + +echo_red() { + echo -e "\033[0;31m$1\033[0m" +} + + +# Installs a library. Expects absolute path. +install_lib() { + local lib="$1" + [[ -f "$lib" ]] || { + echo "Did not find library at path: $lib" + return 1 + } + + mkdir -p $(dirname "${ROOT}${lib}") + echo_blue "Adding library to root: $lib" + cp "$lib" "${ROOT}${lib}" +} + +# Expects to receive the absolute path as the full argument. +# Use `which binary_name` if it's in your path. +# Installs to /usr/bin +install_binary() { + local binary="$1" lib='' + [[ -f "$binary" ]] || { + echo_red "Did not find binary at path: $binary" + return 1 + } + + echo_blue "Adding binary to root: $binary" + cp "$binary" "${ROOT}/usr/bin/" + + ldd_deps="$(ldd "$binary")" + if [[ $ldd_deps == *"not a dynamic executable"* ]]; then + return 0 + fi + + while read -r lib; do + install_lib "$lib" + done <<< "$( echo "$ldd_deps" | grep -F ' => ' | awk '{ print $3 }' )" +} + +install_busybox() { + echo_blue "Installing busybox..." + [[ -f "$BUSYBOX_PATH" ]] || { + echo_red "Did not find busybox at $BUSYBOX_PATH" + echo_red "Please compile or download busybox. You can also change the path." + return 1 + } + install_binary "$BUSYBOX_PATH" + for applet in $(/usr/lib/initcpio/busybox --list); do + ln -s busybox "${ROOT}/usr/bin/$applet" + done +} + +create_archive() { + find . | cpio -o -H newc | gzip > detee-$(hostnamectl hostname)-$(uname -r).cpio.gz +}