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