spk annotate spk-up @ rev 143
Add desktop files for spk-dialog and spk.png
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Sun Apr 06 22:29:47 2014 +0200 (2014-04-06) |
parents | 365a7811faf7 |
children | 4b6165102b44 |
rev | line source |
---|---|
pankso@81 | 1 #!/bin/sh |
pankso@81 | 2 # |
pankso@81 | 3 # Spk-up - Update packages. Read the README before adding or |
paul@131 | 4 # modifying 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 |
meshca@104 | 53 local 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 |
meshca@104 | 136 source_receipt $pkg/receipt |
pankso@82 | 137 localdb=$extradb/local |
pankso@132 | 138 case "$SLITAZ_ARCH" in |
pankso@132 | 139 arm*|x86_64) |
pankso@132 | 140 pkgfile="$PACKAGE-${VERSION}$EXTRAVERSION-$SLITAZ_ARCH.tazpkg" ;; |
pankso@132 | 141 *) |
pankso@132 | 142 pkgfile="$PACKAGE-${VERSION}$EXTRAVERSION.tazpkg" ;; |
pankso@132 | 143 esac |
pankso@132 | 144 sum=$(fgrep " $pkgfile" $installed.$SUM | awk '{print $1}') |
pankso@81 | 145 |
pankso@81 | 146 # Skip up-to-date local packages |
pankso@83 | 147 if [ -d "$localdb" ] && fgrep -q "$sum $PACKAGE-" $localdb/packages.$SUM; then |
pankso@82 | 148 reponame=$(gettext "Local") |
pankso@82 | 149 return 0 |
pankso@81 | 150 fi |
pankso@81 | 151 |
pankso@81 | 152 for repo in $(priority); do |
pankso@81 | 153 dbdesc=$repo/packages.desc |
pankso@81 | 154 dbsum=$repo/packages.$SUM |
pankso@81 | 155 |
pankso@82 | 156 # Mirror name |
pankso@82 | 157 case $repo in |
pankso@82 | 158 $PKGS_DB) reponame=$(gettext "Official") ;; |
pankso@95 | 159 $localdb) reponame=$(gettext "Local") ;; |
pankso@82 | 160 *) reponame=$(gettext "Extra") ;; |
pankso@82 | 161 esac |
paul@98 | 162 # Overwrite: Local has priority |
pankso@95 | 163 #if [ -d "$localdb" ] && fgrep -q "$sum $PACKAGE-" $localdb/packages.$SUM; then |
pankso@95 | 164 #reponame=$(gettext "Local") |
pankso@95 | 165 #fi |
pankso@82 | 166 |
pankso@81 | 167 # Sum match or not ? |
pankso@81 | 168 if ! fgrep -q "$sum $PACKAGE-" $dbsum; then |
pankso@81 | 169 up_type |
pankso@81 | 170 break |
pankso@81 | 171 fi |
pankso@81 | 172 done |
pankso@81 | 173 } |
pankso@81 | 174 |
pankso@81 | 175 # Log and install an upgradable package. |
pankso@81 | 176 install_up() { |
pankso@81 | 177 mirrored_pkg $pkg |
pankso@81 | 178 vers=$(echo "$mirrored" | awk '{print $3}') |
pankso@81 | 179 mkdir -p $logdir/$pkg |
pankso@81 | 180 echo "$(date '+%Y-%m-%d %H:%M') : Upgrade to $vers" >> $logdir/$pkg/up.log |
pankso@81 | 181 spk-add $pkg --forced |
pankso@81 | 182 } |
pankso@81 | 183 |
pankso@81 | 184 # |
pankso@81 | 185 # Handle packages and --options |
pankso@81 | 186 # |
pankso@81 | 187 |
pankso@81 | 188 count=0 |
pankso@81 | 189 |
pankso@81 | 190 for arg in $@ |
pankso@81 | 191 do |
pankso@81 | 192 case "$arg" in |
pankso@81 | 193 *usage|*help) usage ;; |
pankso@94 | 194 --list) |
pankso@94 | 195 check_root |
pankso@94 | 196 recharge_lists |
pankso@92 | 197 newline && exit 0 ;; |
pankso@81 | 198 --*) continue ;; |
pankso@81 | 199 *) |
pankso@94 | 200 pkg="$arg" |
pankso@81 | 201 system=no |
pankso@94 | 202 check_root |
pankso@81 | 203 [ "$count" == 0 ] && up_headers |
meshca@104 | 204 if is_package_installed $pkg; then |
pankso@81 | 205 count=$(($count +1)) |
pankso@81 | 206 cd $installed |
meshca@104 | 207 source_receipt $pkg/receipt |
pankso@81 | 208 check=$(check_pkgup) |
pankso@81 | 209 if [ "$check" != "" ]; then |
pankso@81 | 210 echo "$check" |
pankso@81 | 211 [ "$add" ] && install_up |
pankso@81 | 212 else |
pankso@82 | 213 echo -n "$pkg" |
pankso@82 | 214 echo -n $(indent 28 "$VERSION") |
pankso@82 | 215 echo -n $(colorize 32 $(indent 48 $(gettext "up-to-date"))) |
pankso@82 | 216 check_pkgup |
pankso@82 | 217 indent 68 "$reponame" |
pankso@81 | 218 fi |
pankso@81 | 219 fi ;; |
pankso@81 | 220 esac |
pankso@81 | 221 done |
pankso@81 | 222 |
pankso@81 | 223 # Skip system-wide upgrade if some packages was updated individually. |
pankso@81 | 224 if [ "$system" ]; then |
pankso@81 | 225 [ "$add" ] || newline |
pankso@81 | 226 exit 0 |
pankso@81 | 227 fi |
pankso@81 | 228 |
pankso@81 | 229 # |
pankso@81 | 230 # Check all mirrors list and upgrade system. |
pankso@81 | 231 # |
pankso@81 | 232 |
pankso@81 | 233 time=$(date +%s) |
pankso@81 | 234 build_count=0 |
pankso@81 | 235 blocked_count=0 |
pankso@81 | 236 |
pankso@94 | 237 check_root |
pankso@87 | 238 recharge_lists |
pankso@81 | 239 up_headers |
pankso@81 | 240 cd $installed |
pankso@81 | 241 newline > $pkgsup |
pankso@81 | 242 |
pankso@81 | 243 # Check all installed packages |
pankso@81 | 244 for pkg in * |
pankso@81 | 245 do |
pankso@81 | 246 check_pkgup |
pankso@81 | 247 done |
pankso@81 | 248 |
pankso@81 | 249 # Remove empty line and count |
pankso@81 | 250 sed -i /^$/d $pkgsup |
pankso@81 | 251 upnb=$(cat $pkgsup | wc -l) |
pankso@81 | 252 pkgs=$(ls | wc -l) |
pankso@81 | 253 time=$(($(date +%s) - $time)) |
pankso@81 | 254 |
pankso@84 | 255 if [ "$upnb" == 0 ] && [ "$blocked_count" == 0 ]; then |
pankso@81 | 256 gettext "System is up-to-date..."; newline |
pankso@81 | 257 fi |
pankso@81 | 258 separator |
pankso@81 | 259 echo -n "$pkgs "; gettext "installed packages scanned in"; echo " ${time}s" |
pankso@81 | 260 newline |
pankso@81 | 261 |
pankso@81 | 262 # Summary |
pankso@81 | 263 boldify $(gettext "Packages upgrade summary") |
pankso@81 | 264 separator |
pankso@81 | 265 gettext "New version :"; colorize 32 " $(($upnb - $build_count))" |
pankso@81 | 266 gettext "New build :"; colorize 34 " $build_count" |
pankso@81 | 267 gettext "Blocked :"; colorize 31 " $blocked_count" |
pankso@81 | 268 separator |
pankso@81 | 269 newline |
pankso@81 | 270 |
pankso@81 | 271 # Pkgs to upgrade ? Skip, let --add/--install them all or ask user |
pankso@81 | 272 if [ "$upnb" -gt 0 ]; then |
pankso@81 | 273 if [ "$add" ] || [ "$install" ]; then |
pankso@81 | 274 continue |
pankso@81 | 275 else |
pankso@81 | 276 gettext "Do you wish to upgrade now" |
pankso@81 | 277 if ! confirm; then |
pankso@81 | 278 gettext "Upgrade cancelled" |
pankso@81 | 279 echo -e "\n" && exit 0 |
pankso@81 | 280 fi |
pankso@81 | 281 fi |
pankso@81 | 282 # Install and log all upgrade |
pankso@81 | 283 for pkg in $(cat $pkgsup) |
pankso@81 | 284 do |
pankso@81 | 285 install_up |
pankso@81 | 286 done |
pankso@81 | 287 # List is generated each time and must be cleaned so |
paul@98 | 288 # tazpkg-notify doesn't find upgrades anymore. |
pankso@81 | 289 rm $pkgsup && touch $pkgsup |
pankso@81 | 290 newline |
paul@98 | 291 gettext "Handled upgrades:"; colorize 32 " $upnb" |
pankso@81 | 292 newline |
pankso@81 | 293 fi |
pankso@81 | 294 |
pankso@81 | 295 exit 0 |