Project

General

Profile

Download (16.7 KB) Statistics
| Branch: | Tag: | Revision:
1
#!/bin/sh
2
#
3
# build_snapshots.sh
4
#
5
# Copyright (c) 2007-2015 Electric Sheep Fencing, LLC
6
# All rights reserved
7
#
8
# Redistribution and use in source and binary forms, with or without
9
# modification, are permitted provided that the following conditions
10
# are met:
11
#
12
# 1. Redistributions of source code must retain the above copyright
13
#    notice, this list of conditions and the following disclaimer.
14
#
15
# 2. Redistributions in binary form must reproduce the above copyright
16
#    notice, this list of conditions and the following disclaimer in the
17
#    documentation and/or other materials provided with the distribution.
18
#
19
# THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY
20
# EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR
23
# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
30
# OF THE POSSIBILITY OF SUCH DAMAGE.
31
#
32

    
33
if [ ! -f ./build.conf ]; then
34
	echo "You must first run ./set_version.sh !"
35
	exit 1
36
fi
37

    
38
NO_UPLOAD=""
39
LOOPED_SNAPSHOTS=""
40

    
41
# Handle command line arguments
42
while test "$1" != "" ; do
43
	case $1 in
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 build.conf"
59
. ./builder_defaults.sh
60

    
61
# Keeps track of how many time builder has looped
62
BUILDCOUNTER=0
63

    
64
# Local variables that are used by builder scripts
65
STAGINGAREA=/tmp/staging
66
RSYNCIP="snapshots.pfsense.org"
67
RSYNCKBYTELIMIT="248000"
68

    
69
export SNAPSHOTSLOGFILE=${SNAPSHOTSLOGFILE:-"$SCRATCHDIR/snapshots-build.log"}
70
export SNAPSHOTSLASTUPDATE=${SNAPSHOTSLASTUPDATE:-"$SCRATCHDIR/snapshots-lastupdate.log"}
71
export MASTER_BUILDER_SSH_LOG_DEST=${MASTER_BUILDER_SSH_LOG_DEST:-snapshots@${RSYNCIP}:/usr/local/www/snapshots/logs/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/${TARGET}/build.log}
72

    
73
# Ensure directories exist
74
mkdir -p $STAGINGAREA
75

    
76
echo "" > $SNAPSHOTSLOGFILE
77
echo "" > $SNAPSHOTSLASTUPDATE
78

    
79
git_last_commit() {
80
	if [ -d "${1}/.git" ]; then
81
		git -C "${1}" pull -q
82
		git -C "${1}" log -1 --format='%H'
83
	fi
84
}
85

    
86
# This routine is called in between runs. We
87
# will sleep for a bit and check for new commits
88
# in between sleeping for short durations.
89
sleep_between_runs() {
90
	COUNTER=0
91
	while [ $COUNTER -lt $maxsleepvalue ]; do
92
		sleep 60
93
		CURRENT_COMMIT=$(git_last_commit "${BUILDER_ROOT}")
94
		if [ "${LAST_COMMIT}" != "${CURRENT_COMMIT}" ]; then
95
			update_status ">>> New commit: $CURRENT_AUTHOR - $CURRENT_COMMIT .. No longer sleepy."
96
			COUNTER=$(($maxsleepvalue + 60))
97
			export LAST_COMMIT="${CURRENT_COMMIT}"
98
		fi
99
		COUNTER=$(($COUNTER + 60))
100
	done
101
	if [ $COUNTER -ge $maxsleepvalue ]; then
102
		update_status ">>> Sleep timer expired. Restarting build."
103
		maxsleepvalue=0
104
		COUNTER=0
105
	fi
106
}
107

    
108
# This routine is called to write out to stdout
109
# a string. The string is appended to $SNAPSHOTSLOGFILE
110
# and we scp the log file to the builder host if
111
# needed for the real time logging functions.
112
update_status() {
113
	if [ "$1" = "" ]; then
114
		return
115
	fi
116
	echo $1
117
	echo "`date` -|- $1" >> $SNAPSHOTSLOGFILE
118
	if [ -n "$MASTER_BUILDER_SSH_LOG_DEST" -a -z "${NO_UPLOAD}" ]; then
119
		LU=`cat $SNAPSHOTSLASTUPDATE`
120
		CT=`date "+%H%M%S"`
121
		# Only update every minute
122
		if [ "$LU" != "$CT" ]; then 
123
			scp -q $SNAPSHOTSLOGFILE $MASTER_BUILDER_SSH_LOG_DEST
124
			date "+%H%M%S" > $SNAPSHOTSLASTUPDATE
125
		fi
126
	fi
127
}
128

    
129
# Copy the current log file to $filename.old on
130
# the snapshot www server (real time logs)
131
rotate_logfile() {
132
	if [ -n "$MASTER_BUILDER_SSH_LOG_DEST" -a -z "${NO_UPLOAD}" ]; then
133
		scp -q $SNAPSHOTSLOGFILE $MASTER_BUILDER_SSH_LOG_DEST.old
134
	fi
135

    
136
	# Cleanup log file
137
	echo "" > $SNAPSHOTSLOGFILE
138
}
139

    
140
dobuilds() {
141
	# Build images
142
	(cd ${BUILDER_ROOT} && ./build.sh --flash-size '1g 2g 4g' "iso memstick memstickserial memstickadi fullupdate nanobsd nanobsd-vga")
143
	# Copy files
144
	copy_to_staging_iso_updates
145
	copy_to_staging_nanobsd '1g 2g 4g'
146
}
147

    
148
copy_to_staging_nanobsd() {
149
	for NANOTYPE in nanobsd nanobsd-vga; do
150
		for FILESIZE in ${1}; do
151
			FILENAMEFULL="${PRODUCT_NAME}-${PRODUCT_VERSION}-${FILESIZE}-${TARGET}-${NANOTYPE}-${DATESTRING}.img.gz"
152
			FILENAMEUPGRADE="${PRODUCT_NAME}-${PRODUCT_VERSION}-${FILESIZE}-${TARGET}-${NANOTYPE}-upgrade-${DATESTRING}.img.gz"
153
			mkdir -p $STAGINGAREA/nanobsd
154
			mkdir -p $STAGINGAREA/nanobsdupdates
155

    
156
			cp $IMAGES_FINAL_DIR/$FILENAMEFULL $STAGINGAREA/nanobsd/ 2>/dev/null
157
			cp $IMAGES_FINAL_DIR/$FILENAMEUPGRADE $STAGINGAREA/nanobsdupdates 2>/dev/null
158

    
159
			if [ -f $STAGINGAREA/nanobsd/$FILENAMEFULL ]; then
160
				md5 $STAGINGAREA/nanobsd/$FILENAMEFULL > $STAGINGAREA/nanobsd/$FILENAMEFULL.md5 2>/dev/null
161
				sha256 $STAGINGAREA/nanobsd/$FILENAMEFULL > $STAGINGAREA/nanobsd/$FILENAMEFULL.sha256 2>/dev/null
162
			fi
163
			if [ -f $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE ]; then
164
				md5 $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE > $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE.md5 2>/dev/null
165
				sha256 $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE > $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE.sha256 2>/dev/null
166
			fi
167

    
168
			# Copy NanoBSD auto update:
169
			if [ -f $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE ]; then
170
				cp $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE $STAGINGAREA/latest-${NANOTYPE}-$FILESIZE.img.gz 2>/dev/null
171
				sha256 $STAGINGAREA/latest-${NANOTYPE}-$FILESIZE.img.gz > $STAGINGAREA/latest-${NANOTYPE}-$FILESIZE.img.gz.sha256 2>/dev/null
172
				# NOTE: Updates need a file with output similar to date output
173
				# Use the file generated at start of dobuilds() to be consistent on times
174
				cp $BUILTDATESTRINGFILE $STAGINGAREA/version-${NANOTYPE}-$FILESIZE
175
			fi
176
		done
177
	done
178
}
179

    
180
copy_to_staging_iso_updates() {
181
	# Copy ISOs
182
	md5 ${ISOPATH}.gz > ${ISOPATH}.md5
183
	sha256 ${ISOPATH}.gz > ${ISOPATH}.sha256
184
	cp ${ISOPATH}* $STAGINGAREA/ 2>/dev/null
185

    
186
	# Copy memstick items
187
	md5 ${MEMSTICKPATH}.gz > ${MEMSTICKPATH}.md5
188
	sha256 ${MEMSTICKPATH}.gz > ${MEMSTICKPATH}.sha256
189
	cp ${MEMSTICKPATH}* $STAGINGAREA/ 2>/dev/null
190

    
191
	md5 ${MEMSTICKSERIALPATH}.gz > ${MEMSTICKSERIALPATH}.md5
192
	sha256 ${MEMSTICKSERIALPATH}.gz > ${MEMSTICKSERIALPATH}.sha256
193
	cp ${MEMSTICKSERIALPATH}* $STAGINGAREA/ 2>/dev/null
194

    
195
	md5 ${MEMSTICKADIPATH}.gz > ${MEMSTICKADIPATH}.md5
196
	sha256 ${MEMSTICKADIPATH}.gz > ${MEMSTICKADIPATH}.sha256
197
	cp ${MEMSTICKADIPATH}* $STAGINGAREA/ 2>/dev/null
198

    
199
	md5 ${UPDATES_TARBALL_FILENAME} > ${UPDATES_TARBALL_FILENAME}.md5
200
	sha256 ${UPDATES_TARBALL_FILENAME} > ${UPDATES_TARBALL_FILENAME}.sha256
201
	cp ${UPDATES_TARBALL_FILENAME}* $STAGINGAREA/ 2>/dev/null
202
	# NOTE: Updates need a file with output similar to date output
203
	# Use the file generated at start of dobuilds() to be consistent on times
204
	cp $BUILTDATESTRINGFILE $STAGINGAREA/version 2>/dev/null
205
}
206

    
207
scp_files() {
208
	if [ -z "${RSYNC_COPY_ARGUMENTS:-}" ]; then
209
		RSYNC_COPY_ARGUMENTS="-ave ssh --timeout=60 --bwlimit=${RSYNCKBYTELIMIT}" #--bwlimit=50
210
	fi
211
	update_status ">>> Copying files to ${RSYNCIP}"
212
	if [ ! -f /usr/local/bin/rsync ]; then
213
		update_status ">>> Could not find rsync, installing from ports..."
214
		(cd /usr/ports/net/rsync && make install clean)
215
	fi
216
	rm -f $SCRATCHDIR/ssh-snapshots*
217

    
218
	# Ensure directory(s) are available
219
	ssh snapshots@${RSYNCIP} "mkdir -p /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/livecd_installer"
220
	ssh snapshots@${RSYNCIP} "mkdir -p /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates"
221
	ssh snapshots@${RSYNCIP} "mkdir -p /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/nanobsd"
222
	if [ -d $STAGINGAREA/virtualization ]; then
223
		ssh snapshots@${RSYNCIP} "mkdir -p /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/virtualization"
224
	fi
225
	ssh snapshots@${RSYNCIP} "mkdir -p /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters"
226
	# ensure permissions are correct for r+w
227
	ssh snapshots@${RSYNCIP} "chmod -R ug+rw /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/."
228
	ssh snapshots@${RSYNCIP} "chmod -R ug+rw /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/."
229
	ssh snapshots@${RSYNCIP} "chmod -R ug+rw /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/*/."
230
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/${PRODUCT_NAME}-*iso* \
231
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/livecd_installer/
232
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/${PRODUCT_NAME}-memstick* \
233
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/livecd_installer/
234
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/${PRODUCT_NAME}-*Update* \
235
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates/
236
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/nanobsd/* \
237
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/nanobsd/
238
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/nanobsdupdates/* \
239
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates/
240
	if [ -d $STAGINGAREA/virtualization ]; then
241
		rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/virtualization/* \
242
			snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/virtualization/
243
	fi
244

    
245
	# Rather than copy these twice, use ln to link to the latest one.
246

    
247
	ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest.tgz"
248
	ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest.tgz.sha256"
249

    
250
	LATESTFILENAME="`ls $UPDATESDIR/*.tgz | grep Full | grep -v md5 | grep -v sha256 | tail -n1`"
251
	LATESTFILENAME=`basename ${LATESTFILENAME}`
252
	ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates/${LATESTFILENAME} \
253
		/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest.tgz"
254
	ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates/${LATESTFILENAME}.sha256 \
255
		/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest.tgz.sha256"
256

    
257
	for i in 1g 2g 4g
258
	do
259
		ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest-nanobsd-${i}.img.gz"
260
		ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest-nanobsd-${i}.img.gz.sha256"
261
		ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest-nanobsd-vga-${i}.img.gz"
262
		ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest-nanobsd-vga-${i}.img.gz.sha256"
263

    
264
		FILENAMEUPGRADE="${PRODUCT_NAME}-${PRODUCT_VERSION}-${i}-${TARGET}-nanobsd-upgrade-${DATESTRING}.img.gz"
265
		ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates/${FILENAMEUPGRADE} \
266
			/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest-nanobsd-${i}.img.gz"
267
		ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates/${FILENAMEUPGRADE}.sha256 \
268
			/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest-nanobsd-${i}.img.gz.sha256"
269

    
270
		FILENAMEUPGRADE="${PRODUCT_NAME}-${PRODUCT_VERSION}-${i}-${TARGET}-nanobsd-vga-upgrade-${DATESTRING}.img.gz"
271
		ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates/${FILENAMEUPGRADE} \
272
			/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest-nanobsd-vga-${i}.img.gz"
273
		ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates/${FILENAMEUPGRADE}.sha256 \
274
			/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest-nanobsd-vga-${i}.img.gz.sha256"
275
	done
276

    
277
	rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/version* \
278
		snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters
279
	update_status ">>> Finished copying files."
280
}
281

    
282
cleanup_builds() {
283
	# Remove prior builds
284
	update_status ">>> Cleaning up after prior builds..."
285
	rm -rf $STAGINGAREA/*
286
	rm -rf $IMAGES_FINAL_DIR/*
287
	(cd ${BUILDER_ROOT} && ./build.sh --clean-builder)
288
}
289

    
290
build_loop_operations() {
291
	update_status ">>> Starting build loop operations"
292
	# --- Items we need to run for a complete build run ---
293
	# Cleanup prior builds
294
	cleanup_builds
295
	# Update pkgs if necessary
296
	if pkg update -r ${PRODUCT_NAME} >/dev/null 2>&1; then
297
		update_status ">>> Updating builder packages... "
298
		pkg upgrade -r ${PRODUCT_NAME} -y -q >/dev/null 2>&1
299
	fi
300
	# Do the builds
301
	dobuilds
302
	# SCP files to snapshot web hosting area
303
	if [ -z "${NO_UPLOAD}" ]; then
304
		scp_files
305
	fi
306
	# Alert the world that we have some snapshots ready.
307
	update_status ">>> Builder run is complete."
308
}
309

    
310
if [ -z "${LOOPED_SNAPSHOTS}" ]; then
311
	build_loop_operations
312
else
313
	# Main builder loop
314
	while [ /bin/true ]; do
315
		BUILDCOUNTER=`expr $BUILDCOUNTER + 1`
316
		update_status ">>> Starting builder run #${BUILDCOUNTER}..."
317

    
318
		# Launch the snapshots builder script and pipe its
319
		# contents to the while loop so we can record the 
320
		# script progress in real time to the public facing
321
		# snapshot server (${RSYNCIP}).
322
		( build_loop_operations ) | while read LINE
323
		do
324
			update_status "$LINE"
325
		done
326

    
327
		export minsleepvalue=28800
328
		export maxsleepvalue=86400
329

    
330
		# Initialize variables that keep track of last commit
331
		[ -z "${LAST_COMMIT}" ] \
332
			&& export LAST_COMMIT="$(git -C ${BUILDER_ROOT} log | head -n1 | cut -d' ' -f2)"
333

    
334
		update_status ">>> Sleeping for at least $minsleepvalue, at most $maxsleepvalue in between snapshot builder runs.  Last known commit ${LAST_COMMIT}"
335
		update_status ">>> Freezing build process at `date`."
336
		sleep $minsleepvalue
337
		update_status ">>> Thawing build process and resuming checks for pending commits at `date`."
338

    
339
		# Count some sheep or wait until a new commit turns up 
340
		# for one days time.  We will wake up if a new commit
341
		# is detected during sleepy time.
342
		sleep_between_runs $maxsleepvalue
343

    
344
		# If REBOOT_AFTER_SNAPSHOT_RUN is defined reboot
345
		# the box after the run. 
346
		if [ ! -z "${REBOOT_AFTER_SNAPSHOT_RUN:-}" ]; then
347
			update_status ">>> Rebooting `hostname` due to \$REBOOT_AFTER_SNAPSHOT_RUN"
348
			shutdown -r now
349
			kill $$
350
		fi
351
		# Rotate log file (.old)
352
		rotate_logfile
353

    
354
		# Set a common DATESTRING for the build if not set from builder_defaults.sh.
355
		# Rely on builder_defaults.sh doing the right job the first time included from this script.
356
		# NOTE: This is needed to have autoupdate detect a new version.
357
		# Override it here to have continuous builds with proper labels
358
		rm -f $DATESTRINGFILE
359
		rm -f $BUILTDATESTRINGFILE
360
		unset DATESTRING
361
		unset BUILTDATESTRING
362
		unset ISOPATH
363
		unset MEMSTICKPATH
364
		unset MEMSTICKSERIALPATH
365
		unset MEMSTICKADIPATH
366
		unset UPDATES_TARBALL_FILENAME
367
		# builder_defaults.sh will set variables with correct timestamp
368
		. ./builder_defaults.sh
369
	done
370
fi
(1-1/3)