spk annotate spk-convert @ rev 116

Successfully converted a ipk package\!
author Christian Mesh <meshca@clarkson.edu>
date Sat Jun 09 16:50:21 2012 -0500 (2012-06-09)
parents b7b49698c0f5
children 0709bea4297c
rev   line source
meshca@110 1 #!/bin/sh
meshca@110 2 #
meshca@110 3 # Spk-convert - Convert other distrobution's packages to tazpkg form. Read the README before adding or
meshca@110 4 # modifing any code in spk!
meshca@110 5 #
meshca@110 6 # Copyright (C) SliTaz GNU/Linux - BSD License
meshca@110 7 # Author: See AUTHORS files
meshca@110 8 #
meshca@110 9 . /usr/lib/slitaz/libspk.sh
meshca@110 10
meshca@110 11 #
meshca@110 12 # Functions
meshca@110 13 #
meshca@110 14
meshca@110 15 # Help and usage
meshca@110 16 usage() {
meshca@110 17 name=$(basename $0)
meshca@110 18 cat << EOT
meshca@110 19
meshca@110 20 $(boldify $(gettext "Usage:")) $name [packages|--options]
meshca@110 21
meshca@110 22 $(gettext "Convert SliTaz Packages")
meshca@110 23
meshca@110 24 $(boldify $(gettext "Options:"))
meshca@110 25 --install $(gettext "Install package after conversion")
meshca@110 26 --root= $(gettext "Set the root file system path")
meshca@110 27 --debug $(gettext "Display some useful debug information")
meshca@110 28
meshca@110 29 $(boldify $(gettext "Examples:"))
meshca@110 30 $name package1.rpm package2.tgz packageN.ipk
meshca@110 31
meshca@110 32 EOT
meshca@110 33 exit 0
meshca@110 34 }
meshca@110 35
meshca@110 36 # Move tazpkg pack to shared lib?
meshca@110 37
meshca@110 38 # generate a receipt based on standard receipt vars
meshca@110 39 # Usage: generate_receipt $receipt $base_package
meshca@110 40 generate_receipt() {
meshca@110 41 local receipt=$1
meshca@110 42 local base_package=$2
meshca@110 43 cat > $receipt <<EOT
meshca@110 44 # SliTaz package receipt.
meshca@110 45 # generated by tazpkg from package $(basename $base_package)
meshca@110 46 PACKAGE="$PACKAGE"
meshca@110 47 VERSION="$VERSION"
meshca@110 48 CATEGORY="misc"
meshca@110 49 SHORT_DESC="$SHORT_DESC"
meshca@110 50 WEB_SITE="$WEB_SITE"
meshca@110 51 MAINTAINER="$MAINTAINER"
meshca@111 52 DEPENDS="$DEPENDS"
meshca@110 53 CONFIG_FILES="$CONFIG_FILES"
meshca@110 54 EOT
meshca@110 55
meshca@110 56 }
meshca@110 57
meshca@112 58 # Create SliTaz package archive using cpio and lzma.
meshca@112 59 # TODO: Cook also pack packages, we should share code in libpkg.sh
meshca@112 60 # Usage: pack $package
meshca@112 61 pack() {
meshca@112 62 local package=$1
meshca@112 63 local dir="$2"
meshca@112 64 local fs="$dir/fs"
meshca@112 65 local receipt="$dir/receipt"
meshca@112 66
meshca@112 67 if [ ! -f "$receipt" ]; then
meshca@112 68 gettext "Receipt is missing. Please read the documentation."; newline
meshca@112 69 exit 0
meshca@112 70 else
meshca@112 71 # cd $dir
meshca@112 72 newline
meshca@112 73 echo $(boldify "Packing :") $package
meshca@112 74 separator
meshca@112 75
meshca@112 76 # Create files.list with redirecting find outpout.
meshca@112 77 gettext "Creating the list of files..."
meshca@113 78 cd $fs
meshca@113 79 find . -type f -print > $dir/files.list
meshca@113 80 find . -type l -print >> $dir/files.list
meshca@113 81 sed -i s/'^.'/''/ $dir/files.list
meshca@113 82 cd - /dev/null
meshca@113 83
meshca@112 84 status
meshca@112 85 gettext "Creating $CHECKSUM of files..."
meshca@112 86 local file
meshca@113 87 cd $fs
meshca@112 88 for file in $(cat $dir/files.list); do
meshca@113 89 [ -L "$file" ] && continue
meshca@113 90 [ -f "$file" ] || continue
meshca@112 91 case "$file" in
meshca@112 92 /lib/modules/*/modules.*|*.pyc) continue;;
meshca@112 93 esac
meshca@113 94 $CHECKSUM "$file" | sed 's/ fs/ /' >> $dir/$CHECKSUM
meshca@112 95 done
meshca@113 96 cd - /dev/null
meshca@112 97
meshca@112 98 status
meshca@112 99 UNPACKED_SIZE=$(du -chs $fs $receipt $dir/files.list $dir/$CHECKSUM \
meshca@112 100 $dir/description.txt 2> /dev/null | \
meshca@112 101 awk '{ sz=$1 } END { print sz }')
meshca@112 102
meshca@112 103 # Build cpio archives.
meshca@112 104 gettext "Compressing the fs... "
meshca@113 105 cd $dir
meshca@113 106 find fs | cpio -o -H newc --quiet | lzma e $fs.cpio.lzma -si
meshca@113 107 cd - /dev/null
meshca@112 108 rm -rf $fs
meshca@112 109 status
meshca@112 110
meshca@112 111 PACKED_SIZE=$(du -chs $fs.cpio.lzma $receipt $dir/files.list \
meshca@112 112 $dir/$CHECKSUM $dir/description.txt 2> /dev/null | \
meshca@112 113 awk '{ sz=$1 } END { print sz }')
meshca@112 114
meshca@112 115 gettext "Updating receipt sizes..."
meshca@112 116 sed -i s/^PACKED_SIZE.*$// $receipt
meshca@112 117 sed -i s/^UNPACKED_SIZE.*$// $receipt
meshca@112 118 sed -i "s/^PACKAGE=/PACKED_SIZE=\"$PACKED_SIZE\"\nUNPACKED_SIZE=\"$UNPACKED_SIZE\"\nPACKAGE=/" $receipt
meshca@112 119 status
meshca@112 120
meshca@112 121 gettext "Creating full cpio archive... "
meshca@113 122 cd $dir
meshca@113 123 find . -print | cpio -o -H newc --quiet > $dir.tazpkg
meshca@113 124 cd - /dev/null
meshca@112 125 status
meshca@112 126
meshca@112 127 gettext "Restoring original package tree... "
meshca@112 128
meshca@112 129 unlzma -c $fs.cpio.lzma | cpio -idm --quiet $dir
meshca@112 130 status
meshca@112 131
meshca@112 132 rm $fs.cpio.lzma
meshca@112 133 separator
meshca@112 134 eval_gettext "Package \$package compressed successfully."; newline
meshca@112 135 echo $(gettext "Size") : $(du -sh $dir.tazpkg)
meshca@112 136 newline
meshca@112 137 fi
meshca@112 138 }
meshca@112 139
meshca@112 140
meshca@112 141
meshca@111 142 # search dependencies for files
meshca@111 143 # Usage: find_depends $fs
meshca@111 144 find_depends() {
meshca@111 145 local fs=$1
meshca@111 146
meshca@111 147 local DEFAULT_DEPENDS="glibc-base gcc-lib-base"
meshca@111 148
meshca@111 149 for chkfile in $(find $fs -type f); do
meshca@111 150 is_elf $chkfile || continue
meshca@111 151 case "$chkfile" in
meshca@111 152 *.o|*.ko|*.ko.gz) continue;;
meshca@111 153 esac
meshca@111 154
meshca@111 155 ldd $chkfile | \
meshca@111 156 while read lib rem; do
meshca@111 157 case "$lib" in
meshca@111 158 statically|linux-gate.so*|ld-*.so|*/ld-*.so)
meshca@111 159 continue;;
meshca@111 160 esac
meshca@111 161
meshca@111 162 find $fs | grep -q /$lib$ && continue
meshca@111 163
meshca@111 164 for dep in $(fgrep $lib files.list | cut -d: -f1); do
meshca@111 165 case " $DEFAULT_DEPENDS " in
meshca@111 166 *\ $dep\ *) continue 2;;
meshca@111 167 esac
meshca@111 168 grep -qs "^$dep$" $tmpdir/depends && continue 2
meshca@111 169 done
meshca@111 170
meshca@111 171 if [ -n "$dep" ]; then
meshca@111 172 echo "$dep" >> $tmpdir/depends
meshca@111 173 else
meshca@111 174 grep -qs ^$lib$ $tmpdir/unresolved ||
meshca@111 175 echo "$lib" >> $tmpdir/unresolved
meshca@111 176 fi
meshca@111 177 done
meshca@111 178 done
meshca@111 179 unset spc
meshca@111 180 local spc
meshca@111 181 for file in $(cat $tmpdir/depends 2> /dev/null | sort | uniq); do
meshca@111 182 echo -n "$spc$file"
meshca@111 183 spc=" "
meshca@111 184 done
meshca@111 185 }
meshca@111 186
meshca@111 187 show_unresolved_lib() {
meshca@111 188 local receipt=$1
meshca@111 189 if [ -s $tmpdir/unresolved ]; then
meshca@111 190 echo -e "BUGS=\"$(gettext 'No dependency for')" >> $receipt
meshca@111 191 for lib in $(cat $tmpdir/unresolved | sort | uniq); do
meshca@111 192 eval_gettext "WARNING: unknown dependency for \$lib"; newline
meshca@111 193 echo -n " $lib" >> $receipt
meshca@111 194 done
meshca@111 195 echo "\"" >> $receipt
meshca@111 196 fi
meshca@111 197 }
meshca@111 198
meshca@111 199
meshca@111 200
meshca@110 201 # convert a .ipk package to .tazpkg
meshca@110 202 # Usage: convert_ipk $package_file
meshca@110 203 convert_ipk() {
meshca@110 204 local package_file=$1
meshca@110 205
meshca@111 206 mkdir -p $tmpdir
meshca@111 207 tar xOzf $package_file ./control.tar.gz | tar xzf - -C $tmpdir
meshca@110 208
meshca@111 209 local control="$tmpdir/control"
meshca@110 210
meshca@110 211 # filter ipk control file for variable
meshca@110 212 # Usage: filter_vars $search_var
meshca@110 213 filter_vars() {
meshca@110 214 local var=$1
meshca@110 215 echo "$(grep ^$var $control | sed 's/.*: //')"
meshca@110 216 }
meshca@110 217
meshca@110 218 # Load up receipt template variables
meshca@110 219 PACKAGE=$(filter_vars "Package")
meshca@110 220 VERSION=$(filter_vars "Version")
meshca@110 221 MAINTAINER=$(filter_vars "Maintainer")
meshca@110 222 SHORT_DESC=$(filter_vars "Description")
meshca@110 223 WEB_SITE="http://openwrt.org/"
meshca@110 224
meshca@110 225 target=$(filter_vars "Architecture")
meshca@110 226 case "$target" in
meshca@110 227 i386|all)
meshca@116 228 local file="$tmpdir/$PACKAGE-$VERSION"
meshca@116 229 local receipt="$file/receipt"
meshca@116 230 local fs="$file/fs"
meshca@110 231
meshca@110 232 mkdir -p $fs
meshca@110 233 tar xOzf $package_file ./data.tar.gz | tar xzf - -C $fs
meshca@110 234
meshca@110 235 unset CONFIG_FILES
meshca@111 236 [ -s $tmpdir/conffiles ] && $CONFIG_FILE=$(cat $tmpdir/conffiles)
meshca@110 237
meshca@111 238
meshca@111 239
meshca@111 240 DEPENDS=$(find_depends $fs)
meshca@110 241 generate_receipt $receipt $package_file
meshca@110 242
meshca@110 243 show_unresolved_lib $receipt
meshca@110 244
meshca@110 245 # Writes a ipk script to receipt function
meshca@110 246 # Usage: transpose_func $function_name $script
meshca@110 247 transpose_func() {
meshca@110 248 local func=$1
meshca@110 249 local script=$2
meshca@110 250 if [ -s $script ]; then
meshca@110 251 cat >> $receipt << EOT
meshca@110 252 $func()
meshca@110 253 {
meshca@110 254 $(cat $script)
meshca@110 255 }
meshca@110 256 EOT
meshca@111 257 fi
meshca@110 258 }
meshca@110 259
meshca@110 260 # read functions into receipt
meshca@111 261 transpose_func pre_install $tmpdir/preinst
meshca@111 262 transpose_func post_install $tmpdir/postinst
meshca@111 263 transpose_func pre_remove $tmpdir/prerm
meshca@111 264 transpose_func post_remove $tmpdir/postrm
meshca@110 265
meshca@110 266 [ -z "$SHORT_DESC" ] || echo $SHORT_DESC > $file/description.txt
meshca@110 267
meshca@112 268 pack $PACKAGE $file
meshca@110 269
meshca@116 270 mv $file.tazpkg .
meshca@110 271 ;;
meshca@110 272 *)
meshca@110 273 gettext "Invalid target: $target (expected i386)"; newline
meshca@110 274 ;;
meshca@110 275 esac
meshca@110 276 unset_receipt
meshca@111 277 rm -rf $tmpdir
meshca@110 278 }
meshca@110 279
meshca@110 280 # convert a .pkg.tar.gz/.apk package to .tazpkg
meshca@110 281 # Usage: convert_arch $package_file
meshca@110 282 convert_arch() {
meshca@110 283 local package_file=$1
meshca@110 284
meshca@110 285 # Extract
meshca@111 286 local fs="$tmpdir/fs"
meshca@110 287 mkdir -p $fs
meshca@115 288
meshca@115 289 case $package_file in
meshca@115 290 *.apk|*.pkg.tar.gz)
meshca@115 291 tar xzf $package_file -C $fs;;
meshca@115 292 *.pkg.tar.xz)
meshca@115 293 tar xf $package_file -C $fs;;
meshca@115 294 esac
meshca@110 295
meshca@110 296 local PKGINFO="$fs/.PKGINFO"
meshca@110 297 if [ -f $PKGINFO ]; then
meshca@110 298
meshca@110 299 # filter .PKGINFO file for variable
meshca@110 300 # Usage: filter_vars $search_var
meshca@110 301 filter_vars() {
meshca@110 302 local var=$1
meshca@110 303 echo $(grep ^$var $PKGINFO | sed 's/.*= //')
meshca@110 304 }
meshca@110 305
meshca@110 306 PACKAGE=$(filter_vars "pkgname")
meshca@110 307 VERSION=$(filter_vars "pkgver")
meshca@110 308 SHORT_DESC=$(filter_vars "pkgdesc")
meshca@110 309 WEB_SITE=$(filter_vars "url")
meshca@110 310 MAINTAINER=$(filter_vars "packager")
meshca@110 311
meshca@115 312 local file="$tmpdir/$PACKAGE-$VERSION"
meshca@110 313 local receipt="$file/receipt"
meshca@110 314
meshca@115 315 mkdir $file
meshca@115 316 mv $fs $file
meshca@115 317
meshca@111 318 DEPENDS=$(find_depends $fs)
meshca@110 319 generate_receipt $receipt $package_file
meshca@110 320
meshca@111 321 show_unresolved_lib $tmpdir/$file/receipt
meshca@110 322 rm -f $file/fs/.[A-Z]*
meshca@110 323
meshca@112 324 pack $PACKAGE $file
meshca@110 325
meshca@110 326 mv $file.tazpkg .
meshca@110 327 else
meshca@110 328 eval_gettext "\$package_file does not look like an Archlinux/Alpine package !"; newline
meshca@110 329 fi
meshca@110 330 unset_receipt
meshca@111 331 rm -rf $tmpdir
meshca@110 332 }
meshca@110 333
meshca@110 334 # convert a .tgz package to .tazpkg
meshca@110 335 # Usage: convert_tgz $package_file
meshca@110 336 convert_tgz() {
meshca@110 337 local package_file=$1
meshca@110 338 local package=$(basename $package_file)
meshca@110 339
meshca@110 340 # Set package to current args
meshca@110 341 IFS='-'
meshca@110 342 set -- $package
meshca@110 343 unset IFS
meshca@110 344
meshca@110 345 local PACKAGE=$1
meshca@110 346 local VERSION=$2
meshca@111 347 local file="$tmpdir/$PACKAGE-$VERSION"
meshca@110 348 local receipt="$file/receipt"
meshca@110 349 local fs="$file/fs"
meshca@110 350
meshca@110 351 # Extract package
meshca@110 352 mkdir -p $fs
meshca@110 353 tar xzf $package_file -C $fs
meshca@110 354
meshca@110 355 if [ -d $fs/install ]; then
meshca@110 356 # Set other receipt vars
meshca@110 357 SHORT_DESC=$(grep ^$PACKAGE $fs/install/slack-desc | \
meshca@110 358 head -1 | sed 's/.*(\(.*\)).*/\1/')
meshca@110 359 WEB_SITE="http://www.slackware.com/packages/"
meshca@110 360 MAINTAINER="nobody@slitaz.org"
meshca@110 361
meshca@111 362 DEPENDS=$(find_depends $fs)
meshca@110 363 generate_receipt $receipt $package_file
meshca@110 364
meshca@110 365 show_unresolved_lib $receipt
meshca@110 366
meshca@110 367 # post_install function from doinst.sh
meshca@110 368 if [ -f $fs/install/doinst.sh ]; then
meshca@110 369 cat >> $receipt <<EOM
meshca@110 370
meshca@110 371 post_install()
meshca@110 372 {
meshca@110 373 chroot \$1/ sh - << EOT
meshca@110 374 cd /
meshca@110 375 $(cat $fs/install/doinst.sh | sed -e 's/\\/\\\\/g' | sed -e 's/\$/\\$/g')
meshca@110 376 EOT
meshca@110 377 }
meshca@110 378 EOM
meshca@111 379 fi
meshca@111 380
meshca@110 381 # Get full description
meshca@110 382 if [ ! -z "$SHORT_DESC" ]; then
meshca@110 383 grep ^$PACKAGE $fs/install/slack-desc | \
meshca@110 384 sed "s/^$PACKAGE://" > $file/description.txt
meshca@110 385 fi
meshca@110 386
meshca@110 387 rm -rf $fs/install
meshca@110 388
meshca@112 389 pack $PACKAGE $file
meshca@110 390
meshca@110 391 mv $file.tazpkg .
meshca@110 392 else
meshca@110 393 eval_gettext "\$package_file does not look like a Slackware package !"; newline
meshca@110 394 fi
meshca@111 395 rm -rf $tmpdir
meshca@110 396 }
meshca@110 397
meshca@110 398 # convert a .deb package to .tazpkg
meshca@110 399 # Usage: convert_deb $package_file
meshca@110 400 convert_deb() {
meshca@114 401 local package_file="$1"
meshca@110 402
meshca@110 403 # Extract deb control
meshca@111 404 mkdir -p $tmpdir
meshca@111 405 dpkg-deb -e $package_file $tmpdir
meshca@110 406
meshca@110 407
meshca@110 408 # filter control file for variable
meshca@110 409 # Usage: filter_vars $search_var
meshca@110 410 filter_vars() {
meshca@110 411 local var=$1
meshca@114 412 local result=$(grep "^ *$var:" $tmpdir/control)
meshca@110 413 echo ${result##*:}
meshca@110 414 }
meshca@110 415
meshca@110 416 PACKAGE=$(filter_vars "Package")
meshca@110 417 VERSION=$(filter_vars "Version")
meshca@110 418 SHORT_DESC=$(filter_vars "Description")
meshca@110 419 WEB_SITE="http://packages.debian.org/search?keywords=$PACKAGE"
meshca@110 420 MAINTAINER="nobody@slitaz.org"
meshca@111 421 target="$(grep ^Architecture $tmpdir/control | sed 's/.*: //')"
meshca@110 422
meshca@110 423 case "$target" in
meshca@110 424 i386|all)
meshca@111 425 local file="$tmpdir/$PACKAGE-$VERSION"
meshca@110 426 local receipt="$file/receipt"
meshca@110 427 local fs="$file/fs"
meshca@110 428
meshca@110 429 # Extract deb contents
meshca@110 430 mkdir -p $fs
meshca@110 431 dpkg-deb -x $package_file $fs
meshca@110 432
meshca@111 433 DEPENDS=$(find_depends $fs)
meshca@110 434 generate_receipt $receipt $package_file
meshca@111 435
meshca@111 436 if [ -s $tmpdir/conffiles ]; then
meshca@110 437 cat >> $receipt <<EOT
meshca@111 438 CONFIG_FILES="$(cat $tmpdir/conffiles)"
meshca@110 439 EOT
meshca@110 440 fi
meshca@110 441
meshca@110 442 show_unresolved_lib $file/receipt
meshca@110 443
meshca@110 444 # Description.txt
meshca@114 445 [ -z "$SHORT_DESC" ] || echo "$SHORT_DESC" > $file/description.txt
meshca@110 446
meshca@112 447 pack $PACKAGE $file
meshca@110 448
meshca@110 449 mv $file.tazpkg .
meshca@110 450 ;;
meshca@110 451 *)
meshca@110 452 gettext "Invalid target: $target (expected i386 or all)"; newline
meshca@110 453 ;;
meshca@110 454 esac
meshca@111 455 rm -rf $tmpdir
meshca@110 456 }
meshca@110 457
meshca@110 458 # convert a .rpm package to .tazpkg
meshca@110 459 # Usage: convert_rpm $package_file
meshca@110 460 convert_rpm() {
meshca@110 461 local package_file=$1
meshca@110 462
meshca@110 463 # Move package_file to tmp
meshca@111 464 mkdir -p $tmpdir
meshca@111 465 cp $package_file $tmpdir
meshca@111 466 package_file=$tmpdir/$(basename $package_file)
meshca@110 467
meshca@110 468 # filter package_file for variable
meshca@110 469 # Usage: filter_vars $search_var
meshca@110 470 filter_vars() {
meshca@110 471 local var=$1
meshca@110 472 echo $(rpm -qip $package_file | grep "^$var*" | awk '{print $3}')
meshca@110 473 }
meshca@110 474
meshca@110 475 PACKAGE=$(filter_vars "Name")
meshca@110 476 VERSION=$(filter_vars "Version")
meshca@110 477 SHORT_DESC=$(filter_vars "Summary")
meshca@110 478 WEB_SITE=$(filter_vars "URL")
meshca@111 479 if [ -z "$WEB_SITE" ]; then
meshca@110 480 WEB_SITE="http://rpmfind.net/linux/rpm2html/search.php?query=$PACKAGE"
meshca@110 481 fi
meshca@110 482 CATEGORY="misc";
meshca@110 483 MAINTAINER="nobody@slitaz.org";
meshca@110 484
meshca@110 485
meshca@111 486 local file="$tmpdir/$PACKAGE-$VERSION"
meshca@110 487 local receipt="$file/receipt"
meshca@110 488 local fs="$file/fs"
meshca@110 489
meshca@110 490 mkdir -p $fs
meshca@110 491
meshca@111 492 rpm -qip $package_file | \
meshca@110 493 grep "^Description*" -A 100 | \
meshca@110 494 grep -v "^Description*" > \
meshca@110 495 $file/description.txt
meshca@110 496
meshca@110 497 cd $fs
meshca@111 498 rpm2cpio $package_file | cpio -idm --quiet
meshca@110 499 cd - > /dev/null
meshca@110 500
meshca@111 501
meshca@111 502 DEPENDS=$(find_depends $fs)
meshca@111 503 generate_receipt $receipt $package_file
meshca@111 504
meshca@110 505 show_unresolved_lib $receipt
meshca@110 506
meshca@112 507 pack $PACKAGE $file
meshca@110 508
meshca@110 509 mv $file.tazpkg .
meshca@110 510
meshca@110 511 unset_receipt
meshca@111 512 rm -rf $tmpdir
meshca@110 513 }
meshca@110 514
meshca@110 515
meshca@110 516 #
meshca@110 517 # Commands and exit
meshca@110 518 #
meshca@110 519
meshca@110 520 case "$1" in
meshca@110 521 ""|*usage|*help) usage ;;
meshca@110 522 esac
meshca@110 523
meshca@110 524 #
meshca@110 525 # Handle packages: package package.tazpkg ... packageN packageN.tazpkg
meshca@110 526 #
meshca@110 527
meshca@110 528 check_root
meshca@110 529
meshca@110 530 for pkg in $@
meshca@110 531 do
meshca@110 532 if [ "$(dd if=$pkg bs=8 count=1 skip=1 2> /dev/null)" == "debian-b" ];
meshca@110 533 then
meshca@110 534 convert_deb $pkg
meshca@110 535 else
meshca@110 536 case "$pkg" in
meshca@110 537 *.deb|*.udeb)
meshca@110 538 convert_deb $pkg;;
meshca@110 539 *.rpm)
meshca@110 540 convert_rpm $pkg;;
meshca@110 541 *.tgz)
meshca@110 542 convert_tgz $pkg;;
meshca@115 543 *.apk|*.pkg.tar.gz|*.pkg.tar.xz)
meshca@110 544 convert_arch $pkg;;
meshca@110 545 *.ipk|*.opk)
meshca@110 546 convert_ipk $pkg;;
meshca@110 547 *)
meshca@110 548 gettext "Unsupported format"; newline;;
meshca@110 549 esac
meshca@110 550 fi
meshca@110 551 done
meshca@110 552
meshca@110 553 exit 0