]>
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 | |
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 | } | |
3fb11b3b | 52 | |
b10dfc6f ER |
53 | # set version to $version in $specfile and build the package |
54 | update_version() { | |
55 | local specfile="$1" version="$2" out | |
3fb11b3b | 56 | |
b10dfc6f ER |
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" | |
3fb11b3b | 65 | |
b10dfc6f ER |
66 | # build it |
67 | out=$(builder -bb $specfile 2>&1) || echo "$out" | |
68 | } | |
3fb11b3b | 69 | |
b10dfc6f ER |
70 | # get version from package files |
71 | # set $version variable | |
72 | version_from_files() { | |
73 | local pkg=$1 dt4 dt6 | |
4a8bd840 ER |
74 | case "$pkg" in |
75 | xtables-geoip) | |
b10dfc6f ER |
76 | dt4=$(filedate *.zip | tr -d -) |
77 | dt6=$(filedate *.gz | tr -d -) | |
c385bd14 | 78 | if [ "$dt4" -gt "$dt6" ]; then |
b10dfc6f | 79 | version=$dt4 |
c385bd14 | 80 | else |
b10dfc6f | 81 | version=$dt6 |
c385bd14 | 82 | fi |
4a8bd840 ER |
83 | ;; |
84 | GeoIP-db-City) | |
b10dfc6f ER |
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 | |
4a8bd840 ER |
101 | ;; |
102 | *) | |
b10dfc6f | 103 | version=$(filedate *.gz | tr - .) |
4a8bd840 ER |
104 | ;; |
105 | esac | |
b10dfc6f | 106 | } |
4a8bd840 | 107 | |
b10dfc6f ER |
108 | dir=$(dirname "$0") |
109 | APPDIR=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d") | |
110 | PATH=$APPDIR:$PATH | |
111 | cd "$dir" | |
49cd827a | 112 | |
b10dfc6f ER |
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 | |
49cd827a ER |
127 | cd .. |
128 | done | |
3fb11b3b | 129 | |
b10dfc6f | 130 | # report each package git status |
3fb11b3b ER |
131 | for pkg in ${*:-$pkgs}; do |
132 | cd $pkg | |
37fd5f8b | 133 | git status --porcelain |
3fb11b3b ER |
134 | cd .. |
135 | done |