tazpkg annotate modules/flavor @ 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 | |
children | 0560ba4306a1 |
rev | line source |
---|---|
al@840 | 1 #!/bin/sh |
al@840 | 2 # TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg |
al@840 | 3 # flavor - TazPkg module |
al@840 | 4 # Install package-list from a flavor |
al@840 | 5 |
al@840 | 6 |
al@840 | 7 # Connect function libraries |
al@840 | 8 . /lib/libtaz.sh |
al@840 | 9 |
al@840 | 10 # Get TazPkg working environment |
al@840 | 11 . @@MODULES@@/getenv |
al@840 | 12 |
al@840 | 13 alias cpio='busybox cpio' |
al@840 | 14 |
al@840 | 15 |
al@840 | 16 |
al@840 | 17 |
al@840 | 18 # Get repositories priority using $PKGS_DB/priority. |
al@840 | 19 # In this file undigest repos are called by their names and main mirror |
al@840 | 20 # by 'main'. Sort order: priority |
al@840 | 21 |
al@840 | 22 look_for_priority() { |
al@840 | 23 [ -s "$PKGS_DB/priority" ] && priority=$(cat "$PKGS_DB/priority") |
al@840 | 24 |
al@840 | 25 for rep in main $(ls "$PKGS_DB/undigest" 2>/dev/null); do |
al@840 | 26 if [ ! -s "$PKGS_DB/priority" ] || ! grep -q "^$rep$" "$PKGS_DB/priority"; then |
al@840 | 27 priority=$(echo -e "$priority\n$rep") |
al@840 | 28 fi |
al@840 | 29 done |
al@840 | 30 |
al@840 | 31 priority=$(echo "$priority" | sed '/^$/d' | \ |
al@840 | 32 while read line; do |
al@840 | 33 case $line in |
al@840 | 34 (main) echo "$PKGS_DB";; |
al@840 | 35 (*) echo "$PKGS_DB/undigest/$line";; |
al@840 | 36 esac |
al@840 | 37 done) |
al@840 | 38 } |
al@840 | 39 |
al@840 | 40 |
al@840 | 41 # Download a file from this mirror |
al@840 | 42 |
al@840 | 43 download_from() { |
al@840 | 44 case "$1" in |
al@840 | 45 # Mirror URL can have a trailing slash or not. |
al@840 | 46 http://* | https://* | ftp://*) |
al@840 | 47 busybox wget -c -q -T 30 -U $UA ${1%/}/$2 2>/dev/null && break ;; |
al@840 | 48 *) |
al@840 | 49 ln -sf ${1%/}/$2 . && break ;; |
al@840 | 50 esac |
al@840 | 51 } |
al@840 | 52 |
al@840 | 53 |
al@840 | 54 # Download a file trying all mirrors |
al@840 | 55 |
al@840 | 56 download() { |
al@840 | 57 # input: <package_name>-<version>.tazpkg |
al@840 | 58 local i |
al@840 | 59 case "$1" in |
al@840 | 60 *.tazpkg) |
al@840 | 61 for i in $priority; do |
al@840 | 62 if [ -n "$(awk -F$'\t' -vp="$1" 'p==$1"-"$2".tazpkg"{print $1}' \ |
al@840 | 63 "$i/packages.info")" ]; then |
al@840 | 64 download_from "$(cat $i/mirror)" "$@" && return |
al@840 | 65 fi |
al@840 | 66 done |
al@840 | 67 ;; |
al@840 | 68 esac |
al@840 | 69 |
al@840 | 70 for i in $(cat $(for rep in $priority; do echo $rep/mirror; done) 2>/dev/null); do |
al@840 | 71 download_from "$i" "$@" && break |
al@840 | 72 done |
al@840 | 73 } |
al@840 | 74 |
al@840 | 75 |
al@840 | 76 |
al@840 | 77 |
al@840 | 78 # Get repositories priority list. |
al@840 | 79 look_for_priority |
al@840 | 80 |
al@840 | 81 FLAVOR="$1" |
al@840 | 82 TMP_DIR=$(mktemp -d) |
al@840 | 83 |
al@840 | 84 [ -f "$FLAVOR.flavor" ] && cp "$FLAVOR.flavor" "$TMP_DIR" |
al@840 | 85 |
al@840 | 86 cd "$TMP_DIR" |
al@840 | 87 if [ -f "$FLAVOR.flavor" ] || download "$FLAVOR.flavor"; then |
al@840 | 88 zcat < "$FLAVOR.flavor" | cpio --quiet -i >/dev/null |
al@840 | 89 |
al@840 | 90 while read file; do |
al@840 | 91 # 'file' here in form 'package-version' |
al@840 | 92 is_installed=$(awk -F$'\t' -vf="$file" '$1 "-" $2 == f {print 1}' "$PKGS_DB/installed.info") |
al@840 | 93 [ -n "$is_installed" ] && continue |
al@840 | 94 |
al@840 | 95 # Install package if it not installed or has a different version |
al@840 | 96 cd "$CACHE_DIR" |
al@840 | 97 download "$file.tazpkg" |
al@840 | 98 cd "$TMP_DIR" |
al@840 | 99 tazpkg install "$CACHE_DIR/$file.tazpkg" --forced |
al@840 | 100 done < "$FLAVOR.pkglist" |
al@840 | 101 |
al@840 | 102 [ -f "$FLAVOR.nonfree" ] && \ |
al@840 | 103 while read pkg; do |
al@840 | 104 [ -d "$INSTALLED/$pkg" ] && continue |
al@840 | 105 [ ! -d "$INSTALLED/get-$pkg" ] && tazpkg get-install get-$pkg |
al@840 | 106 get-$pkg |
al@840 | 107 done < "$FLAVOR.nonfree" |
al@840 | 108 |
al@840 | 109 # Option "--purge" |
al@840 | 110 [ -n "$purge" ] && \ |
al@840 | 111 for pkg in $(awk -F$'\t' '{printf "%s:%s ", $1, $2}' "$PKGS_DB/installed.info"); do |
al@840 | 112 # If installed 'package-version' listed in 'pkglist' |
al@840 | 113 grep -q "^${pkg/:/-}$" "$FLAVOR.pkglist" && continue |
al@840 | 114 # If installed 'package' listed in 'nonfree' |
al@840 | 115 grep -qs "^${pkg%:*}$" "$FLAVOR.nonfree" && continue |
al@840 | 116 # Remove other packages |
al@840 | 117 tazpkg remove "${pkg%:*}" |
al@840 | 118 done |
al@840 | 119 else |
al@840 | 120 _ "Can't find flavor \"%s\". Abort." "$FLAVOR" |
al@840 | 121 fi |
al@840 | 122 cd "$TOP_DIR" |
al@840 | 123 rm -rf "$TMP_DIR" |