Projet

Général

Profil

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

univnautes-tools / builder_scripts / build_snapshots.sh @ b22ef68c

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=$(($maxsleepvalue + 60))
111
			export PFSENSE_LAST_COMMIT="${PFSENSE_CURRENT_COMMIT}"
112
		fi
113
		TOOLS_CURRENT_COMMIT=$(git_last_commit "${BUILDER_SCRIPTS}" origin)
114
		if [ "${TOOLS_LAST_COMMIT}" != "${TOOLS_CURRENT_COMMIT}" ]; then
115
			update_status ">>> New commit: $CURRENT_AUTHOR - $TOOLS_CURRENT_COMMIT .. No longer sleepy."
116
			COUNTER=$(($maxsleepvalue + 60))
117
			export TOOLS_LAST_COMMIT="${TOOLS_CURRENT_COMMIT}"
118
		fi
119
		COUNTER=$(($COUNTER + 60))
120
	done
121
	if [ $COUNTER -ge $maxsleepvalue ]; then
122
		update_status ">>> Sleep timer expired. Restarting build."
123
		maxsleepvalue=0
124
		COUNTER=0
125
	fi
126
}
127

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

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

    
156
	# Cleanup log file
157
	echo "" > $SNAPSHOTSLOGFILE
158
}
159

    
160
post_tweet() {
161
	TWEET_MESSAGE="$1"
162
	if [ "$TWITTER_USERNAME" = "" ]; then
163
		update_status ">>> ERROR: Could not find TWITTER_USERNAME -- tweet cancelled."
164
		return
165
	fi
166
	if [ "$TWITTER_PASSWORD" = "" ]; then
167
		update_status ">>> ERROR: Could not find TWITTER_PASSWORD -- tweet cancelled."
168
		return
169
	fi
170
	if [ ! -f "/usr/local/bin/curl" ]; then 
171
		update_status ">>> ERROR: Could not find /usr/local/bin/curl -- tweet cancelled."
172
		return
173
	fi
174
	update_status ">>> Tweet:"
175
	update_status ">>> ${TWEET_MESSAGE}"
176
	echo -n ">>> Posting tweet..."
177
	`/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
178
	update_status "Done!"
179
}
180

    
181
dobuilds() {
182

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

    
191
copy_to_staging_nanobsd() {
192
	cd $BUILDER_SCRIPTS
193

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

    
201
			cp $MAKEOBJDIRPREFIXFINAL/$FILENAMEFULL $STAGINGAREA/nanobsd/ 2>/dev/null
202
			cp $MAKEOBJDIRPREFIXFINAL/$FILENAMEUPGRADE $STAGINGAREA/nanobsdupdates 2>/dev/null
203

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

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

    
225
copy_to_staging_iso_updates() {
226
	cd $BUILDER_SCRIPTS
227

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

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

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

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

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

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

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

    
307
	# Rather than copy these twice, use ln to link to the latest one.
308

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

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

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

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

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

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

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

    
355
build_loop_operations() {
356
	cd $BUILDER_SCRIPTS
357
	update_status ">>> Starting build loop operations"
358
	# --- Items we need to run for a complete build run ---
359
	# Cleanup prior builds
360
	cleanup_builds
361
	# Do the builds
362
	dobuilds
363
	# SCP files to snapshot web hosting area
364
	if [ -z "${NO_UPLOAD}" ]; then
365
		scp_files
366
	fi
367
	# Alert the world that we have some snapshots ready.
368
	update_status ">>> Builder run is complete."
369
	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}/"
370
}
371

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

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

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

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

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

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