summaryrefslogtreecommitdiffstats
path: root/server/modules/hdd-boot/opt/openslx/scripts/systemd-hdd_boot
blob: c1c19b78826a4cd8af98f7ea7f8c988bd4393bf9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/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