]>
Commit | Line | Data |
---|---|---|
49cd827a | 1 | #!/bin/sh |
b10dfc6f ER |
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 | ||
49cd827a | 8 | set -e |
3fb11b3b ER |
9 | |
10 | update=false | |
11 | status=false | |
12 | while [ $# -gt 0 ]; do | |
13 | case "$1" in | |
c40b0b82 | 14 | update|-u|-update|--update) |
3fb11b3b ER |
15 | update=true |
16 | shift | |
17 | ;; | |
c40b0b82 | 18 | status|-s|-status|--status) |
3fb11b3b ER |
19 | status=true |
20 | shift | |
21 | ;; | |
22 | *) | |
23 | break | |
24 | ;; | |
25 | esac | |
26 | done | |
27 | ||
b10dfc6f ER |
28 | # get file DATE in GMT timezone |
29 | filedate() { | |
30 | local file="$1" | |
31 | TZ=GMT stat -c '%y' "$file" | awk '{print $1}' | |
32 | } | |
431811ea | 33 | |
b10dfc6f ER |
34 | # get package, no sources |
35 | get_package() { | |
36 | local pkg=$1 out | |
37 | out=$(builder -g -ns $pkg 2>&1) || echo "$out" | |
38 | } | |
3fb11b3b | 39 | |
b10dfc6f ER |
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 | |
68062e54 | 46 | # take output filename (anything after last slash) |
b10dfc6f | 47 | fn=${url##*/} |
68062e54 ER |
48 | # remove querystring for mtime match to work |
49 | url=${url%\?*} | |
b10dfc6f ER |
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 | } | |
3fb11b3b | 55 | |
b10dfc6f ER |
56 | # set version to $version in $specfile and build the package |
57 | update_version() { | |
58 | local specfile="$1" version="$2" out | |
3fb11b3b | 59 | |
b10dfc6f ER |
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" | |
3fb11b3b | 68 | |
b10dfc6f ER |
69 | # build it |
70 | out=$(builder -bb $specfile 2>&1) || echo "$out" | |
71 | } | |
3fb11b3b | 72 | |
b10dfc6f ER |
73 | # get version from package files |
74 | # set $version variable | |
75 | version_from_files() { | |
76 | local pkg=$1 dt4 dt6 | |
4a8bd840 ER |
77 | case "$pkg" in |
78 | xtables-geoip) | |
b10dfc6f ER |
79 | dt4=$(filedate *.zip | tr -d -) |
80 | dt6=$(filedate *.gz | tr -d -) | |
c385bd14 | 81 | if [ "$dt4" -gt "$dt6" ]; then |
b10dfc6f | 82 | version=$dt4 |
c385bd14 | 83 | else |
b10dfc6f | 84 | version=$dt6 |
c385bd14 | 85 | fi |
4a8bd840 ER |
86 | ;; |
87 | GeoIP-db-City) | |
b10dfc6f ER |
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 | |
4a8bd840 ER |
104 | ;; |
105 | *) | |
b10dfc6f | 106 | version=$(filedate *.gz | tr - .) |
4a8bd840 ER |
107 | ;; |
108 | esac | |
b10dfc6f | 109 | } |
4a8bd840 | 110 | |
b10dfc6f ER |
111 | dir=$(dirname "$0") |
112 | APPDIR=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d") | |
113 | PATH=$APPDIR:$PATH | |
114 | cd "$dir" | |
49cd827a | 115 | |
b10dfc6f ER |
116 | pkgs='GeoIP-db-City GeoIP-db-Country GeoIP-db-IPASNum xtables-geoip' |
117 | for pkg in ${*:-$pkgs}; do | |
118 | $status && continue | |
119 | ||
120 | get_package $pkg | |
121 | cd $pkg | |
122 | specfile=*.spec | |
123 | ||
124 | update_urls $specfile | |
125 | version_from_files $pkg | |
126 | oldvers=$(awk '/^Version:[ ]+/{print $NF}' $specfile) | |
127 | if [ "$oldvers" != "$version" ]; then | |
128 | update_version $specfile $version | |
129 | fi | |
49cd827a ER |
130 | cd .. |
131 | done | |
3fb11b3b | 132 | |
b10dfc6f | 133 | # report each package git status |
3fb11b3b ER |
134 | for pkg in ${*:-$pkgs}; do |
135 | cd $pkg | |
37fd5f8b | 136 | git status --porcelain |
3fb11b3b ER |
137 | cd .. |
138 | done |