close Warning: Can't use blame annotator:
No changeset 6947 in the repository

source: hybrid/branches/releng-9/nanobsd/files/tools/wl-config

Last change on this file was 12751, checked in by ed, 11 years ago

THIS script adds the config from GENESIS to this operating system
make sure you know what you are doing, if not press control-C
ENTER CONFIG NAME ......(and press enter)

Name [HybridEd]:
# INFO: Working on file: 'authorized_keys'
# INFO: Working on file: 'dhcpd.conf'
# INFO: Working on file: 'dnsmasq.conf'
# INFO: Working on file: 'motd'
# INFO: Working on file: 'rc.conf.local'
fetch: http://wirelessleiden.nl/config//HybridEd/hybrid.conf.local: Internal Server Error

This must be:
fetch: http://wirelessleiden.nl/config//HybridEd/pf.hybrid.conf.local

  • Property svn:eol-style set to LF
  • Property svn:executable set to *
File size: 8.0 KB
RevLine 
1#!/bin/sh
2# Wireless Leiden config-update script for FreeBSD 8.0 (nanobsd)
3# Based on the 'API' of Jasper
4# Rick van der Zwet
5# XXX: TODO, some proper error checking for fetch
6
7
8# Slow connection = no connection
9export HTTP_TIMEOUT=10
10
11
12check_access() {
13 # Direct Access - External
14 BASEURL="http://wirelessleiden.nl/config/"
15 fetch -o /dev/null -q $BASEURL > /dev/null && return
16 echo "# WARN: Fetch via external $BASEURL failed"
17
18 # Direct Access - Internal IP
19 BASEURL="http://172.16.4.46/wleiden/config/"
20 # Connectivity check
21 fetch -o /dev/null -q $BASEURL > /dev/null && return
22 echo "# WARN: Fetch via internal $BASEURL failed"
23
24 # Direct Access - External DNS
25 BASEURL="http://132.229.112.21/wleiden/config/"
26 fetch -o /dev/null -q $BASEURL > /dev/null && return
27 echo "# CRIT: Fetch via external $BASEURL failed"
28
29 exit 1
30}
31check_access
32
33
34# Default config to fetch
35CONFIG=`hostname -s`
36
37# Determine it's statup and running location and some other hints
38# Skip named.conf as it not planned in current release, making sure resolv.conf
39# is altered at the end, since having to replace this file will cause next files
40# not be downloaded anymore if no (currently) valid resolver can be found anymore.
41# TODO(rvdz): Download files _before_ changes
42#
43FILES="authorized_keys dhcpd.conf dnsmasq.conf motd rc.conf.local pf.hybrid.conf.local wleiden.yaml resolv.conf"
44file_details() {
45 POST_CMD=""
46 FILE_HINT=""
47
48 case "$1" in
49 'authorized_keys')
50 STARTUP_LOC="/cfg/ssh/${FILE}"
51 RUNNING_LOC="/etc/ssh/${FILE}"
52 ;;
53 'dhcpd.conf')
54 STARTUP_LOC="/cfg/local/${FILE}"
55 RUNNING_LOC="/usr/local/etc/${FILE}"
56 POST_CMD="service isc-dhcpd restart"
57 ;;
58 'dnsmasq.conf')
59 STARTUP_LOC="/cfg/local/${FILE}"
60 RUNNING_LOC="/usr/local/etc/${FILE}"
61 POST_CMD="service dnsmasq restart"
62 ;;
63 'motd')
64 STARTUP_LOC="/cfg/${FILE}"
65 RUNNING_LOC="/etc/${FILE}"
66 POST_CMD="/etc/rc.d/motd onestart"
67 ;;
68 'named.conf')
69 STARTUP_LOC="/cfg/namedb/${FILE}"
70 RUNNING_LOC="/etc/namedb/${FILE}"
71 POST_CMD="service named restart"
72 ;;
73 'rc.conf.local')
74 STARTUP_LOC="/cfg/${FILE}"
75 RUNNING_LOC="/etc/${FILE}"
76 FILE_HINT="Restart interfaces with: nohup service netif restart"
77 ;;
78 'resolv.conf')
79 STARTUP_LOC="/cfg/${FILE}"
80 RUNNING_LOC="/etc/${FILE}"
81 FILE_HINT="To get the ordering right run: nameserver-shuffle"
82 ;;
83 'pf.hybrid.conf.local')
84 STARTUP_LOC="/cfg/${FILE}"
85 RUNNING_LOC="/etc/${FILE}"
86 POST_CMD="service pf reload"
87 ;;
88 'wleiden.yaml')
89 STARTUP_LOC="/cfg/local/${FILE}"
90 RUNNING_LOC="/usr/local/etc/${FILE}"
91 ;;
92 esac
93}
94
95usage() {
96 (
97 echo "Usage: $0 [-bpn] [-c <config>] [-m <all|startup|testing|running>]"
98 echo " -b = batch mode, no user input"
99 echo " -c <config> = default configuration to fetch"
100 echo " -d = do not run the POST_CMD commands [default]"
101 echo " -p = run the POST_CMD commands to activate the services right-away"
102 echo " -n = do not mount config partition"
103 echo " -m all = copy config files to running & config partition [default]"
104 echo " -m startup = copy config files to config partition"
105 echo " -m testing = do not copy config files"
106 echo " -m running = copy config files to running partition"
107 echo " -m hack = copy running files to config partition"
108 ) 1>&2
109 exit 2
110}
111
112# Argument parsing using getopts
113USE_API=1 # Whether or not to use the webinterface
114OPT_MOUNT=1
115OPT_RUNNING=1
116OPT_STARTUP=1
117OPT_HACK=0 # Hack for people without configuration managment and testing
118OPT_BATCH=0
119OPT_POSTCMD=false
120
121parse_options() {
122 while getopts "bc:nm:dp" OPT; do
123 case "$OPT" in
124 b) OPT_BATCH=1;;
125 c) CONFIG="${OPTARG}";;
126 d) OPT_POSTCMD=false;;
127 n) OPT_MOUNT=0;;
128 m) case "$OPTARG" in
129 all) true;;
130 live) OPT_STARTUP=0;;
131 startup) OPT_RUNNING=0;;
132 testing) OPT_RUNNING=0; OPT_STARTUP=0; OPT_MOUNT=0;;
133 hack) OPT_RUNNING=0; OPT_STARTUP=0; OPT_HACK=1; USE_API=0;;
134 *) usage;;
135 esac;;
136 h) usage;;
137 p) OPT_POSTCMD=true;;
138 \?) usage;;
139 esac
140 done
141 # Allow to override automatic mounting, in case of external mount 'managment'
142 if [ "$1" = "-n" ]; then
143 OPT_MOUNT=0
144 fi
145
146 if [ "${OPT_RUNNING}" -eq 1 ]; then
147 echo "# INFO: Storing new config files in running configuration"
148 fi
149
150 if [ "${OPT_STARTUP}" -eq 1 ]; then
151 echo "# INFO: Storing new config files in startup configuration"
152 fi
153
154 if [ "${OPT_HACK}" -eq 1 ]; then
155 echo "# WARN: Copy running configuration to startup configuration"
156 echo "# WARN: Please do mind to document/mention this changes somewhere"
157 fi
158
159 if /bin/df / | grep -q "^/dev/md[0-9]"; then
160 OPT_MOUNT=0
161 echo "# WARN: Mount operations disabled as we are running in a md(4) image"
162 fi
163
164 # New line before the real work gets started
165 echo ""
166}
167
168
169
170
171# test validity of input
172config_validator() {
173 INPUT="$1"
174 `grep -q "^${INPUT}\$" ${TMPDIR}/node_list.txt`
175 if [ $? -eq 0 ]; then
176 return 0
177 else
178 echo "WARNING: Input '${INPUT}' is not valid, some hints..."
179 grep -i "${INPUT}" ${TMPDIR}/node_list.txt
180 return 1
181 fi
182}
183
184
185
186select_node() {
187 # List of all available nodes
188 fetch -q -o ${TMPDIR}/node_list.txt ${BASEURL} || exit 1
189
190 if [ ${OPT_BATCH} -eq 1 ]; then
191 config_validator "${CONFIG}"
192 if [ $? -eq 1 ]; then
193 echo "ERROR: Please provide valid config" 1>&2
194 exit 1
195 fi
196 else
197 # Provide Nodelist and feedback
198 cat ${TMPDIR}/node_list.txt | column
199 echo ' THIS script adds the config from GENESIS to this operating system'
200 echo ' make sure you know what you are doing, if not press control-C'
201 echo ' ENTER CONFIG NAME ......(and press enter)'
202
203 # Have the user to select the right node
204 INVALID_CONFIG=1
205 while [ ${INVALID_CONFIG} -eq 1 ]; do
206 # Ask for node name, play around with prev option
207 echo -n "Name [${CONFIG}]: "
208 read INPUT
209 if [ -z "${INPUT}" ]; then
210 INPUT=${CONFIG}
211 else
212 CONFIG=${INPUT}
213 fi
214
215 config_validator "${INPUT}"
216 if [ $? -eq 0 ]; then
217 INVALID_CONFIG=0
218 fi
219 done
220 fi
221}
222
223
224
225
226# Copy file, saving some bits if no change needed
227copy_file() {
228 SOURCE=$1
229 TARGET=$2
230 diff -I '^FreeBSD ' -I '^# Generated at ' ${TARGET} ${SOURCE} 2>/dev/null
231 if [ $? -ne 0 ]; then
232 mkdir -p `dirname ${TARGET}` || exit 1
233 cp ${SOURCE} ${TARGET} || exit 1
234 return $?
235 fi
236 return 1
237}
238
239# Main function
240main() {
241 TMPDIR=`mktemp -d -t $(basename $0)`
242 # Clear out tempdir when done
243 if [ ${OPT_MOUNT} -eq 1 ]; then
244 trap "rm -Rf ${TMPDIR}; umount /cfg; mount -ro noatime /; exit" 0 1 2 3 15
245 else
246 trap "rm -Rf ${TMPDIR}; exit" 0 1 2 3 15
247
248 fi
249
250 # Mount if requested
251 if [ ${OPT_MOUNT} -eq 1 ]; then
252 mount -uwo noatime /
253 mount /cfg
254 fi
255
256 # Select node from web-interface
257 if [ ${USE_API} -eq 1 ]; then
258 select_node
259 fi
260
261 # Worker, place all files in required directory
262 for FILE in ${FILES}; do
263 if [ ${USE_API} -eq 1 ]; then
264 # Fetch needed file
265 FRESH_LOC=${TMPDIR}/${FILE}
266 fetch -q -o ${FRESH_LOC} ${BASEURL}/${CONFIG}/${FILE} || exit 1
267 fi
268
269 # Needed file details, like locations and hints
270 file_details ${FILE}
271
272 echo "# INFO: Working on file: '${FILE}'"
273 # Copy file boot location
274 if [ ${OPT_STARTUP} -eq 1 ]; then
275 copy_file ${FRESH_LOC} ${STARTUP_LOC}
276 fi
277
278 # Copy file running location
279 if [ ${OPT_RUNNING} -eq 1 ]; then
280 copy_file ${FRESH_LOC} ${RUNNING_LOC}
281 if [ $? -eq 0 ]; then
282 echo "# INFO: '${FILE}' changed"
283 if [ -n "${POST_CMD}" ]; then
284 if $OPT_POSTCMD; then
285 echo "## Running post_cmd: $POST_CMD"
286 $POST_CMD
287 else
288 echo "## To activate run the post_cmd: $POST_CMD"
289 fi
290 fi
291 if [ -n "${FILE_HINT}" ]; then
292 echo "# INFO: ${FILE_HINT}"
293 echo ""
294 fi
295 fi
296 fi
297
298 # Direct copy
299 if [ ${OPT_HACK} -eq 1 ]; then
300 # No checking, just dumb try to copy mode
301 cp -v ${RUNNING_LOC} ${STARTUP_LOC}
302 fi
303 done
304
305 exit 0
306}
307
308parse_options $*
309main
Note: See TracBrowser for help on using the repository browser.