diff options
Diffstat (limited to 'server/modules/hdd-boot/opt/openslx/scripts/systemd-hdd_boot')
-rwxr-xr-x | server/modules/hdd-boot/opt/openslx/scripts/systemd-hdd_boot | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/server/modules/hdd-boot/opt/openslx/scripts/systemd-hdd_boot b/server/modules/hdd-boot/opt/openslx/scripts/systemd-hdd_boot new file mode 100755 index 00000000..adf5f002 --- /dev/null +++ b/server/modules/hdd-boot/opt/openslx/scripts/systemd-hdd_boot @@ -0,0 +1,122 @@ +#!/bin/ash + +boot_download () { + + # Downloading all in SLX_BASE_PATH to /boot Example: Ubuntu_1404_x64 + # wget -N, update if the file has been changed + + + cd /boot + echo "Downloading $SLX_BASE_PATH ................." + wget -N -r --tries=3 --timeout=5 --quiet -nH -l1 --no-parent --reject="index.html*" --reject="$SLX_BASE_PATH.*" $SLXSRV/$SLX_BASE_PATH #<---- ok =), but try with -nc too + RET=$? + [ $RET != 0 ] && { echo "Error - downloading 'http://$SLXSRV/$SLX_BASE_PATH/' via wget failed."; exit 1; } ||{ echo "Successfully downloaded 'http://$SLXSRV/$SLX_BASE_PATH' via wget."; return 0; } + +} + +# Getting informations from cmdline +read KCL < "/proc/cmdline" +for opts in ${KCL}; do + case "${opts}" in + slxbase=*) # BASE_PATH Example Ubuntu_1404_x64 + SLX_BASE_PATH=${opts#slxbase=} ;; + slxsrv=*) + #SLX IP server info + SLXSRV=${opts#slxsrv=} ;; + + BOOT_IMAGE=*) + BOOT_IMAGE=${opts} ;; + + initrd=*) + initrd=${opts} ;; + + + esac +done + +KCL=$(echo "$KCL" | sed "s|SLX_BASE_PATH|$SLX_BASE_PATH|g;s|$BOOT_IMAGE||g;s|$initrd||g") + + +# if SLX_BASE_PATH already exists, just update. Does not make the menu again. +[ -d /boot/$SLX_BASE_PATH ] && { boot_download; echo "$SLX_BASE_PATH updated"; exit 0; } || boot_download + + +# Getting informations about the disks and where is the boot partition +CONFIG_PATH='/opt/openslx/config' +. $CONFIG_PATH + +echo " SLX_CHOOSEN_DISK $SLX_CHOOSEN_DISK" #Just for test + + case $SLX_CHOOSEN_DISK in + + sda) GRUB_DISK=hd0 ;; + sdb) GRUB_DISK=hd1 ;; + sdc) GRUB_DISK=hd2 ;; + sdd) GRUB_DISK=hd3 ;; + sde) GRUB_DISK=hd4 ;; + *) echo "GRUB_DISK was not found" + exit 1 ;; + esac + +echo "GRUB_DISK $GRUB_DISK" #Just for test + + + case $SLX_PARTITION_TYPE in + + GPT) sgdisk -p /dev/$SLX_CHOOSEN_DISK | grep EF02 > /dev/null + [ $? != 0 ] && { echo "Could not find a BIOS boot partition "; exit 1; } + + SLX_BOOT_ID=$(sgdisk -p /dev/$SLX_CHOOSEN_DISK | grep /boot | cut -c1-6 | sed -e 's/^ *//' -e 's/ *$//' ) # <------- is it working ? remove both trailing and leading spaces with sed + echo " SLX_BOOT_ID $SLX_BOOT_ID" #Just for test + + SLX_BOOT_PARTITION=gpt$SLX_BOOT_ID + echo " SLX_BOOT_PARTITION $SLX_BOOT_PARTITION" # Just for test + + ;; + MSDOS) + SLX_BOOT_ID=$(grep boot $CONFIG_PATH |cut -f1 | tr '#' '\n' | cut -d, -f1) + echo " SLX_BOOT_ID $SLX_BOOT_ID" #Just for test + + SLX_BOOT_PARTITION=msdos$(grep $SLX_BOOT_ID disk.partition | cut -c9) + echo " SLX_BOOT_PARTITION $SLX_BOOT_PARTITION" #Just for test + ;; + esac + +# Installing GRUB +# First, copy from etc + + if [ ! -d /boot/grub ]; then + + [ -d /etc/grub ] || { echo "Could not find /grub directory"; exit 1; } + cp -r /etc/grub /boot/ + cd / + grub-install --boot-directory=/boot /dev/$SLX_CHOOSEN_DISK + RET=$? + [ $RET != 0 ] && { echo "Could not install GRUB"; exit 1; } || echo "GRUB successfully installed" + fi + +#GRUB ok, so lets make the menu + +cd /boot/grub/ +[ -e grub.cfg ] || { echo "Could not find grub.cfg"; exit 1; } + +cat <<EOF >> grub.cfg +######################### + menuentry '$SLX_BASE_PATH' { + linux ($GRUB_DISK,$SLX_BOOT_PARTITION)/$SLX_BASE_PATH/kernel hdd_boot=$SLX_CHOOSEN_DISK$SLX_BOOT_ID $KCL + initrd ($GRUB_DISK,$SLX_BOOT_PARTITION)/$SLX_BASE_PATH/initramfs-stage31 +} +######################### +EOF + +echo "GRUB INSTALLED =) =)" + +true + + + + + + + + |