2010年4月26日月曜日

CentOSでNagios(インストール&起動)

スズキです。

以下のように"yum(rpmforge)"で簡単に導入できます。

# yum install nagios

しかしNagiosを起動してみると、何故か下記のようなエラーが発生してしまいました...

# /etc/init.d/nagios start
Starting nagios:CONFIG ERROR! Start aborted. Check your Nagios configuration.

かなり、はまってたのですが、結論として、
たぶん、SELinuxを無効にすると大丈夫なようです。

そして、再度Nagiosを起動して、
Apacheも起動すると、

http://xxx.xxx.xxx/nagios/

でNagiosのWebインターフェースが確認できます。

先は長いなー...

--------
http://www.suz-lab.com

2010年4月25日日曜日

WebminにWebminサーバを登録

スズキです。

WebminのClusterとか利用しようとすると、
Clusterに参加させたいWebminサーバを、予め登録しておく必要があります。

で、Webminサーバの登録をどこでやるかというと、

Webmin > Webmin サーバの索引

で行います。(メニューの日本語化が前提です...)
※ Clusterでは無いので注意が必要です。

上記の「新規サーバの登録」で、他のWebminサーバを登録することができます。
(登録したサーバは、Clusterでも利用できるようになります)

登録時に「Webmin 経由でログイン」を選択すると、
もとWebmin内で登録した外部Webminの管理機能を見ることができます。
※ 「サーバへの標準リンク」だと普通に外部Webminにアクセスしなおします。

この機能を利用すると、EC2で起動している複数のマシンの管理が、
管理サーバにアクセスしただけで、すべてできる可能性もあります。

セキュリティグループ次第だなー...

--------
http://www.suz-lab.com

SUZ- LAB謹製 CentOS AMI アップデート (5.4.9)

スズキです。

"5.4.8"と変わらず、"us-west-1"で"ebs"の"64-bit"のみしか利用できません...
(Manifestは下記の通りです)
811118151095/suz-lab_ebs_centos-core-x86_64-5.4.9

今回のポイントは、見落としていた不必要なファイル/ディレクトリの削除と、
Webminリポジトリ(yum)の追加です。
http://blog.suz-lab.com/2010/04/yumwebmin.html

Webminをデフォルトでインストールしておくかどうかは、
まだ、考え中です...

Enjoy!

--------
http://www.suz-lab.com

CentOSにDovecot(POPサーバ)

スズキです。

SMTPサーバ(Postfix)も落ち着いてきたので、
http://blog.suz-lab.com/2010/04/postfix.html
今度は、POPサーバです。

近頃は、Dovecotのようです。(IMAPもOKです)

ということで、"yum"でインストールです。

# yum install dovecot

そして、設定ファイル(/etc/dovecot.conf)をPOPのみ利用するように修正です。

--------【dovecot.conf】--------
...
#protocols = imap imaps pop3 pop3s
protocols = pop3
...
--------

最後に、サーバの起動です。

# /etc/init.d/dovecot start
# chkconfig dovecot on

確認として、外部のサーバからtelnetで接続してみます。

# telnet mail.suz-lab.com 110
--------
Trying xxx.xxx.xxx.xxx...
Connected to paraoku.com.
Escape character is '^]'.
+OK Dovecot ready.
USER user
+OK
PASS pass
+OK Logged in.
STAT
+OK 1 930
LIST
+OK 1 messages:
1 930
.
QUIT
+OK Logging out.
Connection closed by foreign host.
--------

上記のように、POPのコマンドが実行できればOKです。

今年はAWSがらみでサーバ関係の作業が多そうだなー...

--------
http://www.suz-lab.com

Postfixで外部のメールが受信できるように

スズキです。

CentOSに"yum"でPostfixをインストールした場合、
デフォルトのバインドアドレスがlocalhostになっているので、
外部サーバからのメールを受信することができません。

ですので"/etc/postfix/main.cf"を、下記のように調整します。

--------【main.cf】--------
#inet_interfaces = localhost
inet_interfaces = all
--------

これで、外部サーバからも、SMTPサーバにアクセスできるようになります。

念のため、リレーされないかのチェックです。

# telnet mail.suz-lab.com 25
--------
Trying xxx.xxx.xxx.xxx...
Connected to mail.suz-lab.com.
Escape character is '^]'.
220 mail.suz-lab.com ESMTP Postfix
HELO localhost
250 localhost
MAIL FROM: suzuki@sua-lab.com
250 2.1.0 Ok
RCPT TO:suzuki@suz-lab.com
554 5.7.1 <suzuki@suz-lab.com>: Relay access denied
--------
※ 上記は外部サーバで実行しています。

最後にPOPサーバ(Dovecot)やって、メール関係は終了です...

--------
http://www.suz-lab.com

"info"や"support"に注意(メールアカウント)

スズキです。

"info"や"support"と一メールアカウントは、下記のRFCにも定義されているものです。
http://blog.suz-lab.com/2009/06/rfc2142.html

CentOSに"yum"でPostfixをインストールすると、
"info"や"support"などのアドレスが、下記のように、すでに"/etc/aliases"に定義されています。

--------【aliases】--------
...
info: postmaster
support: postmaster
...
--------

ですので、"info"などのアカウントを作成して、それ宛にメールを送っても、
aliasesのほうが優先されてしまい、
何故かinfoアカウントでメールが受信できない?
状態になってしまいます。

メールサーバの設定は、久しぶりだなー...

--------
http://www.suz-lab.com

2010年4月23日金曜日

Webminのログインパスワードを変更

スズキです。

下記でWebminをインストールしたのですが、ログインできません...
http://blog.suz-lab.com/2010/04/yumwebmin.html

下記コマンドで、パスワードを設定しなおしたら、ログインできるようになりました。
# /usr/libexec/webmin/changepass.pl /etc/webmin root xxxxxxxx
※ "xxxxxxxx"はパスワードです。

Webminはデフォルトで、インストールしておきたいなー...

--------
http://www.suz-lab.com

"yum"で"Webmin"をインストール

スズキです。
CentOS6用に下記でアップデートしてます。(ほとんど変更点はありませんが...)

"yum"で"Webmin"をインストール
こちらに詳しく書かれています。
http://www.webmin.com/rpm.html
まずは、リポジトリの設定ファイルを作成します。
# cd /etc/yum.repos.d/
# vi webmin.repo
--------
[webmin]
name=Webmin Distribution Neutral
baseurl=http://download.webmin.com/download/yum
enabled=1
--------
次に、GPGを"rpm"でインストールします。
# rpm --import http://www.webmin.com/jcameron-key.asc
そしたら下記のように、"yum"でインストールできるようになります。
# yum install webmin
最後にWebminのスタートと自動起動の設定です。
# /etc/init.d/webmin start
# chkconfig webmin on
すると、下記URLでWebminでアクセスできるようになります。
http://xxx.xxx.xxx:10000
でも、ログインできない...
--------
http://www.suz-lab.com






2010年4月22日木曜日

"sendmail"コマンドでFrom指定しないでメールを送ったら...

スズキです。

Postfixインストールして、下記のように送信テストも成功させて、
http://blog.suz-lab.com/2010/04/centospostfix.html
でも、PHPのmail関数でメールが送信できない...って問題に遭遇しました。

PHPのmail関数はsendmailコマンドと同等なので、
以下のようにFromを指定しないで、送信テストしてみると、

# sendmail suzuki@suz-lan.com
test
.

Fromが、"xxx@xxx.xxx.xxx.xxx.localdomain"のように、
OSのhost情報から作成さえrたような値に自動で設定されてしまいます。

このFromのDNSネームが存在しないものなので、
メール送信できなかった、ということになります。
※ "telnet"のテストはFromを指定していたのでOKでした...

ということで、Postfix(/etc/postfix/main.cf)の調整になりますが、
下記のように、"myhostname"を指定することで、
Fromを指定しなかった場合のFromが、"xxx@mail.suz-lab.com"
といった感じになり、存在するDNSネームなので、
メールも無事、送信されるようになります。

--------【main.cf】--------
...
myhostname = mail.suz-lab.com
...
--------

前にsendmailコマンド使ったのは、たぶん20世紀だろう...

--------
http://www.suz-lab.com

EC2(CentOS)でProFTPD

スズキです。

ポイントはセキュリティグループの設定でしょうか。

まずは、インストールです。

# yum install proftpd

次に、"/etc/proftpd.conf"の設定です.

--------【proftpd.conf】--------
...
MasqueradeAddress xxx.xxx.xxx.xxx
PassivePorts 60000 61000
...
--------

※PassivePortsを60000~61000にしています。
※MasqueradeAddressはPublicなIPアドレス(EIP)です。

この状態で、ProFTPDを起動します。

# /etc/init.d/proftpd start
# chkconfig proftpd on

最後に、"Elasticfox"や"AWS Management Console"、
場合によっては、コマンドラインで、 セキュリティグループの設定に、
21番と60000~61000番ポートの許可を追加すれば、
外部からでも、FTPが利用できるようになります。

できれば、FTPはりようしたく無いなー...

--------
http://www.suz-lab.com

"Elastic IP Address"の逆引き設定

スズキです。

こちらのフォームから可能です。
https://aws-portal.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-request

対象の"Elastic IP Address"に対して、
設定したい"Reverse DNS Record for EIP"(DNSネーム)を入力して、
送信(リクエスト)します。

送信(リクエスト)が完了すると、下記メッセージが表示されます。

Thank you for submitting your request. It is our intention to meet your needs.
We will review your use case and normally respond to requests within
2-3 business days.

問題ないようなら、2、3日(営業日)で対応できるようです。

メール送信ができるようにするたびに、この作業やるのは面倒だなー...
共通メールサーバでも作るか...

--------
http://www.suz-lab.com

2010年4月20日火曜日

LinuxでEBSのサイズを確認

スズキです。

20GのEBSの詳細なサイズが知りたくて、いろいろ試してみました。

20 * 1024 * 1024 = 20971520 KByte

だと思うのですが...

まずは、"df"です。

# df -k
--------
...
/dev/sdc1 20642428 10672216 8921636 55% /mnt/ebs0
...
--------

あれ?、"20642428 KByte"で、微妙にずれています。

次に、"fdisk"です。

# fdisk /dev/sdb1
--------
...
コマンド (m でヘルプ): p
...
Disk /dev/sdc1: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
...
--------

こちらは、

21474836480 / 1024 = 20971520 KByte

で、最初の予想通りの数字です。

"df"はなんで、ずれるんだろう?

--------
http://www.suz-lab.com

2010年4月19日月曜日

TRACEメソッド(HTTP)

スズキです。

TRACEメソッド(HTTP)はWebサーバに対してクライアントが送信した内容を、
下記のように、そのまま返すメソッドです。

# telnet localhost 80
--------
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
TRACE / HTTP/1.1
Host: suz-lab.com

HTTP/1.1 200 OK
Date: Mon, 19 Apr 2010 10:27:18 GMT
Server: Apache
Connection: close
Transfer-Encoding: chunked
Content-Type: message/http

27
TRACE / HTTP/1.1
Host: suz-lab.com


0

Connection closed by foreign host.
--------

これは、セキュリティ的に好ましくないので、Apacheでは"httpd.conf"に、
"TraceEnable Off"と設定することによって、無効にすることができます。

無効にした状態で、再度、TRACEメソッドを試すと、
下記のように利用できないことがわかります。

# telnet localhost 80
--------
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
TRACE / HTTP/1.1
Host: suz-lab.com

HTTP/1.1 405 Method Not Allowed
Date: Mon, 19 Apr 2010 10:36:02 GMT
Server: Apache
Allow:
Content-Length: 223
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method TRACE is not allowed for the URL /.</p>
</body></html>
Connection closed by foreign host.
--------

セキュリティモード、終了...

--------
http://www.suz-lab.com

Apacheのヘッダ情報を隠す

スズキです。

CentOSで"yum"よりApacheとPHPをインストールして、
その状態で、下記のようにヘッダ情報を確認すると、
ApacheのバージョンやPHPのバージョンがわかってしまいます。

# telnet localhost 80
--------
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
HEAD / HTTP/1.1
Host: suz-lab.com

HTTP/1.1 200 OK
Date: Mon, 19 Apr 2010 09:54:34 GMT
Server: Apache/2.2.15 (Unix)
X-Powered-By: PHP/5.3.2
Connection: close
Content-Type: text/html; charset=UTF-8

Connection closed by foreign host.
--------

ということで、まずは、Apacheのバージョン情報を隠します。
これは、"httpd.conf"にて、"ServerTokens ProductOnly"を設定すれば、
OKです。

ついでに、"ServerSignature Off"も設定して、エラー画面などにも、
その手の情報が出ないようにしておきます。

次にPHPのバージョンに関してですが、こちらは"php.ini"に
"expose_php = Off"と設定することにより、実現できます。

この状態で、再度、ヘッダ情報を確認すると、
以下のように、情報が隠されたことが確認できます。

# telnet localhost 80
--------
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.

HEAD / HTTP/1.1
Host: suz-lab.com

HTTP/1.1 200 OK
Date: Mon, 19 Apr 2010 10:06:51 GMT
Server: Apache
Connection: close
Content-Type: text/html; charset=UTF-8

Connection closed by foreign host.
--------

この辺のノウハウは、Puppetですぐに利用できる形で管理していきたいなー...

--------
http://www.suz-lab.com

CentOSで自分でビルドしたApacheを利用

スズキです。

本当はyumリポジトリのパッケージを使いたいのですが、
そうはいかない場面もあると思います。

でも、yumでインストールしたapacheの設定ファイルや、initスクリプトと同様に
自分でビルドしたApacheも利用したいわけで...といったお話です。

まずは、ダウンロード&ビルド&インストール、です。
(デフォルトインストール(/usr/local/apache2/)が前提です)

# curl -OL http://ftp.kddilabs.jp/infosystems/apache/httpd/httpd-2.2.15.tar.gz
# tar xvzf httpd-2.2.15.tar.gz
# cd httpd-2.2.15
# ./configure --enable-module=all --enable-mods-shared=all
# make
# make install

次に、"/etc/httpd/modules"のシンボリックリンクを、
"/usr/local/apache2/modules/"に張りなおします。

そして、"/etc/sysconfig/httpd"を以下のようにします。

--------【/etc/sysconfig/httpd】--------
HTTPD=/usr/local/apache2/bin/httpd
OPTIONS="-f /etc/httpd/conf/httpd.conf"
--------

すると、"service httpd start/stop/..."で、自分でビルドしたApache("/usr/local/apache2/")が
利用できるようになります。

ただし、このあと、設定ファイルで読み込めなくて必要ないモジュールをコメントアウトしたり、
必要なモジュールを"/usr/local/apache2/modules/"にコピーしたりする必要もあります。
(本当は、それもビルドしなおしたほうがいいんだけど...)

CentOS、よく考えられてます...

--------
http://www.suz-lab.com

2010年4月15日木曜日

ttyN: No such file or directory

スズキです。

EC2で下記エラー(/var/log/messages)に遭遇しました。

Apr 01 00:00:00 domU-00-00-00-00-00-00 /sbin/mingetty[0000]:
tty6: No such file or directory

しかしGoogleで検索してみると、同じ問題に遭遇し、解決してる人がいました。
http://nxdxa.blogspot.com/2010/03/amazon-ec2-centos5-tty.html

上記に記載されている手順通りで解決です。

具体的にはこんな感じです。

(1) "/etc/inittab"で"tty1"以外コメントアウト

--------【inittab】--------
...
1:2345:respawn:/sbin/mingetty tty1
#2:2345:respawn:/sbin/mingetty tty2
#3:2345:respawn:/sbin/mingetty tty3
#4:2345:respawn:/sbin/mingetty tty4
#5:2345:respawn:/sbin/mingetty tty5
#6:2345:respawn:/sbin/mingetty tty6
...
--------

(2) 下記コマンドで上記の変更を反映

# kill -HUP 1

EC2用のチューニングとかも必要なのかなー?

--------
http://www.suz-lab.com

SUZ-LAB謹製 CentOS AMI アップデート (5.4.8)

スズキです。

今のところ、"us-west-1"で"ebs"の"64-bit"のみ利用できます。
(Manifestは下記の通りです)
811118151095/suz-lab_ebs_centos-core-x86_64-5.4.8

特徴としては、

(1) 相変わらずのCoreのみのインストール
http://blog.suz-lab.com/2010/04/centos-54-ami-64bit.html

(2) ".../modules.dep: No such file or directory"対策
http://blog.suz-lab.com/2010/04/could-not-load-libmodules261633.html

(3) デフォルトでLANG="ja_JP.UTF-8"
http://blog.suz-lab.com/2010/04/centoslang.html
(今まではデフォルトでLANGは設定されてなかった...)

(4) デフォルトでlocalhostの名前解決が可能
# cat /etc/hosts
--------
127.0.0.1 localhost
--------
(今まではデフォルトでhostsファイルがなかった...)

(5) デフォルトでタイムゾーンを日本に
http://blog.suz-lab.com/2009/06/centos.html
(手順は以下のとおりです)
# date
Thu Apr 15 06:10:44 EDT 2010
# rm -f /etc/localtime
# cp -p /usr/share/zoneinfo/Japan /etc/localtime
# date
Thu Apr 15 19:11:13 JST 2010

といった感じです。

今回から、EC2/SUZ-LABユーティリティは抜いています。
必要ならSUZ-LABリポジトリからyumでインストールするって感じにしようと思っています。
(まだRPM作ってないけど...)

Enjoy!

--------
http://www.suz-lab.com

"CentOS 5.4"に"php-gd-5.2.13"をインストール

スズキです。

こちらの、CentOSに最新じゃないPHPを入れる関連です。
http://blog.suz-lab.com/2010/04/centos-54php-5213yum.html

今回は、"php-gd-5.2.13"です。

まあ、下記を実行すればいいのですが、

rpm -Uvh http://rpms.famillecollet.com/enterprise/5/olds/x86_64/php-gd-5.2.13-1.el5.remi.x86_64.rpm

案の定、依存関係で引っかかります。

なので、

# yum install php-gd

で、インストールはせず、依存関係の確認だけして、以下のように、依存パッケージのみ、
先にインストールしておきます。

# yum install libICE libICE libSM libXaw libXmu libXpm libXt t1lib

そして、最初のRPMコマンドを実行すれば、無事インストール完了です。

近頃、サーバ関連作業ばかりだなー...

--------
http://www.suz-lab.com

"CentOS 5.4"に"php-5.2.13"をインストール

スズキです。

現在、remiリポジトリを追加して、
"CentOS 5.4"にて以下のようにPHPをインストールすると、

# yum install php

5.3.2がインストールされてしまいます。

しかし、5.2系前提で開発されたものは多いので、
なるべくお手軽に5.2系のPHPをインストールしたくなるときもあると思います。

そのような場合は、RPMを直接インストールする感じになるのですが、
そのRPMが下記にありました。

http://rpms.famillecollet.com/enterprise/5/olds/x86_64/

上記にある、PHPの最新は5.2.13です。

ですので、すでに、5.3.2がインストールされている場合は、
以下のようにPHPパッケージを削除し、

# yum erase php
# yum erase php-*

例えば、下記のように削除されたパッケージと同じもので、
バージョンが5.2.13のものをRPMインストールすればOKです。

# rpm -Uvh \
http://rpms.famillecollet.com/enterprise/5/olds/x86_64/php-5.2.13-1.el5.remi.x86_64.rpm \
http://rpms.famillecollet.com/enterprise/5/olds/x86_64/php-cli-5.2.13-1.el5.remi.x86_64.rpm \
http://rpms.famillecollet.com/enterprise/5/olds/x86_64/php-common-5.2.13-1.el5.remi.x86_64.rpm \
http://rpms.famillecollet.com/enterprise/5/olds/x86_64/php-mbstring-5.2.13-1.el5.remi.x86_64.rpm \
http://rpms.famillecollet.com/enterprise/5/olds/x86_64/php-mysql-5.2.13-1.el5.remi.x86_64.rpm \
http://rpms.famillecollet.com/enterprise/5/olds/x86_64/php-pdo-5.2.13-1.el5.remi.x86_64.rpm \
http://rpms.famillecollet.com/enterprise/5/olds/x86_64/php-gd-5.2.13-1.el5.remi.x86_64.rpm

いつも、最新(安定)が使いたいなー。

--------
http://www.suz-lab.com

Could not load /lib/modules/2.6.16.33-xenU/modules.dep: No such file or directory

スズキです。

以下の通り、"CentOS 5.4 AMI 64bit版"を作成したのですが、
http://blog.suz-lab.com/2010/04/centos-54-ami-64bit.html

"/var/log/messages"に以下のようなエラーが出力されていました。

Apr 01 00:00:00 ip-00-000-000-000 modprobe: FATAL:
Could not load /lib/modules/2.6.16.33-xenU/modules.dep:
No such file or directory

下記でも同じような問題に遭遇し、解決したのですが、
http://blog.suz-lab.com/2009/04/amazon-ec2-ami-tools.html
今回は、必要なファイルが違った(2.6.16.33)ので、
改めて、解決手順をメモしておきます。

まずは、ルートディレクトリに移動です。
# cd /

次に、必要なファイルのアーカイブをダウンロードです。
# curl -OL http://s3.amazonaws.com/ec2-downloads/ec2-modules-2.6.16.33-xenU-x86_64.tgz

そして、展開します。
# tar xvzf ec2-modules-2.6.16.33-xenU-x86_64.tgz

最後に、ダウンロードファイルの削除です。
# rm ec2-modules-2.6.16.33-xenU-x86_64.tgz

これで、安定したAMIになったかな?

--------
http://www.suz-lab.com

CentOSで初期起動時にLANGを設定

スズキです。

"/etc/sysconfig/i18n"への記述になります。
"ja_JP.UTF-8"にしたい場合は、下記の通りです。

--------【i18n】--------
LANG="ja_JP.UTF-8"
--------

上記のファイルが無い場合は、作成するだけで機能します。

Linuxは15年くらいやってるけど、まだまだだなー...

--------
http://www.suz-lab.com

2010年4月14日水曜日

Apacheでデフォルトの文字コードを設定

スズキです。

"AddDefaultCharset"使えばOKです。

Shift_JISにしたい場合は、"httpd.conf"に下記を記述です。

AddDefaultCharset shift_jis

特定のディレクトリ以下の文字コードをUTF-8にしたい場合は、
下記のように記述すればOKです。

<Location /utf8>
  AddDefaultCharset utf-8
</Location>

まあ、普通は使いませんが、強引に...って時に重宝します。

--------
http://www.suz-lab.com

"CentOS 5.4 AMI 64bit版"の作成

スズキです。

久しぶりのAWSネタです。

必要に迫られ、64bit版CentOSのAMIを作成しました。

まずはイメージファイルの作成ですが、基本的に下記の手順です。
http://blog.suz-lab.com/2009/04/centos53ami.html

ただし、"fstab"と"rc.local"は下記のようにしています。

--------【fstab】--------
/dev/sda1 / ext3 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
none /dev/shm tmpfs defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0
/dev/sda3 swap swap defaults 0 0
--------

--------【rc.local】--------
...
PUB_KEY_URI=http://169.254.169.254/1.0/meta-data/public-keys/0/openssh-key
PUB_KEY_FROM_HTTP=/tmp/openssh_id.pub
PUB_KEY_FROM_EPHEMERAL=/mnt/openssh_id.pub
ROOT_AUTHORIZED_KEYS=/root/.ssh/authorized_keys
if [ ! -d /root/.ssh ] ; then
  mkdir -p /root/.ssh
  chmod 700 /root/.ssh
fi
curl --retry 3 --retry-delay 0 --silent --fail -o $PUB_KEY_FROM_HTTP
$PUB_KEY_URI
if [ $? -eq 0 -a -e $PUB_KEY_FROM_HTTP ] ; then
  if ! grep -q -f $PUB_KEY_FROM_HTTP $ROOT_AUTHORIZED_KEYS
  then
    cat $PUB_KEY_FROM_HTTP >> $ROOT_AUTHORIZED_KEYS
    echo "New key added to authrozied keys file from parameters"|logger -t "ec2"
  fi
  chmod 600 $ROOT_AUTHORIZED_KEYS
  rm -f $PUB_KEY_FROM_HTTP
elif [ -e $PUB_KEY_FROM_EPHEMERAL ] ; then
  if ! grep -q -f $PUB_KEY_FROM_EPHEMERAL $ROOT_AUTHORIZED_KEYS
  then
    cat $PUB_KEY_FROM_EPHEMERAL >> $ROOT_AUTHORIZED_KEYS
    echo "New key added to authrozied keys file from ephemeral
store"|logger -t "ec2"
  fi
  chmod 600 $ROOT_AUTHORIZED_KEYS
  chmod 600 $PUB_KEY_FROM_EPHEMERAL
fi
if [ -e /mnt/openssh_id.pub ] ; then
  if ! grep -q -f /mnt/openssh_id.pub /root/.ssh/authorized_keys
  then
    cat /mnt/openssh_id.pub >> /root/.ssh/authorized_keys
    echo "New key added to authrozied keys file from ephemeral
store"|logger -t "ec2"
  fi
  chmod 600 /root/.ssh/authorized_keys
fi
...
--------

また、"rc.local"では"curl"を利用しているので、下記のようにイメージファイルに
"curl"のインストールも忘れずにしなければいけません...

# yum --installroot=/mnt/suz-lab_ebs_centos-core-x86_64-5.4.6 -y install curl
※ たぶん、5.4では、"-c xxx.conf"いらないと思います。

イメージファイルができたら、適当なEC2インスタンス(念のため64bitのCentOSです)
立ち上げて、下記の手順(イメージファイル作成後から)です。
http://blog.suz-lab.com/2010/01/migrating-centos-s3-based-ami-to-ebs.html

まあ、

EBSマウントして、下記のようにイメージをコピーして、

dd if=/mnt/suz-lab_ebs_centos-core-x86_64-5.4.6.img of=/dev/sdc1

EBSのスナップショットとって、下記のようにスナップショットをAMI登録です。

ec2reg \
-K /mnt/pk.pem \
-C /mnt/cert.pem \
--region us-west-1 \
-s snap-xxxxxxxx \
-a x86_64 \
-d suz-lab_ebs_centos-core-x86_64-5.4.6 \
-n suz-lab_ebs_centos-core-x86_64-5.4.6

問題なければ、"AWS Management Console"で公開です。

ちゃんとリリースアナウンスしよう...

--------
http://www.suz-lab.com

セキュリティチェックに使えるFirefoxのアドオン

スズキです。

「クロスサイトスクリプティング」や「SQLインジェクション」を確認するために、
POSTパラメータを問題を起こしそうな値に変換して"submit"したいことがあると思います。

そのような場合は、Firefoxのアドオンである、"Firebug"と"Tamper Data"が便利です。

▼ Firebug
https://addons.mozilla.org/ja/firefox/addon/1843

Firebugには、現在のHTMLの内容を閲覧、編集する機能があります。
この機能で、"hidden"にされている"input"タグの"value"を書き換え、
その状態で"submit"すると、書き換えた値が、パラメータとして送信されます。

▼ Tamper Data
https://addons.mozilla.org/ja/firefox/addon/966

こちらは、通信をインターラプトするような感じのアドオンです。
監視モードにして、"submit"すると、一旦、通信が止まり、
別ウインドで、その内容の閲覧・編集ができ、そして、編集した内容で、
再度、通信させることができます。

また、こちらは、HTTPヘッダやCookieの値も変更することもできます。

セキュリティに関しても、ブログに書いていこう...

--------
http://www.suz-lab.com

2010年4月12日月曜日

"mod_ext_filter"で静的ファイル(HTML/画像)にロジックを(Apache)

スズキです。

"mod_ext_filter"はCloudFront(AWS)がらみで紹介しましたが、
http://blog.suz-lab.com/2010/03/modextfilterurlcloudfront.html

今回は、画像に対して、条件により、
アクセスできたり、できなかったり、を実現するためにもう少し調査してみました。

Apacheの設定は下記のような感じです。

--------【httpd.conf】--------
ExtFilterDefine auth mode=output cmd="/tmp/test.pl"
<Location /test>
  SetOutputFilter auth
</Location>
--------

そして、フィルターに使っている"test.pl"は次のようにしています。

--------【Perl】--------
#!/usr/bin/perl
use strict;
use warnings;
print $ENV{"QUERY_STRING"};
print $ENV{"SCRIPT_NAME"};
while (<STDIN>) {
  print $_;
}
--------

すると、ファイルに先頭に、GETパラメータとファイルパスが表示され、
この手の情報が利用できることが、確認できました。

なので、あとは、データベースとの照合などのロジックをいれていけば、
やりたいこと、実現できそうです。

復活したと思ったら、すぐにダメになるなー...

--------
http://www.suz-lab.com

2010年4月7日水曜日

"rsync"で新しいファイルを同期しないためには

スズキです。

"-u(--update)"オプションを利用します。

"-a"オプションだけだと、「A」から「B」に同期するとき、
同名でAより新しいファイルがBにあった場合、
Bのファイルは、古いAのファイルに上書きされてしまいます。

"-u(--update)"をつけることで、古いファイルに上書きされることを防ぐことができます。

"rsync"は奥が深いなー...

Windowsの共有フォルダなどをCIFSでマウントするには"samba-client"が必要(CentOS)

スズキです。

以前SMB系パッケージはいらないようなこと書きましたが、
http://blog.suz-lab.com/2009/09/windowscentos.html
嘘でした...

次のように、"samba-client"をインストールする必要があります。
# yum install samba-client

でも、Windowsフォルダの共有は、いろいろ問題が多いなー...

--------
http://www.suz-lab.com

アップロードファイルを置く場所の設定(Apache)

スズキです。

アップロードファイルを置く場所に悪意のあるPHPやHTML(JavaScript)を
置かれた場合の対策です。

--------【httpd.conf】--------
...
<Location /tmp>
  RemoveHandler .php
  RemoveType .php
  AddType text/plain .html .htm .xhtml .xht .xml .xsl
</Location>
...
--------

上記のように、PHPは無効になるようにして、
htmlなども、"text/plain"として扱われるようにしています。

とはいっても、アップロードプログラムでの対応が第一ですが...

セキュリティもがんばっていこう。

--------
http://www.suz-lab.com

2010年4月6日火曜日

Eclipse(3.5.2)でPerl(EPIC)

スズキです。

結構、Perl使うことが多くなってきたので、Eclipseでの開発環境を整えてみました。

といっても、プラグイン(EPIC)入れただけですが...
http://www.epic-ide.org/
アップデートサイトは、こちらになります。
http://www.epic-ide.org/updates/testing/

そして、このプラグインを利用するには、Windowsで動作するPerlが必要となります。
ActivePerlが推奨っぽいのですが、ポータブル環境にしたかったので、
以前紹介した、"Strawberry Perl"を利用することにしました。
http://blog.suz-lab.com/2008/10/windowsperl.html

下記の"strawberry-perl-5.10.1.1-portable.zip"がポータブル版になります。
http://strawberryperl.com/releases.html

で、EPICの設定で、インタープリタのパスを"perl\bin\perl.exe"にすることで、
Perlプロジェクトの作成などが可能になります。

Perl、もっとがんばろう。

--------
http://www.suz-lab.com

"soxmix"で音声を合成するときの音量調整

スズキです。

下記で、"soxmix"での音声合成時の音量関係について紹介したとき、、
http://blog.suz-lab.com/2010/04/soxmix.html

合成するときは、次のように一気にやるといいよ、的なことを書きましたが、
# soxmix input_1.wav input_2.wav input_3.wav output.wav

上記だと、一つ一つのファイルの音量は1/3として合成されるわけですが、
それだと、全体の音量が期待するものより小さくなってしまうこともあります。

このような場合は、以下のように、"-v"オプションをつけて音量を指定することができます。
# soxmix -v 1.0 input_1.wav -v 1.0 input_2.wav -v 1.0 input_3.wav -v
1.0 output.wav

"-v"オプションは1.0以下の数字が指定でき、1.0がもとの音量そのまま、となります。

"Sox::Command"みたいなPerlモジュール作りたい...

--------
http://www.suz-lab.com

CentOSでグループを指定したユーザーの追加

スズキです。

"man"や"-h"するのも面倒なので...

▼ グループの作成
# groupadd suz-lab

▼ グループを指定したユーザーの作成
# useradd -g suz-lab suzuki

▼ パスワードの設定
# passwd suzuki

でも、ググるほうが遅いか...

--------
http://www.suz-lab.com

CentOSでPostfixのインストール&確認

スズキです。

忘れたころに、依頼されるので...、自分メモです。

まずはインストールと起動です。

# yum install -y postfix
# chkconfig postfix on
# /etc/init.d/postfix start
Starting postfix: [ OK ]

"telnet"で直接25番ポートにアクセスして下記のように確認です。

# telnet localhost 25
--------
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 domU-12-31-39-07-7C-A4.localdomain ESMTP Postfix
HELO localhost
250 domU-12-31-39-07-7C-A4.localdomain
MAIL FROM: suzuki@suz-lab.com
250 2.1.0 Ok
RCPT TO: suzuki@suz-lab.com
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
test
.
250 2.0.0 Ok: queued as 22B56116402F
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
--------

次からは、ググる時間も短縮できるはず。

--------
http://www.suz-lab.com

"soxmix"での音声合成時の音量について

スズキです。

こちらで紹介した"soxmix"のTIPS(?)です。
http://blog.suz-lab.com/2010/04/centossox.html

最初、input_1.wav、input_2.wav、input_3.wav、を合成するのに、

# soxmix input_1.wav input_2.wav tmp.wav
# soxmix tmp.wav input_3.wav output.wav

としていました。このやりかただと、音量が期待通りになりません。

下記のドキュメントを確認してみると、
http://linux.die.net/man/1/soxmix
デフォルトでは、合成するときに、ファイル一つ一つの音量は
合成するファイル数で割ったものになるようでした。

なので、最初の合成で、

input_1.wav 0.50
input_2.wav 0.50

となり、次の合成で、

input_1.wav 0.25
input_2.wav 0.25
input_3.wav 0.50

となっていたことになります。

すべて同じレベルで合成したい場合は、

# soxmix input_1.wav input_2.wav input_3.wav output.wav

とすれば、OKです。

サーバサイド音声処理も得意になってきたぞ。

--------
http://www.suz-lab.com

2010年4月5日月曜日

$VERSIONでエラー(Perlモジュール)

スズキです。

以下のようにPerlモジュールを作って実行してみると、
http://blog.suz-lab.com/2010/04/perl_05.html

次のようなエラーが発生してしまいました。
Global symbol "$VERSION" requires explicit package name at ...

こちらのドキュメントなどを見る限り、
http://search.cpan.org/~jpeacock/version-0.80/lib/version.pod

> use version; $VERSION = qv('0.0.1');

を以下のようにすれば、良いようです。(実際にうまくいきました)

> use version; our $VERSION = qv('0.0.1');

なんか、復活してきたぞ...

--------
http://www.suz-lab.com

Perlモジュールの作成(雛形まで)

スズキです。

だんだん、Perl率が高くなってきたので、
ちゃんとした?、Perlモジュールを作ってみました。

まずは、必要なパッケージのインストールです。

# yum install perl-Module-Starter
# yum install perl-Module-Starter-PBP

次に、Perlモジュールの雛形を作成します。

# perl -MModule::Starter::PBP=setup
# module-starter --module=Suzlab::Common::Sync

以下のようなディレクトリ(ファイル)が作成されます。

# ls Suzlab-Common-Sync/
Build.PL Changes MANIFEST Makefile.PL README lib t

そして、実際のモジュールを実装していきます。

# vi Suzlab-Common-Sync/lib/Suzlab/Common/Sync.pm

--------【Perl】--------
package Suzlab::Common::Sync;

use warnings;
use strict;
use Carp;

use version; $VERSION = qv('0.0.3');

# Module implementation here

1; # Magic true value required at end of module
__END__
...
--------

ということで、次は実際に、実装していきます。

--------
http://www.suz-lab.com

2010年4月2日金曜日

CentOSで音の合成(SoX)

スズキです。

昔MacでSoXインストールして、音の合成したのですが、
http://blog.suz-lab.com/2010/02/maclinuxmp3sox.html

CentOSで以下のように、SoX入れて、同じように合成しようとしたら、
"-m"オプションは使えない、と怒られてしまいました...
# yum install sox

で、いろいろ調べてみると、
どうやら、"soxmix"といったコマンドを使えばできるようでした。

実際に、

# soxmix input1.wav input2.wav output.wav

で、合成できることが確認できました。

あとは、同期問題だなー...

--------
http://www.suz-lab.com

簡単なPerlモジュール

スズキです。

こんな感じです。

--------【Sample.pm】--------
package Suzlab::Sample;

use strict;
use warnings;
use Carp;
use base qw(Class::Accessor::Fast);

sub test {
  print("sample");
}

1;
__END__
--------

--------【sample.pl】--------
#!/usr/bin/env perl

use strict;
use warnings;
use Carp;
use Suzlab::Sample;

my $sample = Suzlab::Sample->new();
$sample->test();
--------

そろそろ、ブログも復活していかないと...

--------
http://www.suz-lab.com