first scripts

This commit is contained in:
ghe0 2024-11-05 03:36:13 +02:00
parent db50f44221
commit 5ad4393d9b
Signed by: ghe0
GPG Key ID: 451028EE56A0FBB4
3 changed files with 81 additions and 0 deletions

12
create.sh Executable file

@ -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

6
creator_exports.sh Executable file

@ -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"

63
creator_functions.sh Normal file

@ -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
}