spk view spk-mirror @ rev 102

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