Linux / Unix / Interix」カテゴリーアーカイブ

geoiplookup で発信元をみる。

なんとなく、サーバ管理をしている人なら、
どこからアクセスされてきたんだろうとか気になることがあるはず。

というわけで、 GeoIP のデータベースを使って、どこからアクセスしてきたかを見てみます。

 

1.インストール。

CentOS とか Fedora だと、 geoip をインストールすれば入ります。

# yum install geoip

Ubuntu さんとか LinuxMint さんも同じなんじゃないかと思います。

 

2.データベースを更新する。

MaxMind GeoIP Country Database

http://www.maxmind.com/app/geolitecountry

MaxMind GeoIP City Database

http://www.maxmind.com/app/geolitecity

この2つをダウンロードします。

http://www.maxmind.com/app/installation?city=1

このページに従いますと、

# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
# gzip -d GeoLiteCity.dat.gz
# gzip -d GeoIP.dat.gz
# mv GeoIP.dat /usr/share/GeoIP/
# mv GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat

という感じでしょうかw

 

3.使う。

$ geoiplookup 111.89.178.190
GeoIP Country Edition: JP, Japan
GeoIP City Edition, Rev 1: JP, 40, Tokyo, N/A, 35.685001, 139.751404, 0, 0
GeoIP City Edition, Rev 0: JP, 40, Tokyo, N/A, 35.685001, 139.751404

こんな感じ。

image

ちなみに地図はこんな所出してますが、

$ nslookup sony.ne.jp
Server:         192.168.1.3
Address:        192.168.1.3#53

Non-authoritative answer:
Name:   sony.ne.jp
Address: 111.89.178.190

この場所に民間企業があるとは思えないので、

位置のずれを感じるわけですが。

(この企業さんには、ノートパソコンで主にお世話になっておりまする)

 

でも、国の判定とかそれぐらいには使えそう。

あくまでも気休め・・ですがw

 

4.適当に使ってみる。

$ cat access.log* | cut -f1 -d" " | sort | uniq | awk '{ print system("geoiplookup " $1) }'

たとえばこんな感じ。

Apache のログからIP アドレス出してきて、geoiplookup に掛けまくります。

動作サンプルは個人情報がもろもろ入っているので止めますが。

であであ。

手元の CentOS に whois 入ってなくて焦った。

たぶんインストール時に省いたんだと思う。私。

 

とりあえず、whois をインストールしようとしてちょっとはまったのでメモ。

# yum install jwhois

というわけで、 whois ではなくて jwhois パッケージを入れるらしい。

コマンド自体は whois で行けるので、

# whois kantei.go.jp

[Querying whois.jprs.jp]
[whois.jprs.jp]
[ JPRS database provides information on network administration. Its use is    ]
[ restricted to network administration purposes. For further information,     ]
[ use 'whois -h whois.jprs.jp help'. To suppress Japanese output, add'/e'     ]
[ at the end of command, e.g. 'whois -h whois.jprs.jp xxx/e'.                 ]

Domain Information:
a. [Domain Name]                KANTEI.GO.JP
g. [Organization]               The Prime Minister's Official Residence
l. [Organization Type]          Government
m. [Administrative Contact]     MK072JP
n. [Technical Contact]          MK072JP
p. [Name Server]                ns3.kantei.go.jp
p. [Name Server]                ns4.kantei.go.jp
s. [Signing Key]
[State]                         Connected (2012/06/30)
[Registered Date]               1994/06/24
[Connected Date]                1994/06/27
[Last Update]                   2011/07/01 01:15:10 (JST)

なんとなく逆引き。ってことできちんと動きまする。

dovecot 2.x で SSL が応答なしになって困った。

というか、半日こいつでつぶしました。

/etc/dovecot/conf.d にある、 10-ssl.conf をいじるわけですが、
この際、

NG :

ssl_cert = /tmp/server.crt
ssl_key = /tmp/server.key
ssl_ca = /tmp/ca.pem

だとエラーで、

OK :

ssl_cert = </tmp/server.crt
ssl_key = </tmp/server.key
ssl_ca = </tmp/ca.pem

だとおっけーなんだそうな。

要は、小なり記号「<」をつけろということらしい。

Hybrid MBR を GPT / MBR ディスクに変換する。

みむらです。

普通、GPT ディスクを MBR ディスクに直したりっていうのは、
ディスクの内容飛ばせーとか言われるんですが、面倒くさいのでいいのないかなーと探していたらありました。

ってことで、この先は Linux + CUI の世界ですが、

もしGUI で Windows で完結させたい人は、たぶん
窓の杜 – 【NEWS】米Paragon、BIOS-MBRからUEFI-GPTへWindows環境を移行できる「Migrate to UEFI」

この辺使うと幸せになれるんじゃないでしょうか。使ったことないので、保証はできません・・。

 

説明に入る前に Hybrid MBR とはなんぞやということですが、

簡単に言うと、本来 GPT ディスクは MBR の部分に、
「よくわからないけど、ディスクの全ては使われてるよ!」 という情報を書いて、
GPTの部分に本来のデータを書き込んでおきます。

ですが、GPT わけわからんなシステムの場合、これだと非常にまずいわけで、
そこで、MBR 領域に「ここからここまでが、起動領域、あとはしらん!」 みたいに有効な情報を書いておき、
いい感じにしてしまおうというものです。

ただ、GPT と MBR でデータの整合性がちゃんととれるのかというところで問題があり、
あんまりやらない方がいいのですが、古いシステムで使う場合や、 Mac で Windows を動かす場合に必要な用です。

 

で、この記事でやろうとしていることは、
どっちか一つにしよう! ということで、 GPT か MBR に一本化してしまおうと言うことです。

もちろん、後述する gdisk コマンドを使えば、相互にこれらを行き来できますが、
この記事の内容もそうですが、この操作によって、データを失っても私は責任を持てません。

やるのであれば、必ずバックアップを取った上で行ってください。


使うのは 「 gdisk 」というソフトウェアです。
往年の fdisk コマンドの GPT 版ととらえて、問題無いと思います。

(作業機は Linux Mint 12 を想定していますが、 Ubuntu でも動作すると思われます。)
(Fedora, CentOS などの Redhat 系は、適宜読み替えて頂ければ、問題ないかと思われます。)

 

1.gdisk をインストール。

$sudo aptitude install gdisk

追記:

debian であれば、 backports に転がっているようです。 ( ほっそーさんありがとうございます! )

(確認環境: debian squeeze)

 

2.gdisk を起動する。

この際、 /dev/ 以下のどのデバイスファイルが操作したい対象のディスクを指しているか

知っておく必要があります。

少し触れておきますと、

大抵が sd? というように、先頭2文字が sd で始まるファイルが割り当てられていることが多く、

1番目の接続が sda, 2番目が sdb というように名前が振られています。

また、IDE 接続の場合は、 sd ではなく hd となり、 hda, hdb となっている可能性があります。

(ただ、IDE 接続でも sd で始まる場合が多いようです。前は見かけたのですがやはり libata の関係ですかね。

その他、ソフトウェア RAID

マザーボード上で提供されている RAID や、

Windows の場合は、コンピュータの管理から設定できる RAID など、

RAID コントローラを経由せずに、ソフトウェアで提供されている RAID

を使っている場合、

/dev/mapper/ 以下にいい感じでデバイスファイルが用意されている場合があります。

その場合は、そのファイルを使用してください。

・・・よくわからない場合や、

実際に RAID を使っていてよくわからない人は、ここから先は特に自己責任でお願いします。

 

例: /dev/sda が対象のHDD の場合。

$ sudo gdisk /dev/sda

なお、この先の記述は 対象HDD が /dev/sda である場合を想定しています。

適宜対象環境に併せて、読み替えてください。

Hybrid MBR から GPT にする場合は 3.1 
Hybrid MBR から MBR にする場合は 3.2

単なるMBR ディスクから GPT にする場合は 3.3

にそれぞれ記述しましたので、ご参照ください。

(純粋な GPT ディスク から MBR ディスクにする場合も、 3.2 で紹介する方法が使えます。)

 


3.1 Hybrid MBR から GPT ディスクにする。

GPT fdisk (gdisk) version 0.6.14

Partition table scan:
  MBR: hybrid
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with hybrid MBR; using GPT.

Command (? for help): q

GPT が present になっていることを確認し、 q を打ち、いったん閉じる。

$ sudo dd if=/dev/zero of=/dev/sda bs=512 count=1

このようにコマンドを打ち(数値は小さくするのはいいですが、大きくするのはNG) MBR を消す。

$ sudo gdisk /dev/sda

GPT fdisk (gdisk) version 0.6.14

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with corrupt MBR; using GPT and will write new
protective MBR on save.

MBR が not present となり、削除されたことがわかる。

Command (? for help): w

w を打って Enter

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed, possibly destroying your data? (Y/N): Y

Y を打って Enter

あとは再起動すれば完了となります。

 


3.2 Hybrid MBR から MBR にする。

2 にて起動した状態のまま、

Command (? for help): r

r を打って Enter

Recovery/transformation command (? for help): g
Sorted GPT partitions and their current conversion status:
                                      Can Be
Number    Boot    Size       Status   Logical   Code   GPT Name
(なにかでる)

g を打って Enter

Type partition to change, 0 to accept, -1 to abort: 0

Converted 3 partitions. Finalize and exit? (Y/N): Y
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.

数字の 0 を打って Enter,  そして 次で Y と打つことで、変換が完了し、

再起動すると適用されます。

 


3.3 MBR から GPT への変換。

MBR から GPT への変換は危険なにおいがするのですが、うーむ。

というのも、

GPT 形式のディスクは MBR 領域(ディスク先頭)と GPT 領域(ディスク末端)の両方を持っていますが、

MBR 形式のディスクは MBR 領域しか持っていないため、どうするのだろう。と。

末端のデータが壊れないのかなぁ、と心配だったりします。

$ sudo gdisk /dev/sda

GPT fdisk (gdisk) version 0.6.14

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present

MBR : MBR only となっていることから、 MBR ディスクであることがわかる。

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed, possibly destroying your data? (Y/N): Y
OK; writing new GUID partition table (GPT).
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.

w を押して Enter, Y を押して Enter

これで GPT ディスクに変換されます。

distcc と ccache でビルド高速化

みむらです。

複数台のマシンをお持ちの方、絶対いらっしゃいますよね。
ついでに、隅っこで寝てるとかそういうパターン、絶対ありますよね。

ということで、そういうマシンをコンパイルの際に利用して、是非とも効率よくパワーを使いましょう。

ついでに、ccache を有効にして、キャッシュしましょうという、そんなお話。

追記ですが、 Mac OS X にはこれがなにやら、標準で入っているそうです。
Mac マシンを大量にお持ちの方は、是非ともやってみるといいんじゃないでしょうか!


ということで、カーネルを並列ビルドすることを例にして、使い方。 (Linux Mint 12 でテストしてます。)

 

1.distcc と ccache をインストール。

$ sudo aptitude install distcc ccache

 

2./etc/default/distcc を修正する。

$ sudo vim /etc/default/distcc

# 書き換えるのは下記3点

# 動作を許可させる
STARTDISTCC="false" -> STARTDISTCC="true"

# 接続可能ホストを設定する。
ALLOWEDNETS="127.0.0.1" -> ALLOWEDNETS="192.168.1.0/24"

# リスナとなる NIC の IP アドレスを入力
LISTENER="127.0.0.1" -> LISTENER="192.168.1.200"

 

3. distcc を起動する。

$ sudo service distcc start

 

4. (操作マシン側にて) 接続先のホストを、 DISTCC_HOSTS に設定

(例 192.168.1.200 と 192.168.1.201 が処理マシンだった場合 )

$ export DISTCC_HOSTS="localhost 192.168.1.200 192.168.1.201"

 

5.ビルド

# configure を行う場合
$ CC="ccache distcc gcc" CXX="ccache distcc g++" ./configure

# make を行う場合
#
# なおこの場合、物理コア数の2倍を同時実行数に指定すると、
# なんかいい感じらしいです。
#
# http://distcc.googlecode.com/svn/trunk/doc/web/faq.html
#
# 今回の場合は、各ノードに 4スレッドの CPU が乗っていて、
# 自分と、それ以外の2台のマシンがあると仮定。
#

$ make -j 24 CC="ccache distcc gcc" CXX="ccache distcc g++" HOSTCC="ccache distcc gcc" HOSTCXX="ccache distcc g++"

たぶん、HOSTCC と HOSTCXX の指定は、カーネルビルドの時ぐらいしかいらない気がしなくも。

ついでに、 configure で CC と CXX 指定したら、 make 時はいらなそうな。

とりあえず、自分の備忘録ってことで。メモメモ。

 

追記事項としては、

ビルド環境のコンパイラとかインクルードファイルとかは一緒にしておいた方がいいよということ。

あわせておかないと、面倒なことになるようです。

ソフト面だけ合っていれば問題なさそうなので、ハードウェア面は、プロセッサのアーキテクチャが違うとか、

そういう系を除けば大丈夫だと思います。