aboutsummaryrefslogtreecommitdiff
path: root/bin/kbuild
diff options
context:
space:
mode:
Diffstat (limited to 'bin/kbuild')
-rwxr-xr-xbin/kbuild195
1 files changed, 18 insertions, 177 deletions
diff --git a/bin/kbuild b/bin/kbuild
index 38093f3..d60ed8f 100755
--- a/bin/kbuild
+++ b/bin/kbuild
@@ -42,14 +42,10 @@
# *NOTE*: this script expects the `ARCH` environment variable to be set, and if
# that doesn't match the current architecture, then it will expect to have
# `CROSS_COMPILE` set as well.
-# *NOTE*: it's assumed that either `update-initramfs` or `dracut` exist. If you
-# are using something else, send me a patch.
#####
set -e
-# TODO: add a -u/--uuid flag, which can specify: suse-virt, suse-vf2
-
##
# Arguments that can be passed.
@@ -103,19 +99,19 @@ HERE
exit 0
fi
-# Hard check on the profile being picked.
-case "$PROFILE" in
- "debian" | "suse")
- ;;
- "")
- echo "kbuild (error): you have to profile one of these profiles: debian, suse."
- exit 1
- ;;
- *)
- echo "kbuild (error): uknown profile '$PROFILE'. Possible values: debian, suse."
- exit 1
- ;;
-esac
+##
+# Profile select.
+
+if [ -z "$PROFILE" ]; then
+ echo "kbuild (error): you have to provide a profile."
+ exit 1
+fi
+
+PROFILE_DIR="$HOME/.config/kbuild/$PROFILE"
+if [ ! -d "$PROFILE_DIR" ]; then
+ echo "kbuild (error): given profile does not exist."
+ exit 1
+fi
##
# Initial checks.
@@ -206,166 +202,11 @@ cp .config "$INSTALL_PATH/boot/config-$name"
find "$INSTALL_PATH" -type f -printf "/%P\n" >files.txt
mv files.txt "$INSTALL_PATH/files.txt"
-# Now write the actual install script.
-cat <<SCRIPT >"$INSTALL_PATH/install.sh"
-#!/usr/bin/env bash
-
-set -ex
-
-##
-# Ensure you are root and dependencies are met.
-
-if [ "\$EUID" -ne 0 ];then
- echo "kbuild (error): run this as root."
- exit 1
-fi
-
-if [ ! -f /sbin/update-initramfs ] && [ ! -f /usr/bin/dracut ]; then
- echo "kbuild (error): you need either 'dracut' or 'update-initramfs'."
- exit 1
-fi
-
-##
-# Copy files into filesystem and generate initramfs.
-
-# Regular installs.
-cp -rv usr /
-cp -rv boot /
-
-# Some environments like 'update-initramfs' on Ubuntu expect files to be placed
-# under a special directory in /usr/lib/firmware. Pull this trick now.
-mkdir -p /usr/lib/firmware/$name/device-tree/
-cp -rv boot/dtbs/$name/* /usr/lib/firmware/$name/device-tree/
-
-# And run dracut/update-initramfs.
-export PATH=/sbin:\$PATH
-if command -v dracut &> /dev/null
-then
- dracut --kver=$name -f
-else
- # 'update-initramfs' might fail when trying to run 'flash' on Ubuntu, which
- # is done as a post update script. This is expected, so ignore it.
- set +e
- update-initramfs -k $name -u
- set -e
-fi
-
-##
-# Provide hints on how to configure the bootloader.
-
-
-if [ -z "\$EDITOR" ]; then
- EDITOR=vi
-fi
-SCRIPT
-
-case "$PROFILE" in
- "debian")
- cat <<SCRIPT >>"$INSTALL_PATH/install.sh"
- cat <<EXT >>/boot/extlinux/extlinux.conf
-
-###
-### NOTE: generated by kbuild.
-###
-
-label l1
- menu label Debian GNU/Linux bookworm/sid $name
- linux /vmlinuz-$name
- initrd /initrd.img-$name
-
- fdtdir /dtbs/$name
- append root=/dev/nvme0n1p4 rw console=tty0 console=ttyS0,115200 earlycon rootwait debug
-
-label l1r
- menu label Debian GNU/Linux bookworm/sid $name (rescue target)
- linux /vmlinuz-$name
- initrd /initrd.img-$name
-
- fdtdir /dtbs/$name
- append root=/dev/nvme0n1p4 rw console=tty0 console=ttyS0,115200 earlycon rootwait single debug
-EXT
-
-\$EDITOR /boot/extlinux/extlinux.conf
-SCRIPT
- ;;
- "suse")
- cat <<SCRIPT >> "$INSTALL_PATH/install.sh"
- cat <<EXT >/etc/grub.d/40_custom
-#!/bin/sh
-exec tail -n +3 \\\$0
-
-###
-### NOTE: generated by kbuild.
-###
-
-menuentry 'openSUSE on Linux $name' --class opensuse --class gnu-linux --class gnu --class os \\\$menuentry_id_option 'gnulinux-simple-22391c4c-ad76-c05c-84b3-535dc2efaf97' {
- load_video
- set gfxpayload=keep
- insmod gzio
- insmod part_gpt
- insmod btrfs
- search --no-floppy --fs-uuid --set=root 22391c4c-ad76-c05c-84b3-535dc2efaf97
- echo 'Loading Linux $name ...'
- linux /boot/vmlinuz-$name root=UUID=22391c4c-ad76-c05c-84b3-535dc2efaf97 \\\${extra_cmdline} security=selinux selinux=1 loglevel=3 splash=silent systemd.show_status=1
- echo 'Loading initial ramdisk ...'
- initrd /boot/initrd-$name
-}
-EXT
-
-# Edit the configuration file we just produced just in case.
-\$EDITOR /etc/grub.d/40_custom
-
-# And update grub itself.
-grub2-mkconfig -o /boot/grub2/grub.cfg
-SCRIPT
- ;;
- *)
- ;;
-esac
-
-# And the uninstall script.
-cat <<SCRIPT >"$INSTALL_PATH/uninstall.sh"
-#!/usr/bin/env bash
-
-set -ex
-
-if [ "\$EUID" -ne 0 ];then
- echo "kbuild (error): run this as root."
- exit 1
-fi
-
-if [ ! -f files.txt ]; then
- echo "kbuild (error): there must be a 'files.txt' file."
- exit 1
-fi
-
-xargs rm -f < files.txt
-rm -rf /usr/lib/modules/$name
-rm -rf /boot/dtbs/$name
-rm -rf /usr/lib/firmware/$name
-rm -f /boot/initrd-$name
-rm -f /boot/initrd.img-$name
-
-if [ -z "\$EDITOR" ]; then
- EDITOR=vi
-fi
-
-SCRIPT
-
-case "$PROFILE" in
- "debian")
-cat <<SCRIPT >>"$INSTALL_PATH/uninstall.sh"
-\$EDITOR /boot/extlinux/extlinux.conf
-SCRIPT
- ;;
- "suse")
-cat <<SCRIPT >>"$INSTALL_PATH/uninstall.sh"
-\$EDITOR /etc/grub.d/40_custom
-update-bootloader
-SCRIPT
- ;;
-esac
-
+# Copy install/uninstall scripts.
+cp "$HOME/.config/kbuild/$PROFILE/install.sh" "$INSTALL_PATH/install.sh"
+sed -i "s/\$name/$name/g" "$INSTALL_PATH/install.sh"
+cp "$HOME/.config/kbuild/$PROFILE/uninstall.sh" "$INSTALL_PATH/uninstall.sh"
+sed -i "s/\$name/$name/g" "$INSTALL_PATH/uninstall.sh"
##
# Create tarball.