summaryrefslogtreecommitdiffstats
path: root/server/modules/hdd-boot/opt/openslx/scripts/systemd-hdd_boot
blob: adf5f00252ddea831270b32627720dbd35bb2397 (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
117
118
119
120
121
122
#!/bin/ash

boot_download () {

	# Downloading all in SLX_BASE_PATH to  /boot  Example: Ubuntu_1404_x64
	# wget -N,  update if the file has been changed 


	cd /boot
        echo "Downloading $SLX_BASE_PATH ................."
        wget -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")


# 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


# Getting informations about the disks and where is the boot partition
CONFIG_PATH='/opt/openslx/config'
. $CONFIG_PATH

echo " SLX_CHOOSEN_DISK $SLX_CHOOSEN_DISK" #Just for test

        case $SLX_CHOOSEN_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

echo "GRUB_DISK $GRUB_DISK" #Just for test


        case $SLX_PARTITION_TYPE in

        GPT)	sgdisk -p /dev/$SLX_CHOOSEN_DISK | grep EF02 > /dev/null
		[ $? != 0 ] && { echo "Could not find a BIOS boot partition "; exit 1; }

		SLX_BOOT_ID=$(sgdisk -p /dev/$SLX_CHOOSEN_DISK | grep /boot | cut -c1-6 | sed -e 's/^ *//' -e 's/ *$//' ) # <------- is it working ? remove both trailing and leading spaces with sed
		echo " SLX_BOOT_ID $SLX_BOOT_ID" #Just for test
		
		SLX_BOOT_PARTITION=gpt$SLX_BOOT_ID
		echo " SLX_BOOT_PARTITION $SLX_BOOT_PARTITION" # Just for test

	;;
	MSDOS)
		SLX_BOOT_ID=$(grep boot $CONFIG_PATH |cut -f1 | tr '#' '\n' | cut -d, -f1)
		echo " SLX_BOOT_ID $SLX_BOOT_ID" #Just for test

		SLX_BOOT_PARTITION=msdos$(grep $SLX_BOOT_ID disk.partition | cut -c9)
		echo " SLX_BOOT_PARTITION $SLX_BOOT_PARTITION" #Just for test
	;;
	esac

# Installing GRUB
# First, copy from etc

 if [ ! -d /boot/grub ]; then
 
 [ -d  /etc/grub ] ||  { echo "Could not find /grub directory"; exit 1; }
 cp -r /etc/grub /boot/
 cd /
 grub-install --boot-directory=/boot /dev/$SLX_CHOOSEN_DISK
 RET=$?
 [ $RET != 0 ] && { echo "Could not install GRUB";  exit 1; } ||  echo "GRUB successfully installed"
 fi

#GRUB ok, so lets make the menu

cd /boot/grub/
[ -e  grub.cfg ] ||  { echo "Could not find grub.cfg"; exit 1; }
	
cat <<EOF >> grub.cfg
#########################
        menuentry '$SLX_BASE_PATH' { 
        linux ($GRUB_DISK,$SLX_BOOT_PARTITION)/$SLX_BASE_PATH/kernel  hdd_boot=$SLX_CHOOSEN_DISK$SLX_BOOT_ID $KCL 
        initrd ($GRUB_DISK,$SLX_BOOT_PARTITION)/$SLX_BASE_PATH/initramfs-stage31
}
#########################
EOF

echo "GRUB INSTALLED =) =)"

true