Project

General

Profile

Download (13.2 KB) Statistics
| Branch: | Tag: | Revision:
1 6f73c362 Renato Botelho
#!/bin/sh
2
#
3 98a4b7a0 Renato Botelho
# builder_defaults.sh
4 6f73c362 Renato Botelho
#
5
# Copyright (c) 2004-2015 Electric Sheep Fencing, LLC. 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 are met:
9
#
10
# 1. Redistributions of source code must retain the above copyright notice,
11
#    this list of conditions and the following disclaimer.
12
#
13
# 2. Redistributions in binary form must reproduce the above copyright
14
#    notice, this list of conditions and the following disclaimer in
15
#    the documentation and/or other materials provided with the
16
#    distribution.
17
#
18
# 3. All advertising materials mentioning features or use of this software
19
#    must display the following acknowledgment:
20
#    "This product includes software developed by the pfSense Project
21
#    for use in the pfSense® software distribution. (http://www.pfsense.org/).
22
#
23
# 4. The names "pfSense" and "pfSense Project" must not be used to
24
#    endorse or promote products derived from this software without
25
#    prior written permission. For written permission, please contact
26
#    coreteam@pfsense.org.
27
#
28
# 5. Products derived from this software may not be called "pfSense"
29
#    nor may "pfSense" appear in their names without prior written
30
#    permission of the Electric Sheep Fencing, LLC.
31
#
32
# 6. Redistributions of any form whatsoever must retain the following
33
#    acknowledgment:
34
#
35
# "This product includes software developed by the pfSense Project
36
# for use in the pfSense software distribution (http://www.pfsense.org/).
37
#
38
# THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY
39
# EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
40
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
41
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR
42
# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
43
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
44
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
45
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
46
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
47
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
48
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
49
# OF THE POSSIBILITY OF SUCH DAMAGE.
50
#
51
52
###########################################
53
# Product builder configuration file      #
54
# Please don't modify this file, you      #
55
# can put your settings and options       #
56
# in build.conf, which is sourced at the  #
57
# beginning of this file                  #
58
###########################################
59
60 f36b26f8 Renato Botelho
if [ -z "${BUILDER_ROOT}" ]; then
61
	echo ">>> ERROR: BUILDER_ROOT must be defined by script that includes builder_defaults.sh"
62
	exit 1
63
fi
64
65 77308bce Renato Botelho
if [ ! -d "${BUILDER_ROOT}" ]; then
66 f36b26f8 Renato Botelho
	echo ">>> ERROR: BUILDER_ROOT is invalid"
67
	exit 1
68
fi
69
70
export BUILDER_TOOLS=${BUILDER_TOOLS:-"${BUILDER_ROOT}/tools"}
71 4a6ea7b2 Renato Botelho
72 77308bce Renato Botelho
if [ ! -d "${BUILDER_TOOLS}" ]; then
73 f36b26f8 Renato Botelho
	echo ">>> ERROR: BUILDER_TOOLS is invalid"
74
	exit 1
75 4a6ea7b2 Renato Botelho
fi
76
77 78b0f246 Renato Botelho
BUILD_CONF="${BUILDER_ROOT}/build.conf"
78 6f73c362 Renato Botelho
79
# Ensure file exists
80
if [ -f ${BUILD_CONF} ]; then
81
	. ${BUILD_CONF}
82
fi
83
84
# Make sure pkg will not be interactive
85
export ASSUME_ALWAYS_YES=true
86
87
# Architecture, supported ARCH values are: 
88
#  Tier 1: i386, AMD64, and PC98
89
#  Tier 2: ARM, PowerPC, ia64, Sparc64 and sun4v
90
#  Tier 3: MIPS and S/390
91
#  Tier 4: None at the moment
92
#  Source: http://www.freebsd.org/doc/en/articles/committers-guide/archs.html
93
export TARGET=${TARGET:-"`uname -m`"}
94
export TARGET_ARCH=${TARGET_ARCH:-${TARGET}}
95
# Set TARGET_ARCH_CONF_DIR
96
if [ "$TARGET_ARCH" = "" ]; then
97
        export TARGET_ARCH=`uname -p`
98
fi
99
100 934e3e04 Renato Botelho
# Directory to be used for writing temporary information
101
export SCRATCHDIR=${SCRATCHDIR:-"${BUILDER_ROOT}/tmp"}
102
if [ ! -d ${SCRATCHDIR} ]; then
103
	mkdir -p ${SCRATCHDIR}
104
fi
105 6f73c362 Renato Botelho
106
# Product details
107 46f33ce5 Renato Botelho
export PRODUCT_NAME=${PRODUCT_NAME:-"nonSense"}
108 774b0d82 Renato Botelho
export PRODUCT_URL=${PRODUCT_URL:-""}
109 694028d6 Renato Botelho
export PRODUCT_SRC=${PRODUCT_SRC:-"${BUILDER_ROOT}/src"}
110 6f73c362 Renato Botelho
111 46f33ce5 Renato Botelho
if [ "${PRODUCT_NAME}" = "pfSense" -a "${BUILD_AUTHORIZED_BY_ELECTRIC_SHEEP_FENCING}" != "yes" ]; then
112
	echo ">>>ERROR: According the following license, only Electric Sheep Fencing can build genuine pfSense® software"
113
	echo ""
114
	cat ${BUILDER_ROOT}/license.txt
115
	exit 1
116
fi
117
118 eb31cdf1 Renato Botelho
if [ -z "${PRODUCT_VERSION}" ]; then
119
	if [ ! -f ${PRODUCT_SRC}/etc/version ]; then
120
		echo ">>> ERROR: PRODUCT_VERSION is not defined and ${PRODUCT_SRC}/etc/version was not found"
121
		print_error_pfS
122
	fi
123
124
	export PRODUCT_VERSION=$(head -n 1 ${PRODUCT_SRC}/etc/version)
125
fi
126
127 6f73c362 Renato Botelho
# Product repository tag to build
128 1b0a9747 Renato Botelho
_cur_git_repo_branch_or_tag=$(git -C ${BUILDER_ROOT} rev-parse --abbrev-ref HEAD)
129 d111360d Renato Botelho
if [ "${_cur_git_repo_branch_or_tag}" = "HEAD" ]; then
130
	# We are on a tag, lets find out its name
131
	export GIT_REPO_BRANCH_OR_TAG=$(git -C ${BUILDER_ROOT} describe --tags)
132
else
133
	export GIT_REPO_BRANCH_OR_TAG="${_cur_git_repo_branch_or_tag}"
134
fi
135 6f73c362 Renato Botelho
136 934e3e04 Renato Botelho
# This is used for using svn for retrieving src
137
export FREEBSD_REPO_BASE=${FREEBSD_REPO_BASE:-"git@git.pfmechanics.com:pfsense/freebsd-src.git"}
138
export FREEBSD_BRANCH=${FREEBSD_BRANCH:-"devel"}
139
export FREEBSD_PARENT_BRANCH=${FREEBSD_PARENT_BRANCH:-"stable/10"}
140
export FREEBSD_SRC_DIR=${FREEBSD_SRC_DIR:-"${SCRATCHDIR}/FreeBSD-src"}
141
142
if [ "${TARGET}" = "i386" ]; then
143 afbac7f3 Renato Botelho
	export BUILD_KERNELS=${BUILD_KERNELS:-"${PRODUCT_NAME} ${PRODUCT_NAME}_wrap ${PRODUCT_NAME}_wrap_vga"}
144 934e3e04 Renato Botelho
else
145
	export BUILD_KERNELS=${BUILD_KERNELS:-"${PRODUCT_NAME}"}
146
fi
147
148
# Leave this alone.
149
export SRC_CONF=${SRC_CONF:-"${FREEBSD_SRC_DIR}/release/conf/${PRODUCT_NAME}_src.conf"}
150
export MAKE_CONF=${MAKE_CONF:-"${FREEBSD_SRC_DIR}/release/conf/${PRODUCT_NAME}_make.conf"}
151
152
# Extra tools to be added to ITOOLS
153
export EXTRA_TOOLS=${EXTRA_TOOLS:-"uuencode uudecode ex"}
154
155
# Path to kernel files being built
156
export KERNEL_BUILD_PATH=${KERNEL_BUILD_PATH:-"${SCRATCHDIR}/kernels"}
157
158 3236b6f4 Renato Botelho
# Do not touch builder /usr/obj
159
export MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX:-"${SCRATCHDIR}/obj"}
160
161 934e3e04 Renato Botelho
# Controls how many concurrent make processes are run for each stage
162 1b0a9747 Renato Botelho
_CPUS=""
163 934e3e04 Renato Botelho
if [ -z "${NO_MAKEJ}" ]; then
164
	_CPUS=$(expr $(sysctl -n kern.smp.cpus) '*' 2)
165
	if [ -n "${_CPUS}" ]; then
166
		_CPUS="-j${_CPUS}"
167
	fi
168
fi
169
170
export MAKEJ_WORLD=${MAKEJ_WORLD:-"${_CPUS}"}
171
export MAKEJ_KERNEL=${MAKEJ_KERNEL:-"${_CPUS}"}
172
173
if [ "${TARGET}" = "i386" ]; then
174
	export MODULES_OVERRIDE=${MODULES_OVERRIDE:-"i2c ipmi ndis ipfw ipdivert dummynet fdescfs opensolaris zfs glxsb if_stf coretemp amdtemp hwpmc"}
175
else
176
	export MODULES_OVERRIDE=${MODULES_OVERRIDE:-"i2c ipmi ndis ipfw ipdivert dummynet fdescfs opensolaris zfs glxsb if_stf coretemp amdtemp aesni sfxge hwpmc"}
177 78b0f246 Renato Botelho
fi
178 6f73c362 Renato Botelho
179
# Area that the final image will appear in
180 84331fdc Renato Botelho
export IMAGES_FINAL_DIR=${IMAGES_FINAL_DIR:-"${SCRATCHDIR}/${PRODUCT_NAME}/"}
181 6f73c362 Renato Botelho
182 84331fdc Renato Botelho
export BUILDER_LOGS=${BUILDER_LOGS:-"${BUILDER_ROOT}/logs"}
183 6f73c362 Renato Botelho
if [ ! -d ${BUILDER_LOGS} ]; then
184
	mkdir -p ${BUILDER_LOGS}
185
fi
186
187
# This is where files will be staged
188 328c4fb9 Renato Botelho
export STAGE_CHROOT_DIR=${STAGE_CHROOT_DIR:-"${SCRATCHDIR}/stage-dir"}
189
190
# Directory that will clone to in order to create
191
# iso staging area.
192
export FINAL_CHROOT_DIR=${FINAL_CHROOT_DIR:-"${SCRATCHDIR}/final-dir"}
193 6f73c362 Renato Botelho
194
# 400M is not enough for amd64
195
export MEMORYDISK_SIZE=${MEMORYDISK_SIZE:-"768M"}
196
197
# OVF/vmdk parms
198
# Name of ovf file included inside OVA archive
199 173fa93f Renato Botelho
export OVFTEMPLATE=${OVFTEMPLATE:-"${BUILDER_TOOLS}/templates/ovf/${PRODUCT_NAME}.ovf"}
200 89a72b59 Renato Botelho
# / partition to be used by mkimg
201
export OVFUFS=${OVFUFS:-"${PRODUCT_NAME}-disk1.ufs"}
202 679b5a66 Renato Botelho
# Raw disk to be converted to vmdk
203
export OVFRAW=${OVFRAW:-"${PRODUCT_NAME}-disk1.raw"}
204 6f73c362 Renato Botelho
# On disk name of VMDK file included in OVA
205 89a72b59 Renato Botelho
export OVFVMDK=${OVFVMDK:-"${PRODUCT_NAME}-disk1.vmdk"}
206 502db0bd Renato Botelho
# 8 gigabyte on disk VMDK size
207
export VMDK_DISK_CAPACITY_IN_GB=${VMDK_DISK_CAPACITY_IN_GB:-"8"}
208
# first partition size (freebsd-ufs)
209 e74b64a1 Renato Botelho
export OVA_FIRST_PART_SIZE_IN_GB=${OVA_FIRST_PART_SIZE_IN_GB:-"6"}
210 502db0bd Renato Botelho
# swap partition size (freebsd-swap)
211 beb07890 Renato Botelho
export OVA_SWAP_PART_SIZE_IN_GB=${OVA_SWAP_PART_SIZE_IN_GB:-"2"}
212
# Calculate real swap size, removing 128 blocks (65536 bytes) beggining/loader
213 6fc51026 Renato Botelho
export OVA_SWAP_PART_SIZE=$((${OVA_SWAP_PART_SIZE_IN_GB}*1024*1024*1024-65536))
214 89a72b59 Renato Botelho
# Temporary place to save files
215
export OVA_TMP=${OVA_TMP:-"${SCRATCHDIR}/ova_tmp"}
216 6f73c362 Renato Botelho
# end of OVF
217
218
# Number of code images on media (1 or 2)
219
export NANO_IMAGES=2
220
# 0 -> Leave second image all zeroes so it compresses better.
221
# 1 -> Initialize second image with a copy of the first
222
export NANO_INIT_IMG2=1
223
export NANO_NEWFS="-b 4096 -f 512 -i 8192 -O1"
224
export FLASH_SIZE=${FLASH_SIZE:-"1g"}
225
# Size of code file system in 512 bytes sectors
226
# If zero, size will be as large as possible.
227
export NANO_CODESIZE=0
228
# Size of data file system in 512 bytes sectors
229
# If zero: no partition configured.
230
# If negative: max size possible
231
export NANO_DATASIZE=0
232
# Size of Product /conf partition  # 102400 = 50 megabytes.
233
export NANO_CONFSIZE=102400
234
# packet is OK for 90% of embedded
235
export NANO_BOOT0CFG="-o packet -s 1 -m 3"
236
237
# NOTE: Date string is used for creating file names of images
238
#       The file is used for sharing the same value with build_snapshots.sh
239 84331fdc Renato Botelho
export DATESTRINGFILE=${DATESTRINGFILE:-"$SCRATCHDIR/version.snapshots"}
240 6329e1eb Renato Botelho
if [ -z "${DATESTRING}" ]; then
241
	if [ -f "${DATESTRINGFILE}" -a -n "${_USE_OLD_DATESTRING}" ]; then
242
		export DATESTRING=$(cat $DATESTRINGFILE)
243 6f73c362 Renato Botelho
	else
244 cf31d8ae Renato Botelho
		export DATESTRING=$(date "+%Y%m%d-%H%M")
245 6f73c362 Renato Botelho
	fi
246
fi
247 6329e1eb Renato Botelho
echo "$DATESTRING" > $DATESTRINGFILE
248 6f73c362 Renato Botelho
249
# NOTE: Date string is placed on the final image etc folder to help detect new updates
250
#       The file is used for sharing the same value with build_snapshots.sh
251 84331fdc Renato Botelho
export BUILTDATESTRINGFILE=${BUILTDATESTRINGFILE:-"$SCRATCHDIR/version.buildtime"}
252 6329e1eb Renato Botelho
if [ -z "${BUILTDATESTRING}" ]; then
253
	if [ -f "${BUILTDATESTRINGFILE}" -a -n "${_USE_OLD_DATESTRING}" ]; then
254
		export BUILTDATESTRING=$(cat $BUILTDATESTRINGFILE)
255 6f73c362 Renato Botelho
	else
256 6329e1eb Renato Botelho
		export BUILTDATESTRING=$(date "+%a %b %d %T %Z %Y")
257 6f73c362 Renato Botelho
	fi
258
fi
259 6329e1eb Renato Botelho
echo "$BUILTDATESTRING" > $BUILTDATESTRINGFILE
260 6f73c362 Renato Botelho
261 934e3e04 Renato Botelho
# Poudriere
262
export ZFS_TANK=${ZFS_TANK:-"tank"}
263
export ZFS_ROOT=${ZFS_ROOT:-"/poudriere"}
264
export POUDRIERE_PORTS_NAME=${POUDRIERE_PORTS_NAME:-"${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}"}
265
266
export POUDRIERE_BULK=${POUDRIERE_BULK:-"${BUILDER_TOOLS}/conf/pfPorts/poudriere_bulk"}
267
export POUDRIERE_PORTS_GIT_URL=${POUDRIERE_PORTS_GIT_URL:-"git@git.pfmechanics.com:pfsense/freebsd-ports.git"}
268
export POUDRIERE_PORTS_GIT_BRANCH=${POUDRIERE_PORTS_GIT_BRANCH:-"devel"}
269
270
# Host to rsync pkg repos from poudriere
271
export PKG_RSYNC_USERNAME=${PKG_RSYNC_USERNAME:-"wwwsync"}
272
export PKG_RSYNC_SSH_PORT=${PKG_RSYNC_SSH_PORT:-"22"}
273
export PKG_RSYNC_DESTDIR=${PKG_RSYNC_DESTDIR:-"/usr/local/www/beta/packages"}
274
export PKG_REPO_SERVER=${PKG_REPO_SERVER:-"pkg+http://beta.pfsense.org/packages"}
275
export PKG_REPO_CONF_BRANCH=${PKG_REPO_CONF_BRANCH:-"${GIT_REPO_BRANCH_OR_TAG}"}
276
277 5fcc717d Renato Botelho
unset _IS_RELEASE
278
unset CORE_PKG_DATESTRING
279
export TIMESTAMP_SUFFIX="-${DATESTRING}"
280
# pkg doesn't like - as version separator, use . instead
281
export PKG_DATESTRING=$(echo "${DATESTRING}" | sed 's,-,.,g')
282
case "${PRODUCT_VERSION##*-}" in
283
	RELEASE)
284
		export _IS_RELEASE=yes
285
		unset TIMESTAMP_SUFFIX
286
		;;
287
	ALPHA|DEVELOPMENT)
288
		export CORE_PKG_DATESTRING=".a.${PKG_DATESTRING}"
289
		;;
290 c96b2242 Renato Botelho
	BETA*)
291 5fcc717d Renato Botelho
		export CORE_PKG_DATESTRING=".b.${PKG_DATESTRING}"
292
		;;
293 c96b2242 Renato Botelho
	RC*)
294 5fcc717d Renato Botelho
		export CORE_PKG_DATESTRING=".r.${PKG_DATESTRING}"
295
		;;
296
	*)
297
		echo ">>> ERROR: Invalid PRODUCT_VERSION format ${PRODUCT_VERSION}"
298
		exit 1
299
esac
300 f48a09c7 Renato Botelho
301 6f73c362 Renato Botelho
# Define base package version, based on date for snaps
302 5fcc717d Renato Botelho
export CORE_PKG_VERSION="${PRODUCT_VERSION%%-*}${CORE_PKG_DATESTRING}"
303 a7a00341 Renato Botelho
export CORE_PKG_PATH=${CORE_PKG_PATH:-"${SCRATCHDIR}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}_${TARGET}_${TARGET_ARCH}-core"}
304 6f73c362 Renato Botelho
export CORE_PKG_TMP=${CORE_PKG_TMP:-"${SCRATCHDIR}/core_pkg_tmp"}
305
306 934e3e04 Renato Botelho
# Package overlay. This gives people a chance to build product
307
# installable image that already contains certain extra packages.
308
#
309
# Needs to contain comma separated package names. Of course
310
# package names must be valid. Using non existent
311
# package name would yield an error.
312
#
313
#export custom_package_list=""
314
315 6f73c362 Renato Botelho
# General builder output filenames
316 84331fdc Renato Botelho
export UPDATESDIR=${UPDATESDIR:-"${IMAGES_FINAL_DIR}/updates"}
317 f48a09c7 Renato Botelho
export ISOPATH=${ISOPATH:-"${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-LiveCD-${PRODUCT_VERSION}-${TARGET}${TIMESTAMP_SUFFIX}.iso"}
318
export MEMSTICKPATH=${MEMSTICKPATH:-"${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-memstick-${PRODUCT_VERSION}-${TARGET}${TIMESTAMP_SUFFIX}.img"}
319
export MEMSTICKSERIALPATH=${MEMSTICKSERIALPATH:-"${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-memstick-serial-${PRODUCT_VERSION}-${TARGET}${TIMESTAMP_SUFFIX}.img"}
320
export MEMSTICKADIPATH=${MEMSTICKADIPATH:-"${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-memstick-ADI-${PRODUCT_VERSION}-${TARGET}${TIMESTAMP_SUFFIX}.img"}
321
export OVAPATH=${OVAPATH:-"${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-${PRODUCT_VERSION}-${TARGET}${TIMESTAMP_SUFFIX}.ova"}
322 6f73c362 Renato Botelho
323
# set full-update update filename
324 f48a09c7 Renato Botelho
export UPDATES_TARBALL_FILENAME=${UPDATES_TARBALL_FILENAME:-"${UPDATESDIR}/${PRODUCT_NAME}-Full-Update-${PRODUCT_VERSION}-${TARGET}${TIMESTAMP_SUFFIX}.tgz"}
325 a95458c2 Renato Botelho
326
# Rsync data to send snapshots
327
export RSYNCUSER=${RSYNCUSER:-"snapshots"}
328
export RSYNCPATH=${RSYNCPATH:-"/usr/local/www/snapshots/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}"}
329
export RSYNCLOGS=${RSYNCLOGS:-"/usr/local/www/snapshots/logs/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/${TARGET}"}
330 ab943fc9 Renato Botelho
export RSYNCKBYTELIMIT=${RSYNCKBYTELIMIT:-"248000"}
331
332
# staging area used on snapshots build
333
STAGINGAREA=${STAGINGAREA:-"${SCRATCHDIR}/staging"}
334
mkdir -p ${STAGINGAREA}
335
336
export SNAPSHOTSLOGFILE=${SNAPSHOTSLOGFILE:-"${SCRATCHDIR}/snapshots-build.log"}
337
export SNAPSHOTSLASTUPDATE=${SNAPSHOTSLASTUPDATE:-"${SCRATCHDIR}/snapshots-lastupdate.log"}