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