de1e348aee8c5cb43ec88b36c31844f24bbba51c
[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 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_" \
106       --remove-bootoption=nodhcp \
107       /live/image "$DEST_DIR"
108
109   mv "$DEST_DIR"/boot/syslinux/* "$TFTPD_DATA_DIR_/"
110   rmdir "$DEST_DIR"/boot/syslinux
111
112   mv "$DEST_DIR"/boot/ "$TFTPD_DATA_DIR_"
113 else # there is no kernel inside /live/image copy it from /boot
114   if [ ! -d /usr/share/grml-live/templates/boot/isolinux ] ; then
115     echo "E: Could not find isolinux template directory" >&2
116     exit 2
117   fi
118
119   array=( $(cat /etc/grml_version) )
120   grml_name_=${array[0]}
121   grml_version_=${array[1]}
122
123   cp /usr/share/grml-live/templates/boot/isolinux/* "$TFTPD_DATA_DIR_/"
124
125   config_files_=$(find "$TFTPD_DATA_DIR_/" -name "*.cfg" -type f)
126   sed -i "s/%ARCH%/$(uname -m)/" $config_files_
127   sed -i "s/%BOOTID%/$RANDOM/" $config_files_
128   sed -i "s/%SHORT_NAME%/dummy/" $config_files_
129   sed -i "s/%VERSION%/$grml_version_/" $config_files_
130   sed -i "s/%GRML_NAME%/$grml_name_/" $config_files_
131   sed -i "s/%DISTRI_SPLASH%/grml.png/" $config_files_
132   sed -i "s/%DISTRI_INFO%/Grml/" $config_files_
133   sed -i "s#\(^.*append.*initrd.*$\)#\1 $pxe_def_boot_args_ $BOOT_ARGS_#" $config_files_
134   cat > "$TFTPD_DATA_DIR_/grmlmain.cfg"<<EOT
135   include default.cfg
136 include menuoptions.cfg
137 include grml.cfg
138 include options.cfg
139 include isoprompt.cfg
140 include hd.cfg
141 include hidden.cfg
142 EOT
143
144 fi
145
146
147 config_files_=$(find "$TFTPD_DATA_DIR_/" -name "*.cfg" -type f)
148
149 # cd is multi iso, grml2usb got it right ;0
150 if [ -d "$MOUNT_POINT_"/boot/release ] ; then
151    sed -i -e 's#\(.*\)/boot/\(.*\)#\1\2#' $config_files_
152 else
153   # remove normal kernel path and use our image
154   sed -i -e 's/.*kernel.*linux26/kernel linux26/' $config_files_
155   sed -i -e 's/\(initrd\)=[[:alnum:]/._-]*/\1=minirt26.gz/' $config_files_
156   # remove live-media-path per default
157   sed -i -e 's#live-media-path=[[:alnum:]/._-]*##' $config_files_
158
159   # append live-media-path if needed
160   if [ ! -z "$live_media_path_" ] ; then
161     sed -i -e "s#\(^.*append.*initrd.*$\)#\1 $live_media_path_#" $config_files_
162   fi
163
164 fi
165 # adjust ldbsd.com bootline
166 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
167
168 # remove grub entries
169 rm -f "$TFTPD_DATA_DIR_/"addon_*grub*.cfg
170
171 mv "$TFTPD_DATA_DIR_/syslinux.cfg" "$TFTPD_DATA_DIR_/pxelinux.cfg/default"
172 rm -rf "$DEST_DIR"
173
174 let ret_=$ret_+$?
175 return $ret_