]> git.pld-linux.org Git - packages/rpm-build-tools.git/blob - update-geoip.sh
update-geoip: allow use .spec files in args
[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                 # take output filename (anything after last slash)
47                 fn=${url##*/}
48                 # remove querystring for mtime match to work
49                 url=${url%\?*}
50                 test -e "$fn" && z= || unset z
51                 curl ${z+-z "$fn"} -o "$fn" "$url" -R -s
52         done < $t
53         rm -f $t
54 }
55
56 # set version to $version in $specfile and build the package
57 update_version() {
58         local specfile="$1" version="$2" out
59
60         # update version
61         sed -i -e "
62                 s/^\(Version:[ \t]\+\)[.0-9]\+\$/\1$version/
63                 s/^\(Release:[ \t]\+\)[.0-9]\+\$/\11/
64         " $specfile
65
66         # update md5
67         out=$(md5 -p1 $specfile 2>&1) || echo "$out"
68
69         # build it
70         out=$(builder -bb $specfile 2>&1) || echo "$out"
71 }
72
73 # get version from package files
74 # set $version variable
75 version_from_files() {
76         local pkg=$1 dt4 dt6
77         case "$pkg" in
78         xtables-geoip)
79                 dt4=$(filedate *.zip | tr -d -)
80                 dt6=$(filedate *.gz | tr -d -)
81                 if [ "$dt4" -gt "$dt6" ]; then
82                         version=$dt4
83                 else
84                         version=$dt6
85                 fi
86                 ;;
87         GeoIP-db-City)
88                 dt4=$(filedate GeoLiteCity-*.dat.xz | tr - .)
89                 dt6=$(filedate GeoLiteCityv6-*.dat.gz | tr - .)
90                 if [ "$(echo $dt4 | tr -d .)" -gt "$(echo $dt6 | tr -d .)" ]; then
91                         version=$dt4
92                 else
93                         version=$dt6
94                 fi
95                 ;;
96         GeoIP-db-Country)
97                 dt4=$(filedate GeoIP-*.dat.gz | tr - .)
98                 dt6=$(filedate GeoIPv6-*.dat.gz | tr - .)
99                 if [ "$(echo $dt4 | tr -d .)" -gt "$(echo $dt6 | tr -d .)" ]; then
100                         version=$dt4
101                 else
102                         version=$dt6
103                 fi
104                 ;;
105         *)
106                 version=$(filedate *.gz | tr - .)
107                 ;;
108         esac
109 }
110
111 dir=$(dirname "$0")
112 APPDIR=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d")
113 PATH=$APPDIR:$PATH
114 cd "$dir"
115
116 pkgs='GeoIP-db-City GeoIP-db-Country GeoIP-db-IPASNum xtables-geoip'
117 for pkg in ${*:-$pkgs}; do
118         pkg=${pkg%.spec}
119         $status && continue
120
121         get_package $pkg
122         cd $pkg
123         specfile=*.spec
124
125         update_urls $specfile
126         version_from_files $pkg
127         oldvers=$(awk '/^Version:[      ]+/{print $NF}' $specfile)
128         if [ "$oldvers" != "$version" ]; then
129                 update_version $specfile $version
130         fi
131         cd ..
132 done
133
134 # report each package git status
135 for pkg in ${*:-$pkgs}; do
136         pkg=${pkg%.spec}
137         cd $pkg
138         git status --porcelain
139         cd ..
140 done
This page took 0.351808 seconds and 4 git commands to generate.