spk annotate spk-mirror @ rev 131
Tiny edits
author | Paul Issott <paul@slitaz.org> |
---|---|
date | Mon Mar 03 16:06:46 2014 +0000 (2014-03-03) |
parents | b767df7ddb20 |
children | a0bdc170c51e |
rev | line source |
---|---|
pankso@61 | 1 #!/bin/sh |
pankso@61 | 2 # |
pankso@61 | 3 # Spk-mirror - Handle SliTaz packages mirrors. Read the README before |
paul@131 | 4 # adding or modifying 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 |
paul@98 | 12 # URLs 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 |
meshca@102 | 46 echo $(gettext "Checking file:") $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@76 | 76 |
pankso@76 | 77 echo "$PACKAGE-${VERSION}${EXTRAVERSION}${arch}" >> packages.list |
pankso@61 | 78 $CHECKSUM $(basename $pkg) >> packages.$SUM |
pankso@61 | 79 # |
pankso@76 | 80 # Add PACKED_SIZE UNPACKED_SIZE to know packages size before installing ??? |
pankso@76 | 81 # --> actually done via packages.txt. Use: ${VERSION}${EXTRAVERSION}${arch} ??? |
pankso@61 | 82 # |
meshca@70 | 83 echo "$PACKAGE | ${VERSION}$EXTRAVERSION | $SHORT_DESC | $CATEGORY | $WEB_SITE" \ |
pankso@76 | 84 >> packages.desc |
pankso@76 | 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 |
slaxemulator@109 | 99 # library.list provides a depends of so depend files for the package. |
slaxemulator@109 | 100 if [ -f $tmpdir/library.list ]; then |
slaxemulator@109 | 101 sed "/^$PACKAGE\t/d" -i $pkgsdir/libraries.txt |
slaxemulator@109 | 102 cat $tmpdir/library.list >> $pkgsdir/libraries.txt |
slaxemulator@109 | 103 fi |
meshca@70 | 104 cd - > /dev/null |
pankso@61 | 105 } |
pankso@61 | 106 |
pankso@61 | 107 # |
pankso@61 | 108 # Commands |
pankso@61 | 109 # |
pankso@61 | 110 |
pankso@61 | 111 cmd=$1 |
pankso@61 | 112 [ -d "$cmd" ] && cmd=continue |
pankso@61 | 113 |
pankso@61 | 114 case "$cmd" in |
pankso@61 | 115 *usage|*help) usage ;; |
pankso@61 | 116 http://*|ftp://|'continue') continue ;; |
pankso@61 | 117 undigest) |
pankso@61 | 118 echo "TODO: enable official undigest repo" ;; |
pankso@61 | 119 ""|--list) |
pankso@61 | 120 extra=0 |
pankso@61 | 121 excolor=32 |
pankso@61 | 122 newline |
pankso@61 | 123 boldify "Mirror info" |
pankso@61 | 124 separator |
pankso@61 | 125 gettext "Main URL :" |
pankso@61 | 126 boldify " $(cat $mirrorurl)" |
pankso@61 | 127 if [ -f "$mirrors" ]; then |
pankso@61 | 128 nb=$(cat $mirrors | wc -l) |
meshca@69 | 129 gettext "Mirrors :"; colorize $excolor " $nb " |
pankso@61 | 130 fi |
pankso@61 | 131 if [ -d "$extradb" ]; then |
pankso@61 | 132 extra=$(ls $extradb | wc -l) |
pankso@61 | 133 fi |
pankso@61 | 134 [ "$extra" != 0 ] || excolor=31 |
meshca@69 | 135 gettext "Extra :"; colorize $excolor " $extra" |
pankso@61 | 136 separator |
pankso@61 | 137 newline |
pankso@61 | 138 if [ "$list" ]; then |
pankso@61 | 139 boldify $(gettext "Official mirrors") |
pankso@61 | 140 separator |
pankso@61 | 141 cat $mirrors |
pankso@61 | 142 separator && newline |
pankso@61 | 143 if [ "$extra" != "0" ]; then |
pankso@61 | 144 boldify $(gettext "Extra mirrors") |
pankso@61 | 145 separator |
pankso@61 | 146 cat $extradb/*/mirror |
pankso@61 | 147 separator && newline |
pankso@61 | 148 fi |
pankso@61 | 149 fi |
pankso@61 | 150 exit 0 ;; |
pankso@61 | 151 esac |
pankso@61 | 152 |
pankso@61 | 153 # |
pankso@61 | 154 # Handle all urls |
pankso@61 | 155 # |
pankso@61 | 156 |
pankso@61 | 157 count=0 |
pankso@61 | 158 |
pankso@61 | 159 for url in $@ |
pankso@61 | 160 do |
pankso@61 | 161 [ -d "$url" ] && url="dir:$url" |
pankso@61 | 162 case "$url" in |
pankso@67 | 163 http://*|ftp://|local) |
pankso@61 | 164 [ "$count" == 0 ] && newline |
pankso@61 | 165 count=$(($count + 1)) |
pankso@61 | 166 url="${url%/}/" |
pankso@61 | 167 debug "checking: $url" |
pankso@61 | 168 # Remove extra on --rm |
pankso@61 | 169 if [ "$rm" ]; then |
pankso@61 | 170 extra_db |
pankso@61 | 171 if [ -d "$extradb/$db" ]; then |
pankso@61 | 172 gettext "Removing extra mirror:" |
meshca@69 | 173 echo -n " $(boldify $db)" |
pankso@61 | 174 rm -rf $extradb/$db && status |
pankso@61 | 175 else |
meshca@69 | 176 gettext "Not an extra mirror:"; colorize 31 " $db" |
pankso@61 | 177 fi |
pankso@61 | 178 newline && continue |
pankso@61 | 179 fi |
pankso@61 | 180 # Official mirror |
pankso@61 | 181 if fgrep -q "$url" $mirrors; then |
pankso@61 | 182 gettext "Enabling: official mirror"; newline |
pankso@61 | 183 gettext "Architecture:"; echo " $SLITAZ_ARCH" |
pankso@61 | 184 # Handle arch type |
pankso@61 | 185 case "$SLITAZ_ARCH" in |
pankso@61 | 186 arm|x86_64) arch="$SLITAZ_ARCH/" ;; |
pankso@61 | 187 i486) arch="/" ;; |
pankso@61 | 188 esac |
pankso@61 | 189 url=${url}packages/${SLITAZ_RELEASE}${arch} |
meshca@69 | 190 echo "URL: $(boldify $url)" |
pankso@61 | 191 echo "$url" > $mirrorurl |
pankso@61 | 192 newline && continue |
pankso@61 | 193 fi |
pankso@61 | 194 # Extra mirror |
pankso@61 | 195 extra_db |
pankso@61 | 196 if [ -d "$extradb/$db" ]; then |
paul@98 | 197 gettext "Extra mirror already exists"; newline |
pankso@62 | 198 extra_info $db |
pankso@61 | 199 else |
pankso@62 | 200 boldify $(gettext "Enabling: extra mirror") |
pankso@62 | 201 separator |
meshca@69 | 202 echo "URL: $(boldify $url)" |
pankso@61 | 203 if ! check_mirror $url; then |
pankso@61 | 204 continue |
pankso@61 | 205 fi |
pankso@61 | 206 mkdir -p $extradb/$db |
pankso@61 | 207 echo "$url" > $extradb/$db/mirror |
pankso@62 | 208 separator |
pankso@61 | 209 gettext "New extra mirror is ready to use"; newline |
pankso@61 | 210 fi |
pankso@61 | 211 newline ;; |
pankso@61 | 212 dir:*) |
pankso@61 | 213 # Handle local mirror |
pankso@61 | 214 dir=${url#dir:} |
pankso@61 | 215 pkgsdir=${dir%/} |
pankso@61 | 216 debug "dir: $dir" |
pankso@61 | 217 nb=$(ls $pkgsdir/*.tazpkg 2>/dev/null | wc -l) |
pankso@61 | 218 if [ "$nb" == 0 ]; then |
pankso@61 | 219 gettext "No packages found in:"; boldify " $pkgsdir" |
pankso@61 | 220 continue |
pankso@61 | 221 fi |
pankso@61 | 222 newline |
pankso@61 | 223 gettext "Directory:"; boldify " $pkgsdir" |
meshca@69 | 224 gettext "Packages :"; colorize 32 " $nb" |
pankso@61 | 225 cd $pkgsdir |
pankso@61 | 226 if [ ! "$nodb" ]; then |
pankso@61 | 227 time=$(date +%s) |
pankso@62 | 228 rm -f packages.* ID *.lzma |
pankso@61 | 229 newline |
pankso@61 | 230 boldify $(gettext "Creating packages lists") |
pankso@61 | 231 separator |
pankso@61 | 232 for pkg in $pkgsdir/*.tazpkg |
pankso@61 | 233 do |
pankso@61 | 234 gettext "Extracting data:"; echo -n " $(basename $pkg)" |
pankso@61 | 235 mkdir -p $tmpdir |
pankso@61 | 236 extract_receipt $tmpdir $pkg |
pankso@61 | 237 extract_fileslist $tmpdir $pkg |
slaxemulator@109 | 238 extract_librarylist $tmpdir $pkg |
paul@98 | 239 # We need ARCH set to get correct version. |
pankso@97 | 240 ARCH=$(fgrep ARCH= /etc/slitaz/cook.conf | cut -d "\"" -f 2) |
pankso@97 | 241 case "$ARCH" in |
pankso@97 | 242 arm|x86_64) arch="-${ARCH}" ;; |
pankso@97 | 243 esac |
pankso@61 | 244 source $tmpdir/receipt |
pankso@61 | 245 addto_list && status |
pankso@61 | 246 unset_receipt |
pankso@61 | 247 rm -rf $tmpdir |
pankso@61 | 248 done |
pankso@61 | 249 # files.list.lzma |
pankso@61 | 250 gettext "Compressing the files.list..." |
pankso@61 | 251 lzma e files.list files.list.lzma |
pankso@61 | 252 rm -f files.list |
pankso@61 | 253 status |
pankso@61 | 254 # ID |
pankso@61 | 255 gettext "Creating uniq identity ID..." |
pankso@61 | 256 $CHECKSUM packages.$SUM | cut -d ' ' -f 1 > ID |
pankso@61 | 257 status |
pankso@61 | 258 # Summary |
pankso@61 | 259 separator |
pankso@61 | 260 time=$(($(date +%s) - $time)) |
pankso@61 | 261 echo -n "$nb " |
pankso@61 | 262 gettext "packages added in" |
meshca@69 | 263 echo " ${time}s ("$(date "+%Y%m%d %H:%M")")" |
pankso@61 | 264 fi |
pankso@61 | 265 newline |
pankso@61 | 266 # Handle --extra: Use local repo as extra mirror with symlinks |
pankso@61 | 267 # to packages lists. |
pankso@61 | 268 if [ "$extra" ]; then |
pankso@61 | 269 boldify $(gettext "Enabling extra local mirror") |
pankso@61 | 270 separator |
pankso@61 | 271 db=$extradb/local |
pankso@61 | 272 debug "database: $db" |
pankso@61 | 273 mkdir -p $db && rm -f $db/* |
pankso@61 | 274 echo "$pkgsdir/" > $db/mirror |
pankso@61 | 275 for list in packages.* |
pankso@61 | 276 do |
pankso@80 | 277 echo -n $(gettext "Linking:") $list |
pankso@61 | 278 ln -s $pkgsdir/$list $db/$list |
pankso@61 | 279 status |
pankso@61 | 280 done |
pankso@61 | 281 gettext "Copying: ID (uniq identity)" |
pankso@61 | 282 cp $pkgsdir/ID $db && status |
pankso@61 | 283 separator && newline |
pankso@61 | 284 fi ;; |
pankso@61 | 285 --*) continue ;; |
pankso@61 | 286 *) |
pankso@61 | 287 [ "$count" == 0 ] && newline |
pankso@61 | 288 count=$(($count + 1)) |
pankso@62 | 289 # Should we handle --rm also here ? |
pankso@62 | 290 if [ -d "$extradb/$url" ]; then |
pankso@62 | 291 extra_info $(basename $extradb/$url) |
pankso@62 | 292 newline && continue |
pankso@62 | 293 fi |
pankso@61 | 294 gettext "Can't handle:" |
meshca@69 | 295 colorize 31 " $url"; newline ;; |
pankso@61 | 296 esac |
pankso@61 | 297 done |
pankso@61 | 298 |
pankso@61 | 299 exit 0 |