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 | 116 |
1 files changed, 116 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..f975b697 --- /dev/null +++ b/server/modules/hdd-boot/opt/openslx/scripts/systemd-hdd_boot @@ -0,0 +1,116 @@ +#!/bin/bash +set -x +# Downloading all in SLX_BASE_PATH to /boot Example: Ubuntu_1404_x64 +# wget -N, update if the file has been changed +boot_download () { + echo "Downloading $SLX_BASE_PATH ................." + wget -P /boot -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") + +# Scan vm-store dir for vmware image xmls and copy +if [ -d /cache/export/dnbd3 -a -d /mnt/vmstore ]; then + [ ! -d /boot/vmstore ] && mkdir /boot/vmstore + for FILE in $(find /cache/export/dnbd3 -iname "*.vmdk*" ! -iname "*map"); do + [ -e "${FILE}.map" ] && continue + image_name=$(echo $(basename "$FILE") | cut -d "." -f1) + cd /mnt/vmstore + for XML in $(grep -rIl --include "*.xml" "$image_name" .); do + xmldir=$(dirname $XML) + mkdir -p /boot/vmstore/${xmldir} + cp $XML /boot/vmstore/${xmldir}/ + done + cd - >/dev/null + done +fi + +# Bind mount available vmstore in /boot to /mnt/vmstore if not already present +if ! grep -qs '/mnt/vmstore' /proc/mounts; then + [ ! -d /mnt/vmstore ] && mkdir -p /mnt/vmstore + [ -d /boot/vmstore ] && mount --bind /boot/vmstore /mnt/vmstore +fi + +# 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"; } || { boot_download; echo "New base $SLX_BASE_PATH downloaded to HDD"; } + +# Installing GRUB + +#Find disk of /boot +BOOT_DISK=$(df | grep /boot | awk '{print $1}' | tr -d '[0-9]' | cut -c 6-) +BOOT_PART=$(df | grep /boot | awk '{print $1}' | tr -dc '[0-9]') +[ -z "$BOOT_DISK" ] && { echo "BOOT DISK could not be found, exiting."; exit 1; } + +#Check if disk is msdos or GPT +if sgdisk /dev/$BOOT_DISK | grep -qs 'invalid GPT'; then + BOOT_TYPE='msdos' +else + BOOT_TYPE='gpt' +fi + +if [ ! -d /boot/grub ]; then + + grub-install --boot-directory=/boot /dev/$BOOT_DISK + update-grub-gfxpayload + + RET=$? + [ $RET != 0 ] && { echo "Could not install GRUB"; exit 1; } || echo "GRUB successfully installed" + + # First, copy grub.cfg + [ -e /opt/openslx/hdd-boot/grub.cfg ] && cp -r /opt/openslx/hdd-boot/grub.cfg /boot/grub/ +fi + +#Add new base to grub.cfg +if ! grep -qs "menuentry '$SLX_BASE_PATH'" /boot/grub/grub.cfg; then + + #GRUB ok, so lets make the menu + echo "BOOT DISK is $BOOT_DISK" #Just for test + case $BOOT_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 + + [ -e /boot/grub/grub.cfg ] || { echo "Could not find grub.cfg"; exit 1; } + +cat <<EOF >> /boot/grub/grub.cfg +######################### + menuentry '$SLX_BASE_PATH' { + linux ($GRUB_DISK,${BOOT_TYPE}$BOOT_PART)/$SLX_BASE_PATH/kernel hdd_boot=${BOOT_DISK}$BOOT_PART $KCL + initrd ($GRUB_DISK,${BOOT_TYPE}$BOOT_PART)/$SLX_BASE_PATH/initramfs-stage31 +} +######################### +EOF + +fi + +true + + + + + + + + |