Projet

Général

Profil

Télécharger (18,3 ko) Statistiques
| Branche: | Révision:

univnautes-tools / builder_scripts / build_snapshots.sh @ 39122650

1
#!/bin/sh
2
#
3
# ${PRODUCT_NAME} snapshot building system
4
# (C)2007, 2008, 2009 Scott Ullrich
5
# All rights reserved
6
#
7
# Redistribution and use in source and binary forms, with or without
8
# modification, are permitted provided that the following conditions
9
# are met:
10
#
11
# 1. Redistributions of source code must retain the above copyright
12
#    notice, this list of conditions and the following disclaimer.
13
#
14
# 2. Redistributions in binary form must reproduce the above copyright
15
#    notice, this list of conditions and the following disclaimer in the
16
#    documentation and/or other materials provided with the distribution.
17
#
18
#
19
# This script glues together the various FreeSBIE style pieces of the 
20
# ${PRODUCT_NAME} builder system and will build each style image: ISO, NanoBSD,
21
# DevISO, full update and NanoBSD updates and then copy the results of
22
# all the builds to the public facing WWW server.  This script will 
23
# invoke the scripts directly such as build_iso.sh and build_nano.sh, 
24
# etc.
25
#
26
# Crank up error reporting, debugging.
27
#  set -e
28
#  set -x
29

    
30
if [ ! -f ./pfsense-build.conf ]; then
31
	echo "You must first run ./set_version.sh !"
32
	exit 1
33
fi
34

    
35
NO_UPLOAD=""
36
LOOPED_SNAPSHOTS=""
37

    
38
# Handle command line arguments
39
while test "$1" != "" ; do
40
	case $1 in
41
	--no-ports|--noports|-n)
42
		NO_PORTS=yo
43
		;;
44
	--noupload|-u)
45
		NO_UPLOAD="-u"
46
		;;
47
	--looped)
48
		LOOPED_SNAPSHOTS="true"
49
	esac
50
	shift
51
done
52

    
53
# Source ${PRODUCT_NAME} / FreeSBIE variables
54
# *** DO NOT SOURCE BUILDER_COMMON.SH!
55
# *** IT WILL BREAK EVERYTHING FOR 
56
# *** SOME UNKNOWN LAYERING REASON.
57
# *** 04/07/2008, 11/04/2009                      
58
echo ">>> Execing pfsense-build.conf"
59
. ./builder_defaults.sh
60

    
61
# Unset do not build ports flag
62
rm -f $SCRATCHDIR/pfSense_do_not_build_pfPorts
63

    
64
# Keeps track of how many time builder has looped
65
BUILDCOUNTER=0
66

    
67
# Local variables that are used by builder scripts
68
STAGINGAREA=/tmp/staging
69
RSYNCIP="snapshots.pfsense.org"
70
RSYNCKBYTELIMIT="248000"
71
PINGTIME="999"
72
PINGMAX="40"
73
PINGIP="snapshots.pfsense.org"
74

    
75
export SNAPSHOTSLOGFILE=${SNAPSHOTSLOGFILE:-"$SCRATCHDIR/snapshots-build.log"}
76
export SNAPSHOTSLASTUPDATE=${SNAPSHOTSLASTUPDATE:-"$SCRATCHDIR/snapshots-lastupdate.log"}
77
export MASTER_BUILDER_SSH_LOG_DEST=${MASTER_BUILDER_SSH_LOG_DEST:-snapshots@${RSYNCIP}:/usr/local/www/snapshots/logs/pfSense_${PFSENSETAG}__FreeBSD_${FREEBSD_VERSION}/${TARGET}/build.log}
78

    
79
# Ensure directories exist
80
mkdir -p $STAGINGAREA
81

    
82
if [ -f $SCRATCHDIR/pfPorts_forced_build_required ]; then
83
	rm $SCRATCHDIR/pfPorts_forced_build_required
84
fi
85

    
86
echo "" > $SNAPSHOTSLOGFILE
87
echo "" > $SNAPSHOTSLASTUPDATE
88

    
89
git_last_commit() {
90
	if [ -d "${1}" ]; then
91
		(cd ${1} && git fetch && git rebase ${2})>/dev/null
92
		CURRENT_COMMIT=$(cd "${1}" && git log | head -n1 | cut -d' ' -f2)
93
		echo ">>> CURRENT_COMMIT: ${CURRENT_COMMIT} on ${1}"
94
		return $CURRENT_COMMIT
95
	else
96
		update_status ">>> WARNING: pfSenseGITREPO variable not set! Previous commit functions disabled."
97
	fi
98
}
99

    
100
# This routine is called in between runs. We
101
# will sleep for a bit and check for new commits
102
# in between sleeping for short durations.
103
sleep_between_runs() {
104
	COUNTER=0
105
	while [ $COUNTER -lt $maxsleepvalue ]; do
106
		sleep 60
107
		PFSENSE_CURRENT_COMMIT=$(git_last_commit "${GIT_REPO_DIR}/pfSenseGITREPO" origin/${PFSENSETAG})
108
		if [ "${PFSENSE_LAST_COMMIT}" != "${PFSENSE_CURRENT_COMMIT}" ]; then
109
			update_status ">>> New commit: $CURRENT_AUTHOR - $PFSENSE_CURRENT_COMMIT .. No longer sleepy."
110
			COUNTER="`expr $maxsleepvalue + 60`"
111
			export PFSENSE_LAST_COMMIT="${PFSENSE_CURRENT_COMMIT}"
112
			return
113
		fi
114
		TOOLS_CURRENT_COMMIT=$(git_last_commit "${BUILDER_SCRIPTS}" origin)
115
		if [ "${TOOLS_LAST_COMMIT}" != "${TOOLS_CURRENT_COMMIT}" ]; then
116
			update_status ">>> New commit: $CURRENT_AUTHOR - $TOOLS_CURRENT_COMMIT .. No longer sleepy."
117
			COUNTER="`expr $maxsleepvalue + 60`"
118
			export TOOLS_LAST_COMMIT="${TOOLS_CURRENT_COMMIT}"
119
			return
120
		fi
121
		COUNTER="`expr $COUNTER + 60`"
122
	done
123
	if [ $COUNTER -ge $maxsleepvalue ]; then
124
		update_status ">>> Sleep timer expired. Restarting build."
125
		maxsleepvalue=0
126
		COUNTER=0
127
	fi
128
}
129

    
130
# This routine is called to write out to stdout
131
# a string.   The string is appeneded to $SNAPSHOTSLOGFILE
132
# and we scp the log file to the builder host if
133
# needed for the real time logging functions.
134
update_status() {
135
	if [ "$1" = "" ]; then
136
		return
137
	fi
138
	echo $1
139
	echo "`date` -|- $1" >> $SNAPSHOTSLOGFILE
140
	if [ -n "$MASTER_BUILDER_SSH_LOG_DEST" -a -z "${NO_UPLOAD}" ]; then
141
		LU=`cat $SNAPSHOTSLASTUPDATE`
142
		CT=`date "+%H%M%S"`
143
		# Only update every minute
144
		if [ "$LU" != "$CT" ]; then 
145
			scp -q $SNAPSHOTSLOGFILE $MASTER_BUILDER_SSH_LOG_DEST
146
			date "+%H%M%S" > $SNAPSHOTSLASTUPDATE
147
		fi
148
	fi
149
}
150

    
151
# Copy the current log file to $filename.old on
152
# the snapshot www server (real time logs)
153
rotate_logfile() {
154
	if [ -n "$MASTER_BUILDER_SSH_LOG_DEST" -a -z "${NO_UPLOAD}" ]; then
155
		scp -q $SNAPSHOTSLOGFILE $MASTER_BUILDER_SSH_LOG_DEST.old
156
	fi
157

    
158
	# Cleanup log file
159
	echo "" > $SNAPSHOTSLOGFILE
160
}
161

    
162
post_tweet() {
163
	TWEET_MESSAGE="$1"
164
	if [ "$TWITTER_USERNAME" = "" ]; then
165
		update_status ">>> ERROR: Could not find TWITTER_USERNAME -- tweet cancelled."
166
		return
167
	fi
168
	if [ "$TWITTER_PASSWORD" = "" ]; then
169
		update_status ">>> ERROR: Could not find TWITTER_PASSWORD -- tweet cancelled."
170
		return
171
	fi
172
	if [ ! -f "/usr/local/bin/curl" ]; then 
173
		update_status ">>> ERROR: Could not find /usr/local/bin/curl -- tweet cancelled."
174
		return
175
	fi
176
	update_status ">>> Tweet:"
177
	update_status ">>> ${TWEET_MESSAGE}"
178
	echo -n ">>> Posting tweet..."
179
	`/usr/local/bin/curl --silent --basic --user "$TWITTER_USERNAME:$TWITTER_PASSWORD" --data status="$TWEET_MESSAGE" http://twitter.com/statuses/update.xml` > $SCRATCHDIR/tweet_diag.txt 2>&1
180
	update_status "Done!"
181
}
182

    
183
dobuilds() {
184

    
185
	cd $BUILDER_SCRIPTS
186
	# Build images
187
	./build.sh --flash-size '1g 2g 4g' "iso memstick memstickserial fullupdate nanobsd nanobsd-vga"
188
	# Copy files
189
	copy_to_staging_iso_updates
190
	copy_to_staging_nanobsd '1g 2g 4g'
191
}
192

    
193
copy_to_staging_nanobsd() {
194
	cd $BUILDER_SCRIPTS
195

    
196
	for NANOTYPE in nanobsd nanobsd-vga; do
197
		for FILESIZE in ${1}; do
198
			FILENAMEFULL="${PRODUCT_NAME}-${PFSENSE_VERSION}-${FILESIZE}-${TARGET}-${NANOTYPE}-${DATESTRING}.img.gz"
199
			FILENAMEUPGRADE="${PRODUCT_NAME}-${PFSENSE_VERSION}-${FILESIZE}-${TARGET}-${NANOTYPE}-upgrade-${DATESTRING}.img.gz"
200
			mkdir -p $STAGINGAREA/nanobsd
201
			mkdir -p $STAGINGAREA/nanobsdupdates
202

    
203
			cp $MAKEOBJDIRPREFIXFINAL/$FILENAMEFULL $STAGINGAREA/nanobsd/ 2>/dev/null
204
			cp $MAKEOBJDIRPREFIXFINAL/$FILENAMEUPGRADE $STAGINGAREA/nanobsdupdates 2>/dev/null
205

    
206
			if [ -f $STAGINGAREA/nanobsd/$FILENAMEFULL ]; then
207
				md5 $STAGINGAREA/nanobsd/$FILENAMEFULL > $STAGINGAREA/nanobsd/$FILENAMEFULL.md5 2>/dev/null
208
				sha256 $STAGINGAREA/nanobsd/$FILENAMEFULL > $STAGINGAREA/nanobsd/$FILENAMEFULL.sha256 2>/dev/null
209
			fi
210
			if [ -f $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE ]; then
211
				md5 $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE > $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE.md5 2>/dev/null
212
				sha256 $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE > $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE.sha256 2>/dev/null
213
			fi
214

    
215
			# Copy NanoBSD auto update:
216
			if [ -f $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE ]; then
217
				cp $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE $STAGINGAREA/latest-${NANOTYPE}-$FILESIZE.img.gz 2>/dev/null
218
				sha256 $STAGINGAREA/latest-${NANOTYPE}-$FILESIZE.img.gz > $STAGINGAREA/latest-${NANOTYPE}-$FILESIZE.img.gz.sha256 2>/dev/null
219
				# NOTE: Updates need a file with output similar to date  output
220
				# Use the file generated at start of dobuilds() to be consistent on times
221
				cp $BUILTDATESTRINGFILE $STAGINGAREA/version-${NANOTYPE}-$FILESIZE
222
			fi
223
		done
224
	done
225
}
226

    
227
copy_to_staging_iso_updates() {
228
	cd $BUILDER_SCRIPTS
229

    
230
	# Copy ISOs
231
	md5 ${ISOPATH}.gz > ${ISOPATH}.md5
232
	sha256 ${ISOPATH}.gz > ${ISOPATH}.sha256
233
	cp ${ISOPATH}* $STAGINGAREA/ 2>/dev/null
234

    
235
	# Copy memstick items
236
	md5 ${MEMSTICKPATH}.gz > ${MEMSTICKPATH}.md5
237
	sha256 ${MEMSTICKPATH}.gz > ${MEMSTICKPATH}.sha256
238
	cp ${MEMSTICKPATH}* $STAGINGAREA/ 2>/dev/null
239

    
240
	md5 ${MEMSTICKSERIALPATH}.gz > ${MEMSTICKSERIALPATH}.md5
241
	sha256 ${MEMSTICKSERIALPATH}.gz > ${MEMSTICKSERIALPATH}.sha256
242
	cp ${MEMSTICKSERIALPATH}* $STAGINGAREA/ 2>/dev/null
243

    
244
	md5 ${UPDATES_TARBALL_FILENAME} > ${UPDATES_TARBALL_FILENAME}.md5
245
	sha256 ${UPDATES_TARBALL_FILENAME} > ${UPDATES_TARBALL_FILENAME}.sha256
246
	cp ${UPDATES_TARBALL_FILENAME}* $STAGINGAREA/ 2>/dev/null
247
	# NOTE: Updates need a file with output similar to date  output
248
	# Use the file generated at start of dobuilds() to be consistent on times
249
	cp $BUILTDATESTRINGFILE $STAGINGAREA/version 2>/dev/null
250
}
251

    
252
check_for_congestion() {
253
#	cd $BUILDER_SCRIPTS
254
#	echo -n ">>> Waiting for Internet congestion to die down before rsync operations: $PINGTIME "
255
#	while [ "$PINGTIME" -gt "$PINGMAX" ]; do
256
#		PINGTIME=`ping -c1 $PINGIP | grep time | cut -d"=" -f4 | cut -d" " -f1 | cut -d"." -f1`
257
#		echo -n " $PINGTIME"
258
#		sleep 10
259
#	done
260
#	echo ""
261
}
262

    
263
scp_files() {
264
	cd $BUILDER_SCRIPTS
265
	if [ -z "${RSYNC_COPY_ARGUMENTS:-}" ]; then
266
		RSYNC_COPY_ARGUMENTS="-ave ssh --timeout=60 --bwlimit=${RSYNCKBYTELIMIT}" #--bwlimit=50
267
	fi
268
	update_status ">>> Copying files to snapshots.pfsense.org"
269
	if [ ! -f /usr/local/bin/rsync ]; then
270
		update_status ">>> Could not find rsync, installing from ports..."
271
		(cd /usr/ports/net/rsync && make install clean)
272
	fi
273
	rm -f $SCRATCHDIR/ssh-snapshots*
274

    
275
	# Ensure directory(s) are available
276
	ssh snapshots@${RSYNCIP} "mkdir -p /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/livecd_installer"
277
	ssh snapshots@${RSYNCIP} "mkdir -p /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/updates"
278
	ssh snapshots@${RSYNCIP} "mkdir -p /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/nanobsd"
279
	if [ -d $STAGINGAREA/virtualization ]; then
280
		ssh snapshots@${RSYNCIP} "mkdir -p /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/virtualization"
281
	fi
282
	ssh snapshots@${RSYNCIP} "mkdir -p /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/.updaters"
283
	# ensure permissions are correct for r+w
284
	ssh snapshots@${RSYNCIP} "chmod -R ug+rw /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/."
285
	ssh snapshots@${RSYNCIP} "chmod -R ug+rw /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/."
286
	ssh snapshots@${RSYNCIP} "chmod -R ug+rw /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/*/."
287
	check_for_congestion
288
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/${PRODUCT_NAME}-*iso* \
289
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/livecd_installer/
290
	check_for_congestion
291
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/${PRODUCT_NAME}-memstick* \
292
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/livecd_installer/
293
	check_for_congestion
294
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/${PRODUCT_NAME}-*Update* \
295
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/updates/
296
	check_for_congestion
297
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/nanobsd/* \
298
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/nanobsd/
299
	check_for_congestion
300
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/nanobsdupdates/* \
301
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/updates/
302
	check_for_congestion
303
	if [ -d $STAGINGAREA/virtualization ]; then
304
		rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/virtualization/* \
305
			snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/virtualization/
306
		check_for_congestion
307
	fi
308

    
309
	# Rather than copy these twice, use ln to link to the latest one.
310

    
311
	ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/.updaters/latest.tgz"
312
	ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/.updaters/latest.tgz.sha256"
313

    
314
	LATESTFILENAME="`ls $UPDATESDIR/*.tgz | grep Full | grep -v md5 | grep -v sha256 | tail -n1`"
315
	LATESTFILENAME=`basename ${LATESTFILENAME}`
316
	ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/updates/${LATESTFILENAME} \
317
		/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/.updaters/latest.tgz"
318
	ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/updates/${LATESTFILENAME}.sha256 \
319
		/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/.updaters/latest.tgz.sha256"
320

    
321
	for i in 1g 2g 4g
322
	do
323
		ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/.updaters/latest-nanobsd-${i}.img.gz"
324
		ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/.updaters/latest-nanobsd-${i}.img.gz.sha256"
325
		ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/.updaters/latest-nanobsd-vga-${i}.img.gz"
326
		ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/.updaters/latest-nanobsd-vga-${i}.img.gz.sha256"
327

    
328
		FILENAMEUPGRADE="${PRODUCT_NAME}-${PFSENSE_VERSION}-${i}-${TARGET}-nanobsd-upgrade-${DATESTRING}.img.gz"
329
		ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/updates/${FILENAMEUPGRADE} \
330
			/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/.updaters/latest-nanobsd-${i}.img.gz"
331
		ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/updates/${FILENAMEUPGRADE}.sha256 \
332
			/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/.updaters/latest-nanobsd-${i}.img.gz.sha256"
333

    
334
		FILENAMEUPGRADE="${PRODUCT_NAME}-${PFSENSE_VERSION}-${i}-${TARGET}-nanobsd-vga-upgrade-${DATESTRING}.img.gz"
335
		ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/updates/${FILENAMEUPGRADE} \
336
			/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/.updaters/latest-nanobsd-vga-${i}.img.gz"
337
		ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/updates/${FILENAMEUPGRADE}.sha256 \
338
			/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/.updaters/latest-nanobsd-vga-${i}.img.gz.sha256"
339
	done
340

    
341
	check_for_congestion
342
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/version* \
343
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/.updaters
344
	update_status ">>> Finished copying files."
345
}
346

    
347
cleanup_builds() {
348
	cd $BUILDER_SCRIPTS
349
	# Remove prior builds
350
	update_status ">>> Cleaning up after prior builds..."
351
	rm -rf $STAGINGAREA/*
352
	rm -f $UPDATESDIR/*  # Keep updates dir slimmed down
353
	rm -rf $MAKEOBJDIRPREFIXFINAL/*
354
	./build.sh --clean-builder
355
}
356

    
357
build_loop_operations() {
358
	cd $BUILDER_SCRIPTS
359
	update_status ">>> Starting build loop operations"
360
	# --- Items we need to run for a complete build run ---
361
	# Cleanup prior builds
362
	cleanup_builds
363
	# Do the builds
364
	dobuilds
365
	# SCP files to snapshot web hosting area
366
	if [ -z "${NO_UPLOAD}" ]; then
367
		scp_files
368
	fi
369
	# Alert the world that we have some snapshots ready.
370
	update_status ">>> Builder run is complete."
371
	post_tweet "Snapshots for FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}-${PFSENSETAG} have been copied http://snapshots.pfsense.org/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/"
372
}
373

    
374
if [ -z "${LOOPED_SNAPSHOTS}" ]; then
375
	build_loop_operations
376
else
377
	# Main builder loop
378
	while [ /bin/true ]; do
379
		BUILDCOUNTER=`expr $BUILDCOUNTER + 1`
380
		update_status ">>> Starting builder run #${BUILDCOUNTER}..."
381
		# We can disable ports builds
382
		if [ "$NO_PORTS" = "yo" ]; then
383
			update_status ">>> Not building pfPorts at all during this snapshot builder looped run..."
384
			touch $SCRATCHDIR/pfSense_do_not_build_pfPorts
385
		else
386
			if [ "$BUILDCOUNTER" -gt 1 ]; then 
387
				update_status ">>> Previous snapshot runs deteceted, not building pfPorts again..."
388
				touch $SCRATCHDIR/pfSense_do_not_build_pfPorts
389
			else
390
				update_status ">>> Building pfPorts on this snapshot run..."
391
				rm -f $SCRATCHDIR/pfSense_do_not_build_pfPorts
392
			fi
393
		fi
394

    
395
		# Launch the snapshots builder script and pipe its
396
		# contents to the while loop so we can record the 
397
		# script progress in real time to the public facing
398
		# snapshot server (snapshots.pfsense.org).
399
		( build_loop_operations ) | while read LINE
400
		do
401
			update_status "$LINE"
402
		done
403

    
404
		export minsleepvalue=28800
405
		export maxsleepvalue=86400
406
		update_status ">>> Sleeping for at least $minsleepvalue, at most $maxsleepvalue in between snapshot builder runs.  Last known commit ${PFSENSE_LAST_COMMIT}/${TOOLS_LAST_COMMIT}"
407
		update_status ">>> Freezing build process at `date`."
408
		sleep $minsleepvalue
409
		update_status ">>> Thawing build process and resuming checks for pending commits at `date`."
410

    
411
		# Count some sheep or wait until a new commit turns up 
412
		# for one days time.  We will wake up if a new commit
413
		# is deteceted during sleepy time.
414
		sleep_between_runs $maxsleepvalue
415

    
416
		# If REBOOT_AFTER_SNAPSHOT_RUN is defined reboot
417
		# the box after the run. 
418
		if [ ! -z "${REBOOT_AFTER_SNAPSHOT_RUN:-}" ]; then
419
			update_status ">>> Rebooting `hostname` due to \$REBOOT_AFTER_SNAPSHOT_RUN"
420
			shutdown -r now
421
			kill $$
422
		fi
423
		# Rotate log file (.old)
424
		rotate_logfile
425

    
426
		# Set a common DATESTRING for the build if not set from builder_defaults.sh.
427
		# Rely on builder_defaults.sh doing the right job the first time included from this script.
428
		# NOTE: This is needed to have autoupdate detect a new version.
429
		# Override it here to have continuous builds with proper labels
430
		rm $DATESTRINGFILE
431
		rm $BUILTDATESTRINGFILE
432
		export DATESTRING=`date "+%Y%m%d-%H%M"`
433
		export BUILTDATESTRING=`date "+%a %b %d %T %Z %Y"`
434
		echo "$BUILTDATESTRING" > $BUILTDATESTRINGFILE
435
		echo "$DATESTRING" > $DATESTRINGFILE
436
	done
437
fi
(2-2/7)