2 # Update GeoIP packages to new version provided by MaxMind.
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.
12 while [ $# -gt 0 ]; do
14 update|-u|-update|--update)
18 status|-s|-status|--status)
28 # get file DATE in GMT timezone
31 TZ=GMT stat -c '%y' "$file" | awk '{print $1}'
34 # get package, no sources
37 out=$(builder -g -ns $pkg 2>&1) || echo "$out"
41 local specfile=$1 t fn z
44 builder -su $specfile > $t 2>/dev/null
46 # take output filename (anything after last slash)
48 # remove querystring for mtime match to work
50 test -e "$fn" && z= || unset z
51 curl ${z+-z "$fn"} -o "$fn" "$url" -R -s
56 # set version to $version in $specfile and build the package
58 local specfile="$1" version="$2" out
62 s/^\(Version:[ \t]\+\)[.0-9]\+\$/\1$version/
63 s/^\(Release:[ \t]\+\)[.0-9]\+\$/\11/
67 out=$(md5 -p1 $specfile 2>&1) || echo "$out"
70 out=$(builder -bb $specfile 2>&1) || echo "$out"
73 # get version from package files
74 # set $version variable
75 version_from_files() {
79 dt4=$(filedate *.zip | tr -d -)
80 dt6=$(filedate *.gz | tr -d -)
81 if [ "$dt4" -gt "$dt6" ]; then
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
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
106 version=$(filedate *.gz | tr - .)
112 APPDIR=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d")
116 pkgs='GeoIP-db-City GeoIP-db-Country GeoIP-db-IPASNum xtables-geoip'
117 for pkg in ${*:-$pkgs}; do
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
134 # report each package git status
135 for pkg in ${*:-$pkgs}; do
138 git status --porcelain