BLOGTIMES
2018/07/21

GeoLite2 用の CSV から GeoLite Legacy 用のデータベースファイルを生成する

  python  sh  programming 
このエントリーをはてなブックマークに追加

GeoIP-update がエラーを吐いているをずっと放置していましたが、エラーの原因を調べてみたところ、現行の Legacy Database は更新が停止されていました。現在はウェブから 2018 年 3 月版のみがダウンロードできる状態で、このファイルも 2019 年 1 月にはウェブサイトから削除されるというスケジュールになっているようです。

GeoLite は後継版の GeoLite2 の提供が始まっているので、こちらに移行して欲しいようですが、今使っている全てのアプリが GeoLite2 に対応しているわけでもないというところが、頭の痛いところです。

延命スクリプトを書いてみる

ふと、GeoLite Legacy のデータベースは単純なので、無理やり GeoLite2 用の CSV から GeoLite Legacy の .dat を作ってみることはできないだろうかと思ってちょっと組んでみたら、1~2時間くらいで完成してしまいました。もしかしたら、同じように移行で悩んでいる人もいるかもしれないので、GitHub にスクリプトをアップしておきました。

実際の .dat へのコンバートは mteodoro/mmutils に同梱されている csv2dat.py を使っています。GeoLite Legacy はどうやら国の種類が増やせないらしく、コソボ (XK) のデータの部分で以下のようなエラーを吐いてしまうので、この部分を回避するために少しパッチを当てたものを使っています。今後、国が増えたりするとパッチの部分を増やす必要がでてきますね。

'XK': missing country. update pygeoip.const.COUNTRY_CODES?

導入方法

Python 2.7 にパスが通っていれば、こんな感じで導入や DB 生成ができるはずです。

cd /opt git clone https://github.com/hsur/GeoLite2toGeoLiteLegacy.git ./setup.sh ./generate.sh

標準で導入されている dat と生成された dat の比較は geoiplookup で行うことができます。

$ geoiplookup -f /usr/share/GeoIP/GeoIP.dat 160.16.237.171 GeoIP Country Edition: JP, Japan $ geoiplookup -f GeoLiteCountry.dat 160.16.237.171 GeoIP Country Edition: JP, Japan

最後に OS 標準の .dat のリンクを書き換えておけば導入は完了です。

ln -sf /opt/GeoLite2toGeoLiteLegacy/GeoLiteCountry.dat /usr/share/GeoIP/GeoIP.dat

データは1ヶ月に1回しか更新されないので、たまに手動で実行するくらいで大丈夫なはずです。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/10312
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン