#!/bin/bash MYNAME=`basename $0` PACKDB="/var/adm/packages" INSTDB="/var/adm/scripts" # file_exit() # =========== function file_exit { echo echo Cannot add $ERR_FILE to database. Check permissions. echo exit -1 } # fhelp() # ======= function fhelp { echo echo Usage: echo "$MYNAME [ -f ARCHIVE | --file ARCHIVE ] PACKAGE" echo " - writes all files containing to PACKAGE to tgz archive" echo " in the current directory or to the file ARCHIVE when" echo " specified with the "\`-f\'" option." echo echo "$MYNAME -h | --help" echo " - displays this usage message" echo echo "$MYNAME -v | --version" echo " - displays version information and exits" echo exit 0 } # fver() # determine slack version # ======================= function fver { if [ -f /etc/slackware-version ]; then cat /etc/slackware-version | cut -d. -f1,2 | sed 's/[Ss]lackware//' elif [ -d /usr/lib/setup ] ; then ls /usr/lib/setup/slack-version* | tail -1 | cut -d "-" -f 3 | cut -d. -f1,2 fi } VERSION="$(fver).9 - 2004/01/08 23:47 CEST" # date +"%Y/%m/%d %H:%M %Z" # createpkg() # =========== function createpkg { echo echo "Path: $PACKDB" echo typeset -i TNUMBER # extract file list from package database TNUMBER=`grep -n "FILE LIST:" $PACKDB/$ARG |cut -d":" -f1` TNUMBER=$TNUMBER+1 # PACHAGE DESCRIPTION if [ ! -d /install ]; then mkdir /install || ERR_FILE=installscript file_exit fi egrep '^'"$(echo $ARG | cut -d- -f1)" $PACKDB/$ARG > /install/slack-desc # Files... FILELIST=`tail +$TNUMBER $PACKDB/$ARG | fgrep -v "install/doinst.sh"` # remove directories from FILELIST TARLIST=$(for i in $FILELIST ; do echo "./${i}+++" | fgrep -v "/+++" | sed -e s/+++// ; done) # Add the package install script to archive if it exists if [ -f $INSTDB/$ARG ]; then if [ ! -d /install ]; then mkdir /install || ERR_FILE=installscript file_exit fi cp $INSTDB/$ARG /install/doinst.sh || ERR_FILE=installscript file_exit TARLIST=${TARLIST}" ./install/doinst.sh" fi if [ -d $DIR -a -w $DIR ]; then ARCHIVE=$DIR/$ARG.tgz ARCDIR=$DIR elif [ -d $(dirname $PWD/$DIR) -a -w $(dirname $PWD/$DIR) ]; then ARCHIVE=$PWD/$DIR ARCDIR=$(dirname $ARCHIVE) elif [ -d $(dirname $DIR) -a -w $(dirname $DIR) ]; then ARCHIVE=$DIR ARCDIR=$(dirname $DIR) elif [ -d `dirname $DIR` -a -w `dirname $DIR` ]; then ARCHIVE=$DIR ARCDIR=$(dirname $DIR) else echo 1>&2 echo $MYNAME: Cannot create archive $DIR. Check pathname and permissions. 1>&2 echo 1>&2 exit -1 fi echo "== Packing files:" cd / && tar cvzf $ARCHIVE $TARLIST 2>/tmp/$MYNAME.errlog echo if [ -s /tmp/$MYNAME.errlog ]; then echo 1>&2 echo Errors encountered while packing `basename $ARCHIVE`: 1>&2 cat /tmp/$MYNAME.errlog 1>&2 echo 1>&2 rm /tmp/$MYNAME.errlog rm -f /install/doinst.sh rm -f /install/slack-desc return 2 fi rm /tmp/$MYNAME.errlog rm -f /install/doinst.sh rm -f /install/slack-desc # Add package descriptions to file 'package_descriptions' # if package includes a description echo "== Updating $ARCDIR/package_descriptions:" echo REALARG=$(egrep "^$(echo $ARG | cut -d- -f1)" $PACKDB/$ARG | head -1 | cut -d: -f1) egrep '^'"$(echo $ARG | cut -d- -f1)" $PACKDB/$ARG > $ARCDIR/$(basename $ARCHIVE .tgz).txt echo return 0 } if [ ! -x $PACKDB ]; then echo 1>&2 echo "$MYNAME: Cannot access installation database." 1>&2 echo "$MYNAME: Propbably not a Slackware system." 1>&2 echo 1>&2 exit 1 fi case "$1" in "-v" | "--version") echo echo $MYNAME $VERSION echo ;; "-h" | "--help") fhelp ;; "") echo 1>&2 echo "$MYNAME: argument expected" 1>&2 echo 1>&2 echo Try \`$MYNAME --help\' for more information. 1>&2 echo 1>&2 exit 1 ;; "-f" | "--file") if [ $# -lt 2 ]; then echo 1>&2 echo $MYNAME: option $1 requires an argument 1>&2 echo 1>&2 exit 1 else echo ARG=$3 DIR=$2 createpkg echo fi ;; *) if [ -r $PACKDB/$1 ]; then ARG=$1 DIR=$PWD createpkg else echo 1>&2 echo "$MYNAME: Package $1 not installed." 1>&2 echo 1>&2 exit 1 fi ;; esac exit $?