spk annotate spk-mirror @ rev 70
small clean
author | Christian Mesh <meshca@clarkson.edu> |
---|---|
date | Sat May 19 04:59:02 2012 -0500 (2012-05-19) |
parents | 0cb21eb5cf20 |
children | f98429058c26 |
rev | line source |
---|---|
pankso@61 | 1 #!/bin/sh |
pankso@61 | 2 # |
pankso@61 | 3 # Spk-mirror - Handle SliTaz packages mirrors. Read the README before |
pankso@61 | 4 # adding or modifing any code in spk! |
pankso@61 | 5 # |
pankso@61 | 6 # Copyright (C) SliTaz GNU/Linux - BSD License |
pankso@61 | 7 # Author: See AUTHORS files |
pankso@61 | 8 # |
pankso@61 | 9 . /usr/lib/slitaz/libspk.sh |
pankso@61 | 10 |
pankso@61 | 11 # NOTE: I want to use 'extra' mirrors since we can add any extra mirror |
pankso@61 | 12 # URL's and not only undigest. See also undigest command - Pankso |
pankso@61 | 13 |
pankso@61 | 14 # |
pankso@61 | 15 # Functions |
pankso@61 | 16 # |
pankso@61 | 17 |
pankso@61 | 18 # Help and usage |
pankso@61 | 19 usage() { |
pankso@61 | 20 name=$(basename $0) |
pankso@61 | 21 cat << EOT |
pankso@61 | 22 |
pankso@61 | 23 $(boldify $(gettext "Usage:")) $name [urls|info|--options] |
pankso@61 | 24 |
pankso@61 | 25 $(gettext "Handle SliTaz packages mirrors") |
pankso@61 | 26 |
pankso@61 | 27 $(boldify $(gettext "Options:")) |
pankso@61 | 28 --list |
pankso@61 | 29 --rm |
pankso@61 | 30 --nodb |
pankso@61 | 31 --extra |
pankso@61 | 32 --debug |
pankso@61 | 33 |
pankso@61 | 34 $(boldify $(gettext "Examples:")) |
pankso@61 | 35 $name http://mirror.slitaz.org/ |
pankso@61 | 36 $name /path/to/packages --nodb --extra |
pankso@61 | 37 |
pankso@61 | 38 EOT |
pankso@61 | 39 exit 0 |
pankso@61 | 40 } |
pankso@61 | 41 |
pankso@61 | 42 # Check if we have packages ID and lists on mirror. |
pankso@61 | 43 check_mirror() { |
pankso@61 | 44 for file in packages.list packages.$SUM packages.desc ID |
pankso@61 | 45 do |
pankso@61 | 46 gettext "Checking file:"; echo -n " $file" |
pankso@61 | 47 if ! wget -q -s -T 6 ${1}${list} 2>/dev/null; then |
pankso@61 | 48 newline |
meshca@69 | 49 gettext "Unable to reach:"; colorize 31 " $file" |
pankso@61 | 50 newline && return 1 |
pankso@61 | 51 fi |
pankso@61 | 52 status |
pankso@61 | 53 done |
pankso@61 | 54 } |
pankso@61 | 55 |
pankso@61 | 56 # Get extra mirror DB path |
pankso@61 | 57 extra_db() { |
pankso@61 | 58 db=$(echo ${url#*://} | cut -d "/" -f1 ) |
pankso@61 | 59 debug "extra mirror: $url" |
pankso@61 | 60 debug "extra DB: $db" |
pankso@61 | 61 } |
pankso@61 | 62 |
pankso@62 | 63 # Display info about an extra repo |
pankso@62 | 64 extra_info() { |
pankso@62 | 65 local db=$1 |
pankso@62 | 66 debug "extra DB: $extradb/$db" |
pankso@62 | 67 nb=$(cat $extradb/$db/packages.$SUM 2>/dev/null | wc -l) |
meshca@70 | 68 echo "Extra DB : "$(boldify $db) |
meshca@70 | 69 echo "Extra URL : "$(cat $extradb/$db/mirror) |
meshca@69 | 70 gettext "Packages :"; colorize 32 " $nb" |
pankso@62 | 71 } |
pankso@62 | 72 |
pankso@62 | 73 # Add a package to packages.* lists |
pankso@61 | 74 addto_list() { |
pankso@61 | 75 cd $pkgsdir |
pankso@61 | 76 echo "$PACKAGE-${VERSION}${EXTRAVERSION}" >> packages.list |
pankso@61 | 77 $CHECKSUM $(basename $pkg) >> packages.$SUM |
pankso@61 | 78 # |
pankso@62 | 79 # Add PACKED_SIZE UNPACKED_SIZE to know packages size |
pankso@61 | 80 # before installing ??? --> actually done via packages.txt |
pankso@61 | 81 # |
meshca@70 | 82 |
meshca@70 | 83 echo "$PACKAGE | ${VERSION}$EXTRAVERSION | $SHORT_DESC | $CATEGORY | $WEB_SITE" \ |
meshca@70 | 84 >> packages.desc |
meshca@70 | 85 |
pankso@61 | 86 # packages.equiv is used by tazpkg install to check depends. |
pankso@61 | 87 touch packages.equiv |
pankso@61 | 88 for i in $PROVIDE; do |
meshca@70 | 89 unset dest |
pankso@61 | 90 echo $i | fgrep -q : && dest="${i#*:}:" |
pankso@61 | 91 if grep -qs ^${i%:*}= packages.equiv; then |
pankso@61 | 92 sed -i "s/^${i%:*}=/${i%:*}=${dest}$PACKAGE /" packages.equiv |
pankso@61 | 93 else |
pankso@61 | 94 echo "${i%:*}=${dest}$PACKAGE" >> packages.equiv |
pankso@61 | 95 fi |
pankso@61 | 96 done |
pankso@61 | 97 # files.list provides a list of all packages files. |
pankso@61 | 98 cat $tmpdir/files.list | sed s/^/"$PACKAGE: \0"/ >> $pkgsdir/files.list |
meshca@70 | 99 cd - > /dev/null |
pankso@61 | 100 } |
pankso@61 | 101 |
pankso@61 | 102 # |
pankso@61 | 103 # Commands |
pankso@61 | 104 # |
pankso@61 | 105 |
pankso@61 | 106 cmd=$1 |
pankso@61 | 107 [ -d "$cmd" ] && cmd=continue |
pankso@61 | 108 |
pankso@61 | 109 case "$cmd" in |
pankso@61 | 110 *usage|*help) usage ;; |
pankso@61 | 111 http://*|ftp://|'continue') continue ;; |
pankso@61 | 112 undigest) |
pankso@61 | 113 echo "TODO: enable official undigest repo" ;; |
pankso@61 | 114 ""|--list) |
pankso@61 | 115 extra=0 |
pankso@61 | 116 excolor=32 |
pankso@61 | 117 newline |
pankso@61 | 118 boldify "Mirror info" |
pankso@61 | 119 separator |
pankso@61 | 120 gettext "Main URL :" |
pankso@61 | 121 boldify " $(cat $mirrorurl)" |
pankso@61 | 122 if [ -f "$mirrors" ]; then |
pankso@61 | 123 nb=$(cat $mirrors | wc -l) |
meshca@69 | 124 gettext "Mirrors :"; colorize $excolor " $nb " |
pankso@61 | 125 fi |
pankso@61 | 126 if [ -d "$extradb" ]; then |
pankso@61 | 127 extra=$(ls $extradb | wc -l) |
pankso@61 | 128 fi |
pankso@61 | 129 [ "$extra" != 0 ] || excolor=31 |
meshca@69 | 130 gettext "Extra :"; colorize $excolor " $extra" |
pankso@61 | 131 separator |
pankso@61 | 132 newline |
pankso@61 | 133 if [ "$list" ]; then |
pankso@61 | 134 boldify $(gettext "Official mirrors") |
pankso@61 | 135 separator |
pankso@61 | 136 cat $mirrors |
pankso@61 | 137 separator && newline |
pankso@61 | 138 if [ "$extra" != "0" ]; then |
pankso@61 | 139 boldify $(gettext "Extra mirrors") |
pankso@61 | 140 separator |
pankso@61 | 141 cat $extradb/*/mirror |
pankso@61 | 142 separator && newline |
pankso@61 | 143 fi |
pankso@61 | 144 fi |
pankso@61 | 145 exit 0 ;; |
pankso@61 | 146 esac |
pankso@61 | 147 |
pankso@61 | 148 # |
pankso@61 | 149 # Handle all urls |
pankso@61 | 150 # |
pankso@61 | 151 |
pankso@61 | 152 count=0 |
pankso@61 | 153 |
pankso@61 | 154 for url in $@ |
pankso@61 | 155 do |
pankso@61 | 156 [ -d "$url" ] && url="dir:$url" |
pankso@61 | 157 case "$url" in |
pankso@67 | 158 http://*|ftp://|local) |
pankso@61 | 159 [ "$count" == 0 ] && newline |
pankso@61 | 160 count=$(($count + 1)) |
pankso@61 | 161 url="${url%/}/" |
pankso@61 | 162 debug "checking: $url" |
pankso@61 | 163 # Remove extra on --rm |
pankso@61 | 164 if [ "$rm" ]; then |
pankso@61 | 165 extra_db |
pankso@61 | 166 if [ -d "$extradb/$db" ]; then |
pankso@61 | 167 gettext "Removing extra mirror:" |
meshca@69 | 168 echo -n " $(boldify $db)" |
pankso@61 | 169 rm -rf $extradb/$db && status |
pankso@61 | 170 else |
meshca@69 | 171 gettext "Not an extra mirror:"; colorize 31 " $db" |
pankso@61 | 172 fi |
pankso@61 | 173 newline && continue |
pankso@61 | 174 fi |
pankso@61 | 175 # Official mirror |
pankso@61 | 176 if fgrep -q "$url" $mirrors; then |
pankso@61 | 177 gettext "Enabling: official mirror"; newline |
pankso@61 | 178 gettext "Architecture:"; echo " $SLITAZ_ARCH" |
pankso@61 | 179 # Handle arch type |
pankso@61 | 180 case "$SLITAZ_ARCH" in |
pankso@61 | 181 arm|x86_64) arch="$SLITAZ_ARCH/" ;; |
pankso@61 | 182 i486) arch="/" ;; |
pankso@61 | 183 esac |
pankso@61 | 184 url=${url}packages/${SLITAZ_RELEASE}${arch} |
meshca@69 | 185 echo "URL: $(boldify $url)" |
pankso@61 | 186 echo "$url" > $mirrorurl |
pankso@61 | 187 newline && continue |
pankso@61 | 188 fi |
pankso@61 | 189 # Extra mirror |
pankso@61 | 190 extra_db |
pankso@61 | 191 if [ -d "$extradb/$db" ]; then |
pankso@61 | 192 gettext "Extra mirror already exist"; newline |
pankso@62 | 193 extra_info $db |
pankso@61 | 194 else |
pankso@62 | 195 boldify $(gettext "Enabling: extra mirror") |
pankso@62 | 196 separator |
meshca@69 | 197 echo "URL: $(boldify $url)" |
pankso@61 | 198 if ! check_mirror $url; then |
pankso@61 | 199 continue |
pankso@61 | 200 fi |
pankso@61 | 201 mkdir -p $extradb/$db |
pankso@61 | 202 echo "$url" > $extradb/$db/mirror |
pankso@62 | 203 separator |
pankso@61 | 204 gettext "New extra mirror is ready to use"; newline |
pankso@61 | 205 fi |
pankso@61 | 206 newline ;; |
pankso@61 | 207 dir:*) |
pankso@61 | 208 # Handle local mirror |
pankso@61 | 209 dir=${url#dir:} |
pankso@61 | 210 pkgsdir=${dir%/} |
pankso@61 | 211 debug "dir: $dir" |
pankso@61 | 212 nb=$(ls $pkgsdir/*.tazpkg 2>/dev/null | wc -l) |
pankso@61 | 213 if [ "$nb" == 0 ]; then |
pankso@61 | 214 gettext "No packages found in:"; boldify " $pkgsdir" |
pankso@61 | 215 continue |
pankso@61 | 216 fi |
pankso@61 | 217 newline |
pankso@61 | 218 gettext "Directory:"; boldify " $pkgsdir" |
meshca@69 | 219 gettext "Packages :"; colorize 32 " $nb" |
pankso@61 | 220 cd $pkgsdir |
pankso@61 | 221 if [ ! "$nodb" ]; then |
pankso@61 | 222 time=$(date +%s) |
pankso@62 | 223 rm -f packages.* ID *.lzma |
pankso@61 | 224 newline |
pankso@61 | 225 boldify $(gettext "Creating packages lists") |
pankso@61 | 226 separator |
pankso@61 | 227 for pkg in $pkgsdir/*.tazpkg |
pankso@61 | 228 do |
pankso@61 | 229 gettext "Extracting data:"; echo -n " $(basename $pkg)" |
pankso@61 | 230 mkdir -p $tmpdir |
pankso@61 | 231 extract_receipt $tmpdir $pkg |
pankso@61 | 232 extract_fileslist $tmpdir $pkg |
pankso@61 | 233 source $tmpdir/receipt |
pankso@61 | 234 addto_list && status |
pankso@61 | 235 unset_receipt |
pankso@61 | 236 rm -rf $tmpdir |
pankso@61 | 237 done |
pankso@61 | 238 # files.list.lzma |
pankso@61 | 239 gettext "Compressing the files.list..." |
pankso@61 | 240 lzma e files.list files.list.lzma |
pankso@61 | 241 rm -f files.list |
pankso@61 | 242 status |
pankso@61 | 243 # ID |
pankso@61 | 244 gettext "Creating uniq identity ID..." |
pankso@61 | 245 $CHECKSUM packages.$SUM | cut -d ' ' -f 1 > ID |
pankso@61 | 246 status |
pankso@61 | 247 # Summary |
pankso@61 | 248 separator |
pankso@61 | 249 time=$(($(date +%s) - $time)) |
pankso@61 | 250 echo -n "$nb " |
pankso@61 | 251 gettext "packages added in" |
meshca@69 | 252 echo " ${time}s ("$(date "+%Y%m%d %H:%M")")" |
pankso@61 | 253 fi |
pankso@61 | 254 newline |
pankso@61 | 255 # Handle --extra: Use local repo as extra mirror with symlinks |
pankso@61 | 256 # to packages lists. |
pankso@61 | 257 if [ "$extra" ]; then |
pankso@61 | 258 boldify $(gettext "Enabling extra local mirror") |
pankso@61 | 259 separator |
pankso@61 | 260 db=$extradb/local |
pankso@61 | 261 debug "database: $db" |
pankso@61 | 262 mkdir -p $db && rm -f $db/* |
pankso@61 | 263 echo "$pkgsdir/" > $db/mirror |
pankso@61 | 264 for list in packages.* |
pankso@61 | 265 do |
meshca@70 | 266 echo $(gettext "Linking:") $list |
pankso@61 | 267 ln -s $pkgsdir/$list $db/$list |
pankso@61 | 268 status |
pankso@61 | 269 done |
pankso@61 | 270 gettext "Copying: ID (uniq identity)" |
pankso@61 | 271 cp $pkgsdir/ID $db && status |
pankso@61 | 272 separator && newline |
pankso@61 | 273 fi ;; |
pankso@61 | 274 --*) continue ;; |
pankso@61 | 275 *) |
pankso@61 | 276 [ "$count" == 0 ] && newline |
pankso@61 | 277 count=$(($count + 1)) |
pankso@62 | 278 # Should we handle --rm also here ? |
pankso@62 | 279 if [ -d "$extradb/$url" ]; then |
pankso@62 | 280 extra_info $(basename $extradb/$url) |
pankso@62 | 281 newline && continue |
pankso@62 | 282 fi |
pankso@61 | 283 gettext "Can't handle:" |
meshca@69 | 284 colorize 31 " $url"; newline ;; |
pankso@61 | 285 esac |
pankso@61 | 286 done |
pankso@61 | 287 |
pankso@61 | 288 exit 0 |