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 $*
|