GeoIP on Ubuntu

表題の通り。UbuntuでGeoIPを使いたい。

■ 環境

  • Ubuntu 14.04

■ GeoIP

まずは検索。

$ sudo apt-cache search geoip
  :
geoip-bin - IP lookup command line tools that use the GeoIP library
geoip-database - IP lookup command line tools that use the GeoIP library (country database)
geoip-dbg - debugging symbols for the GeoIP packages
  :
$

この辺りであろうか。

$ sudo apt-get install geoip-bin

何がインストールされたのか確認。

$ dpkg -L geoip-bin
/.
/usr
/usr/lib
/usr/lib/geoip
/usr/lib/geoip/geoip-generator
/usr/lib/geoip/v4-to-v6-layout.pl
/usr/share
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/geoiplookup6.1.gz
/usr/share/man/man1/geoiplookup.1.gz
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/geoip-bin
/usr/share/doc
/usr/share/doc/geoip-bin
/usr/share/doc/geoip-bin/copyright
/usr/bin
/usr/bin/geoiplookup
/usr/bin/geoiplookup6
/usr/share/doc/geoip-bin/changelog.Debian.gz
$

`geoiplookup`がインストールされているのでとりあえずはこれで良いだろう。”GeoIP.dat“が無いので、いつの時点のものになるのだろうか?それとも外部にアクセスしにいっているのだろうか。”geoip-database“というパッケージもあるのでそれが怪しそうである。

とりあえずはやりたいことができたので終了。

以上。

■ 関連

cronでの%をエスケープ

表題の件について。久しぶりになんだっけこれ?とハマったのでメモ。

■ 環境

  • Ubuntu 16.04

■ cron

`cron`で実行されるジョブの中で`date`で日付を入れた処理をいれたらうまく実行してくれなかった。例えば下記のような感じのジョブとする。

crontab -l
0 1 * * * touch /tmp/`date --date '-1 day' +'%Y%m%d'`.txt
$

これは失敗する。下記のようなメールが飛んでいた。

/bin/sh: 1: Syntax error: EOF in backquote substitution

`date`等の”%“はエスケープする必要がある。下記のように書かなければならない。

crontab -l
0 1 * * * touch /tmp/`date --date '-1 day' +'\%Y\%m\%d'`.txt
$

なんかいつも同じ間違いをしている気がするので自戒のためにメモ。

以上。

package upgrade

Ubuntuにおいて表題をする。

■ 環境

  • Ubuntu 16.04

■ ssh login

ログインした時に下記のメッセージが表示された。

$ ssh host-001
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-64-generic x86_64)

* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage

  Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud

36 packages can be updated.
21 updates are security updates.


Last login: Thu Mar 30 19:05:45 2017 from XX.XX.XX.XX
ubuntu@host-001:~$

というわけでパッケージをアップデートしたい。RHEL系Linuxであれば`yum update`で済むのであるが、Ubuntuでは少々動きが違うようだ。

$ sudo apt-get update
$ sudo apt-get upgrade

`update`は`apt-get`ではパッケージリスト(?)を更新するだけ。パッケージを全て`yum update`みたいなことをするには`upgrade`である。

これで終わりかと思いきや、ログインした時にまた下記のメッセージが。

$ ssh host-001
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-64-generic x86_64)

* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage

  Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud

7 packages can be updated.
7 updates are security updates.


*** System restart required ***
Last login: Thu Mar 30 19:10:46 2017 from XX.XX.XX.XX
ubuntu@host-001:~$

消えない7packages…。しかも”security updates“と来たものだから気になる。というわけで調べてみると、”kernel“系のパッケージは`upgrade`では更新されないとのこと。下記で更新。

$ sudo apt-get dist-upgrade

これで消えてくれた。

以上。

apt-cache policy

Ubuntuにおいて表題のコマンドについて。

■ 環境

  • Ubuntu 16.04

■ apt-cache

普段使う`apt-cache`のサブコマンドは下記ばかりである。

$ sudo apt-cache search

インストールしたいものを探す時に使用している。でもこれだとversionがわからないので、”show“を使ったりもする。

$ sudo apt-cache show nginx
Package: nginx
Priority: optional
Section: web
Installed-Size: 37
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Kartik Mistry <kartik@debian.org>
Architecture: all
Version: 1.10.0-0ubuntu0.16.04.4
  :
$

versionもこれだと記載されているのだが、情報が多すぎて見づらいと感じていた。という時に知ったのが”policy“である。

$ sudo apt-cache policy nginx
nginx:
  インストールされているバージョン: 1.10.0-0ubuntu0.16.04.4
  候補:               1.10.0-0ubuntu0.16.04.4
  バージョンテーブル:
*** 1.10.0-0ubuntu0.16.04.4 500
        500 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages
        100 /var/lib/dpkg/status
     1.9.15-0ubuntu1 500
        500 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
$

インストールしたいパッケージのversion等、自身が欲しい情報が記載されているのでこれで十分である。

以上。

Ubuntuのログイン時間を知りたい

表題の通り。とある複数人がアクセスするサーバに、SSHでログインした時間等を取得したい。単なるメモである。

■ 環境

  • Ubuntu 16.04

■ auth.log

どうやら`/var/log/auth.log`に記載されるようである。例えば下記のような感じのログが取得できる。

Mar 28 19:10:44 ip-XX-XX-XX-XX sshd[9284]: Accepted publickey for ubuntu from XX.XX.XX.XX port 43794 ssh2: RSA SHA256:XXxx0XxXXXXXXXX
Mar 28 19:10:51 ip-XX-XX-XX-XX sshd[9242]: Received disconnect from XX.XX.XX.XX port 43794:11: disconnected by user

ここから取得できそうである。

from XX.XX.XX.XX“のように記載されるIPと”port XXXXX“で一致したものが一つの接続と捉えることができそうだ。

このログ自体は`logrotate`の下記のファイルでrotateしてくれている。

/etc/logrotate.d/rsyslog

下記設定が適用されている。

{
     rotate 4
     weekly
     missingok
     notifempty
     compress
     delaycompress
     sharedscripts
     postrotate
          invoke-rc.d rsyslog rotate > /dev/null
     endscript
}

以上。