Import from Clearcase LIV_TRC6500_V2.2.3
[debian6500.git] / install / cluster / bin / init_pxe_repository.sh
1 #!/bin/bash
2
3 # ============================================================================
4 # Copyright (C) THALES. All rights reserved
5 # Author: Laurent Mazet
6 # Date : 18/02/2014
7 # ============================================================================
8
9 # TODO
10 # *
11
12 PROGNAME=$(basename $0)
13 ETH0MASTER=$(ip add show dev eth0 |awk '$1=="inet" {sub(/\/.*/, ""); print $2; exit}')
14 ETH1MASTER=$(ip add show dev eth1 |awk '$1=="inet" {sub(/\/.*/, ""); print $2; exit}')
15 TFTP=/opt/tftp
16 PXELINUXCFG=$TFTP/pxelinux.cfg
17 TMPLOG=/tmp/$PROGNAME-$$.log
18 VER=1.0
19
20 # help function
21
22 function usage () {
23 echo "usage: $PROGNAME [-h] [-v]"
24 echo " -h: help message"
25 echo " -v: version message"
26 exit $@
27 }
28
29 # formating functions
30
31 function title () { echo -e "\033[0;1m$*\033[0;0m"; }
32 function pass () { echo -e "\033[1;32m$*\033[0;0m"; }
33 function warn () { echo -e "\033[1;33m$*\033[0;0m"; }
34 function fail () { echo -e "\033[1;31m$*\033[0;0m"; }
35 # check command
36
37 function check () {
38 echo -n "$@: "
39 $@ >&$TMPLOG && pass OK || { fail KO; cat $TMPLOG; ERR=yes; }
40 rm -f $TMPLOG
41 test ! "$TEST" = yes
42 }
43
44 # argument processing
45
46 while [ $# -gt 0 ]; do
47 case "$1" in
48 -h) usage 0;;
49 -v) echo "$PROGNAME: version $VER"; exit;;
50 *) echo "unknown argument ($1)"; exit 1;;
51 esac
52 shift
53 done
54
55 # checks
56 check dpkg -l syslinux || exit 1
57
58 # create repository
59 [ -d $TFTP ] && warn "directory $TFTP already exist"
60 check mkdir -p $TFTP
61 [ -d $PXELINUXCFG ] && warn "directory $PXELINUXCFG already exist"
62 check mkdir -p $PXELINUXCFG
63
64 # create links from syslinux files
65 for f in memdisk menu.c32 pxelinux.0; do
66 [ -f $TFTP/$f ] && check rm -f $TFTP/$f
67 file=/usr/lib/syslinux/$f
68 [ -f $file ] || warn "file $file does not exist"
69 check ln -s $file $TFTP/$f
70 done
71
72 # create links to kernel and initrd
73 for f in initrd.img vmlinuz; do
74 [ -f $TFTP/$f ] && check rm -f $TFTP/$f
75 file=/$f
76 [ -f $file ] || warn "file $file does not exist"
77 check ln -s $file $TFTP/$f
78 done
79
80 # create pxelinux information message
81 cat - << EOF > $TFTP/pxelinux.txt
82 Boot Menu
83 =========
84
85 PXE boot for TRC6500 slave blades
86 EOF
87 check test -f $TFTP/pxelinux.txt
88
89 # create french mapping
90 # xxd -ps -c 32 fr.kmp
91 cat - << EOF | xxd -r -p > $TFTP/fr.kmp
92 000102030405060708090a0b0c0d0e0f10111213141516171819171b1c1d1e1f
93 203125333435377c3930382b3b293a2140267b2227282d7d5f2f4d6d3c3d2f5c
94 325142434445464748494a4b4c3f4e4f504152535455565a5859575e2a24365d
95 2a7162636465666768696a6b6c2c6e6f706172737475767a7879773c233e7e7f
96 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
97 a0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf
98 c0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf
99 e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
100 EOF
101 check test -f $TFTP/fr.kmp
102
103 # create standard pxe boot for slave blade
104 cat - << EOF > $PXELINUXCFG/default
105 PROMPT 2
106 TIMEOUT 30
107 UI /menu.c32
108
109 KBDMAP /fr.kmp
110
111 MENU TITLE [[ PXE BOOT ]]
112
113 DEFAULT debian
114
115 LABEL debian
116 MENU LABEL ^Debian 7 (TRC6500)
117 KERNEL /vmlinuz
118 INITRD /initrd.img
119 APPEND noinitrd ramdisk_size=8192 boot=tftp fastboot tftpserver=@@tftpserver@@ tarballs=@@tarballs@@
120
121 LABEL freedos
122 MENU LABEL ^FreeDos 1.0
123 KERNEL /memdisk
124 INITRD /balder10.imz
125 APPEND -
126 EOF
127 check test -f $PXELINUXCFG/default
128
129 # convert IP address to hexadecimal code
130 function ip_dec_to_hex () {
131 for i in ${1//./ }; do
132 printf "%02X" $i
133 done
134 }
135
136 # create pxeboot configuration
137 function pxeconfig () {
138
139 [ -f $PXELINUXCFG/default ] || return 1
140
141 while [ $# -gt 0 ]; do
142 case "$1" in
143 -a) shift; tarballs=$1;;
144 -s) shift; tftpserver=$1;;
145 *) ip=$1;;
146 esac
147 shift
148 done
149
150 iphex=$(ip_dec_to_hex $ip)
151 [ ${#iphex} -ge 1 -a ${#iphex} -le 8 ] || return 1
152
153 cat $PXELINUXCFG/default | \
154 sed -e "s/@@tftpserver@@/$tftpserver/" \
155 -e "s/@@tarballs@@/$tarballs/" \
156 > $PXELINUXCFG/$iphex
157 }
158
159 # standard boot for slave blades
160 subnetwork=$(echo $ETH0MASTER | sed 's/\.[0-9]*$//')
161 tftpserver=$ETH0MASTER
162 tarballs="root.tgz,slave.tgz"
163 check pxeconfig -a $tarballs -s $tftpserver $subnetwork
164
165 # second boot for slave blades
166 subnetwork=$(echo $ETH1MASTER | sed 's/\.[0-9]*$//')
167 tftpserver=$ETH1MASTER
168 tarballs="root.tgz,slave.tgz"
169 check pxeconfig -a $tarballs -s $tftpserver $subnetwork
170
171 # standard boot for rec blade
172 subnetwork=$(echo $ETH0MASTER | sed 's/\.[0-9]*$/.80/')
173 tftpserver=$ETH0MASTER
174 tarballs="root.tgz,slave.tgz,rec.tgz"
175 check pxeconfig -a $tarballs -s $tftpserver $subnetwork
176
177 # second boot for rec blade
178 subnetwork=$(echo $ETH1MASTER | sed 's/\.[0-9]*$/.80/')
179 tftpserver=$ETH1MASTER
180 tarballs="root.tgz,slave.tgz,rec.tgz"
181 check pxeconfig -a $tarballs -s $tftpserver $subnetwork
182
183 # check if balder image is present
184 [ -f $TFTP/balder10.imz ] || warn "Don't forget to download FreeDoss image (balder10.imz) on http://www.finnix.org/Balder"
185
186 # vim:set tabstop=4 expandtab shiftwidth=4: