]> git.pld-linux.org Git - packages/rpm-build-tools.git/blob - update-geoip.sh
update-geoip.sh: rewrite for dynamic urls; use smarter fetch (curl with timestamp...
[packages/rpm-build-tools.git] / update-geoip.sh
1 #!/bin/sh
2 # Update GeoIP packages to new version provided by MaxMind.
3 #
4 # Author: Elan Ruusamäe <glen@pld-linux.org>
5 # 2012-07-04 Created initial version
6 # 2014-03-04 Rewritten to be smarter when checking for updates avoiding full download if no changes.
7
8 set -e
9
10 update=false
11 status=false
12 while [ $# -gt 0 ]; do
13         case "$1" in
14         update|-u|-update|--update)
15                 update=true
16                 shift
17                 ;;
18         status|-s|-status|--status)
19                 status=true
20                 shift
21                 ;;
22         *)
23                 break
24                 ;;
25         esac
26 done
27
28 # get file DATE in GMT timezone
29 filedate() {
30         local file="$1"
31         TZ=GMT stat -c '%y' "$file" | awk '{print $1}'
32 }
33
34 # get package, no sources
35 get_package() {
36         local pkg=$1 out
37         out=$(builder -g -ns $pkg 2>&1) || echo "$out"
38 }
39
40 update_urls() {
41         local specfile=$1 t fn z
42         # update urls
43         t=$(mktemp)
44         builder -su $specfile > $t 2>/dev/null
45         while read url; do
46                 fn=${url##*/}
47                 test -e "$fn" && z= || unset z
48                 curl ${z+-z "$fn"} -o "$fn" "$url" -R -s
49         done < $t
50         rm -f $t
51 }
52
53 # set version to $version in $specfile and build the package
54 update_version() {
55         local specfile="$1" version="$2" out
56
57         # update version
58         sed -i -e "
59                 s/^\(Version:[ \t]\+\)[.0-9]\+\$/\1$version/
60                 s/^\(Release:[ \t]\+\)[.0-9]\+\$/\11/
61         " $specfile
62
63         # update md5
64         out=$(md5 -p1 $specfile 2>&1) || echo "$out"
65
66         # build it
67         out=$(builder -bb $specfile 2>&1) || echo "$out"
68 }
69
70 # get version from package files
71 # set $version variable
72 version_from_files() {
73         local pkg=$1 dt4 dt6
74         case "$pkg" in
75         xtables-geoip)
76                 dt4=$(filedate *.zip | tr -d -)
77                 dt6=$(filedate *.gz | tr -d -)
78                 if [ "$dt4" -gt "$dt6" ]; then
79                         version=$dt4
80                 else
81                         version=$dt6
82                 fi
83                 ;;
84         GeoIP-db-City)
85                 dt4=$(filedate GeoLiteCity-*.dat.xz | tr - .)
86                 dt6=$(filedate GeoLiteCityv6-*.dat.gz | tr - .)
87                 if [ "$(echo $dt4 | tr -d .)" -gt "$(echo $dt6 | tr -d .)" ]; then
88                         version=$dt4
89                 else
90                         version=$dt6
91                 fi
92                 ;;
93         GeoIP-db-Country)
94                 dt4=$(filedate GeoIP-*.dat.gz | tr - .)
95                 dt6=$(filedate GeoIPv6-*.dat.gz | tr - .)
96                 if [ "$(echo $dt4 | tr -d .)" -gt "$(echo $dt6 | tr -d .)" ]; then
97                         version=$dt4
98                 else
99                         version=$dt6
100                 fi
101                 ;;
102         *)
103                 version=$(filedate *.gz | tr - .)
104                 ;;
105         esac
106 }
107
108 dir=$(dirname "$0")
109 APPDIR=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d")
110 PATH=$APPDIR:$PATH
111 cd "$dir"
112
113 pkgs='GeoIP-db-City GeoIP-db-Country GeoIP-db-IPASNum xtables-geoip'
114 for pkg in ${*:-$pkgs}; do
115         $status && continue
116
117         get_package $pkg
118         cd $pkg
119         specfile=*.spec
120
121         update_urls $specfile
122         version_from_files $pkg
123         oldvers=$(awk '/^Version:[      ]+/{print $NF}' $specfile)
124         if [ "$oldvers" != "$version" ]; then
125                 update_version $specfile $version
126         fi
127         cd ..
128 done
129
130 # report each package git status
131 for pkg in ${*:-$pkgs}; do
132         cd $pkg
133         git status --porcelain
134         cd ..
135 done
This page took 0.0482 seconds and 4 git commands to generate.