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