Projet

Général

Profil

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

univnautes-tools / builder_scripts / build_snapshots.sh @ b22ef68c

1 2d44934d Scott Ullrich
#!/bin/sh
2
#
3 c2573cbb Scott Ullrich
# ${PRODUCT_NAME} snapshot building system
4 77fc19fb Scott Ullrich
# (C)2007, 2008, 2009 Scott Ullrich
5 2d44934d Scott Ullrich
# All rights reserved
6
#
7 426c3237 Scott Ullrich
# Redistribution and use in source and binary forms, with or without
8
# modification, are permitted provided that the following conditions
9
# are met:
10 2d44934d Scott Ullrich
#
11 426c3237 Scott Ullrich
# 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 2d44934d Scott Ullrich
#
18 417ee3c1 Scott Ullrich
#
19 20ab9ac3 Scott Ullrich
# This script glues together the various FreeSBIE style pieces of the 
20 c2573cbb Scott Ullrich
# ${PRODUCT_NAME} builder system and will build each style image: ISO, NanoBSD,
21 417ee3c1 Scott Ullrich
# 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 20ab9ac3 Scott Ullrich
30 81aa6462 Scott Ullrich
if [ ! -f ./pfsense-build.conf ]; then
31
	echo "You must first run ./set_version.sh !"
32
	exit 1
33
fi
34
35 63205757 Ermal
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 74b24b85 Ermal
done
52
53 63d7c187 Ermal
# 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 8326a7c1 Ermal
. ./builder_defaults.sh
60 63d7c187 Ermal
61 63205757 Ermal
# 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 2d44934d Scott Ullrich
# Local variables that are used by builder scripts
68
STAGINGAREA=/tmp/staging
69 b594cf1b jim-p
RSYNCIP="snapshots.pfsense.org"
70 25c48847 Chris Buechler
RSYNCKBYTELIMIT="248000"
71 661593d2 Scott Ullrich
PINGTIME="999"
72
PINGMAX="40"
73 b594cf1b jim-p
PINGIP="snapshots.pfsense.org"
74 2d44934d Scott Ullrich
75 63205757 Ermal
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 2d44934d Scott Ullrich
# Ensure directories exist
80
mkdir -p $STAGINGAREA
81
82 b5b7f3ef Ermal
if [ -f $SCRATCHDIR/pfPorts_forced_build_required ]; then
83
	rm $SCRATCHDIR/pfPorts_forced_build_required
84 29b9c908 Scott Ullrich
fi
85
86 63205757 Ermal
echo "" > $SNAPSHOTSLOGFILE
87
echo "" > $SNAPSHOTSLASTUPDATE
88
89
git_last_commit() {
90
	if [ -d "${1}" ]; then
91 b32c8478 Ermal
		(cd ${1} && git fetch && git rebase ${2})>/dev/null
92 63205757 Ermal
		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 d6411f2f Ermal
		PFSENSE_CURRENT_COMMIT=$(git_last_commit "${GIT_REPO_DIR}/pfSenseGITREPO" origin/${PFSENSETAG})
108 39122650 Ermal
		if [ "${PFSENSE_LAST_COMMIT}" != "${PFSENSE_CURRENT_COMMIT}" ]; then
109 31b48a1e Ermal
			update_status ">>> New commit: $CURRENT_AUTHOR - $PFSENSE_CURRENT_COMMIT .. No longer sleepy."
110 b22ef68c Ermal
			COUNTER=$(($maxsleepvalue + 60))
111 63205757 Ermal
			export PFSENSE_LAST_COMMIT="${PFSENSE_CURRENT_COMMIT}"
112
		fi
113 584e0eb1 Ermal
		TOOLS_CURRENT_COMMIT=$(git_last_commit "${BUILDER_SCRIPTS}" origin)
114 39122650 Ermal
		if [ "${TOOLS_LAST_COMMIT}" != "${TOOLS_CURRENT_COMMIT}" ]; then
115 31b48a1e Ermal
			update_status ">>> New commit: $CURRENT_AUTHOR - $TOOLS_CURRENT_COMMIT .. No longer sleepy."
116 b22ef68c Ermal
			COUNTER=$(($maxsleepvalue + 60))
117 63205757 Ermal
			export TOOLS_LAST_COMMIT="${TOOLS_CURRENT_COMMIT}"
118
		fi
119 b22ef68c Ermal
		COUNTER=$(($COUNTER + 60))
120 63205757 Ermal
	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 4d84fa36 Scott Ullrich
post_tweet() {
161 68d79e27 Scott Ullrich
	TWEET_MESSAGE="$1"
162 a89236b9 Scott Ullrich
	if [ "$TWITTER_USERNAME" = "" ]; then
163 63205757 Ermal
		update_status ">>> ERROR: Could not find TWITTER_USERNAME -- tweet cancelled."
164 4d84fa36 Scott Ullrich
		return
165
	fi
166 68d79e27 Scott Ullrich
	if [ "$TWITTER_PASSWORD" = "" ]; then
167 63205757 Ermal
		update_status ">>> ERROR: Could not find TWITTER_PASSWORD -- tweet cancelled."
168 4d84fa36 Scott Ullrich
		return
169
	fi
170
	if [ ! -f "/usr/local/bin/curl" ]; then 
171 63205757 Ermal
		update_status ">>> ERROR: Could not find /usr/local/bin/curl -- tweet cancelled."
172 4d84fa36 Scott Ullrich
		return
173
	fi
174 63205757 Ermal
	update_status ">>> Tweet:"
175
	update_status ">>> ${TWEET_MESSAGE}"
176 a89236b9 Scott Ullrich
	echo -n ">>> Posting tweet..."
177 b5b7f3ef Ermal
	`/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 63205757 Ermal
	update_status "Done!"
179 4d84fa36 Scott Ullrich
}
180
181 4eea41f8 Scott Ullrich
dobuilds() {
182 97090d70 Ermal
183 63d7c187 Ermal
	cd $BUILDER_SCRIPTS
184 adbddb0e Ermal
	# Build images
185 aef1b261 Ermal
	./build.sh --flash-size '1g 2g 4g' "iso memstick memstickserial fullupdate nanobsd nanobsd-vga"
186 59d33514 Ermal
	# Copy files
187 4eea41f8 Scott Ullrich
	copy_to_staging_iso_updates
188 aef1b261 Ermal
	copy_to_staging_nanobsd '1g 2g 4g'
189 a2990ef3 Scott Ullrich
}
190
191 e64d3e3a Scott Ullrich
copy_to_staging_nanobsd() {
192 63d7c187 Ermal
	cd $BUILDER_SCRIPTS
193 9a552840 jim-p
194 aef1b261 Ermal
	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 43dbeb30 Ermal
				# 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 bfbcf6bf Ermal
				cp $BUILTDATESTRINGFILE $STAGINGAREA/version-${NANOTYPE}-$FILESIZE
220 43dbeb30 Ermal
			fi
221 aef1b261 Ermal
		done
222 adbddb0e Ermal
	done
223 e64d3e3a Scott Ullrich
}
224
225 2d44934d Scott Ullrich
copy_to_staging_iso_updates() {
226 63d7c187 Ermal
	cd $BUILDER_SCRIPTS
227 adbddb0e Ermal
228 e0038a75 Scott Ullrich
	# Copy ISOs
229 adbddb0e Ermal
	md5 ${ISOPATH}.gz > ${ISOPATH}.md5
230
	sha256 ${ISOPATH}.gz > ${ISOPATH}.sha256
231 72d65d89 Ermal
	cp ${ISOPATH}* $STAGINGAREA/ 2>/dev/null
232 adbddb0e Ermal
233 c2bf724a Scott Ullrich
	# Copy memstick items
234 adbddb0e Ermal
	md5 ${MEMSTICKPATH}.gz > ${MEMSTICKPATH}.md5
235
	sha256 ${MEMSTICKPATH}.gz > ${MEMSTICKPATH}.sha256
236 72d65d89 Ermal
	cp ${MEMSTICKPATH}* $STAGINGAREA/ 2>/dev/null
237 adbddb0e Ermal
238
	md5 ${MEMSTICKSERIALPATH}.gz > ${MEMSTICKSERIALPATH}.md5
239
	sha256 ${MEMSTICKSERIALPATH}.gz > ${MEMSTICKSERIALPATH}.sha256
240 72d65d89 Ermal
	cp ${MEMSTICKSERIALPATH}* $STAGINGAREA/ 2>/dev/null
241 adbddb0e Ermal
242 25c6d9ec Ermal
	md5 ${UPDATES_TARBALL_FILENAME} > ${UPDATES_TARBALL_FILENAME}.md5
243
	sha256 ${UPDATES_TARBALL_FILENAME} > ${UPDATES_TARBALL_FILENAME}.sha256
244 adbddb0e Ermal
	cp ${UPDATES_TARBALL_FILENAME}* $STAGINGAREA/ 2>/dev/null
245 43dbeb30 Ermal
	# 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 bfbcf6bf Ermal
	cp $BUILTDATESTRINGFILE $STAGINGAREA/version 2>/dev/null
248 2d44934d Scott Ullrich
}
249
250 82412a82 Scott Ullrich
check_for_congestion() {
251 63d7c187 Ermal
#	cd $BUILDER_SCRIPTS
252 e73988eb jim-p
#	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 82412a82 Scott Ullrich
}
260
261
scp_files() {
262 63d7c187 Ermal
	cd $BUILDER_SCRIPTS
263 e75e449e Scott Ullrich
	if [ -z "${RSYNC_COPY_ARGUMENTS:-}" ]; then
264 d9f4e6ac jim-p
		RSYNC_COPY_ARGUMENTS="-ave ssh --timeout=60 --bwlimit=${RSYNCKBYTELIMIT}" #--bwlimit=50
265 e75e449e Scott Ullrich
	fi
266 63205757 Ermal
	update_status ">>> Copying files to snapshots.pfsense.org"
267 8a7c2cf7 Scott Ullrich
	if [ ! -f /usr/local/bin/rsync ]; then
268 63205757 Ermal
		update_status ">>> Could not find rsync, installing from ports..."
269 8a7c2cf7 Scott Ullrich
		(cd /usr/ports/net/rsync && make install clean)
270
	fi
271 b5b7f3ef Ermal
	rm -f $SCRATCHDIR/ssh-snapshots*
272 7203485d Ermal
273 438133f3 Scott Ullrich
	# Ensure directory(s) are available
274 9f2a340a Ermal
	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 5a9909a6 Ermal
	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 9f2a340a Ermal
	ssh snapshots@${RSYNCIP} "mkdir -p /usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/.updaters"
281 d451db3b Scott Ullrich
	# ensure permissions are correct for r+w
282 9f2a340a Ermal
	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 a2990ef3 Scott Ullrich
	check_for_congestion
286 c2573cbb Scott Ullrich
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/${PRODUCT_NAME}-*iso* \
287 9f2a340a Ermal
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/livecd_installer/
288 82412a82 Scott Ullrich
	check_for_congestion
289 c2573cbb Scott Ullrich
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/${PRODUCT_NAME}-memstick* \
290 9f2a340a Ermal
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/livecd_installer/
291 82412a82 Scott Ullrich
	check_for_congestion
292 c2573cbb Scott Ullrich
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/${PRODUCT_NAME}-*Update* \
293 9f2a340a Ermal
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/updates/
294 c2bf724a Scott Ullrich
	check_for_congestion
295 a2990ef3 Scott Ullrich
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/nanobsd/* \
296 9f2a340a Ermal
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/nanobsd/
297 f8c4378b Scott Ullrich
	check_for_congestion
298 a2990ef3 Scott Ullrich
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/nanobsdupdates/* \
299 9f2a340a Ermal
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/updates/
300 61d3cd9d Scott Ullrich
	check_for_congestion
301 5a9909a6 Ermal
	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 8aff9872 jim-p
307
	# Rather than copy these twice, use ln to link to the latest one.
308
309 9f2a340a Ermal
	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 8aff9872 jim-p
312 63d7c187 Ermal
	LATESTFILENAME="`ls $UPDATESDIR/*.tgz | grep Full | grep -v md5 | grep -v sha256 | tail -n1`"
313 a59cef1b jim-p
	LATESTFILENAME=`basename ${LATESTFILENAME}`
314 9f2a340a Ermal
	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 8aff9872 jim-p
319 aef1b261 Ermal
	for i in 1g 2g 4g
320 8aff9872 jim-p
	do
321 9f2a340a Ermal
		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 9c5f8a31 Ermal
		FILENAMEUPGRADE="${PRODUCT_NAME}-${PFSENSE_VERSION}-${i}-${TARGET}-nanobsd-vga-upgrade-${DATESTRING}.img.gz"
333 9f2a340a Ermal
		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 8aff9872 jim-p
	done
338
339
	check_for_congestion
340
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/version* \
341 9f2a340a Ermal
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_BRANCH}/${TARGET}/${PRODUCT_NAME}_${PFSENSETAG}/.updaters
342 63205757 Ermal
	update_status ">>> Finished copying files."
343 2d44934d Scott Ullrich
}
344
345
cleanup_builds() {
346 63d7c187 Ermal
	cd $BUILDER_SCRIPTS
347 2d44934d Scott Ullrich
	# Remove prior builds
348 63205757 Ermal
	update_status ">>> Cleaning up after prior builds..."
349 9c9ce96e Scott Ullrich
	rm -rf $STAGINGAREA/*
350 63d7c187 Ermal
	rm -f $UPDATESDIR/*  # Keep updates dir slimmed down
351 3c5584ba Scott Ullrich
	rm -rf $MAKEOBJDIRPREFIXFINAL/*
352 8326a7c1 Ermal
	./build.sh --clean-builder
353 2d44934d Scott Ullrich
}
354
355
build_loop_operations() {
356 63d7c187 Ermal
	cd $BUILDER_SCRIPTS
357 63205757 Ermal
	update_status ">>> Starting build loop operations"
358 2d44934d Scott Ullrich
	# --- Items we need to run for a complete build run ---
359
	# Cleanup prior builds
360
	cleanup_builds
361
	# Do the builds
362
	dobuilds
363 79d4108d Scott Ullrich
	# SCP files to snapshot web hosting area
364 74b24b85 Ermal
	if [ -z "${NO_UPLOAD}" ]; then
365
		scp_files
366
	fi
367 b27a7e35 Scott Ullrich
	# Alert the world that we have some snapshots ready.
368 63205757 Ermal
	update_status ">>> Builder run is complete."
369 9f2a340a Ermal
	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 2d44934d Scott Ullrich
}
371
372 63205757 Ermal
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 80e2721b Ermal
		( build_loop_operations ) | while read LINE
398
		do
399
			update_status "$LINE"
400
		done
401 63205757 Ermal
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 503073c5 Ermal
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 63205757 Ermal
	done
435
fi