tazpkg annotate modules/convert @ rev 840

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