2019年3月10日日曜日

FreeBSD に Perl の MaxMind::DB::Readers::XS モジュールをいれてみた

 前回 Perl モジュールの GeoIP2 を使う (on FreeBSD) として,GeoIP2 の使い方のメモを書いておいた。 ところが,Perl の GeoIP2 モジュールを使うと,IP アドレスから住所情報を得るのが非常に遅い。 複数件検索をかけると,日が暮れるんじゃないか?と思うぐらい遅い。 そのことについて書こう。

 きっかけは,前回も書いたが,FreeBSD の ports ツリーから,「Geo::IP」用のエントリーが削除されたことに始まる。 Geo-IP は MaxMind 社のデータベースを使うためのモジュールで,これまで無料で使える精度のあまり高くない「GeoLite」データベースを使うのに利用していた。 しかし,MaxMind 社がデータベースの構造を変えたみたいで,今後は「GeoIP2」を使え,というメッセージが出てきたので「GeoIP2」を使ってみた。それ自体はいいのだが,なにせデータの読み出しが遅い。ほんとに複数件の IP アドレスの住所情報を調べると,無限に時間がかかる感じがした。

 これをネットで調べると,どうも「MaxMind::DB::Readers::XS」を使うといいと出てくる。 前回も書いたが,GeoIP2 をインストールすると,下記のようなものが一緒にインストールされる。
・GeoIP2
・GeoIP2::Database::Reader
・GeoIP2::Model::City
・/usr/local/lib/libmaxminddb.so
などがインストールされ,さらに
MaxMind::DB::Reader
がインストールされる。

Perl モジュールの GeoIP2 を使う (on FreeBSD)

 今回は,GeoIP2 を使った話を書こうと思う。

 きっかけは,FreeBSD の ports ツリーから,「Geo::IP」用のエントリーが削除されたことに始まる。 確か「/usr/ports/net/p5-Geo-IP」だったかな? Geo-IP は MaxMind 社のデータベースを使うためのモジュールで,これまで無料で使える精度のあまり高くない「GeoLite」データベースを使うのに利用していた。 しかし,MaxMind 社がデータベースの構造を変えたみたいで,今後は「GeoIP2」を使え,というメッセージが出てきた。 そこで,「GeoIP2」を使うべく,下記の perl モジュールをインストールしてみた。
/usr/ports/net/p5-GeoIP2/

 すると,インストールは簡単にできた。問題は使い方。これがわかるのに意外と手間取ってしまった。

FreeBSD を 12.0-RELEASE に上げたら,ssh でログインできなくなって困った件

 久しぶりに書き込むような気がするが,それは置いておいて,今回の話題について書こう。

 今回は FreeBSD の OS のバージョンを 11.2-RELEASE から 12.0-RELEASE に上げた,というお話。 12.0-RELEASE に上げる事自体はよくなるが,その後,ssh でリモートからログインできなくなってしまった。 そのことに着いて書こうと思う。

 始まりは FreeBSD の stable バージョンが 12.0-RELEASE になっていることに気づいたことから始まる。 基本的に OS のバージョンは最新のものの方がいいと思っている。 ただし,メジャーバージョンが上がるとトラブルも多いので,すぐにはアップグレードしない,というのが平民の考え方なのだが,12.0-RELEASE になってからはかなり時間が経っているので,今回はいいかなぁ?と思ってアップグレードしてみた。

 そこで,いつものように freebsd-update を使って,バージョンを上げてみた。 まずは,下記の2個のコマンドでカーネルのアップグレードを行った。いつものように結構時間がかかる。
# freebsd-update upgrade -r 12.0-RELEASE
# /usr/sbin/freebsd-update install
それから,再起動して,もう一度
# /usr/sbin/freebsd-update install
でその他のソフトウェアのアップグレードを行う。
 その後に,pkg のアップグレードのために,「pkg」アプリ自体をアップグレードしてから,パッケージを作り直す。
# pkg-static install -f pkg
# pkg upgrade -y
というのが,いつもの手順。