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)
|
pascal@976
|
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@896
|
369 # Get package description
|
al@896
|
370 PET_SPECS="$(find $TMP_DIR -maxdepth 2 -type f -name 'pet.specs')"
|
al@892
|
371 if [ -e "$PET_SPECS" ]; then
|
al@892
|
372 debug "pet.specs with '|'"
|
al@892
|
373 desc="$(awk -F'|' '{print $10}' $PET_SPECS)"
|
al@892
|
374 else
|
al@896
|
375 PET_SPECS="$(find $TMP_DIR -maxdepth 2 -type f -name '*.pet.specs')"
|
al@896
|
376 if [ -e "$PET_SPECS" ]; then
|
al@896
|
377 desc="$(. "$PET_SPECS"; echo "$PETMENUDESCR")"
|
al@896
|
378 else
|
al@896
|
379 DESKTOP="$(find $TMP_DIR -type f -name '*.desktop' | head -n1)"
|
al@896
|
380 if [ -n "$DESKTOP" ]; then
|
al@896
|
381 desc="$(awk -F'=' '($1=="Name"){print $2}' $DESKTOP)"
|
al@896
|
382 fi
|
al@896
|
383 fi
|
al@892
|
384 fi
|
al@896
|
385 [ -z "$desc" ] && desc="$package"
|
al@896
|
386 debug "desc='$desc'"
|
al@891
|
387 mv $package*/ fs
|
al@822
|
388 finish_convert_puppy
|
al@822
|
389 }
|
al@822
|
390
|
al@822
|
391
|
al@822
|
392 # convert a .sb package to .tazpkg
|
al@822
|
393
|
al@822
|
394 convert_sb() {
|
al@822
|
395 [ -n "$(which unsquashfs)" ] || tazpkg get-install squashfs
|
al@822
|
396 if ! unsquashfs -l "$PACKAGE_FILE" | grep -q squashfs-root/var/log/removed_scripts ; then
|
al@822
|
397 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Slax'
|
al@822
|
398 return 1
|
al@822
|
399 fi
|
al@840
|
400 mkdir -p "$TMP_DIR"
|
al@840
|
401 cd "$TMP_DIR"
|
al@822
|
402 unsquashfs "$PACKAGE_FILE"
|
al@822
|
403 mv squashfs-root fs
|
al@822
|
404 parse_pkgname '' $(cat fs/var/log/packages/* | sed '/PACKAGE NAME:/!d;s/.*: *//')
|
al@822
|
405 desc="$(cat fs/var/log/packages/* | sed '/^PACKAGE DESCRIPTION:/,$!d;N;s/.*: //;q')"
|
al@840
|
406 cat fs/var/log/packages/* | sed '/^PACKAGE DESCRIPTION:/,/FILE LIST/!d;s/.*://;/^$/d' > "$file/description.txt"
|
al@840
|
407 mv fs "$file"
|
al@840
|
408 cat > "$file/receipt" <<EOT
|
al@822
|
409 # SliTaz package receipt.
|
al@822
|
410 # generated by tazpkg from slax package $(basename "$PACKAGE_FILE")
|
al@822
|
411 PACKAGE="$package"
|
al@822
|
412 VERSION="$version"
|
al@822
|
413 CATEGORY="misc"
|
al@822
|
414 SHORT_DESC="$desc"
|
al@822
|
415 WEB_SITE="http://www.slax.org/"
|
al@822
|
416 MAINTAINER="nobody@slitaz.org"
|
al@892
|
417 DEPENDS="$(find_depends .)"
|
al@822
|
418 EOT
|
al@840
|
419 show_unresolved_lib "$file/receipt"
|
al@891
|
420 [ -f $file/fs/var/log/scripts/$package* ] && cat >> "$file/receipt" <<EOM
|
al@822
|
421
|
al@822
|
422 post_install()
|
al@822
|
423 {
|
al@822
|
424 chroot \$1/ sh - << EOT
|
al@822
|
425 cd /
|
al@891
|
426 $(cat $file/fs/var/log/scripts/$package* | sed -e 's/\\/\\\\/g' | sed -e 's/\$/\\$/g')
|
al@822
|
427 EOT
|
al@822
|
428 }
|
al@822
|
429 EOM
|
al@840
|
430 tazpkg pack "$file"
|
al@840
|
431 mv "$file.tazpkg" "$TOP_DIR"
|
al@840
|
432 cd "$TOP_DIR"
|
al@840
|
433 rm -rf "$TMP_DIR"
|
al@822
|
434 }
|
al@822
|
435
|
al@822
|
436
|
al@822
|
437 # convert a .tgz package to .tazpkg
|
al@822
|
438
|
al@822
|
439 convert_tgz() {
|
al@822
|
440 parse_pkgname
|
al@840
|
441 mkdir -p "$TMP_DIR/$file/fs"
|
al@822
|
442 case "$PACKAGE_FILE" in
|
al@840
|
443 *.txz) tar -xJf "$PACKAGE_FILE" -C "$TMP_DIR/$file/fs" ;;
|
al@840
|
444 *.tgz) tar -xzf "$PACKAGE_FILE" -C "$TMP_DIR/$file/fs" ;;
|
al@822
|
445 esac
|
al@840
|
446 cd "$TMP_DIR"
|
al@822
|
447 if [ -d "$file/fs/install" ]; then
|
al@822
|
448 descrip=$(sed "/^$package/!d;s/.*(\\(.*\\)).*/\\1/;q" \
|
al@840
|
449 "$file/fs/install/slack-desc")
|
al@840
|
450 cat > "$file/receipt" <<EOT
|
al@822
|
451 # SliTaz package receipt.
|
al@822
|
452 # generated by tazpkg from slackware package $(basename "$PACKAGE_FILE")
|
al@822
|
453 PACKAGE="$package"
|
al@822
|
454 VERSION="$version"
|
al@822
|
455 CATEGORY="misc"
|
al@822
|
456 SHORT_DESC="$descrip"
|
al@822
|
457 WEB_SITE="http://www.slackware.com/packages/"
|
al@822
|
458 MAINTAINER="nobody@slitaz.org"
|
al@892
|
459 DEPENDS="$(find_depends .)"
|
al@822
|
460 EOT
|
al@840
|
461 show_unresolved_lib "$file/receipt"
|
al@840
|
462 [ -f "$file/fs/install/doinst.sh" ] && cat >> "$file/receipt" <<EOM
|
al@822
|
463
|
al@822
|
464 post_install()
|
al@822
|
465 {
|
al@822
|
466 chroot \$1/ sh - << EOT
|
al@822
|
467 cd /
|
al@840
|
468 $(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < "$file/fs/install/doinst.sh")
|
al@822
|
469 EOT
|
al@822
|
470 }
|
al@822
|
471 EOM
|
al@822
|
472 sed "/^$package/:d;s/^$package://" \
|
al@840
|
473 "$file/fs/install/slack-desc" > "$file/description.txt"
|
al@840
|
474 [ -s "$file/description.txt" ] || rm -f "$file/description.txt"
|
al@840
|
475 rm -rf "$file/fs/install"
|
al@840
|
476 tazpkg pack "$file"
|
al@840
|
477 mv "$file.tazpkg" "$TOP_DIR"
|
al@822
|
478 else
|
al@822
|
479 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Slackware'
|
al@822
|
480 fi
|
al@840
|
481 cd "$TOP_DIR"
|
al@840
|
482 rm -rf "$TMP_DIR"
|
al@822
|
483 }
|
al@822
|
484
|
al@822
|
485
|
al@822
|
486 # convert a .deb package to .tazpkg
|
al@822
|
487
|
al@822
|
488 convert_deb() {
|
al@840
|
489 mkdir -p "$TMP_DIR"
|
al@840
|
490 dpkg-deb -e "$PACKAGE_FILE" "$TMP_DIR"
|
al@840
|
491 package=$( sed '/^ *Package:/!d;s/.*: //' "$TMP_DIR/control")
|
al@840
|
492 version=$( sed '/^ *Version:/!d;s/.*: //' "$TMP_DIR/control")
|
al@840
|
493 descrip=$( sed '/^ *Description:/!d;s/.*: //' "$TMP_DIR/control")
|
al@840
|
494 homepage=$(sed '/^ *Homepage:/!d;s/.*: //' "$TMP_DIR/control")
|
al@840
|
495 target=$( sed '/^ *Architecture:/!d;s/.*: //' "$TMP_DIR/control")
|
al@822
|
496 case "$target" in
|
al@822
|
497 i386|all)
|
al@822
|
498 file="$package-$version"
|
al@840
|
499 mkdir -p "$TMP_DIR/$file/fs/"
|
al@840
|
500 dpkg-deb -x "$PACKAGE_FILE" "$TMP_DIR/$file/fs"
|
al@840
|
501 cd "$TMP_DIR"
|
al@840
|
502 cat > "$file/receipt" <<EOT
|
al@822
|
503 # SliTaz package receipt.
|
al@822
|
504 # generated by tazpkg from debian package $(basename "$PACKAGE_FILE")
|
al@822
|
505 PACKAGE="$package"
|
al@822
|
506 VERSION="$version"
|
al@822
|
507 CATEGORY="misc"
|
al@822
|
508 SHORT_DESC="$descrip"
|
al@822
|
509 WEB_SITE="${homepage:-http://packages.debian.org/search?keywords=$package}"
|
al@822
|
510 MAINTAINER="nobody@slitaz.org"
|
al@822
|
511 EOT
|
al@840
|
512 LICENSE=$(grep /usr/share/common-licenses/ \
|
al@891
|
513 "$PACKAGE_FILE" $TMP_DIR/$file/fs/usr/share/doc/*/copyright | \
|
al@840
|
514 sed 's|.*common-licenses/\([-\.A-Za-z0-9]*\).*|\1|;s|[-\.]$||;q')
|
al@840
|
515 [ -n "$LICENSE" ] && echo "LICENSE=\"$LICENSE\"" >> "$file/receipt"
|
al@892
|
516 echo "DEPENDS=\"$(find_depends .)\"" >> "$file/receipt"
|
al@840
|
517 [ -s 'conffiles' ] && cat >> "$file/receipt" <<EOT
|
al@822
|
518 CONFIG_FILES="$(cat conffiles)"
|
al@822
|
519 EOT
|
al@840
|
520 show_unresolved_lib "$file/receipt"
|
al@822
|
521 awk '
|
al@822
|
522 {
|
al@840
|
523 if (/^ / && show)
|
al@840
|
524 print substr($0,2);
|
al@840
|
525 else
|
al@840
|
526 show=0;
|
al@840
|
527 if (/^Description/)
|
al@840
|
528 show=1;
|
al@840
|
529 }' < "$TMP_DIR/control" > "$file/description.txt"
|
al@840
|
530 sed -i 's/^\.$//' "$file/description.txt"
|
al@840
|
531 [ -s "$file/description.txt" ] || rm -f "$file/description.txt"
|
al@840
|
532 tazpkg pack "$file"
|
al@840
|
533 mv "$file.tazpkg" "$TOP_DIR"
|
al@822
|
534 ;;
|
al@822
|
535 *)
|
al@822
|
536 _ 'Invalid target: %s (expected i386)' "$target"
|
al@822
|
537 ;;
|
al@822
|
538 esac
|
al@840
|
539 cd "$TOP_DIR"
|
al@840
|
540 rm -rf "$TMP_DIR"
|
al@822
|
541 }
|
al@822
|
542
|
al@822
|
543
|
al@822
|
544 # convert a .rpm package to .tazpkg
|
al@822
|
545
|
al@822
|
546 convert_rpm() {
|
al@840
|
547 mkdir -p "$TMP_DIR"
|
al@840
|
548 cp "$PACKAGE_FILE" "$TMP_DIR"
|
al@822
|
549 PACKAGE_FILE="$TMP_DIR/$(basename "$PACKAGE_FILE")"
|
al@822
|
550 rpm -qip "$PACKAGE_FILE" | awk -v pkg="$(basename "$PACKAGE_FILE")" '
|
al@822
|
551 BEGIN {
|
al@822
|
552 goturl=0;
|
al@822
|
553 printf "# SliTaz package receipt.\n";
|
al@840
|
554 printf "# generated by tazpkg from rpm package %s\n", pkg;
|
al@822
|
555 }
|
al@822
|
556 {
|
al@840
|
557 if (/^Name/) { name=$3; printf "PACKAGE=\"%s\"\n", $3; }
|
al@840
|
558 if (/^Version/) printf "VERSION=\"%s-", $3;
|
al@840
|
559 if (/^Release/) printf "%s\"\n", $3;
|
al@840
|
560 if (/^Summary/) printf "SHORT_DESC=\"%s\"\n", substr($0, 15);
|
al@840
|
561 if (/^URL/) { goturl=1; printf "WEB_SITE=\"%s\"\n", $3; }
|
al@822
|
562 }
|
al@822
|
563 END {
|
al@822
|
564 if (goturl == 0)
|
al@822
|
565 printf "WEB_SITE=\"http://rpmfind.net/linux/rpm2html/search.php?query=%s\"\n",name;
|
al@822
|
566 printf "CATEGORY=\"misc\"\n";
|
al@822
|
567 printf "MAINTAINER=\"nobody@slitaz.org\"\n";
|
al@822
|
568 }
|
al@840
|
569 ' > "$TMP_DIR/receipt"
|
al@840
|
570 . "$TMP_DIR/receipt"
|
al@822
|
571 file="$PACKAGE-$VERSION"
|
al@840
|
572 mkdir -p "$TMP_DIR/$file/fs/"
|
al@840
|
573 mv "$TMP_DIR/receipt" "$TMP_DIR/$file"
|
al@822
|
574 rpm -qip "$PACKAGE_FILE" | awk '
|
al@822
|
575 BEGIN { show=0 }
|
al@822
|
576 {
|
al@840
|
577 if (show) print;
|
al@840
|
578 if (/^Description/) show=1;
|
al@822
|
579 }
|
al@840
|
580 ' > "$TMP_DIR/$file/description.txt"
|
al@840
|
581 cd "$TMP_DIR/$file/fs/"
|
al@822
|
582 rpm2cpio "$PACKAGE_FILE" | cpio -idm --quiet
|
al@822
|
583 # rpm2cpio can't extract some new RPMs
|
al@822
|
584 if [ $? -eq 1 ]; then
|
al@840
|
585 if [ ! -e "$INSTALLED/p7zip-full/receipt" ]; then
|
al@822
|
586 boldify "$(_ 'Unable to extract the RPM using standard tools (rpm2cpio).')"
|
al@822
|
587 confirm "$(_n 'Do you want to install "%s" package? (y/N)' 'p7zip-full')"
|
al@822
|
588 if [ $? -eq 0 ]; then
|
al@822
|
589 tazpkg -gi p7zip-full
|
al@822
|
590 else
|
al@840
|
591 rm -rf "$TMP_DIR"
|
al@822
|
592 exit 1
|
al@822
|
593 fi
|
al@822
|
594 fi
|
al@822
|
595 # we may already have 7z or may have just installed it in the step above
|
al@822
|
596 if [ -e "$INSTALLED/p7zip-full/receipt" ]; then
|
al@822
|
597 7z x -so "$PACKAGE_FILE" | cpio -idm --quiet
|
al@822
|
598 fi
|
al@822
|
599 fi
|
al@822
|
600 cd ../..
|
al@892
|
601 echo "DEPENDS=\"$(find_depends .)\"" >> "$TMP_DIR/$file/receipt"
|
al@840
|
602 show_unresolved_lib "$TMP_DIR/$file/receipt"
|
al@840
|
603 tazpkg pack "$file"
|
al@840
|
604 mv "$file.tazpkg" "$TOP_DIR"
|
al@840
|
605 cd "$TOP_DIR"
|
al@840
|
606 rm -rf "$TMP_DIR"
|
al@822
|
607 }
|
al@822
|
608
|
al@822
|
609
|
al@822
|
610 # convert a .xbps package to .tazpkg (http://repo.voidlinux.eu/current/)
|
al@822
|
611
|
al@822
|
612 xbpstag() {
|
al@822
|
613 sed "/<key>$1<\/key>/!d{n;s/.*>\\(.*\\)<.*/\\1/}" \
|
al@822
|
614 < fs/props.plist | sed \$!d
|
al@822
|
615 }
|
al@822
|
616
|
al@822
|
617 convert_xbps() {
|
al@840
|
618 mkdir -p "$TMP_DIR/fs"
|
al@822
|
619 ( xzcat "$PACKAGE_FILE" || bzcat "$PACKAGE_FILE" || zcat "$PACKAGE_FILE" ) | \
|
al@840
|
620 tar -xf - -C "$TMP_DIR/fs"
|
al@822
|
621
|
al@840
|
622 cd "$TMP_DIR"
|
al@840
|
623 HOST_ARCH=$(xbpstag architecture)
|
al@822
|
624 case "$HOST_ARCH" in
|
al@822
|
625 i686) HOST_ARCH='i486';;
|
al@822
|
626 *) _ 'Arch "%s" not supported.' "$HOST_ARCH"
|
al@822
|
627 HOST_ARCH='';;
|
al@822
|
628 esac
|
al@822
|
629
|
al@822
|
630 if [ -n "$HOST_ARCH" ]; then
|
al@840
|
631 package=$(xbpstag pkgname)
|
al@840
|
632 version=$(xbpstag version)
|
al@822
|
633 file="$package-$version"
|
al@840
|
634 mkdir "$file"
|
al@840
|
635 cat > "$file/receipt" <<EOT
|
al@822
|
636 # SliTaz package receipt.
|
al@822
|
637 # generated by tazpkg from package $(basename "$PACKAGE_FILE")
|
al@822
|
638 PACKAGE="$package"
|
al@822
|
639 VERSION="$version"
|
al@822
|
640 CATEGORY="misc"
|
al@822
|
641 SHORT_DESC="$(xbpstag short_desc)"
|
al@822
|
642 WEB_SITE="$(xbpstag homepage)"
|
al@822
|
643 MAINTAINER="$(xbpstag maintainer | sed 's/>/>/;s/</</')"
|
al@822
|
644 LICENSE="$(xbpstag license | sed 's/-//g')"
|
al@822
|
645 HOST_ARCH="$HOST_ARCH"
|
al@822
|
646 CONFIG_FILES="$(sed '/<key>conf_files<\/key>/,/<key>/!d;/array>/d;/<key>/d;s/.*>\(.*\)<.*/\1/' fs/props.plist)"
|
al@822
|
647
|
al@892
|
648 DEPENDS="$(find_depends .)"
|
al@822
|
649
|
al@822
|
650 EOT
|
al@822
|
651 while read script func ; do
|
al@840
|
652 [ -s "fs/$script" ] && cat >> "$file/receipt" <<EOT
|
al@822
|
653 xbps_$func()
|
al@822
|
654 {
|
al@822
|
655 set +e
|
al@840
|
656 $(cat "fs/$script")
|
al@822
|
657 }
|
al@822
|
658
|
al@822
|
659 pre_$func()
|
al@822
|
660 {
|
al@822
|
661 xbps_$func pre $package $version yes /etc/xbps.conf $HOST_ARCH
|
al@822
|
662 }
|
al@822
|
663
|
al@822
|
664 post_$func()
|
al@822
|
665 {
|
al@822
|
666 xbps_$func post $package $version yes /etc/xbps.conf $HOST_ARCH
|
al@822
|
667 }
|
al@822
|
668
|
al@822
|
669 EOT
|
al@840
|
670 rm -f "fs/$script"
|
al@822
|
671 done <<EOT
|
al@822
|
672 INSTALL install
|
al@822
|
673 REMOVE remove
|
al@822
|
674 EOT
|
al@822
|
675 rm -f fs/*.plist
|
al@840
|
676 mv fs "$package-$version"
|
al@840
|
677 tazpkg pack "$package-$version"
|
al@840
|
678 mv "$package-$version.tazpkg" "$TOP_DIR"
|
al@822
|
679 fi
|
al@840
|
680 cd "$TOP_DIR"
|
al@840
|
681 rm -rf "$TMP_DIR"
|
al@822
|
682 }
|
al@822
|
683
|
al@822
|
684
|
al@822
|
685 finish_convert_tinycore() {
|
al@840
|
686 cat > "$file/receipt" <<EOT
|
al@822
|
687 # SliTaz package receipt.
|
al@822
|
688 # generated by tazpkg from tinycore package $(basename "$PACKAGE_FILE")
|
al@822
|
689 PACKAGE="$package"
|
al@822
|
690 VERSION="$version"
|
al@822
|
691 CATEGORY="misc"
|
al@822
|
692 SHORT_DESC="tinycore package $(basename "$PACKAGE_FILE")"
|
al@822
|
693 WEB_SITE="http://tinycorelinux.net/"
|
al@822
|
694 MAINTAINER="nobody@slitaz.org"
|
al@892
|
695 DEPENDS="$(find_depends .)"
|
al@822
|
696 EOT
|
al@840
|
697 show_unresolved_lib "$file/receipt"
|
al@822
|
698 script="$file/fs/usr/local/tce.installed/$PACKAGE"
|
al@840
|
699 [ -f "$script" ] && cat >> "$file/receipt" <<EOM
|
al@822
|
700
|
al@822
|
701 post_install()
|
al@822
|
702 {
|
al@822
|
703 chroot \$1/ sh - << EOT
|
al@822
|
704 cd /
|
al@822
|
705 $(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < $script)
|
al@822
|
706 EOT
|
al@822
|
707 }
|
al@822
|
708 EOM
|
al@822
|
709 [ -d "$file/fs/usr/local/tce.installed" ] &&
|
al@840
|
710 rm -rf "$file/fs/usr/local/tce.installed"
|
al@840
|
711 tazpkg pack "$file"
|
al@840
|
712 mv "$file.tazpkg" "$TOP_DIR"
|
al@840
|
713 cd "$TOP_DIR"
|
al@840
|
714 rm -rf "$TMP_DIR"
|
al@822
|
715 }
|
al@822
|
716
|
al@822
|
717
|
al@822
|
718 # convert a .tce package to .tazpkg
|
al@822
|
719
|
al@822
|
720 convert_tce() {
|
al@822
|
721 if ! tar -tzf "$PACKAGE_FILE" | grep -q ^usr/local ; 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 case "$PACKAGE_FILE" in
|
al@822
|
728 *.tcel) parse_pkgname .tcel ;;
|
al@822
|
729 *.tcem) parse_pkgname .tcem ;;
|
al@822
|
730 *) parse_pkgname .tce ;;
|
al@822
|
731 esac
|
al@840
|
732 mkdir -p "$file/fs"
|
al@840
|
733 tar -xzf "$PACKAGE_FILE" -C "$file/fs"
|
al@822
|
734 finish_convert_tinycore
|
al@822
|
735 }
|
al@822
|
736
|
al@822
|
737
|
al@822
|
738 # convert a .tcz package to .tazpkg
|
al@822
|
739
|
al@822
|
740 convert_tcz() {
|
al@822
|
741 [ -n "$(which unsquashfs)" ] || tazpkg get-install squashfs
|
psychomaniak@908
|
742 if ! unsquashfs -l "$PACKAGE_FILE" | grep -q squashfs-root/ ; then
|
al@822
|
743 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Tinycore'
|
al@822
|
744 return 1
|
al@822
|
745 fi
|
al@840
|
746 mkdir -p "$TMP_DIR"
|
al@840
|
747 cd "$TMP_DIR"
|
al@822
|
748 parse_pkgname .tcz
|
al@822
|
749 unsquashfs "$PACKAGE_FILE"
|
al@840
|
750 mv squashfs-root "$file/fs"
|
al@822
|
751 finish_convert_tinycore
|
al@822
|
752 }
|
al@822
|
753
|
al@822
|
754
|
al@892
|
755
|
al@892
|
756 PACKAGE_FILE="$(realpath "$PACKAGE_FILE")"
|
al@892
|
757 debug "PACKAGE_FILE='$PACKAGE_FILE'"
|
pascal@972
|
758 if [ "$(dd if="$PACKAGE_FILE" bs=8 count=1 skip=1 2>/dev/null)" = 'debian-b' ]; then
|
al@822
|
759 convert_deb
|
al@822
|
760 else
|
al@822
|
761 case "$PACKAGE_FILE" in
|
al@822
|
762 *.deb|*.udeb) convert_deb;;
|
al@822
|
763 *.rpm) convert_rpm;;
|
al@822
|
764 *.sb) convert_sb;;
|
al@822
|
765 *.sfs) convert_sfs;;
|
al@822
|
766 *.pet) convert_pet;;
|
al@840
|
767 *.txz|*.tgz) convert_tgz;;
|
al@822
|
768 *.cards.tar.xz) convert_nutyx;;
|
al@822
|
769 *.apk|*.pkg.tar.gz|*.pkg.tar.xz) convert_arch;;
|
al@822
|
770 *.ipk|*.opk) convert_ipk;;
|
al@822
|
771 *.spack) convert_spack;;
|
al@822
|
772 *.tar.bz2) convert_upkg;;
|
al@822
|
773 *.xbps) convert_xbps;;
|
al@822
|
774 *.tce|*.tcel|*.tcem) convert_tce;;
|
al@822
|
775 *.tcz) convert_tcz;;
|
al@822
|
776 *) _ 'Unsupported format';;
|
al@822
|
777 esac
|
al@822
|
778 fi
|
al@822
|
779
|
al@822
|
780 exit 0
|