spk annotate spk-up @ rev 87
spk-up: recharge list by default
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Thu May 24 22:12:53 2012 +0200 (2012-05-24) |
parents | b33832c00a1a |
children | 51329da37c52 |
rev | line source |
---|---|
pankso@81 | 1 #!/bin/sh |
pankso@81 | 2 # |
pankso@81 | 3 # Spk-up - Update packages. Read the README before adding or |
pankso@81 | 4 # modifing any code in spk! |
pankso@81 | 5 # |
pankso@81 | 6 # Copyright (C) SliTaz GNU/Linux - BSD License |
pankso@81 | 7 # Author: See AUTHORS files |
pankso@81 | 8 # |
pankso@81 | 9 . /usr/lib/slitaz/libspk.sh |
pankso@81 | 10 |
pankso@81 | 11 # |
pankso@81 | 12 # Functions |
pankso@81 | 13 # |
pankso@81 | 14 |
pankso@81 | 15 # Help and usage |
pankso@81 | 16 usage() { |
pankso@81 | 17 name=$(basename $0) |
pankso@81 | 18 cat << EOT |
pankso@81 | 19 |
pankso@81 | 20 $(boldify $(gettext "Usage:")) $name [packages|--options] |
pankso@81 | 21 |
pankso@81 | 22 $(gettext "Update packages lists and upgrade the system") |
pankso@81 | 23 |
pankso@81 | 24 $(boldify $(gettext "Options:")) |
pankso@81 | 25 --list $(gettext "Recharges the packages lists") |
pankso@81 | 26 --add $(gettext "Install upgrade automaticaly") |
pankso@81 | 27 --forced $(gettext "Force recharging the lists") |
pankso@81 | 28 --mirror= $(gettext "Specify a mirror to check") |
pankso@81 | 29 |
pankso@81 | 30 $(boldify $(gettext "Examples:")) |
pankso@81 | 31 $name package1 package2 |
pankso@81 | 32 $name --list --forced --mirror=main |
pankso@81 | 33 |
pankso@81 | 34 EOT |
pankso@81 | 35 exit 0 |
pankso@81 | 36 } |
pankso@81 | 37 |
pankso@81 | 38 # Headers fo system or packages update |
pankso@81 | 39 up_headers() { |
pankso@81 | 40 newline |
pankso@81 | 41 boldify $(gettext "Package") \ |
pankso@81 | 42 $(echo -n $(indent 28 $(gettext "Version"))) \ |
pankso@81 | 43 $(echo -n $(indent 48 $(gettext "Status"))) \ |
pankso@81 | 44 $(echo -n $(indent 68 $(gettext "Mirror"))) |
pankso@81 | 45 separator |
pankso@81 | 46 } |
pankso@81 | 47 |
pankso@81 | 48 # Recharges all list from one mirror or all mirrors |
pankso@81 | 49 recharge_lists() { |
pankso@81 | 50 check_root |
pankso@81 | 51 newline |
pankso@81 | 52 boldify $(gettext "Updating packages lists") |
pankso@81 | 53 separator |
pankso@81 | 54 check="$extradb/*/mirror $PKGS_DB/mirror" |
pankso@81 | 55 if [ "$mirror" ]; then |
pankso@81 | 56 check=$extradb/$mirror/mirror |
pankso@81 | 57 [ "$mirror" == "main" ] && check=$PKGS_DB/mirror |
pankso@81 | 58 fi |
pankso@81 | 59 for mirror in $check; do |
pankso@81 | 60 [ -f "$mirror" ] || continue |
pankso@81 | 61 # Skip local mirror |
pankso@81 | 62 [ ! $(readlink $(dirname $mirror)/packages.desc) ] || continue |
pankso@81 | 63 # Get want a mirror name and download url |
pankso@81 | 64 name=$(basename $(dirname $mirror)) |
pankso@81 | 65 url=$(cat $mirror) |
pankso@81 | 66 lists="packages.list packages.md5 packages.desc packages.equiv files.list.lzma" |
pankso@81 | 67 [ "$(dirname $mirror)" == "$PKGS_DB" ] && name="main" |
pankso@81 | 68 [ "$quiet" ] && quiet="-q" |
pankso@81 | 69 |
pankso@81 | 70 gettext "Checking mirror:"; colorize 34 " $name" |
pankso@81 | 71 cd $(dirname $mirror) |
pankso@81 | 72 |
pankso@81 | 73 # ID |
pankso@81 | 74 [ -f "ID" ] || echo "$$" > ID |
pankso@81 | 75 mv ID ID.bak |
pankso@81 | 76 wget -q ${url%/}/ID |
pankso@81 | 77 debug "ID: $(cat ID)" |
pankso@81 | 78 debug "ID.bak: $(cat ID.bak)" |
pankso@81 | 79 if [ $(cat ID) == $(cat ID.bak) ] && [ ! "$forced" ]; then |
pankso@81 | 80 gettext "Mirror is up-to-date"; newline |
pankso@81 | 81 continue |
pankso@81 | 82 fi |
pankso@81 | 83 |
pankso@81 | 84 # Backup and get all lists |
pankso@81 | 85 for list in $lists |
pankso@81 | 86 do |
pankso@81 | 87 [ -f "$list" ] && cp -f $list $list.bak |
pankso@81 | 88 debug "url: ${url%/}/$list" |
pankso@81 | 89 rm -f $list |
pankso@81 | 90 busybox wget $quiet ${url%/}/$list |
pankso@81 | 91 done |
pankso@81 | 92 done |
pankso@81 | 93 separator |
pankso@81 | 94 newline |
pankso@81 | 95 } |
pankso@81 | 96 |
pankso@81 | 97 # Repo priority: local, extras then official |
pankso@81 | 98 priority() { |
pankso@81 | 99 extras=$(ls $extradb | sed s"/local//") |
pankso@81 | 100 for i in $extras; do |
pankso@81 | 101 extras="$extradb/$i" |
pankso@81 | 102 done |
pankso@83 | 103 [ -d "$extradb/local" ] && local="$extradb/local" |
pankso@83 | 104 echo "$local $extras $PKGS_DB" |
pankso@81 | 105 } |
pankso@81 | 106 |
pankso@81 | 107 # Types: blocked, new build or new version |
pankso@81 | 108 up_type() { |
pankso@81 | 109 # Jump to next repository if pkg doesn't exists in this one. |
pankso@81 | 110 grep -q "^$PACKAGE |" $dbdesc || continue |
pankso@81 | 111 |
pankso@81 | 112 echo -n "$PACKAGE" |
pankso@81 | 113 echo -n $(indent 28 "$VERSION") |
pankso@81 | 114 |
pankso@81 | 115 # Blocked |
pankso@81 | 116 if $(grep -qs "^$PACKAGE" $blocked); then |
pankso@81 | 117 blocked_count=$(($blocked_count + 1)) |
pankso@81 | 118 echo -n $(colorize 31 $(indent 48 $(gettext "Blocked"))) |
pankso@81 | 119 indent 68 "$reponame" |
pankso@81 | 120 break |
pankso@81 | 121 fi |
pankso@81 | 122 |
pankso@81 | 123 new=$(grep "^$PACKAGE |" $dbdesc | awk '{print $3}') |
pankso@81 | 124 |
pankso@81 | 125 if [ "$VERSION" == "$new" ]; then |
pankso@81 | 126 build_count=$(($build_count + 1)) |
pankso@81 | 127 echo -n $(colorize 34 $(indent 48 $(gettext "New build"))) |
pankso@81 | 128 else |
pankso@81 | 129 echo -n $(colorize 32 $(indent 48 $(gettext "New") $new)) |
pankso@81 | 130 fi |
pankso@81 | 131 indent 68 "$reponame" |
pankso@81 | 132 echo "$PACKAGE" >> $pkgsup |
pankso@81 | 133 } |
pankso@81 | 134 |
pankso@81 | 135 # Check if we have an upgrade for a package |
pankso@81 | 136 check_pkgup() { |
pankso@81 | 137 unset_receipt |
pankso@81 | 138 . $pkg/receipt |
pankso@82 | 139 localdb=$extradb/local |
pankso@81 | 140 sum=$(fgrep " $PACKAGE-${VERSION}$EXTRAVERSION.tazpkg" \ |
pankso@81 | 141 $installed.$SUM | awk '{print $1}') |
pankso@81 | 142 |
pankso@81 | 143 # Skip up-to-date local packages |
pankso@83 | 144 if [ -d "$localdb" ] && fgrep -q "$sum $PACKAGE-" $localdb/packages.$SUM; then |
pankso@82 | 145 reponame=$(gettext "Local") |
pankso@82 | 146 return 0 |
pankso@81 | 147 fi |
pankso@81 | 148 |
pankso@81 | 149 for repo in $(priority); do |
pankso@81 | 150 dbdesc=$repo/packages.desc |
pankso@81 | 151 dbsum=$repo/packages.$SUM |
pankso@81 | 152 |
pankso@82 | 153 # Mirror name |
pankso@82 | 154 case $repo in |
pankso@82 | 155 $PKGS_DB) reponame=$(gettext "Official") ;; |
pankso@82 | 156 *) reponame=$(gettext "Extra") ;; |
pankso@82 | 157 esac |
pankso@82 | 158 # Overwrite: Local have priority |
pankso@83 | 159 if [ -d "$localdb" ] && fgrep -q "$sum $PACKAGE-" $localdb/packages.$SUM; then |
pankso@82 | 160 reponame=$(gettext "Local") |
pankso@82 | 161 fi |
pankso@82 | 162 |
pankso@81 | 163 # Sum match or not ? |
pankso@81 | 164 if ! fgrep -q "$sum $PACKAGE-" $dbsum; then |
pankso@81 | 165 up_type |
pankso@81 | 166 break |
pankso@81 | 167 fi |
pankso@81 | 168 done |
pankso@81 | 169 } |
pankso@81 | 170 |
pankso@81 | 171 # Log and install an upgradable package. |
pankso@81 | 172 install_up() { |
pankso@81 | 173 mirrored_pkg $pkg |
pankso@81 | 174 vers=$(echo "$mirrored" | awk '{print $3}') |
pankso@81 | 175 mkdir -p $logdir/$pkg |
pankso@81 | 176 echo "$(date '+%Y-%m-%d %H:%M') : Upgrade to $vers" >> $logdir/$pkg/up.log |
pankso@81 | 177 spk-add $pkg --forced |
pankso@81 | 178 } |
pankso@81 | 179 |
pankso@81 | 180 # |
pankso@81 | 181 # Handle packages and --options |
pankso@81 | 182 # |
pankso@81 | 183 |
pankso@81 | 184 count=0 |
pankso@81 | 185 |
pankso@81 | 186 for arg in $@ |
pankso@81 | 187 do |
pankso@81 | 188 case "$arg" in |
pankso@81 | 189 *usage|*help) usage ;; |
pankso@81 | 190 --list) recharge_lists && exit 0 ;; |
pankso@81 | 191 --*) continue ;; |
pankso@81 | 192 *) |
pankso@81 | 193 pkg=$arg |
pankso@81 | 194 system=no |
pankso@81 | 195 [ "$count" == 0 ] && up_headers |
pankso@81 | 196 if [ -f "$installed/$pkg/receipt" ]; then |
pankso@81 | 197 count=$(($count +1)) |
pankso@81 | 198 cd $installed |
pankso@82 | 199 . $pkg/receipt |
pankso@81 | 200 check=$(check_pkgup) |
pankso@81 | 201 if [ "$check" != "" ]; then |
pankso@81 | 202 echo "$check" |
pankso@81 | 203 [ "$add" ] && install_up |
pankso@81 | 204 else |
pankso@82 | 205 echo -n "$pkg" |
pankso@82 | 206 echo -n $(indent 28 "$VERSION") |
pankso@82 | 207 echo -n $(colorize 32 $(indent 48 $(gettext "up-to-date"))) |
pankso@82 | 208 check_pkgup |
pankso@82 | 209 indent 68 "$reponame" |
pankso@81 | 210 fi |
pankso@81 | 211 fi ;; |
pankso@81 | 212 esac |
pankso@81 | 213 done |
pankso@81 | 214 |
pankso@81 | 215 # Skip system-wide upgrade if some packages was updated individually. |
pankso@81 | 216 if [ "$system" ]; then |
pankso@81 | 217 [ "$add" ] || newline |
pankso@81 | 218 exit 0 |
pankso@81 | 219 fi |
pankso@81 | 220 |
pankso@81 | 221 # |
pankso@81 | 222 # Check all mirrors list and upgrade system. |
pankso@81 | 223 # |
pankso@81 | 224 |
pankso@81 | 225 time=$(date +%s) |
pankso@81 | 226 build_count=0 |
pankso@81 | 227 blocked_count=0 |
pankso@81 | 228 |
pankso@87 | 229 recharge_lists |
pankso@81 | 230 up_headers |
pankso@81 | 231 cd $installed |
pankso@81 | 232 newline > $pkgsup |
pankso@81 | 233 |
pankso@81 | 234 # Check all installed packages |
pankso@81 | 235 for pkg in * |
pankso@81 | 236 do |
pankso@81 | 237 check_pkgup |
pankso@81 | 238 done |
pankso@81 | 239 |
pankso@81 | 240 # Remove empty line and count |
pankso@81 | 241 sed -i /^$/d $pkgsup |
pankso@81 | 242 upnb=$(cat $pkgsup | wc -l) |
pankso@81 | 243 pkgs=$(ls | wc -l) |
pankso@81 | 244 time=$(($(date +%s) - $time)) |
pankso@81 | 245 |
pankso@84 | 246 if [ "$upnb" == 0 ] && [ "$blocked_count" == 0 ]; then |
pankso@81 | 247 gettext "System is up-to-date..."; newline |
pankso@81 | 248 fi |
pankso@81 | 249 separator |
pankso@81 | 250 echo -n "$pkgs "; gettext "installed packages scanned in"; echo " ${time}s" |
pankso@81 | 251 newline |
pankso@81 | 252 |
pankso@81 | 253 # Summary |
pankso@81 | 254 boldify $(gettext "Packages upgrade summary") |
pankso@81 | 255 separator |
pankso@81 | 256 gettext "New version :"; colorize 32 " $(($upnb - $build_count))" |
pankso@81 | 257 gettext "New build :"; colorize 34 " $build_count" |
pankso@81 | 258 gettext "Blocked :"; colorize 31 " $blocked_count" |
pankso@81 | 259 separator |
pankso@81 | 260 newline |
pankso@81 | 261 |
pankso@81 | 262 # Pkgs to upgrade ? Skip, let --add/--install them all or ask user |
pankso@81 | 263 if [ "$upnb" -gt 0 ]; then |
pankso@81 | 264 if [ "$add" ] || [ "$install" ]; then |
pankso@81 | 265 continue |
pankso@81 | 266 else |
pankso@81 | 267 gettext "Do you wish to upgrade now" |
pankso@81 | 268 if ! confirm; then |
pankso@81 | 269 gettext "Upgrade cancelled" |
pankso@81 | 270 echo -e "\n" && exit 0 |
pankso@81 | 271 fi |
pankso@81 | 272 fi |
pankso@81 | 273 # Install and log all upgrade |
pankso@81 | 274 for pkg in $(cat $pkgsup) |
pankso@81 | 275 do |
pankso@81 | 276 install_up |
pankso@81 | 277 done |
pankso@81 | 278 # List is generated each time and must be cleaned so |
pankso@81 | 279 # tazpkg-notify dont find upgrade anymore. |
pankso@81 | 280 rm $pkgsup && touch $pkgsup |
pankso@81 | 281 newline |
pankso@81 | 282 gettext "Handeled upgrades:"; colorize 32 " $upnb" |
pankso@81 | 283 newline |
pankso@81 | 284 fi |
pankso@81 | 285 |
pankso@81 | 286 exit 0 |