]> git.pld-linux.org Git - packages/rpm-build-tools.git/blame - update-geoip.sh
- 4.10, package more tools
[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>
a7085f49
ER
5#
6# Changelog:
b10dfc6f
ER
7# 2012-07-04 Created initial version
8# 2014-03-04 Rewritten to be smarter when checking for updates avoiding full download if no changes.
38fa7194 9# 2014-06-06 Fix finding new versions if multiple previous archives were present
a7085f49 10# 2015-08-25 Add auto commit support
b10dfc6f 11
49cd827a 12set -e
3fb11b3b
ER
13
14update=false
15status=false
a7085f49 16commit=true
3fb11b3b
ER
17while [ $# -gt 0 ]; do
18 case "$1" in
c40b0b82 19 update|-u|-update|--update)
3fb11b3b
ER
20 update=true
21 shift
22 ;;
c40b0b82 23 status|-s|-status|--status)
3fb11b3b
ER
24 status=true
25 shift
26 ;;
27 *)
28 break
29 ;;
30 esac
31done
32
e0a4d2b9
ER
33die() {
34 echo >&2 "$0: ERROR: $*"
35 exit 1
36}
37
b10dfc6f
ER
38# get file DATE in GMT timezone
39filedate() {
40 local file="$1"
41 TZ=GMT stat -c '%y' "$file" | awk '{print $1}'
42}
431811ea 43
b10dfc6f
ER
44# get package, no sources
45get_package() {
46 local pkg=$1 out
47 out=$(builder -g -ns $pkg 2>&1) || echo "$out"
48}
3fb11b3b 49
38fa7194
ER
50get_urls() {
51 local specfile=$1 t url
52
b10dfc6f 53 t=$(mktemp)
38fa7194
ER
54 builder -su $specfile 2>/dev/null > $t
55
b10dfc6f 56 while read url; do
38fa7194
ER
57 # skip non-archives
58 case "$url" in
59 *.zip|*.gz|*.xz)
60 echo "$url"
61 ;;
62 esac
63 done < $t
64 rm -f $t
65}
66
67update_urls() {
68 local specfile=$1 url fn z
69
70 for url in "$@"; do
68062e54 71 # take output filename (anything after last slash)
b10dfc6f 72 fn=${url##*/}
68062e54
ER
73 # remove querystring for mtime match to work
74 url=${url%\?*}
b10dfc6f
ER
75 test -e "$fn" && z= || unset z
76 curl ${z+-z "$fn"} -o "$fn" "$url" -R -s
38fa7194 77 done
b10dfc6f 78}
3fb11b3b 79
b10dfc6f
ER
80# set version to $version in $specfile and build the package
81update_version() {
82 local specfile="$1" version="$2" out
3fb11b3b 83
b10dfc6f
ER
84 # update version
85 sed -i -e "
86 s/^\(Version:[ \t]\+\)[.0-9]\+\$/\1$version/
87 s/^\(Release:[ \t]\+\)[.0-9]\+\$/\11/
88 " $specfile
89
e0a4d2b9 90 rm *.zip *.gz *.xz
b10dfc6f
ER
91 # update md5
92 out=$(md5 -p1 $specfile 2>&1) || echo "$out"
3fb11b3b 93
b10dfc6f
ER
94 # build it
95 out=$(builder -bb $specfile 2>&1) || echo "$out"
96}
3fb11b3b 97
a7085f49
ER
98commit_vcs() {
99 local specfile="$1" version="$2"
100
101 git commit -m "updated to $version" $specfile
98b7acb3 102 git push || echo push failed
a7085f49
ER
103}
104
b10dfc6f
ER
105# get version from package files
106# set $version variable
107version_from_files() {
38fa7194
ER
108 local pkg=$1 url fn dt d
109 shift
110
111 for url in "$@"; do
112 # take output filename (anything after last slash)
113 fn=${url##*/}
114 # skip inexistent files
115 test -e "$fn" || continue
116
117 d=$(filedate "$fn")
118 if [ "$(echo $d | tr -d -)" -gt "$(echo $dt | tr -d -)" ]; then
119 dt=$d
120 fi
121 done
122
4a8bd840
ER
123 case "$pkg" in
124 xtables-geoip)
38fa7194 125 version=$(echo "$dt" | tr -d -)
4a8bd840
ER
126 ;;
127 *)
38fa7194 128 version=$(echo "$dt" | tr - .)
4a8bd840
ER
129 ;;
130 esac
b10dfc6f 131}
4a8bd840 132
f5f12a09
ER
133version_from_attachment() {
134 local url fn dt d t
135 t=$(mktemp)
136
137 for url in "$@"; do
e0a4d2b9
ER
138 # remove querystring to receive proper headers
139 url=${url%\?*}
f5f12a09 140 curl -Is "$url" -o "$t"
e0a4d2b9 141 fn=$(awk 'BEGIN {FS=": "}/^[Cc]ontent-[Dd]isposition/{sub(/.*filename=/, "", $2); print $2}' "$t")
f5f12a09
ER
142 fn=${fn#GeoLite2-Country-CSV_}
143 d=$(echo "$fn" | sed -e 's/[^0-9-]//g')
144
145 if [ "$d" -gt "$dt" ]; then
146 dt=$d
147 fi
148 done
149
e0a4d2b9
ER
150 test -n "$dt" || die "Failed to find date from $*"
151
f5f12a09
ER
152 rm -f $t
153 version=$dt
154}
155
b10dfc6f
ER
156dir=$(dirname "$0")
157APPDIR=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d")
158PATH=$APPDIR:$PATH
159cd "$dir"
49cd827a 160
b10dfc6f
ER
161pkgs='GeoIP-db-City GeoIP-db-Country GeoIP-db-IPASNum xtables-geoip'
162for pkg in ${*:-$pkgs}; do
b124f896 163 pkg=${pkg%.spec}
b10dfc6f
ER
164 $status && continue
165
166 get_package $pkg
167 cd $pkg
168 specfile=*.spec
169
38fa7194 170 urls=$(get_urls $specfile)
f5f12a09
ER
171 if [ "$pkg" = "xtables-geoip" ]; then
172 version_from_attachment $urls
173 else
174 update_urls $urls
175 version_from_files $pkg $urls
176 fi
177
b10dfc6f
ER
178 oldvers=$(awk '/^Version:[ ]+/{print $NF}' $specfile)
179 if [ "$oldvers" != "$version" ]; then
180 update_version $specfile $version
a7085f49
ER
181 if $commit; then
182 commit_vcs $specfile $version
183 fi
b10dfc6f 184 fi
49cd827a
ER
185 cd ..
186done
3fb11b3b 187
b10dfc6f 188# report each package git status
3fb11b3b 189for pkg in ${*:-$pkgs}; do
b124f896 190 pkg=${pkg%.spec}
3fb11b3b 191 cd $pkg
d2d44fec 192 out=$(
37fd5f8b 193 git status --porcelain
d2d44fec
ER
194 git status | grep ahead || :
195 )
196 test -n "$out" && echo "$pkg: $out"
3fb11b3b
ER
197 cd ..
198done
This page took 0.063155 seconds and 4 git commands to generate.