tazpkg view modules/flavor @ rev 842
tazpkg: internal command 'call ...' to call tazpkg functions from modules (to share functions between tazpkg and its modules)
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Wed Sep 02 03:31:47 2015 +0300 (2015-09-02) |
parents | a02e36d44d06 |
children | d6cbd0c5f273 |
line source
1 #!/bin/sh
2 # TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg
3 # flavor - TazPkg module
4 # Install package-list from a flavor
7 # Connect function libraries
8 . /lib/libtaz.sh
10 # Get TazPkg working environment
11 . @@MODULES@@/getenv
13 alias cpio='busybox cpio'
18 # Download a file from this mirror
20 download_from() {
21 case "$1" in
22 # Mirror URL can have a trailing slash or not.
23 http://* | https://* | ftp://*)
24 busybox wget -c -q -T 30 -U $UA ${1%/}/$2 2>/dev/null && break ;;
25 *)
26 ln -sf ${1%/}/$2 . && break ;;
27 esac
28 }
31 # Download a file trying all mirrors
33 download() {
34 # input: <package_name>-<version>.tazpkg
35 local i
36 case "$1" in
37 *.tazpkg)
38 for i in $priority; do
39 if [ -n "$(awk -F$'\t' -vp="$1" 'p==$1"-"$2".tazpkg"{print $1}' \
40 "$i/packages.info")" ]; then
41 download_from "$(cat $i/mirror)" "$@" && return
42 fi
43 done
44 ;;
45 esac
47 for i in $(cat $(for rep in $priority; do echo $rep/mirror; done) 2>/dev/null); do
48 download_from "$i" "$@" && break
49 done
50 }
55 # Get repositories priority list.
56 priority=$(tazpkg call look_for_priority)
58 FLAVOR="$1"
59 TMP_DIR=$(mktemp -d)
61 [ -f "$FLAVOR.flavor" ] && cp "$FLAVOR.flavor" "$TMP_DIR"
63 cd "$TMP_DIR"
64 if [ -f "$FLAVOR.flavor" ] || download "$FLAVOR.flavor"; then
65 zcat < "$FLAVOR.flavor" | cpio --quiet -i >/dev/null
67 while read file; do
68 # 'file' here in form 'package-version'
69 is_installed=$(awk -F$'\t' -vf="$file" '$1 "-" $2 == f {print 1}' "$PKGS_DB/installed.info")
70 [ -n "$is_installed" ] && continue
72 # Install package if it not installed or has a different version
73 cd "$CACHE_DIR"
74 download "$file.tazpkg"
75 cd "$TMP_DIR"
76 tazpkg install "$CACHE_DIR/$file.tazpkg" --forced
77 done < "$FLAVOR.pkglist"
79 [ -f "$FLAVOR.nonfree" ] && \
80 while read pkg; do
81 [ -d "$INSTALLED/$pkg" ] && continue
82 [ ! -d "$INSTALLED/get-$pkg" ] && tazpkg get-install get-$pkg
83 get-$pkg
84 done < "$FLAVOR.nonfree"
86 # Option "--purge"
87 [ -n "$purge" ] && \
88 for pkg in $(awk -F$'\t' '{printf "%s:%s ", $1, $2}' "$PKGS_DB/installed.info"); do
89 # If installed 'package-version' listed in 'pkglist'
90 grep -q "^${pkg/:/-}$" "$FLAVOR.pkglist" && continue
91 # If installed 'package' listed in 'nonfree'
92 grep -qs "^${pkg%:*}$" "$FLAVOR.nonfree" && continue
93 # Remove other packages
94 tazpkg remove "${pkg%:*}"
95 done
96 else
97 _ "Can't find flavor \"%s\". Abort." "$FLAVOR"
98 fi
99 cd "$TOP_DIR"
100 rm -rf "$TMP_DIR"