2 # $NetBSD: upload,v 1.43 2008/03/15 16:27:43 joerg Exp $
5 # Upload non-restricted binary pkgs to ftp server
8 AWK=${AWK:-/usr/bin/awk}
15 # Find out where we are
17 scriptdir=`dirname "$0"`
18 scriptdir=`cd "${scriptdir}" && pwd`
24 $prog: Uploads binary packages.
26 Usage: $prog [-c|--config <file>] [-n|--no-upload] [-d|--debug] [-v|--verbose]
31 Load the following configuration file instead of
34 -d|--debug Preserves some intermediate files to help
37 -h|--help Displays this help message and exits.
39 -n|--no-upload Does all of the work except for the actual upload.
40 This option may be used to generate the upload script
41 along with the list of packages to be excluded.
43 -i|--no-install Do not install the required packages; assume instead
44 that they are already available.
46 -v|--verbose Enables verbose output.
48 -V|--version Displays the version of this script and exits.
52 cd /usr/pkgsrc && $prog
54 Environment Variables:
56 AWK -- If specified, sets the awk program to be used
60 pkgsrc/mk/bulk/build.conf
65 # print out error message and exit 1
67 echo "$0: error:" 1>&2
79 while test $# -gt 0; do
83 BULK_BUILD_CONF=$1; shift
112 ${AWK} '/^#[ \t]*\$NetBSD/ {gsub(/,v/,"",$3);printf("%s: Version %s, %s\n",$3,$4,$5); exit 0;}' $prog
117 echo "$prog: Unknown option: $1" 1>&2
127 if test "$#" -gt 0; then
128 echo "$prog: Unknown argument: $1" 1>&2
136 [ "$do_install" = "yes" ] || return 0
138 if [ "${verbose}" = "yes" ]; then
139 echo "upload> Installing ${pkg}"
141 (cd "$USR_PKGSRC" && cd "$pkg" && ${BMAKE} bulk-install) \
143 echo "upload> ERROR: Unable to install required package $pkg!" 1>&2
144 echo " Bailing out -- you're on your own." 1>&2
152 _INFO_VER=`${PKG_INFO} -V`;
153 REQUIRED_PACKAGES="pkgtools/lintpkgsrc net/rsync"
176 # Bring in variables for bulk-install
178 DEPENDS_TARGET=bulk-install
179 export BATCH DEPENDS_TARGET
182 # Find the configuration file.
184 BULK_BUILD_CONF="${BULK_BUILD_CONF-${scriptdir}/build.conf}"
185 case $BULK_BUILD_CONF in
187 *) BULK_BUILD_CONF="${PWD}/${BULK_BUILD_CONF}"
191 # Get the variables MAKECONF, RSYNC_DST, RSYNC_OPTS from the bulk build
192 # configuration file.
194 { test -f "${BULK_BUILD_CONF}" \
195 && . "${BULK_BUILD_CONF}" \
196 && . "${scriptdir}/post-build-conf" \
197 && check_config_vars \
198 && export_config_vars
199 } || die "Cannot load config file ${BULK_BUILD_CONF}, aborting."
203 if [ -z "$RSYNC_DST" ]; then
204 echo "upload> ERROR: You must set the variable RSYNC_DST, see build.conf-example." 1>&2
213 TMPDIR="${TMPDIR:-/tmp}"
214 TMP="${TMPDIR}"/pkg_upload.$$
215 (umask 077 && mkdir "${TMP}") \
217 echo "upload> ERROR: cannot create temporary directory \"${TMP}\"." 1>&2
221 vulnerable_packages="$TMP/vulnerable_packages"
222 restricted_packages="$TMP/restricted_packages"
223 old_packages="$TMP/old_packages"
224 good_packages="$TMP/regular_packages"
225 all_good_packages="$TMP/all_regular_packages"
227 upload_general="$TMP"/upload_general
228 upload_vulnerable="$TMP"/upload_vulnerable
230 # May be different than $USR_PKGSRC:
231 echo "upload> Running ${BMAKE} to get the pkgsrc variables"
232 pkgsrcdir=`cd pkgtools/lintpkgsrc ; ${BMAKE} show-var VARNAME=_PKGSRCDIR`
233 packages=`cd pkgtools/lintpkgsrc ; ${BMAKE} show-var VARNAME=PACKAGES`
234 distdir=`cd pkgtools/lintpkgsrc ; ${BMAKE} show-var VARNAME=DISTDIR`
235 gzip_cmd=`cd pkgtools/lintpkgsrc; ${BMAKE} show-var VARNAME=GZIP_CMD USE_TOOLS=gzip`
236 pkg_info=`cd pkgtools/lintpkgsrc && ${BMAKE} show-var VARNAME=PKG_INFO`
237 shell=`cd pkgtools/lintpkgsrc && ${BMAKE} show-var VARNAME=TOOLS_PLATFORM.sh`
239 # Pull in some pkgs needed
240 for pkg in ${REQUIRED_PACKAGES}; do
241 install_required $pkg
244 echo "upload> Making sure vulnerability-list is up-to-date:"
245 if [ -z "$UPDATE_VULNERABILITY_LIST" -o "$UPDATE_VULNERABILITY_LIST" = "yes" ]
247 _PKGVULNDIR=`audit-packages ${AUDIT_PACKAGES_FLAGS} -Q PKGVULNDIR`
248 download-vulnerability-list ${DOWNLOAD_VULNERABILITY_LIST_FLAGS}
249 if [ "x${_PKGVULNDIR}" != "x${distdir}" ]; then
250 cp ${_PKGVULNDIR}/pkg-vulnerabilities ${distdir}
257 case $LINTPKGSRC_CACHE in
259 lintpkgsrc_cache="-I `cd pkgtools/lintpkgsrc ; ${BMAKE} show-var VARNAME=LINTPKGSRC_DB`"
266 echo "upload> Checking for out of date packages:"
267 # -p = report old versions of packages
268 lintpkgsrc $lintpkgsrc_cache -K $packages -P $pkgsrcdir -p > "${old_packages}.tmp"
269 sed 's@'$packages'/@@' < "${old_packages}.tmp" > "$old_packages"
271 RSFLAGS="-vap --progress $RSYNC_OPTS"
276 echo "upload> Checking for restricted and vulnerable packages"
277 (cd All && env PKG_INFO="${pkg_info}" OUTDIR="${TMP}" PKGVULNDIR="${distdir}" \
278 AUDIT_PACKAGES_FLAGS="${AUDIT_PACKAGES_FLAGS}" \
279 DOWNLOAD_VULNERABILITY_LIST_FLAGS="${DOWNLOAD_VULNERABILITY_LIST_FLAGS}" \
280 ${shell} "${pkgsrcdir}/mk/bulk/sort-packages")
282 # Add the name of the package file, including all its symlinks to the
283 # list of files to be uploaded.
284 while read package; do
286 done < "$good_packages" > "$all_good_packages"
288 if [ "${MKSUMS}" = "yes" -o "${MKSUMS}" = "YES" ]; then
290 echo "upload> Calculating checksum files..."
292 SUMFILES="BSDSUM CKSUM MD5 SHA1 SYSVSUM"
296 if [ "${SIGN_AS-}" != "" ]; then
297 install_required "security/gnupg"
298 for i in ${SUMFILES}; do
300 echo "This file is signed with ${SIGN_AS}'s PGP key." >> $i
305 install_required "pkgtools/digest"
307 [ -z "${BSDSUM}" ] && BSDSUM="echo"
308 [ -z "${CKSUM}" ] && CKSUM="echo"
309 [ -z "${SYSVSUM}" ] && SYSVSUM="echo"
311 for pkg in `cat "${good_packages}" "${vulnerable_packages}"`; do
313 ${BSDSUM} "$pkg" >> BSDSUM
314 ${CKSUM} "$pkg" >> CKSUM
316 ${SHA1} "$pkg" >> SHA1
317 ${SYSVSUM} "$pkg" >> SYSVSUM
320 [ "${BSDSUM}" = "echo" ] && rm BSDSUM
321 [ "${CKSUM}" = "echo" ] && rm CKSUM
322 [ "${SYSVSUM}" = "echo" ] && rm SYSVSUM
324 if [ "${SIGN_AS-}" != "" ]; then
325 for i in ${SUMFILES}; do
327 echo "upload> Signing $i"
328 gpg --clearsign $i && rm $i
332 echo "upload> Checksum files not PGP-signed. Please do so manually!"
333 echo " (Run 'gpg --clearsign' on all of them)"
337 if [ "${MKSUMMARY-}" = "yes" -o "${MKSUMMARY-}" = "YES" ]; then
338 echo "upload> Creating summary file..."
339 (cd "${packages}/All" \
340 && ls -t | grep '\.t[gb]z$' | while read n; do pkg_info -X "$n"; done) \
341 | ${gzip_cmd} > "${packages}"/All/pkg_summary.gz
344 cat <<EOF > "$upload_general"
348 rsync $RSFLAGS --files-from="${all_good_packages}" --exclude-from="${old_packages}" . "$RSYNC_DST/"
350 chmod +x "$upload_general"
352 if [ "$do_upload" = "yes" ]; then
353 echo "upload> Uploading non-vulnerable packages"
354 ${shell} "$upload_general" \
356 echo "upload> ERROR: rsync failed. To retry later, you can run $upload_general" 1>&2
360 echo "upload> Skipping upload of non-vulnerable packages."
361 echo " Run \"$upload_general\" to upload them later."
364 cat <<EOF > "$upload_vulnerable"
368 rsync $RSFLAGS --files-from="${vulnerable_packages}" --exclude-from="${old_packages}" . "$RSYNC_DST/vulnerable/"
370 chmod +x "$upload_vulnerable"
372 if [ "$do_upload" = "yes" ]; then
373 echo "upload> Uploading vulnerable packages"
374 ${shell} "$upload_vulnerable" \
376 echo "upload> ERROR: rsync failed. To retry later, you can run $upload_vulnerable" 1>&2
380 echo "upload> Skipping upload of vulnerable packages."
381 echo " Run \"$upload_vulnerable\" to upload them later."
384 # clean up temp files
385 if [ "$failed,$debug,$do_upload" = "no,no,yes" ]; then
388 echo "upload> Preserving temporary directory ${TMP}"
391 if [ "$failed" = "yes" ]; then