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"