diff options
Diffstat (limited to 'pkgtools/pkg_tarup/files/pkg_tarup')
-rw-r--r-- | pkgtools/pkg_tarup/files/pkg_tarup | 159 |
1 files changed, 113 insertions, 46 deletions
diff --git a/pkgtools/pkg_tarup/files/pkg_tarup b/pkgtools/pkg_tarup/files/pkg_tarup index 67bbce8e0ab..b0d87eb90d3 100644 --- a/pkgtools/pkg_tarup/files/pkg_tarup +++ b/pkgtools/pkg_tarup/files/pkg_tarup @@ -1,6 +1,6 @@ #! @SH@ # -# $Id: pkg_tarup,v 1.12 2004/04/20 16:26:07 wiz Exp $ +# $Id: pkg_tarup,v 1.13 2004/07/14 16:08:48 erh Exp $ # # Tar up installed package # @@ -16,16 +16,17 @@ export PATH OS=`uname -s` -AWK=${AWK:-@AWK@} ECHO=${ECHO:-@ECHO@} HEAD=${HEAD:-@HEAD@} ID=${ID:-@ID@} +SED=${SED:-@SED@} SU=${SU:-@SU@} +GREP=${GREP:-@GREP@} if [ `${ID} -u` != 0 ]; then ${ECHO} "Becoming root@`/bin/hostname` to create a binary package" - ${ECHO} -n "`${ECHO} ${SU} | ${AWK} '{ print $1 }'` ";\ - exec ${SU} root -c "$0 $@" + ${ECHO} -n "`${ECHO} ${SU} | ${SED} -e's/[[:space:]].*//'` ";\ + exec ${SU} root -c "$0 \"\$@\"" "$0" "$@" fi PKG_DBDIR=${PKG_DBDIR:-@PKG_DBDIR@} @@ -33,9 +34,20 @@ PKG_SUFX=${PKG_SUFX:-@PKG_SUFX@} PKGREPOSITORY=${PKGREPOSITORY:-/tmp} +# XXX Force pkg_info to ignore .tgz files. +export PKG_PATH= + +# Set to 1 if we also want to tar up dependencies also +GETDEPS=0 + usage() { - ${ECHO} "Usage: $1 installed_pkg|pattern [...]" + ${ECHO} "Usage: $1 [-a] [-K pkg_dbdir] [-d pkgrepository] [-s pkg_sufx] installed_pkg|pattern [...]" + ${ECHO} "The following environment variables are used:" + ${ECHO} " (unless overriden by command line parameters)" + ${ECHO} " PKGREPOSITORY - A destination directory for packages (/tmp)" + ${ECHO} " PKG_DBDIR - The location of the package database directory" + ${ECHO} " PKG_SUFX - The suffix to append to the package (.tgz)" exit 1 } @@ -51,7 +63,7 @@ check_and_add() if [ -f "$file" ] then - PKG_ARGS="${PKG_ARGS} ${opt} ${file}" + PKG_ARGS="${PKG_ARGS} \"${opt}\" \"${file}\"" fi } @@ -61,35 +73,35 @@ create_package() PKG_ARGS= ${ECHO} "Creating binary package: $PKG" - check_and_add -c ${PKG_DBDIR}/${PKG}/+COMMENT - check_and_add -d ${PKG_DBDIR}/${PKG}/+DESC - check_and_add -b ${PKG_DBDIR}/${PKG}/+BUILD_VERSION - check_and_add -B ${PKG_DBDIR}/${PKG}/+BUILD_INFO - check_and_add -s ${PKG_DBDIR}/${PKG}/+SIZE_PKG - check_and_add -S ${PKG_DBDIR}/${PKG}/+SIZE_ALL - check_and_add -i ${PKG_DBDIR}/${PKG}/+INSTALL - check_and_add -k ${PKG_DBDIR}/${PKG}/+DEINSTALL - check_and_add -r ${PKG_DBDIR}/${PKG}/+REQUIRE - check_and_add -D ${PKG_DBDIR}/${PKG}/+DISPLAY - check_and_add -m ${PKG_DBDIR}/${PKG}/+MTREE #NOTYET# + check_and_add -c "${PKG_DBDIR}/${PKG}/+COMMENT" + check_and_add -d "${PKG_DBDIR}/${PKG}/+DESC" + check_and_add -b "${PKG_DBDIR}/${PKG}/+BUILD_VERSION" + check_and_add -B "${PKG_DBDIR}/${PKG}/+BUILD_INFO" + check_and_add -s "${PKG_DBDIR}/${PKG}/+SIZE_PKG" + check_and_add -S "${PKG_DBDIR}/${PKG}/+SIZE_ALL" + check_and_add -i "${PKG_DBDIR}/${PKG}/+INSTALL" + check_and_add -k "${PKG_DBDIR}/${PKG}/+DEINSTALL" + check_and_add -r "${PKG_DBDIR}/${PKG}/+REQUIRE" + check_and_add -D "${PKG_DBDIR}/${PKG}/+DISPLAY" + check_and_add -m "${PKG_DBDIR}/${PKG}/+MTREE" #NOTYET# PLIST=/tmp/+CONTENTS.$$ - sed -n \ + ${SED} -n \ -e '/^@comment MD5:/d' \ -e '/^@cwd \.$/,$d' \ -e '/\$NetBSD/,$p' \ - <${PKG_DBDIR}/${PKG}/+CONTENTS >$PLIST + <"${PKG_DBDIR}/${PKG}/+CONTENTS" >"${PLIST}" # Duplicate first @cwd (work around pkg_create "feature" ...) - grep '^@cwd' $PLIST | ${HEAD} -1 >$PLIST.1 - if [ -s ${PLIST}.1 ] + ${GREP} '^@cwd' "${PLIST}" | ${HEAD} -1 >"${PLIST}.1" + if [ -s "${PLIST}.1" ] then - sed \ - -e "/`cat ${PLIST}.1 | sed 's,/,\\\\/,g'`/r${PLIST}.1" \ - <${PLIST} >${PLIST}.2 - mv ${PLIST}.2 ${PLIST} + ${SED} \ + -e "/`cat \"${PLIST}.1\" | ${SED} 's,/,\\\\/,g'`/r${PLIST}.1" \ + <"${PLIST}" >"${PLIST}.2" + mv "${PLIST}.2" "${PLIST}" fi - rm ${PLIST}.1 + rm "${PLIST}.1" # ${ECHO} ----- # cat $PLIST @@ -98,39 +110,94 @@ create_package() # Just for kicks ... # pkg_admin check "${PKG}" - - pkg_create \ - ${PKG_ARGS} \ - -v \ - -f ${PLIST} \ - -l \ - -p "`pkg_info -qp ${PKG} | ${AWK} 'NR == 1 { print $2; exit }'`" \ - -P "`pkg_info -qf ${PKG} | ${AWK} '/^@pkgdep/ { print $2 }'`" \ - -C "`pkg_info -qf ${PKG} | ${AWK} '/^@pkgcfl/ { print $2 }'`" \ - ${PKGREPOSITORY}/${PKG}${PKG_SUFX} - - rm -f ${PLIST} + + # It's kind of silly to jump through hoops to get stuff with spaces + # here, since we have no way to pass it to pkg_create, but maybe someone + # will care enough to fix the rest of this. + PKG_PREFIX=`pkg_info -qp "${PKG}" | ${HEAD} -1 | ${SED} -e's/^@cwd[[:space:]]*//'` + PKG_DEPS=`pkg_info -qf "${PKG}" | ${GREP} "^@pkgdep" | ${SED} -e's/^@pkgdep[[:space:]]*//'` + PKG_CONFLICT=`pkg_info -qf "${PKG}" | ${GREP} "^@pkgcfl" | ${SED} -e's/^@pkgcfl[[:space:]]*//'` + + PKG_ARGS="${PKG_ARGS} -v" + PKG_ARGS="${PKG_ARGS} -f \"${PLIST}\"" + PKG_ARGS="${PKG_ARGS} -l" + PKG_ARGS="${PKG_ARGS} -p \"${PKG_PREFIX}\"" + PKG_ARGS="${PKG_ARGS} -P \"${PKG_DEPS}\"" + PKG_ARGS="${PKG_ARGS} -C \"${PKG_CONFLICT}\"" + PKG_ARGS="${PKG_ARGS} \"${PKGREPOSITORY}/${PKG}${PKG_SUFX}\"" + eval pkg_create "${PKG_ARGS}" + + rm -f "${PLIST}" return 0 } -while [ $# -gt 0 ] ; do - rPKG="`pkg_info -e \"$1\"`" +add_to_list() +{ + # Get expanded name, and escape quotes + rPKG=`pkg_info -e "$1" | ${SED} -e's/\"/\\\"/g'` if [ -z "$rPKG" -o -f "${PKG_DBDIR}/${rPKG}" ] ; then ${ECHO} "Error: package $1 not found" usage "$0" fi - PKGS="$PKGS $rPKG" + if ! ${ECHO} "${PKGS}" | ${GREP} -q "\"${rPKG}\"" ; then + PKGS="${PKGS} \"${rPKG}\"" + fi +} + + +while [ $# -gt 0 ] ; do + case "$1" in + -a) + GETDEPS=1 + shift + ;; + -d) + PKGREPOSITORY="$2" + shift 2 + ;; + -h) + usage + exit 0 + ;; + -K) + PKG_DBDIR="$2" + shift 2 + ;; + -s) + PKG_SUFX="$2" + shift 2 + ;; + *) + break + ;; + esac +done + +while [ $# -gt 0 ] ; do + add_to_list "$1" + if [ $GETDEPS -eq 1 ] ; then + # Make the input separator only a newline so spaces are allowed + oIFS="$IFS" + IFS=" +" + for f in `pkg_info -qf "$1" | ${GREP} @pkgdep | ${SED} -e's/^@pkgdep[[:space:]]*//' ` ; do + add_to_list "$f" + done + IFS="$oIFS" + fi shift done -if [ -z "$PKGS" ] ; then +if [ -z "${PKGS}" ] ; then usage "$0" fi -for xPKG in $PKGS ; do - create_package "$xPKG" - if [ $? -ne 0 ] ; then +FOR=" +for xPKG in ${PKGS} ; do + create_package \"\${xPKG}\" + if [ \$? -ne 0 ] ; then exit 1 fi -done +done" +eval "${FOR}" exit 0 |