一人暮らし一周年

マンションで一人暮らしを始めて一年経った(*´ェ`)

この一年間でたくさんの新しいことに触れた。

Android アプリ開発に Java
Webスクレイピングや画像処理に Python
Ruby on Rails で REST API の開発に Ruby

便利なツールもたくさん教わった(*゚ェ゚*)
Middleman
Serverspec
Gitlab の導入で SVN から Git へ移行した。

Let’s Encrypt で無料のSSL証明書を発行したり(*゚ェ゚*)

1U Fanless Server

1U Fanless Server を購入した(*´ェ`)

Wow!ファンレスなので全く音がしない(*゚ェ゚*)

CPU は Intel の Xeon E3-1220L V2 で TDP 17W の 低消費電力!

マザーボードは ASUS P8B-M

ストレージは Intel SSD 520 Series 120GB SSDSC2CW120A310

このファンレスサーバーにCentOSを入れて運用する予定(*´ェ`)

CentOS6.2でPostfix+DovecotのIPv6無効化

PostfixがデフォルトでIPv6が有効になってるので

vi /etc/postfix/main.cf
# Enable IPv4, and IPv6 if supported
#inet_protocols = all
inet_protocols = ipv4

に変更。

DovecotもデフォルトでIPv6が有効になってるので

vi /etc/dovecot/dovecot.conf
# A comma separated list of IPs or hosts where to listen in for connections. 
# "*" listens in all IPv4 interfaces, "::" listens in all IPv6 interfaces.
# If you want to specify non-default ports or anything more complex,
# edit conf.d/master.conf.
#listen = *, ::
listen = *

に変更(*´ェ`)

Apacheログを指定の日数で取り出すシェルスクリプト 2

“今日を含まない”指定した日数で取り出すか
“今日を含む”指定した日数で取り出すか指定できるようにした(*´ェ`)

-t オプションを付けると today で“今日を含む”
-y オプションを付けると yesterday で“今日を含まない”

#!/bin/bash

######################
#
# option  : -t[--today]|-y[--yesterday]
#
# version : Charlie
# author  : foloro
#
######################

#使用方法
function usage() {
	echo "使用方法 : $0 -t|-y 日数" 1>&2
}

#引数の数をチェック
if [ $# -ne 2 ]; then
	usage
	exit 1
fi

#引数のオプションをチェック
if ! [ $1 == "-t" -o $1 == "-y" -o $1 == "--today" -o $1 == "--yesterday" ]; then
	usage
	exit 1
fi

#引数の日数が数字かチェック
if [ `expr "$2" : '[[:digit:]]*'` -eq 0 ] > /dev/null ; then
	usage
	exit 1
fi

#引数の過去の日数をチェック
if [ $2 -lt 1 ]; then
	echo "日数は1以上の値で指定してください" 1>&2
	exit 1
fi

#日付を配列に格納する
DAYNUM=$2

case $1 in
  "-t" | "--today" )
	for (( i = 0; i < $DAYNUM; i++ ))
	do
		DAYS[i]=`LANG=C date -d "$i days ago" +"%d/%b/%Y"`
	done
	;;
  "-y" | "--yesterday" )
	for (( i = 1; i <= $DAYNUM; i++ ))
	do
		DAYS[i-1]=`LANG=C date -d "$i days ago" +"%d/%b/%Y"`
	done
	;;
  * )
	usage
	exit 1
	;;
esac

searchQuery=${DAYS[0]}

for (( i = 1; i < $DAYNUM; i++ ))
do
	searchQuery="$searchQuery""|""${DAYS[$i]}"
done

grep -E $searchQuery

使い方
シェルスクリプトをcutlogday.shという名前で作成して
Apacheのアクセスログがspecial-forces.jp-access_log-yyyymmddで“今日を含む”過去10日間のログが欲しい場合

cat /var/log/httpd/special-forces.jp-access_log* | ./cutlogday.sh -t 10 > matometa.log

もしこのシェルスクリプトをパイプなしで実行した場合

./cutlogday.sh -t 10

標準入力となる(*´ェ`)

Version Delta へ続く。

Apacheログを指定の日数で取り出すシェルスクリプト

Apacheのアクセスログから“今日[実行日]を含まない”指定した日数分を取り出すシェルスクリプトがあれば便利だなと思って作ってみた(*´ェ`)
というより必要だったのだ(*´ェ`)>

イメージにするとこんな感じ
Apacheのアクセスログは月別に保存されている。
cutlogday

#!/bin/bash

######################
#
# version : Alpha
# author  : foloro
#
######################

#引数の数をチェック
if [ $# -ne 3 ]; then
	echo "使用方法 : $0 過去の日数 入力ファイル 出力ファイル"
	exit 1
fi

#引数の過去の日数をチェック
if [ $1 -lt 1 ]; then
	echo "日数は1以上の値で指定してください"
	exit 1
fi

#引数の入力ファイルが存在するか
if [ -f $2 ]; then
	echo "ファイルが存在しません"
	exit 1
fi

#変数に引数の日数、入力ファイル、出力ファイルのパスを格納する
DAYNUM=$1
INPUTFILE=$2
OUTPUTFILE=$3

for (( i = 1; i <= $DAYNUM; i++ ))
do
	DAYS[i-1]=`LANG=C date -d "$i days ago" +"%d/%b/%Y"`
done

searchQuery=${DAYS[0]}

for (( i = 1; i < $DAYNUM; i++ ))
do
	searchQuery="$searchQuery""|""${DAYS[$i]}"
done

echo $searchQuery

cat $INPUTFILE | grep -E $searchQuery > $OUTPUTFILE

使い方
シェルスクリプトをcutlogday.shという名前で作成して
Apacheのアクセスログがspecial-forces.jp-access_log-yyyymmddで過去100日間のログが欲しい場合

./cutlogday.sh 100 /var/log/httpd/special-forces.jp-access_log* matometa.log

とすれば、matometa.logに指定した今日を含めない過去100日分のログが書き出されている(*´ェ`)

という風に使おうと思っていたらどうもスマートじゃない気がする(*´ェ`)
友達から“UNIXという考え方”という本を薦められて買って読んだらピンと来た∑(*゚ェ゚*)ピコン!

そして書き直したコードがこっち

#!/bin/bash

######################
#
# version : Bravo
# author  : foloro
#
######################

#引数の数をチェック
if [ $# -ne 1 ]; then
	echo "使用方法 : $0 過去の日数"
	exit 1
fi

#引数の過去の日数をチェック
if [ $1 -lt 1 ]; then
	echo "日数は1以上の値で指定してください"
	exit 1
fi

#日付を配列に格納する
DAYNUM=$1

for (( i = 1; i <= $DAYNUM; i++ ))
do
	DAYS[i-1]=`LANG=C date -d "$i days ago" +"%d/%b/%Y"`
done

searchQuery=${DAYS[0]}

for (( i = 1; i < $DAYNUM; i++ ))
do
	searchQuery="$searchQuery""|""${DAYS[$i]}"
done

grep -E $searchQuery

使い方
シェルスクリプトをcutlogday.shという名前で作成して
Apacheのアクセスログがspecial-forces.jp-access_log-yyyymmddで過去10日間のログが欲しい場合

cat /var/log/httpd/special-forces.jp-access_log* | ./cutlogday.sh 10 > matometa.log

こうゆうことなのだ∑(*゚ェ゚*)

でも過去2日間のログを取り出すだけで過去何ヶ月ものログを開いているのは無駄な気がする(*´ェ`)

Version Charlie へ続く。

MuninでHDDの使用量と空き容量を監視

MuninでHDDの使用量と空き容量を表示してみよう(*´ェ`)

まーずーは
Munin Exchange | freedisk plugin
からプラグインをダウンロード。
作者さんのサイトはこちら

ダウンロードしたプラグインを
/usr/share/munin/plugins/
ディレクトリに入れる。
実行権限を付加するのを忘れないように!d(゚ー゚*)o

df
コマンドで監視したいHDDを調べる

私が監視したいのは rootfs と home なので
ln -s /usr/share/munin/plugins/freedisk /etc/munin/plugins/freedisk_roots


ln -s /usr/share/munin/plugins/freedisk /etc/munin/plugins/freedisk_home

にした(*´ェ`)

sda1の場合は
ln -s /usr/share/munin/plugins/freedisk /etc/munin/plugins/freedisk_sda1

そしてmunin-node を再起動
/etc/rc.d/init.d/munin-node restart

5分ほど待った後・・・

ハイ、表示された(*゚ェ゚*)
munin-freedisk

んがしかし、このままでは空き容量のラインがディスク容量の裏に描画されており見難いというか見えないなので表にだしてやる(*´ェ`)

ついでに使用量も表示するようにプラグインを改変する(*´ェ`)
改変したコードを公開していいか分からないので公開しません <(_ _)>

うん見やすい(*゚ェ゚*)
munin-freedisk

MuninでHDDの温度を監視

MuninでHDDの温度を表示してみよう(*´ェ`)

まーずーは
yum -y install hddtemp
でインストールする
それから
vi /etc/sysconfig/hddtemp
hddtempの設定ファイルを開いて
HDDTEMP_OPTIONS="-l 127.0.0.1 /dev/sda"
という風に /dev/sda を追記する

そしてhddtempを実行する
hddtemp /dev/sda
そうすると
/dev/sda: GB0160EAPRR: 34°C
と表示された(*´ェ`)

そしてそして Munin のプラグインへのリンクを作成してln -s /usr/share/munin/plugins/hddtemp /etc/munin/plugins/hddtemp

プラグインの設定をする
vi /etc/munin/plugin-conf.d/munin-node
設定ファイルを開いたら
[hddtemp]
user root
env.drives sda

を追記する
どのように設定するかはプラグインファイルに書いてある(*´ェ`)

最後にmunin-node を再起動
/etc/rc.d/init.d/munin-node restart

5分ほど待った後・・・

ハイ、表示された(*゚ェ゚*)

MuninでCPUの温度を監視

MuninでCPUの温度を表示してみよう(*´ェ`)

まーずーは
yum -y install lm_sensors
でインストール

sensors-detect
と入力して実行。

sensors
と入力して実行すると

coretemp-isa-0000
Adapter: ISA adapter
Core 0: +32.0°C (high = +83.0°C, crit = +99.0°C)
coretemp-isa-0001
Adapter: ISA adapter
Core 1: +27.0°C (high = +83.0°C, crit = +99.0°C)
coretemp-isa-0002
Adapter: ISA adapter
Core 2: +31.0°C (high = +83.0°C, crit = +99.0°C)
coretemp-isa-0003
Adapter: ISA adapter
Core 3: +27.0°C (high = +83.0°C, crit = +99.0°C)

と表示された(*´ェ`)

後はMuninの設定をする

ln -s /usr/share/munin/plugins/sensors_ /etc/munin/plugins/sensors_temp

プラグインの設定
vi /etc/munin/plugin-conf.d/munin-node
を開いて
[sensors_*]
user root

と追記する。
そして最後に munin-node を再起動
/etc/rc.d/init.d/munin-node restart

5分ほど待った後・・・

ハイ、表示された(*゚ェ゚*)

初めてのシリアル通信

今まで何に使うんだろうと思っていたシリアルポートを使う時がきた(*´ェ`)

現在、サーバー機はこのようになっている。

リモートでアクセスできて便利だけれど、ルーターやLANケーブルの故障、サーバーのNICやSSHの設定に失敗したら時にリモートで繋がらなくなってしまう(*´ェ`)

私が以前、NICやSSHの設定を失敗した時はサーバー機にマウスやキーボード、モニタを繋げて設定し直していた(*´ェ`)

それが面倒なのでなんとかならないかなと思ってたらシリアルポートを使ってLinuxにアクセスできるみたいなのでやってみた(*゚ェ゚*)

サーバー機はHP ProLiant ML110 G6でクライアント機はHP Mini 2140 Notebook PC
サーバーOSはFedora 15
クライアントOSはWindows Xp
シリアルケーブルはKRS-403XF1KとSRC06USB(今時のPCはシリアルポートがついてないのでUSBに変換)

SRC06USBのドライバを入れて接続、デバイスマネージャーを見てみると

COM4(プロパティで変えられるけれどそのまま使う)に割り当てられているので

PoderosaでCOM4を選択してシリアル接続する、、、前にFedora 15の方でシリアルコンソールを使う設定をしないといけない(*´ェ`)

以下Fedora 15での設定方法
シリアルコンソールを使ったログインを許可する
vi /etc/inittab

s0:12345:respawn:/sbin/agetty -L 9600 ttyS0
を追加する。ttyS0は
dmesg | grep serial

dmesg | grep tty
などで見つければいいかな(*´ェ`)

init q
で設定反映させる

それからマスターコンソールと仮想コンソールを作成する
cd /dev
rm -f console tty0
mknod -m 622 console c 5 1
mknod -m 622 tty0 c 4 0

ブートローダのGRUBを設定する
vi /boot/grub/grub.conf

serial --unit=0 --speed=9600 -word=8 --parity=no --stop=1
terminal --timeout=10 serial console


起動オプションに
console=tty0 console=ttyS0,9600n8r
を追加する
そして
splashimage=(hd0,0)/grub/splash.xpm.gz
をコメントアウトする
私の環境だとこんな感じ(*´ェ`)
#boot=/dev/sda
default=0
timeout=0
#splashimage=(hd0,0)/grub/splash.xpm.gz
serial --unit=0 --speed=9600 -word=8 --parity=no --stop=1
terminal --timeout=10 serial console
hiddenmenu
title Fedora (2.6.38.8-32.fc15.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.38.8-32.fc15.x86_64 ro console=tty0 console=ttyS0,9600n8r root=/dev/mapper/vg_server-lv_root rd_LVM_LV=vg_server/lv_root rd_LVM_LV=vg_server/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=ja_JP.UTF-8 KEYTABLE=jp106 rhgb quiet
initrd /initramfs-2.6.38.8-32.fc15.x86_64.img

最後にサーバーを再起動させてシリアル接続してみる(*´ェ`)

Poderosaでシリアル接続を選択してCOM4にして接続、はい繋がった(*゚ェ゚*)

Enter押すとログイン画面が出てきてばっちり(*゚ェ゚*)

参考サイト

ITmedia エンタープライズ : Linux Tips「シリアルコンソールを使いたい」
Linux シリアルコンソール接続設定 – Metonymical Deflection
Linux/シリアルコンソール – PukiWiki

httpdのアクセスログに大量のループバックアドレス

::1 - - [11/Jun/2011:19:15:05 +0900] "GET / HTTP/1.0" 403 202 "-" "Wget/1.12 (linux-gnu)"
::1 - - [11/Jun/2011:19:20:04 +0900] "GET / HTTP/1.0" 403 202 "-" "Wget/1.12 (linux-gnu)"
::1 - - [11/Jun/2011:19:25:04 +0900] "GET / HTTP/1.0" 200 13 "-" "Wget/1.12 (linux-gnu)"
::1 - - [11/Jun/2011:19:30:04 +0900] "GET / HTTP/1.0" 200 13 "-" "Wget/1.12 (linux-gnu)"



::1 - - [13/Jun/2011:10:00:04 +0900] "GET / HTTP/1.0" 200 13 "-" "Wget/1.12 (linux-gnu)"

まずステータスコードが403の方は httpd.conf に書かれている
DocumentRoot "/var/www/html" #←に
DirectoryIndex index.html index.php #←で設定したファイルが見つからないので403が出ていた

ダミーのindex.htmlを置くとステータスコードは200になった(*´ェ`)

そしてIPv6のループバックアドレスが記録されていたのは
SetEnvIf Remote_Addr 127.0.0.1 no_log #←IPv4のループバックアドレスだけログを記録しないようにしていた
SetEnvIf Remote_Addr ::1 no_log #←なのでIPv6のループバックアドレスも記録しないようにした