spk annotate spk-convert @ rev 115
Successfully converted a arch package\!
author | Christian Mesh <meshca@clarkson.edu> |
---|---|
date | Sat Jun 09 16:38:58 2012 -0500 (2012-06-09) |
parents | da05a2439630 |
children | 6e35af74e898 |
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@110 | 228 local file="$PACKAGE-$VERSION" |
meshca@111 | 229 local receipt="$tmpdir/$file/receipt" |
meshca@111 | 230 local fs="$tmpdir/$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@111 | 270 mv $tmpdir/$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 |