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