summaryrefslogblamecommitdiffstats
path: root/server/modules/hdd-boot/opt/openslx/scripts/systemd-hdd_boot
blob: c1c19b78826a4cd8af98f7ea7f8c988bd4393bf9 (plain) (tree)
1
2
3
4
5
6
7
8
9
           
 

                                                                      
                  

                                                                                                                                                                                          
              
                                                                                                                                                                                                             




                                   










                                                                   
    

                                                                                         
                                                  




                                                                                    

                                                                             

                                             
                    








                                                                              


                                                                                                          
                 
 



                                                                                  
 






                                                   
                            

                                                                                                 
 
                                                      

                              


                                                                                                           
 
                               









                                              
 
                                          
 
                                                                           
 
                                
                         
                                    

                                                                                                 














                           
#!/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 <<EOF >> /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