]> git.pld-linux.org Git - packages/rpm-build-tools.git/blame - update-geoip.sh
install without options to cp -p
[packages/rpm-build-tools.git] / update-geoip.sh
CommitLineData
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 8set -e
3fb11b3b
ER
9
10update=false
11status=false
12while [ $# -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
26done
27
b10dfc6f
ER
28# get file DATE in GMT timezone
29filedate() {
30 local file="$1"
31 TZ=GMT stat -c '%y' "$file" | awk '{print $1}'
32}
431811ea 33
b10dfc6f
ER
34# get package, no sources
35get_package() {
36 local pkg=$1 out
37 out=$(builder -g -ns $pkg 2>&1) || echo "$out"
38}
3fb11b3b 39
b10dfc6f
ER
40update_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
54update_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
72version_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
108dir=$(dirname "$0")
109APPDIR=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d")
110PATH=$APPDIR:$PATH
111cd "$dir"
49cd827a 112
b10dfc6f
ER
113pkgs='GeoIP-db-City GeoIP-db-Country GeoIP-db-IPASNum xtables-geoip'
114for 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 ..
128done
3fb11b3b 129
b10dfc6f 130# report each package git status
3fb11b3b
ER
131for pkg in ${*:-$pkgs}; do
132 cd $pkg
37fd5f8b 133 git status --porcelain
3fb11b3b
ER
134 cd ..
135done
This page took 0.064624 seconds and 4 git commands to generate.