tazpkg annotate modules/convert @ rev 894

Append README.devel
author Aleksej Bobylev <al.bobylev@gmail.com>
date Sat Dec 19 15:39:06 2015 +0200 (2015-12-19)
parents 879df9728956
children e4257a4c2eb3
rev   line source
al@822 1 #!/bin/sh
al@828 2 # TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg
al@828 3 # convert - TazPkg module
al@828 4 # Toolset to convert alien package to the tazpkg format
al@822 5
al@822 6
al@822 7 # Usage: tazpkg-convert alien_package [ target_directory ]
al@822 8
al@822 9
al@822 10 PACKAGE_FILE="$1"
al@822 11 TARGET_DIR="$2"
al@822 12 TMP_DIR=$(mktemp -d)
al@822 13 TOP_DIR="$(pwd)"
al@822 14
al@822 15 . @@MODULES@@/find-depends
al@822 16
al@846 17 # Get TazPkg working environment
al@846 18 . @@MODULES@@/getenv
al@822 19
al@822 20
al@822 21 # FIXME: what does this mean?
al@822 22 [ -n "$TARGET_DIR" -a -s "$TARGET_DIR/files.list.lzma" ] && TMPLOCALSTATE="$TARGET_DIR"
al@822 23
al@822 24
al@822 25 show_unresolved_lib() {
al@822 26 if [ -s "$TMP_DIR/unresolved" ]; then
al@822 27 echo -e "BUGS=\"$(_n 'No dependency for:')" >> $1
al@822 28 sort < $TMP_DIR/unresolved | uniq | \
al@822 29 while read file; do
al@822 30 _ 'WARNING: unknown dependency for %s' "$lib"
al@822 31 echo -n " $file" >> $1
al@822 32 done
al@822 33 echo "\"" >> $1
al@822 34 fi
al@822 35 }
al@822 36
al@822 37
al@822 38 # convert a .tar.bz2 package to .tazpkg
al@822 39
al@822 40 convert_upkg() {
al@840 41 mkdir -p "$TMP_DIR/fs"
al@840 42 tar -xjf "$PACKAGE_FILE" -C "$TMP_DIR/fs"
al@822 43 if [ -d "$TMP_DIR/fs/var/lib/upkg/packages" ]; then
al@840 44 cd "$TMP_DIR"
al@840 45 package=$(sed '/^Package:/!d;s/.*: //' fs/var/lib/upkg/packages/*.info)
al@840 46 version=$(sed '/^Version:/!d;s/.*: //' fs/var/lib/upkg/packages/*.info)
al@822 47 url='http://www.paldo.org/'
al@822 48 file="$package-$version"
al@840 49 mkdir "$file"
al@840 50 mv fs "$file"
al@822 51 maintainer='nobody@slitaz.org'
al@822 52 descrip="$package package from paldo."
al@840 53 cat > "$file/receipt" <<EOT
al@822 54 # SliTaz package receipt.
al@822 55 # generated by tazpkg from package $(basename "$PACKAGE_FILE")
al@822 56 PACKAGE="$package"
al@822 57 VERSION="$version"
al@822 58 CATEGORY="misc"
al@822 59 SHORT_DESC="$descrip"
al@822 60 WEB_SITE="$url"
al@822 61 MAINTAINER="$maintainer"
al@892 62 DEPENDS="$(find_depends .)"
al@822 63 EOT
al@891 64 [ -s $file/var/lib/upkg/files/*.config.bz2 ] &&
al@840 65 cat >> "$file/receipt" <<EOT
al@822 66 CONFIG_FILES="$(bzcat $file/var/lib/upkg/files/*.config.bz2)"
al@822 67 EOT
al@840 68 while read ext func; do
al@891 69 [ -s $file/fs/var/lib/upkg/scripts/*.$ext ] || continue
al@840 70 cat >> "$file/receipt" <<EOT
al@822 71
al@822 72 $func()
al@822 73 {
al@822 74 $(cat $file/fs/var/lib/upkg/scripts/*.$ext)
al@822 75 }
al@822 76 EOT
al@822 77 done <<EOT
al@822 78 prerm pre_remove
al@822 79 EOT
al@822 80
al@840 81 tazpkg pack "$file"
al@840 82 mv "$TMP_DIR/$file.tazpkg" "$TOP_DIR"
al@822 83 else
al@822 84 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'upkg'
al@822 85 fi
al@840 86 cd "$TOP_DIR"
al@840 87 rm -rf "$TMP_DIR"
al@822 88 }
al@822 89
al@822 90
al@822 91 # convert a .spack package to .tazpkg
al@822 92
al@822 93 convert_spack() {
al@840 94 mkdir -p "$TMP_DIR"
al@840 95 ( cd "$TMP_DIR"; cpio -i ) < "$PACKAGE_FILE"
al@840 96 cd "$TMP_DIR"
al@840 97 package=$(sed '$!d;s/:.*//' about.txt)
al@840 98 version=$(basename "$PACKAGE_FILE" | sed "s/$package-\([^-]*\).*/\1/")
al@840 99 descrip=$(sed '$!d;s/.*: //' about.txt)
al@822 100 url='http://0linux.org/'
al@822 101 maintainer='nobody@slitaz.org'
al@822 102 file="$package-$version"
al@840 103 mkdir -p "$file/fs"
al@840 104 xzcat files.xz | ( cd "$file/fs"; cpio -idmu )
al@840 105 cat > "$file/receipt" <<EOT
al@822 106 # SliTaz package receipt.
al@822 107 # generated by tazpkg from package $(basename "$PACKAGE_FILE")
al@822 108 PACKAGE="$package"
al@822 109 VERSION="$version"
al@822 110 CATEGORY="misc"
al@822 111 SHORT_DESC="$descrip"
al@822 112 WEB_SITE="$url"
al@822 113 MAINTAINER="$maintainer"
al@892 114 DEPENDS="$(find_depends .)"
al@822 115 EOT
al@840 116 [ -s 'pre-install.sh' ] && cat >> "$file/receipt" <<EOT
al@822 117
al@822 118 pre_install()
al@822 119 {
al@822 120 cd /
al@822 121 $(sed 1d pre-install.sh)
al@822 122 }
al@822 123 EOT
al@840 124 [ -s 'post-install.sh' ] && cat >> "$file/receipt" <<EOT
al@822 125
al@822 126 post_install()
al@822 127 {
al@822 128 cd /
al@822 129 $(sed '1,/^}/d' post-install.sh)
al@822 130 }
al@822 131 EOT
al@840 132 tazpkg pack "$file"
al@840 133 cd "$TOP_DIR"
al@840 134 mv "$TMP_DIR/$file.tazpkg" .
al@840 135 rm -rf "$TMP_DIR"
al@822 136 }
al@822 137
al@822 138
al@822 139 # convert a .ipk package to .tazpkg
al@822 140
al@822 141 convert_ipk() {
al@840 142 mkdir -p "$TMP_DIR"
al@840 143 tar -xOzf "$PACKAGE_FILE" ./control.tar.gz | tar -xzf - -C "$TMP_DIR"
al@840 144 package=$( sed '/^Package/!d;s/.*: //' "$TMP_DIR/control")
al@840 145 version=$( sed '/^Version/!d;s/.*: //' "$TMP_DIR/control")
al@840 146 maintainer=$(sed '/^Maintainer/!d;s/.*: //' "$TMP_DIR/control")
al@840 147 target=$( sed '/^Architecture/!d;s/.*: //' "$TMP_DIR/control")
al@840 148 descrip=$( sed '/^Description/!d;s/.*: //' "$TMP_DIR/control")
al@840 149 homepage=$( sed '/^Homepage/!d;s/.*: //' "$TMP_DIR/control")
al@822 150 url='http://openwrt.org/'
al@822 151 case "$target" in
al@822 152 i386|all)
al@822 153 file="$package-$version"
al@840 154 mkdir -p "$TMP_DIR/$file/fs"
al@840 155 tar -xOzf "$PACKAGE_FILE" ./data.tar.gz | tar -xzf - -C "$TMP_DIR/$file/fs"
al@840 156 cd "$TMP_DIR"
al@840 157 cat > "$file/receipt" <<EOT
al@822 158 # SliTaz package receipt.
al@822 159 # generated by tazpkg from package $(basename "$PACKAGE_FILE")
al@822 160 PACKAGE="$package"
al@822 161 VERSION="$version"
al@822 162 CATEGORY="misc"
al@822 163 SHORT_DESC="$descrip"
al@822 164 WEB_SITE="${homepage:-$url}"
al@822 165 MAINTAINER="$maintainer"
al@892 166 DEPENDS="$(find_depends .)"
al@822 167 EOT
al@840 168 show_unresolved_lib "$file/receipt"
al@840 169 [ -s 'conffiles' ] && cat >> "$file/receipt" <<EOT
al@840 170 CONFIG_FILES=$(cat conffiles)
al@822 171 EOT
al@840 172 show_unresolved_lib "$file/receipt"
al@822 173 while read script func; do
al@840 174 [ -s "$script" ] && cat >> "$file/receipt" <<EOT
al@822 175
al@822 176 $func()
al@822 177 {
al@840 178 $(cat "$script")
al@822 179 }
al@822 180 EOT
al@822 181 done <<EOT
al@822 182 preinst pre_install
al@822 183 postinst post_install
al@822 184 prerm pre_remove
al@822 185 postrm post_remove
al@822 186 EOT
al@822 187 awk '
al@822 188 {
al@840 189 if (/^ / && show)
al@840 190 print substr($0,2);
al@840 191 else
al@840 192 show=0;
al@840 193 if (/^Description/)
al@840 194 show=1;
al@840 195 }' < "$TMP_DIR/control" > "$file/description.txt"
al@840 196 sed -i 's/^\.$//' "$file/description.txt"
al@840 197 [ -s "$file/description.txt" ] || rm -f "$file/description.txt"
al@840 198 tazpkg pack "$file"
al@840 199 cd "$TOP_DIR"
al@840 200 mv "$TMP_DIR/$file.tazpkg" .
al@822 201 ;;
al@822 202 *)
al@822 203 _ 'Invalid target: %s (expected i386)' "$target"
al@822 204 ;;
al@822 205 esac
al@840 206 rm -rf "$TMP_DIR"
al@822 207 }
al@822 208
al@822 209
al@822 210 # convert a .cards.tar.xz package to .tazpkg
al@822 211
al@822 212 convert_nutyx() {
al@840 213 mkdir -p "$TMP_DIR/fs"
al@846 214 tar -xf "$PACKAGE_FILE" -C "$TMP_DIR/fs"
al@822 215 if [ -f "$TMP_DIR/fs/.META" ]; then
al@840 216 package=$(sed '/^N/!d;s/^.//' fs/.META)
al@840 217 version=$(sed '/^V/!d;s/^.//' fs/.META)
al@840 218 descrip=$(sed '/^D/!d;s/^.//' fs/.META)
al@822 219 file="$package-$version"
al@840 220 mkdir "$file"
al@840 221 mv fs "$file"
al@840 222 cat > "$file/receipt" <<EOT
al@822 223 # SliTaz package receipt.
al@822 224 # generated by tazpkg from NuTyX package $(basename "$PACKAGE_FILE")
al@822 225 PACKAGE="$package"
al@822 226 VERSION="$version"
al@822 227 CATEGORY="misc"
al@822 228 SHORT_DESC="$descrip"
al@822 229 WEB_SITE="http://www.nutyx.org/"
al@822 230 MAINTAINER="nobody@slitaz.org"
al@892 231 DEPENDS="$(find_depends .)"
al@822 232 EOT
al@840 233 show_unresolved_lib "$file/receipt"
al@891 234 rm -f $file/fs/.[A-Z]*
al@840 235 tazpkg pack "$file"
al@840 236 mv "$file.tazpkg" "$TOP_DIR"
al@822 237 else
al@822 238 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'NuTyX'
al@822 239 fi
al@840 240 cd "$TOP_DIR"
al@840 241 rm -rf "$TMP_DIR"
al@822 242 }
al@822 243
al@822 244
al@822 245 # convert a .pkg.tar.gz/.pkg.tar.xz/.apk package to .tazpkg
al@822 246
al@822 247 convert_arch() {
al@840 248 mkdir -p "$TMP_DIR/fs"
al@846 249 tar -xf "$PACKAGE_FILE" -C "$TMP_DIR/fs"
al@822 250 if [ -f "$TMP_DIR/fs/.PKGINFO" ]; then
al@840 251 cd "$TMP_DIR"
al@840 252 package=$( sed '/^pkgname/!d;s/.*= //' fs/.PKGINFO)
al@840 253 version=$( sed '/^pkgver/!d;s/.*= //' fs/.PKGINFO)
al@840 254 descrip=$( sed '/^pkgdesc/!d;s/.*= //' fs/.PKGINFO)
al@840 255 url=$( sed '/^url/!d;s/.*= //' fs/.PKGINFO)
al@840 256 maintainer=$(sed '/^packager/!d;s/.*= //' fs/.PKGINFO)
al@822 257 file="$package-$version"
al@840 258 mkdir "$file"
al@840 259 mv fs "$file"
al@840 260 cat > "$file/receipt" <<EOT
al@822 261 # SliTaz package receipt.
al@822 262 # generated by tazpkg from Archlinux package $(basename "$PACKAGE_FILE")
al@822 263 PACKAGE="$package"
al@822 264 VERSION="$version"
al@822 265 CATEGORY="misc"
al@822 266 SHORT_DESC="$descrip"
al@822 267 WEB_SITE="$url"
al@822 268 MAINTAINER="$maintainer"
al@892 269 DEPENDS="$(find_depends .)"
al@822 270 EOT
al@840 271 show_unresolved_lib "$file/receipt"
al@891 272 rm -f $file/fs/.[A-Z]*
al@840 273 tazpkg pack "$file"
al@840 274 mv "$file.tazpkg" "$TOP_DIR"
al@822 275 else
al@822 276 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Archlinux/Alpine'
al@822 277 fi
al@840 278 cd "$TOP_DIR"
al@840 279 rm -rf "$TMP_DIR"
al@822 280 }
al@822 281
al@822 282
al@822 283 # get package and version from PACKAGE_FILE
al@822 284
al@822 285 parse_pkgname() {
al@892 286 debug "parse_pkgname('$1', '$2')"
al@822 287 package=$(basename "${2:-$PACKAGE_FILE}" "$1")
al@822 288 IFS='-'
al@840 289 set -- "$package"
al@822 290 unset IFS
al@822 291 package="$1"
al@822 292 version="$2"
al@822 293 if [ -z "$version" ]; then
al@892 294 package=${1%%-[0-9\.]*}
al@892 295 version=${1#$package-}
al@822 296 fi
al@822 297 file="$package-$version"
al@840 298 mkdir "$file"
al@892 299 debug " package='$package' version='$version' file='$file'"
al@822 300 }
al@822 301
al@822 302
al@822 303 finish_convert_puppy() {
al@822 304 rm -f fs/*.specs
al@892 305 mkdir "$file"; mv fs "$file"
al@840 306 cat > "$file/receipt" <<EOT
al@822 307 # SliTaz package receipt.
al@822 308 # generated by tazpkg from puppy package $(basename "$PACKAGE_FILE")
al@822 309 PACKAGE="$package"
al@822 310 VERSION="$version"
al@822 311 CATEGORY="misc"
al@822 312 SHORT_DESC="$desc"
al@822 313 WEB_SITE="http://puppylinux.org/"
al@822 314 MAINTAINER="nobody@slitaz.org"
al@892 315 DEPENDS="$(find_depends .)"
al@822 316 EOT
al@840 317 show_unresolved_lib "$file/receipt"
al@840 318 for i in install uninstall; do
al@892 319 if [ -f "$file/fs/p$i.sh" ]; then
al@892 320 SEPARATOR="EOT$RANDOM"
al@892 321 cat >> "$file/receipt" <<EOT
al@822 322
al@822 323 post_$i()
al@822 324 {
al@892 325 chroot \$1/ sh - <<$SEPARATOR
al@892 326 cd /
al@892 327 $(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < "$file/fs/p$i.sh" ; rm -f "$file/fs/p$i.sh")
al@892 328 $SEPARATOR
al@892 329 }
al@822 330 EOT
al@892 331 fi
al@822 332 done
al@840 333 sed -i 's/post_uninstall/post_remove/' "$file/receipt"
al@840 334 tazpkg pack "$file"
al@840 335 mv "$file.tazpkg" "$TOP_DIR"
al@840 336 cd "$TOP_DIR"
al@840 337 rm -rf "$TMP_DIR"
al@822 338 }
al@822 339
al@822 340
al@822 341 # convert a .sfs package to .tazpkg
al@822 342
al@840 343 convert_sfs() {
al@822 344 [ -n "$(which unsquashfs)" ] || tazpkg get-install squashfs
al@822 345 if ! unsquashfs -l "$PACKAGE_FILE" | grep -q squashfs-root/pet.specs$ ; then
al@822 346 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Puppy'
al@822 347 return 1
al@822 348 fi
al@840 349 mkdir -p "$TMP_DIR"
al@840 350 cd "$TMP_DIR"
al@822 351 parse_pkgname .sfs
al@822 352 unsquashfs "$PACKAGE_FILE"
al@822 353 mv squashfs-root fs
al@822 354 set -- $(cat fs/pet.specs)
al@822 355 desc="$10"
al@822 356 finish_convert_puppy
al@822 357 }
al@822 358
al@822 359
al@822 360 # convert a .pet package to .tazpkg
al@822 361
al@822 362 convert_pet() {
al@892 363 debug "convert_pet()"
al@840 364 mkdir -p "$TMP_DIR"
al@840 365 cd "$TMP_DIR"
al@822 366 parse_pkgname .pet
al@892 367 busybox tar -xzf "$PACKAGE_FILE"
al@892 368
al@892 369 PET_SPECS="$(find $TMP_DIR -maxdepth 2 -name 'pet.specs')"
al@892 370 if [ -e "$PET_SPECS" ]; then
al@892 371 debug "pet.specs with '|'"
al@892 372 desc="$(awk -F'|' '{print $10}' $PET_SPECS)"
al@892 373 debug "desc='$desc'"
al@892 374 else
al@892 375 # TODO: I need to have '.pet' file that will work this way!
al@892 376 . $package*/*.specs
al@892 377 desc="$PETMENUDESCR"
al@892 378 fi
al@891 379 mv $package*/ fs
al@822 380 finish_convert_puppy
al@822 381 }
al@822 382
al@822 383
al@822 384 # convert a .sb package to .tazpkg
al@822 385
al@822 386 convert_sb() {
al@822 387 [ -n "$(which unsquashfs)" ] || tazpkg get-install squashfs
al@822 388 if ! unsquashfs -l "$PACKAGE_FILE" | grep -q squashfs-root/var/log/removed_scripts ; then
al@822 389 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Slax'
al@822 390 return 1
al@822 391 fi
al@840 392 mkdir -p "$TMP_DIR"
al@840 393 cd "$TMP_DIR"
al@822 394 unsquashfs "$PACKAGE_FILE"
al@822 395 mv squashfs-root fs
al@822 396 parse_pkgname '' $(cat fs/var/log/packages/* | sed '/PACKAGE NAME:/!d;s/.*: *//')
al@822 397 desc="$(cat fs/var/log/packages/* | sed '/^PACKAGE DESCRIPTION:/,$!d;N;s/.*: //;q')"
al@840 398 cat fs/var/log/packages/* | sed '/^PACKAGE DESCRIPTION:/,/FILE LIST/!d;s/.*://;/^$/d' > "$file/description.txt"
al@840 399 mv fs "$file"
al@840 400 cat > "$file/receipt" <<EOT
al@822 401 # SliTaz package receipt.
al@822 402 # generated by tazpkg from slax package $(basename "$PACKAGE_FILE")
al@822 403 PACKAGE="$package"
al@822 404 VERSION="$version"
al@822 405 CATEGORY="misc"
al@822 406 SHORT_DESC="$desc"
al@822 407 WEB_SITE="http://www.slax.org/"
al@822 408 MAINTAINER="nobody@slitaz.org"
al@892 409 DEPENDS="$(find_depends .)"
al@822 410 EOT
al@840 411 show_unresolved_lib "$file/receipt"
al@891 412 [ -f $file/fs/var/log/scripts/$package* ] && cat >> "$file/receipt" <<EOM
al@822 413
al@822 414 post_install()
al@822 415 {
al@822 416 chroot \$1/ sh - << EOT
al@822 417 cd /
al@891 418 $(cat $file/fs/var/log/scripts/$package* | sed -e 's/\\/\\\\/g' | sed -e 's/\$/\\$/g')
al@822 419 EOT
al@822 420 }
al@822 421 EOM
al@840 422 tazpkg pack "$file"
al@840 423 mv "$file.tazpkg" "$TOP_DIR"
al@840 424 cd "$TOP_DIR"
al@840 425 rm -rf "$TMP_DIR"
al@822 426 }
al@822 427
al@822 428
al@822 429 # convert a .tgz package to .tazpkg
al@822 430
al@822 431 convert_tgz() {
al@822 432 parse_pkgname
al@840 433 mkdir -p "$TMP_DIR/$file/fs"
al@822 434 case "$PACKAGE_FILE" in
al@840 435 *.txz) tar -xJf "$PACKAGE_FILE" -C "$TMP_DIR/$file/fs" ;;
al@840 436 *.tgz) tar -xzf "$PACKAGE_FILE" -C "$TMP_DIR/$file/fs" ;;
al@822 437 esac
al@840 438 cd "$TMP_DIR"
al@822 439 if [ -d "$file/fs/install" ]; then
al@822 440 descrip=$(sed "/^$package/!d;s/.*(\\(.*\\)).*/\\1/;q" \
al@840 441 "$file/fs/install/slack-desc")
al@840 442 cat > "$file/receipt" <<EOT
al@822 443 # SliTaz package receipt.
al@822 444 # generated by tazpkg from slackware package $(basename "$PACKAGE_FILE")
al@822 445 PACKAGE="$package"
al@822 446 VERSION="$version"
al@822 447 CATEGORY="misc"
al@822 448 SHORT_DESC="$descrip"
al@822 449 WEB_SITE="http://www.slackware.com/packages/"
al@822 450 MAINTAINER="nobody@slitaz.org"
al@892 451 DEPENDS="$(find_depends .)"
al@822 452 EOT
al@840 453 show_unresolved_lib "$file/receipt"
al@840 454 [ -f "$file/fs/install/doinst.sh" ] && cat >> "$file/receipt" <<EOM
al@822 455
al@822 456 post_install()
al@822 457 {
al@822 458 chroot \$1/ sh - << EOT
al@822 459 cd /
al@840 460 $(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < "$file/fs/install/doinst.sh")
al@822 461 EOT
al@822 462 }
al@822 463 EOM
al@822 464 sed "/^$package/:d;s/^$package://" \
al@840 465 "$file/fs/install/slack-desc" > "$file/description.txt"
al@840 466 [ -s "$file/description.txt" ] || rm -f "$file/description.txt"
al@840 467 rm -rf "$file/fs/install"
al@840 468 tazpkg pack "$file"
al@840 469 mv "$file.tazpkg" "$TOP_DIR"
al@822 470 else
al@822 471 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Slackware'
al@822 472 fi
al@840 473 cd "$TOP_DIR"
al@840 474 rm -rf "$TMP_DIR"
al@822 475 }
al@822 476
al@822 477
al@822 478 # convert a .deb package to .tazpkg
al@822 479
al@822 480 convert_deb() {
al@840 481 mkdir -p "$TMP_DIR"
al@840 482 dpkg-deb -e "$PACKAGE_FILE" "$TMP_DIR"
al@840 483 package=$( sed '/^ *Package:/!d;s/.*: //' "$TMP_DIR/control")
al@840 484 version=$( sed '/^ *Version:/!d;s/.*: //' "$TMP_DIR/control")
al@840 485 descrip=$( sed '/^ *Description:/!d;s/.*: //' "$TMP_DIR/control")
al@840 486 homepage=$(sed '/^ *Homepage:/!d;s/.*: //' "$TMP_DIR/control")
al@840 487 target=$( sed '/^ *Architecture:/!d;s/.*: //' "$TMP_DIR/control")
al@822 488 case "$target" in
al@822 489 i386|all)
al@822 490 file="$package-$version"
al@840 491 mkdir -p "$TMP_DIR/$file/fs/"
al@840 492 dpkg-deb -x "$PACKAGE_FILE" "$TMP_DIR/$file/fs"
al@840 493 cd "$TMP_DIR"
al@840 494 cat > "$file/receipt" <<EOT
al@822 495 # SliTaz package receipt.
al@822 496 # generated by tazpkg from debian package $(basename "$PACKAGE_FILE")
al@822 497 PACKAGE="$package"
al@822 498 VERSION="$version"
al@822 499 CATEGORY="misc"
al@822 500 SHORT_DESC="$descrip"
al@822 501 WEB_SITE="${homepage:-http://packages.debian.org/search?keywords=$package}"
al@822 502 MAINTAINER="nobody@slitaz.org"
al@822 503 EOT
al@840 504 LICENSE=$(grep /usr/share/common-licenses/ \
al@891 505 "$PACKAGE_FILE" $TMP_DIR/$file/fs/usr/share/doc/*/copyright | \
al@840 506 sed 's|.*common-licenses/\([-\.A-Za-z0-9]*\).*|\1|;s|[-\.]$||;q')
al@840 507 [ -n "$LICENSE" ] && echo "LICENSE=\"$LICENSE\"" >> "$file/receipt"
al@892 508 echo "DEPENDS=\"$(find_depends .)\"" >> "$file/receipt"
al@840 509 [ -s 'conffiles' ] && cat >> "$file/receipt" <<EOT
al@822 510 CONFIG_FILES="$(cat conffiles)"
al@822 511 EOT
al@840 512 show_unresolved_lib "$file/receipt"
al@822 513 awk '
al@822 514 {
al@840 515 if (/^ / && show)
al@840 516 print substr($0,2);
al@840 517 else
al@840 518 show=0;
al@840 519 if (/^Description/)
al@840 520 show=1;
al@840 521 }' < "$TMP_DIR/control" > "$file/description.txt"
al@840 522 sed -i 's/^\.$//' "$file/description.txt"
al@840 523 [ -s "$file/description.txt" ] || rm -f "$file/description.txt"
al@840 524 tazpkg pack "$file"
al@840 525 mv "$file.tazpkg" "$TOP_DIR"
al@822 526 ;;
al@822 527 *)
al@822 528 _ 'Invalid target: %s (expected i386)' "$target"
al@822 529 ;;
al@822 530 esac
al@840 531 cd "$TOP_DIR"
al@840 532 rm -rf "$TMP_DIR"
al@822 533 }
al@822 534
al@822 535
al@822 536 # convert a .rpm package to .tazpkg
al@822 537
al@822 538 convert_rpm() {
al@840 539 mkdir -p "$TMP_DIR"
al@840 540 cp "$PACKAGE_FILE" "$TMP_DIR"
al@822 541 PACKAGE_FILE="$TMP_DIR/$(basename "$PACKAGE_FILE")"
al@822 542 rpm -qip "$PACKAGE_FILE" | awk -v pkg="$(basename "$PACKAGE_FILE")" '
al@822 543 BEGIN {
al@822 544 goturl=0;
al@822 545 printf "# SliTaz package receipt.\n";
al@840 546 printf "# generated by tazpkg from rpm package %s\n", pkg;
al@822 547 }
al@822 548 {
al@840 549 if (/^Name/) { name=$3; printf "PACKAGE=\"%s\"\n", $3; }
al@840 550 if (/^Version/) printf "VERSION=\"%s-", $3;
al@840 551 if (/^Release/) printf "%s\"\n", $3;
al@840 552 if (/^Summary/) printf "SHORT_DESC=\"%s\"\n", substr($0, 15);
al@840 553 if (/^URL/) { goturl=1; printf "WEB_SITE=\"%s\"\n", $3; }
al@822 554 }
al@822 555 END {
al@822 556 if (goturl == 0)
al@822 557 printf "WEB_SITE=\"http://rpmfind.net/linux/rpm2html/search.php?query=%s\"\n",name;
al@822 558 printf "CATEGORY=\"misc\"\n";
al@822 559 printf "MAINTAINER=\"nobody@slitaz.org\"\n";
al@822 560 }
al@840 561 ' > "$TMP_DIR/receipt"
al@840 562 . "$TMP_DIR/receipt"
al@822 563 file="$PACKAGE-$VERSION"
al@840 564 mkdir -p "$TMP_DIR/$file/fs/"
al@840 565 mv "$TMP_DIR/receipt" "$TMP_DIR/$file"
al@822 566 rpm -qip "$PACKAGE_FILE" | awk '
al@822 567 BEGIN { show=0 }
al@822 568 {
al@840 569 if (show) print;
al@840 570 if (/^Description/) show=1;
al@822 571 }
al@840 572 ' > "$TMP_DIR/$file/description.txt"
al@840 573 cd "$TMP_DIR/$file/fs/"
al@822 574 rpm2cpio "$PACKAGE_FILE" | cpio -idm --quiet
al@822 575 # rpm2cpio can't extract some new RPMs
al@822 576 if [ $? -eq 1 ]; then
al@840 577 if [ ! -e "$INSTALLED/p7zip-full/receipt" ]; then
al@822 578 boldify "$(_ 'Unable to extract the RPM using standard tools (rpm2cpio).')"
al@822 579 confirm "$(_n 'Do you want to install "%s" package? (y/N)' 'p7zip-full')"
al@822 580 if [ $? -eq 0 ]; then
al@822 581 tazpkg -gi p7zip-full
al@822 582 else
al@840 583 rm -rf "$TMP_DIR"
al@822 584 exit 1
al@822 585 fi
al@822 586 fi
al@822 587 # we may already have 7z or may have just installed it in the step above
al@822 588 if [ -e "$INSTALLED/p7zip-full/receipt" ]; then
al@822 589 7z x -so "$PACKAGE_FILE" | cpio -idm --quiet
al@822 590 fi
al@822 591 fi
al@822 592 cd ../..
al@892 593 echo "DEPENDS=\"$(find_depends .)\"" >> "$TMP_DIR/$file/receipt"
al@840 594 show_unresolved_lib "$TMP_DIR/$file/receipt"
al@840 595 tazpkg pack "$file"
al@840 596 mv "$file.tazpkg" "$TOP_DIR"
al@840 597 cd "$TOP_DIR"
al@840 598 rm -rf "$TMP_DIR"
al@822 599 }
al@822 600
al@822 601
al@822 602 # convert a .xbps package to .tazpkg (http://repo.voidlinux.eu/current/)
al@822 603
al@822 604 xbpstag() {
al@822 605 sed "/<key>$1<\/key>/!d{n;s/.*>\\(.*\\)<.*/\\1/}" \
al@822 606 < fs/props.plist | sed \$!d
al@822 607 }
al@822 608
al@822 609 convert_xbps() {
al@840 610 mkdir -p "$TMP_DIR/fs"
al@822 611 ( xzcat "$PACKAGE_FILE" || bzcat "$PACKAGE_FILE" || zcat "$PACKAGE_FILE" ) | \
al@840 612 tar -xf - -C "$TMP_DIR/fs"
al@822 613
al@840 614 cd "$TMP_DIR"
al@840 615 HOST_ARCH=$(xbpstag architecture)
al@822 616 case "$HOST_ARCH" in
al@822 617 i686) HOST_ARCH='i486';;
al@822 618 *) _ 'Arch "%s" not supported.' "$HOST_ARCH"
al@822 619 HOST_ARCH='';;
al@822 620 esac
al@822 621
al@822 622 if [ -n "$HOST_ARCH" ]; then
al@840 623 package=$(xbpstag pkgname)
al@840 624 version=$(xbpstag version)
al@822 625 file="$package-$version"
al@840 626 mkdir "$file"
al@840 627 cat > "$file/receipt" <<EOT
al@822 628 # SliTaz package receipt.
al@822 629 # generated by tazpkg from package $(basename "$PACKAGE_FILE")
al@822 630 PACKAGE="$package"
al@822 631 VERSION="$version"
al@822 632 CATEGORY="misc"
al@822 633 SHORT_DESC="$(xbpstag short_desc)"
al@822 634 WEB_SITE="$(xbpstag homepage)"
al@822 635 MAINTAINER="$(xbpstag maintainer | sed 's/&gt;/>/;s/&lt;/</')"
al@822 636 LICENSE="$(xbpstag license | sed 's/-//g')"
al@822 637 HOST_ARCH="$HOST_ARCH"
al@822 638 CONFIG_FILES="$(sed '/<key>conf_files<\/key>/,/<key>/!d;/array>/d;/<key>/d;s/.*>\(.*\)<.*/\1/' fs/props.plist)"
al@822 639
al@892 640 DEPENDS="$(find_depends .)"
al@822 641
al@822 642 EOT
al@822 643 while read script func ; do
al@840 644 [ -s "fs/$script" ] && cat >> "$file/receipt" <<EOT
al@822 645 xbps_$func()
al@822 646 {
al@822 647 set +e
al@840 648 $(cat "fs/$script")
al@822 649 }
al@822 650
al@822 651 pre_$func()
al@822 652 {
al@822 653 xbps_$func pre $package $version yes /etc/xbps.conf $HOST_ARCH
al@822 654 }
al@822 655
al@822 656 post_$func()
al@822 657 {
al@822 658 xbps_$func post $package $version yes /etc/xbps.conf $HOST_ARCH
al@822 659 }
al@822 660
al@822 661 EOT
al@840 662 rm -f "fs/$script"
al@822 663 done <<EOT
al@822 664 INSTALL install
al@822 665 REMOVE remove
al@822 666 EOT
al@822 667 rm -f fs/*.plist
al@840 668 mv fs "$package-$version"
al@840 669 tazpkg pack "$package-$version"
al@840 670 mv "$package-$version.tazpkg" "$TOP_DIR"
al@822 671 fi
al@840 672 cd "$TOP_DIR"
al@840 673 rm -rf "$TMP_DIR"
al@822 674 }
al@822 675
al@822 676
al@822 677 finish_convert_tinycore() {
al@840 678 cat > "$file/receipt" <<EOT
al@822 679 # SliTaz package receipt.
al@822 680 # generated by tazpkg from tinycore package $(basename "$PACKAGE_FILE")
al@822 681 PACKAGE="$package"
al@822 682 VERSION="$version"
al@822 683 CATEGORY="misc"
al@822 684 SHORT_DESC="tinycore package $(basename "$PACKAGE_FILE")"
al@822 685 WEB_SITE="http://tinycorelinux.net/"
al@822 686 MAINTAINER="nobody@slitaz.org"
al@892 687 DEPENDS="$(find_depends .)"
al@822 688 EOT
al@840 689 show_unresolved_lib "$file/receipt"
al@822 690 script="$file/fs/usr/local/tce.installed/$PACKAGE"
al@840 691 [ -f "$script" ] && cat >> "$file/receipt" <<EOM
al@822 692
al@822 693 post_install()
al@822 694 {
al@822 695 chroot \$1/ sh - << EOT
al@822 696 cd /
al@822 697 $(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < $script)
al@822 698 EOT
al@822 699 }
al@822 700 EOM
al@822 701 [ -d "$file/fs/usr/local/tce.installed" ] &&
al@840 702 rm -rf "$file/fs/usr/local/tce.installed"
al@840 703 tazpkg pack "$file"
al@840 704 mv "$file.tazpkg" "$TOP_DIR"
al@840 705 cd "$TOP_DIR"
al@840 706 rm -rf "$TMP_DIR"
al@822 707 }
al@822 708
al@822 709
al@822 710 # convert a .tce package to .tazpkg
al@822 711
al@822 712 convert_tce() {
al@822 713 if ! tar -tzf "$PACKAGE_FILE" | grep -q ^usr/local ; then
al@822 714 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Tinycore'
al@822 715 return 1
al@822 716 fi
al@840 717 mkdir -p "$TMP_DIR"
al@840 718 cd "$TMP_DIR"
al@822 719 case "$PACKAGE_FILE" in
al@822 720 *.tcel) parse_pkgname .tcel ;;
al@822 721 *.tcem) parse_pkgname .tcem ;;
al@822 722 *) parse_pkgname .tce ;;
al@822 723 esac
al@840 724 mkdir -p "$file/fs"
al@840 725 tar -xzf "$PACKAGE_FILE" -C "$file/fs"
al@822 726 finish_convert_tinycore
al@822 727 }
al@822 728
al@822 729
al@822 730 # convert a .tcz package to .tazpkg
al@822 731
al@822 732 convert_tcz() {
al@822 733 [ -n "$(which unsquashfs)" ] || tazpkg get-install squashfs
al@822 734 if ! unsquashfs -l "$PACKAGE_FILE" | grep -q squashfs-root/$ ; then
al@822 735 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Tinycore'
al@822 736 return 1
al@822 737 fi
al@840 738 mkdir -p "$TMP_DIR"
al@840 739 cd "$TMP_DIR"
al@822 740 parse_pkgname .tcz
al@822 741 unsquashfs "$PACKAGE_FILE"
al@840 742 mv squashfs-root "$file/fs"
al@822 743 finish_convert_tinycore
al@822 744 }
al@822 745
al@822 746
al@892 747
al@892 748 PACKAGE_FILE="$(realpath "$PACKAGE_FILE")"
al@892 749 debug "PACKAGE_FILE='$PACKAGE_FILE'"
al@822 750 if [ "$(dd if="$PACKAGE_FILE" bs=8 count=1 skip=1 2>/dev/null)" == 'debian-b' ]; then
al@822 751 convert_deb
al@822 752 else
al@822 753 case "$PACKAGE_FILE" in
al@822 754 *.deb|*.udeb) convert_deb;;
al@822 755 *.rpm) convert_rpm;;
al@822 756 *.sb) convert_sb;;
al@822 757 *.sfs) convert_sfs;;
al@822 758 *.pet) convert_pet;;
al@840 759 *.txz|*.tgz) convert_tgz;;
al@822 760 *.cards.tar.xz) convert_nutyx;;
al@822 761 *.apk|*.pkg.tar.gz|*.pkg.tar.xz) convert_arch;;
al@822 762 *.ipk|*.opk) convert_ipk;;
al@822 763 *.spack) convert_spack;;
al@822 764 *.tar.bz2) convert_upkg;;
al@822 765 *.xbps) convert_xbps;;
al@822 766 *.tce|*.tcel|*.tcem) convert_tce;;
al@822 767 *.tcz) convert_tcz;;
al@822 768 *) _ 'Unsupported format';;
al@822 769 esac
al@822 770 fi
al@822 771
al@822 772 exit 0