diff options
| -rw-r--r-- | .config/kbuild/vf2/install.sh | 78 | ||||
| -rw-r--r-- | .config/kbuild/vf2/uninstall.sh | 42 | ||||
| -rwxr-xr-x | bin/kbuild | 195 |
3 files changed, 138 insertions, 177 deletions
diff --git a/.config/kbuild/vf2/install.sh b/.config/kbuild/vf2/install.sh new file mode 100644 index 0000000..355e5dd --- /dev/null +++ b/.config/kbuild/vf2/install.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash +# Copyright (C) 2025-Ω Miquel Sabaté Solà <mikisabate@gmail.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +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 /usr/bin/dracut ]; then + echo "kbuild (error): you need either 'dracut'." + 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. +dracut --kver=$name -f + +## +# Provide hints on how to configure the bootloader. + +if [ -z "$EDITOR" ]; then + EDITOR=vi +fi + +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 and update it. +$EDITOR /etc/grub.d/40_custom +grub2-mkconfig -o /boot/grub2/grub.cfg diff --git a/.config/kbuild/vf2/uninstall.sh b/.config/kbuild/vf2/uninstall.sh new file mode 100644 index 0000000..4227b52 --- /dev/null +++ b/.config/kbuild/vf2/uninstall.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +# Copyright (C) 2025-Ω Miquel Sabaté Solà <mikisabate@gmail.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +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 + +# Edit the configuration file we just produced just in case and update it. +$EDITOR /etc/grub.d/40_custom +grub2-mkconfig -o /boot/grub2/grub.cfg @@ -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. |
