Adjust live-media-path if /live/image is not the bootmedium
[grml-terminalserver.git] / templates / grub-pxelinux_config
1 # the following variables are available in the template:
2 #
3 # $INTERFACE_     (interface for the terminalserver)
4 # $IP_            (ip for the terminalserver to bind)
5 # $NETMASK_       (network mask)
6 # $GW_            (gateway)
7 # $NAMESERVERS_   (nameservers for the nodes)
8 # $IPRANGE_FROM_  (user configured iprange, first ip)
9 # $IPRANGE_TO_    (user configured iprange, last ip)
10 # $NETWORK_       (first ip in this subnet)
11 # $OPTIONS_       (options for grml-terminalserver)
12 # $BOOT_ARGS_     (boot arguments for the nodes)
13 #
14 # NOTE:
15 # templates are shellscript fragments and will be sourced from the
16 # terminalserver
17 #
18 # GLOBAL_README_END
19
20 if grep -q live-media-path= /proc/cmdline 2>/dev/null ; then
21   live_media_path_="live-media-path=$(awk -F live-media-path= '{print $2}' /proc/cmdline)"
22 fi
23 if [ ! -d /live/image/boot ] ; then
24   live_media_path_="live-media-path=/"
25 fi
26
27 # default boot arguments used for both grub and pxelinux
28 if [ -e '/live/cow' ]; then
29     default_boot_args_="root=/dev/nfs rw nfsroot=$IP_:$MOUNT_POINT_ \
30 nodhcp noprompt noeject"
31 else
32     default_boot_args_="ramdisk_size=24000 root=/dev/ram0 rw \
33 init=/etc/init nfsdir=$IP_:$MOUNT_POINT_ nodhcp noprompt noeject \
34 apm=power-off nomce"
35 fi
36
37 # special boot arguments required by grub
38 grub_def_boot_args_="/linux26 $default_boot_args_ $live_media_path_"
39
40 # special boot arguments required by pxelinux
41 pxe_def_boot_args_="$default_boot_args_"
42
43 # default arguments for framebuffer console
44 def_fb_args_="vga=791"
45 no_fb_args_="vga=normal"
46
47 ###
48 ## create grub config
49 ###
50
51 cat >"$TFTPD_DATA_DIR_/menu.lst" <<EOT
52 default=0
53 timeout=10
54 title GRML
55   root (nd)
56   kernel $grub_def_boot_args_ $def_fb_args_ $BOOT_ARGS_
57   initrd /minirt26.gz
58
59 title GRML no framebuffer
60   root (nd)
61   kernel $grub_def_boot_args_ $no_fb_args_ $BOOT_ARGS_
62
63 title GRML small
64   root (nd)
65   kernel $grub_def_boot_args_ small $def_fb_args_ $BOOT_ARGS_
66   initrd /minirt26.gz
67
68 title GRML small nofb
69   root (nd)
70   kernel $grub_def_boot_args_ small $no_fb_args_ $BOOT_ARGS_
71   initrd /minirt26.gz
72
73 title GRML debuginit
74   root (nd)
75   kernel $grub_def_boot_args_ debuginitrd $def_fb_args_ $BOOT_ARGS_
76   initrd /minirt26.gz
77
78 title GRML debuginit nofb
79   root (nd)
80   kernel $grub_def_boot_args_ debuginitrd $no_fb_args_ $BOOT_ARGS_
81   initrd /minirt26.gz
82
83 title GRML rescue
84   root (nd)
85   kernel $grub_def_boot_args_ $no_fb_args_
86   initrd /minirt26.gz
87
88 title memtest
89   root (nd)
90   kernel /memtest
91
92 title Reload config
93   configfile (nd)/menu.lst
94 EOT
95
96 ret_=$?
97
98
99 ###
100 ## create pxelinux config
101 ###
102 DEST_DIR=$(mktemp -d)
103 if [ -d /live/image/boot ] ; then
104   grml2usb --bootloader-only \
105       --bootoptions="$pxe_def_boot_args_ $BOOT_ARGS_" /live/image "$DEST_DIR"
106
107   mv "$DEST_DIR"/boot/syslinux/* "$TFTPD_DATA_DIR_/"
108   rmdir "$DEST_DIR"/boot/syslinux
109
110   mv "$DEST_DIR"/boot/ "$TFTPD_DATA_DIR_"
111 else # there is no kernel inside /live/image copy it from /boot
112   if [ ! -d /usr/share/grml-live/templates/boot/isolinux ] ; then
113     echo "E: Could not find isolinux template directory" >&2
114     exit 2
115   fi
116
117   array=( $(cat /etc/grml_version) )
118   grml_name_=${array[0]}
119   grml_version_=${array[1]}
120
121   cp /usr/share/grml-live/templates/boot/isolinux/* "$TFTPD_DATA_DIR_/"
122
123   config_files_=$(find "$TFTPD_DATA_DIR_/" -name "*.cfg" -type f)
124   sed -i "s/%ARCH%/$(uname -m)/" $config_files_
125   sed -i "s/%BOOTID%/$RANDOM/" $config_files_
126   sed -i "s/%SHORT_NAME%/dummy/" $config_files_
127   sed -i "s/%VERSION%/$grml_version_/" $config_files_
128   sed -i "s/%GRML_NAME%/$grml_name_/" $config_files_
129   sed -i "s/%DISTRI_SPLASH%/grml.png/" $config_files_
130   sed -i "s/%DISTRI_INFO%/Grml/" $config_files_
131   sed -i "s#\(^.*append.*initrd.*$\)#\1 $pxe_def_boot_args_ $BOOT_ARGS_#" $config_files_
132   cat > "$TFTPD_DATA_DIR_/grmlmain.cfg"<<EOT
133   include default.cfg
134 include menuoptions.cfg
135 include grml.cfg
136 include options.cfg
137 include isoprompt.cfg
138 include hd.cfg
139 include hidden.cfg
140 EOT
141
142 fi
143
144
145 config_files_=$(find "$TFTPD_DATA_DIR_/" -name "*.cfg" -type f)
146
147 # cd is multi iso, grml2usb got it right ;0
148 if [ -d "$MOUNT_POINT_"/boot/release ] ; then
149    sed -i -e 's#\(.*\)/boot/\(.*\)#\1\2#' $config_files_
150 else
151   # remove normal kernel path and use our image
152   sed -i -e 's/.*kernel.*linux26/kernel linux26/' $config_files_
153   sed -i -e 's/\(initrd\)=[[:alnum:]/._-]*/\1=minirt26.gz/' $config_files_
154   # remove live-media-path per default
155   sed -i -e 's#live-media-path=[[:alnum:]/._-]*##' $config_files_
156
157   # append live-media-path if needed
158   if [ ! -z "$live_media_path_" ] ; then
159     sed -i -e "s#\(^.*append.*initrd.*$\)#\1 $live_media_path_#" $config_files_
160   fi
161
162 fi
163 # adjust ldbsd.com bootline
164 sed -i -e 's#\(.*kernel .*/ldbsd.com\)#\1 set image /boot/addons/bsd4grml/bsd.rd`echo Type "boot" to load MirOS bsd4grml via keeppxe#' "$TFTPD_DATA_DIR_/"addon_*_bsd.cfg
165
166 # remove grub entries
167 rm -f "$TFTPD_DATA_DIR_/"addon_*grub*.cfg
168
169 mv "$TFTPD_DATA_DIR_/syslinux.cfg" "$TFTPD_DATA_DIR_/pxelinux.cfg/default"
170 rm -rf "$DEST_DIR"
171
172 let ret_=$ret_+$?
173 return $ret_