summaryrefslogtreecommitdiff
path: root/pkgexport
blob: 0c6dc038b9d89478ed71c288592d84475710b94e (plain)
    1 #!/bin/sh
    2 #
    3 # pkgexport 
    4 # 05/24/2004
    5 #
    6 # Copyright (c) 2002-2004 by Andrew Green <crux@dorkatronix.org>
    7 # License: GNU General Public License (GPL)
    8 #
    9 # Script to build a package from installed components. 
   10 #
   11 # Should be useful if upgraded package fails 
   12 #
   13 # 
   14 COMMAND=$(basename $0)
   15 VERSION=0.7
   16 VERBOSE=0
   17 PKGNAME=""
   18 TARGET=$(pwd)
   19 ROOT=""
   20 
   21 #########
   22 # Usage
   23 #########
   24 usage() {
   25 echo "
   26 $COMMAND $VERSION
   27 options: [-h] [-v] [-r /pkg/root] <packagename> [outputfile/dir] 
   28 
   29 -r Directory of alternate package root.  See pkginfo(8)
   30 -h Usage/Help
   31 -v Verbose output
   32 
   33 Examples:
   34 
   35 Export a current package to 'package#1.2.4-1.pkg.tar.gz' in the current dir:
   36 $COMMAND currentpackage
   37 
   38 Export mozilla to '/tmp/mozilla#1.2.1-1.pkg.tar.gz': 
   39 $COMMAND mozilla /tmp
   40 
   41 Export pkgutils to '/root/pkgutils.tar.gz':
   42 $COMMAND pkgutils /root/pkgutils.tar.gz
   43 
   44 Export a different CRUX installation of samba:
   45 $COMMAND -r /mnt samba
   46 "
   47 exit 1
   48 }
   49 
   50 ##########
   51 # pkginfo_l lists files inside a package (pkginfo -l $file)
   52 ##########
   53 pkginfo_l() {
   54 
   55 FILES="/tmp/.pkgexport.$$"
   56 pkginfo $ROOT -l $1 > $FILES
   57 if [ $RET -ne 0 ]
   58 then
   59 	echo "Package $1 contains no files and/or pkginfo -l $1 failed."
   60 	exit 1
   61 fi
   62 
   63 }
   64 
   65 #########
   66 # pkginfo_i queries to see if a package is installed (pkginfo -i)
   67 #########
   68 pkginfo_i() {
   69 
   70 INSTALLED=(`pkginfo $ROOT -i | grep "^$1 "`)
   71 RET=$?
   72 
   73 if [ $RET -ne 0 ]
   74 then
   75 	echo "Package $1 is not installed."
   76 	exit 1
   77 fi
   78 
   79 }
   80 
   81 #########
   82 # exportpkg will build a pkgfile
   83 #########
   84 exportpkg() {
   85 
   86 pkgname=${INSTALLED[0]}
   87 pound="#"
   88 version=${INSTALLED[1]}
   89 suffix=".pkg.tar.gz"
   90 
   91 if [ -d $TARGET ]; then
   92 	FIRST=$(echo $TARGET | cut -c 1)
   93 	if [ "$FIRST" != "/" ]; then
   94 		newpkg=$(pwd)/$TARGET/$pkgname
   95 	else
   96 		newpkg=$TARGET/$pkgname
   97 	fi
   98 
   99 	newver=$version
  100 else
  101 	newpkg=$(pwd)/$TARGET
  102 	pound=""
  103 	newver=""
  104 	suffix=""
  105 fi
  106 
  107 BIGFILENAME="$newpkg$pound$newver$suffix"
  108 if [ -f "$BIGFILENAME" ]; then
  109 	echo "$BIGFILENAME" exists.  Exiting
  110 	exit 1
  111 fi
  112 
  113 if [ $VERBOSE = 1 ]; then
  114 	TARARGS="vvf"
  115 else
  116 	TARARGS="f"
  117 fi
  118 
  119 cd /
  120 tar cz$TARARGS "$BIGFILENAME" --no-recursion --files-from $FILES
  121 RET=$?
  122 
  123 if [ $RET -ne 0 ]
  124 then
  125 	echo "Tar: error in creating $BIGFILENAME."
  126 	rm -f "$BIGFILENAME"
  127 	exit 1
  128 fi
  129 
  130 # Get rid of our sucky temp-file.
  131 rm -f $FILES
  132 
  133 if [ $VERBOSE = 1 ]; then
  134 	echo ===============================================
  135 	echo
  136 	echo Package export information for current package:
  137 	echo
  138 	echo Name: $pkgname
  139 	echo Version: $version
  140 	echo 
  141 	echo Package saved as: $BIGFILENAME
  142 	echo 
  143 	echo ===============================================
  144 else
  145 	echo Package saved as: $BIGFILENAME
  146 fi
  147 
  148 }
  149 
  150 #########
  151 # Main !
  152 #########
  153 main() {
  154 
  155 if [ $# -eq 0 ]; then
  156 	usage
  157 fi
  158 
  159 while getopts :r:hv arg
  160 do
  161 	case $arg in
  162 	r)  ROOT="-r "$OPTARG;;
  163 	h)  usage;;
  164 	v)  VERBOSE=1;;
  165 	\?)  usage;;
  166 	:)   usage;;
  167 	esac
  168 done
  169 shift $((OPTIND - 1))
  170 
  171 # echo 1: $1 2: $2
  172 PKGNAME=$1
  173 
  174 if [ "$PKGNAME" = "" ]; then
  175 	usage
  176 fi
  177 if [ "$2" != "" ]; then
  178 	TARGET=$2
  179 fi
  180 
  181 pkginfo_i $PKGNAME
  182 pkginfo_l $PKGNAME
  183 exportpkg
  184 
  185 }
  186 
  187 main $*

Generated by cgit