spk view spk-archive @ rev 16

Improve Makefile, use lib in /usr/lib/slitaz
author Christophe Lincoln <pankso@slitaz.org>
date Tue May 15 12:08:23 2012 +0200 (2012-05-15)
parents
children b341e8872256
line source
1 #!/bin/sh
2 #
3 # Spk-Archive - SliTaz Package Archive Manager
4 #
5 # NOT COMPLETE: Still need to re-write (just what was grabbed from tazpkg)
6 # UNSURE: Should Pack and Repack be here?
7 #
8 # Authors : See the AUTHORS files
10 source /usr/lib/slitaz/libspk.sh
12 usage() {
13 name=$(basename $0)
14 cat << EOT
16 $(boldify $(gettext "Usage:")) $name [command] package
18 $(boldify $(gettext "Commands:"))
19 pack
20 repack [--config]
21 extract
22 recompress
24 $(boldify "$(gettext "Example:")")
25 $name extract clex
27 EOT
28 exit 0
29 }
31 # Extract a package with cpio and gzip/lzma to the current directory.
32 # Parameters: package_file
33 extract_package() {
34 local package_file=$1
35 local package_name=$(package_name $package_file)
37 eval_gettext "Extracting \$package_name... "
38 cpio -idm --quiet < ${package_file##*/} && rm -f ${package_file##*/}
39 status
41 gettext "Extracting the pseudo fs... "
42 if [ -f fs.cpio.lzma ]; then
43 echo -n "(lzma) "
44 unlzma -c fs.cpio.lzma | cpio -idm --quiet && rm fs.cpio.lzma
45 elif [ -f fs.cpio.gz ]; then
46 zcat fs.cpio.gz | cpio -idm --quiet && rm fs.cpio.gz
47 fi
48 status
49 }
51 # Extract .tazpkg cpio archive into a directory.
52 # Parameters: package_file results_directory
53 extract() {
54 local package_file=$1
55 local target_dir=$2
57 # validate the file
58 check_valid_tazpkg $package_file
60 # find the package name
61 local package_name=$(package_name $package_file)
63 # Create destination directory
64 local dest_dir=$(pwd)/$package_name
65 [ -n "$target_dir" ] && dest_dir=$target_dir/$package_name
66 mkdir -p $dest_dir
68 newline
69 echo $(boldify $(gettext "Extracting:")) $package_name
70 separator
72 gettext "Copying original package..."
73 cp $package_file $dest_dir
74 status
75 pushd $dest_dir > /dev/null
76 extract_package $package $package_file
77 popd > /dev/null
78 separator
79 eval_gettext "\$package_name is extracted to: \$dest_dir"; newline
80 newline
81 }
83 # Recompress .tazpkg cpio archive with lzma.
84 # Parameters: package_file
85 recompress() {
86 local package_file=$1
87 valid_tazpkg $package_file
89 local package_name=$(package_name $package_file)
91 newline
92 echo $(boldify $(gettext "Recompressing:")) $package_name
93 separator
95 mkdir -p $TMP_DIR
97 gettext "Copying original package..."
98 cp $package_file $TMP_DIR
99 status
101 pushd $TMP_DIR > /dev/null
102 extract_package $package_file
104 gettext "Recompressing the fs... "
105 find fs | cpio -o -H newc --quiet | lzma e fs.cpio.lzma -si
106 rm -rf fs
107 status
108 popd > /dev/null
110 gettext "Creating new package... "
111 find $TMP_DIR -print | cpio -o -H newc --quiet > \
112 $(basename $package_file).$$ && mv -f \
113 $(basename $package_file).$$ \
114 $(basename $package_file)
115 status
117 rm -rf $TMP_DIR
118 }
120 # Create SliTaz package archive from an installed package.
121 # Parameters: package
122 repack() {
123 local package=$1
124 unset EXTRAVERSION
125 source $INSTALLED/$package/receipt
126 newline
127 echo -e "$(bold Repacking :) $PACKAGE-$VERSION$EXTRAVERSION.tazpkg"
128 separator
129 if grep -qs ^NO_REPACK= $INSTALLED/$PACKAGE/receipt; then
130 eval_gettext "Can't repack \$PACKAGE"; newline
131 exit 1
132 fi
133 if [ -s $INSTALLED/$PACKAGE/modifiers ]; then
134 eval_gettext "Can't repack, \$PACKAGE files have been modified by:"; newline
135 for i in $(cat $INSTALLED/$PACKAGE/modifiers); do
136 echo " $i"
137 done
138 exit 1
139 fi
140 unset MISSING
141 while read i; do
142 [ -e "$i" ] && continue
143 [ -L "$i" ] || MISSING="$MISSING\n $i"
144 done < $INSTALLED/$PACKAGE/files.list
145 if [ -n "$MISSING" ]; then
146 gettext "Can't repack, the following files are lost:"
147 echo -e "$MISSING"
148 exit 1
149 fi
150 mkdir -p $TMP_DIR
151 pushd $TMP_DIR > /dev/null
152 FILES="fs.cpio.lzma\n"
153 for i in $(ls $INSTALLED/$PACKAGE) ; do
154 [ "$i" = "volatile.cpio.gz" ] && continue
155 [ "$i" = "modifiers" ] && continue
156 cp $INSTALLED/$PACKAGE/$i . && FILES="$FILES$i\n"
157 done
158 ln -s / rootfs
159 mkdir tmp
160 sed 's/^/rootfs/' < files.list | cpio -o -H newc --quiet |\
161 { cd tmp ; cpio -idm --quiet >/dev/null; cd ..; }
162 mv tmp/rootfs fs
163 if [ -f $INSTALLED/$PACKAGE/volatile.cpio.gz ]; then
164 zcat $INSTALLED/$PACKAGE/volatile.cpio.gz | \
165 { cd fs; cpio -idm --quiet; cd ..; }
166 fi
167 if fgrep -q repack_cleanup $INSTALLED/$PACKAGE/receipt; then
168 . $INSTALLED/$PACKAGE/receipt
169 repack_cleanup fs
170 fi
171 if [ -f $INSTALLED/$PACKAGE/$CHECKSUM ]; then
172 sed 's, , fs,' < $INSTALLED/$PACKAGE/$CHECKSUM | \
173 $CHECKSUM -s -c || {
174 gettext "Can't repack, $CHECKSUM error."; newline
175 popd
176 rm -rf $TMP_DIR
177 exit 1
178 }
179 fi
180 find fs | cpio -o -H newc --quiet | lzma e fs.cpio.lzma -si
181 echo -e "$FILES" | cpio -o -H newc --quiet > $PACKAGE-$VERSION$EXTRAVERSION.tazpkg
182 popd > /dev/null
183 mv $TMP_DIR/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg .
184 rm -R $TMP_DIR
185 eval_gettext "Package \$PACKAGE repacked successfully."; newline
186 echo $(gettext "Size") : $(du -sh $PACKAGE-$VERSION$EXTRAVERSION.tazpkg)
187 newline
188 }
190 # Create SliTaz package archive from configuration files.
191 repack_config() {
192 mkdir -p $TMP_DIR
193 pushd $TMP_DIR > /dev/null
194 CONFIG_VERSION=1.0
195 mkdir config-$CONFIG_VERSION
196 pushd config-$CONFIG_VERSION
197 for i in $INSTALLED/*/volatile.cpio.gz; do
198 zcat $i | cpio -t --quiet
199 done > files.list
200 mkdir fs
201 pushd fs
202 ( cd / ; cpio -o -H newc --quiet ) < ../files.list | cpio -idm --quiet > /dev/null
203 mkdir -p etc/tazlito
204 for i in $INSTALLED/*/receipt; do
205 unset EXTRAVERSION
206 source $i
207 echo "$PACKAGE-$VERSION$EXTRAVERSION"
208 done > etc/tazlito/config-packages.list
209 popd > /dev/null
210 echo "etc/tazlito/config-packages.list" >> files.list
211 cat > receipt <<EOT
212 # SliTaz package receipt.
214 PACKAGE="config"
215 VERSION="$CONFIG_VERSION"
216 CATEGORY="base-system"
217 SHORT_DESC="$(gettext "User configuration backup on ")$(date)"
218 DEPENDS="$(ls $INSTALLED)"
219 EOT
220 popd
221 tazpkg pack config-$CONFIG_VERSION
222 popd
223 cp $TMP_DIR/config-$CONFIG_VERSION.tazpkg .
224 rm -rf $TMP_DIR
225 }
227 # Create SliTaz package archive using cpio and gzip.
228 # Parameters: package
229 pack() {
230 local package="$1"
231 cd $PACKAGE
232 if [ ! -f "receipt" ]; then
233 gettext "Receipt is missing. Please read the documentation."; newline
234 exit 0
235 else
236 newline
237 echo "$(bold Packing :) $PACKAGE"
238 separator
239 # Create files.list with redirecting find outpout.
240 gettext "Creating the list of files..."
241 pushd fs
242 find . -type f -print > ../files.list
243 find . -type l -print >> ../files.list
244 popd
245 sed -i s/'^.'/''/ files.list
246 status
247 gettext "Creating $CHECKSUM of files..."
248 while read file; do
249 [ -L "fs$file" ] && continue
250 [ -f "fs$file" ] || continue
251 case "$file" in
252 /lib/modules/*/modules.*|*.pyc) continue;;
253 esac
254 $CHECKSUM "fs$file" | sed 's/ fs/ /'
255 done < files.list > $CHECKSUM
256 status
257 UNPACKED_SIZE=$(du -chs fs receipt files.list $CHECKSUM \
258 description.txt 2> /dev/null | awk \
259 '{ sz=$1 } END { print sz }')
260 # Build cpio archives.
261 gettext "Compressing the fs... "
262 find fs | cpio -o -H newc --quiet | lzma e fs.cpio.lzma -si
263 rm -rf fs
264 status
265 PACKED_SIZE=$(du -chs fs.cpio.lzma receipt files.list \
266 $CHECKSUM description.txt 2> /dev/null | awk \
267 '{ sz=$1 } END { print sz }')
268 gettext "Updating receipt sizes..."
269 sed -i s/^PACKED_SIZE.*$// receipt
270 sed -i s/^UNPACKED_SIZE.*$// receipt
271 sed -i "s/^PACKAGE=/PACKED_SIZE=\"$PACKED_SIZE\"\nUNPACKED_SIZE=\"$UNPACKED_SIZE\"\nPACKAGE=/" receipt
272 status
273 gettext "Creating full cpio archive... "
274 find . -print | cpio -o -H newc --quiet > ../$PACKAGE.tazpkg
275 status
276 gettext "Restoring original package tree... "
277 unlzma -c fs.cpio.lzma | cpio -idm --quiet
278 status
279 rm fs.cpio.lzma && cd ..
280 separator
281 eval_gettext "Package \$PACKAGE compressed successfully."; newline
282 echo $(gettext "Size") : $(du -sh $PACKAGE.tazpkg)
283 newline
284 fi
285 }
287 case $1 in
288 pack|-p)
289 pack $2 ;;
290 extract|-e)
291 extract_package $2 $3 ;;
292 recompress|-r)
293 recompress $2 ;;
294 *)
295 usage ;;
296 esac