tazpkg view modules/convert @ rev 892

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