#!/bin/bash # 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 cp $XML /boot/vmstore done cd - 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"; exit 0; } || boot_download # Installing GRUB #Find disk of /boot BOOT_DISK=$(df | grep /boot | awk '{print $1}' | tr -d '[0-9]') 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 $BOOT_DISK | grep -qs 'invalid GPT'; then BOOT_TYPE='msdos' else BOOT_TYPE='gpt' fi if [ ! -d /boot/grub ]; then # First, copy grub.cfg [ -e /opt/openslx/hdd-boot/grub.cfg ] && cp -r /opt/openslx/hdd-boot/grub.cfg /boot/grub/ grub-install --boot-directory=/boot $BOOT_DISK update-grub-gfxpayload RET=$? [ $RET != 0 ] && { echo "Could not install GRUB"; exit 1; } || echo "GRUB successfully installed" fi #GRUB ok, so lets make the menu echo " BOOT DISK is $BOOT_DISK" #Just for test case $BOOT_DISK in /dev/sda) GRUB_DISK=hd0 ;; /dev/sdb) GRUB_DISK=hd1 ;; /dev/sdc) GRUB_DISK=hd2 ;; /dev/sdd) GRUB_DISK=hd3 ;; /dev/sde) GRUB_DISK=hd4 ;; *) echo "GRUB_DISK was not found" exit 1 ;; esac echo "GRUB_DISK $GRUB_DISK" #Just for test [ -e /boot/grub/grub.cfg ] || { echo "Could not find grub.cfg"; exit 1; } cat <> /boot/grub/grub.cfg ######################### menuentry '$SLX_BASE_PATH' { linux ($GRUB_DISK,${BOOT_TYPE}$BOOT_PART)/$SLX_BASE_PATH/kernel hdd_boot=$BOOT_PART $KCL initrd ($GRUB_DISK,${BOOT_TYPE}$BOOT_PART)/$SLX_BASE_PATH/initramfs-stage31 } ######################### EOF echo "GRUB INSTALLED =) =)" true