blob: f975b697717669a702204866d40ad1d52f2c6f51 (
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
113
114
115
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
|