電子の密林を開拓する

AmazonLinux で メールサーバーを作る(その7)


PHPプログラマ側からの要請で PEAR と呼ばれるものをインストールします。
※PEARは、PHPのライブラリ集のようなもので…、本当の実運用サーバーであればPHPプログラム側で個別にインストールしてもらうべきですが、今回は完全な専用サーバーなので root としてインストールします。まぁねポリシー次第ではありますが…。


・PEAR のインストール
PEAR 自身のパッケージは、以下のものになります。
php-pear.noarch : PHP Extension and Application Repository framework
sudo yum install php-pear.noarch としてインストールします。

その後、pear search を実行すると、なぜか警告が表示されます。
$ pear search ~
WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-update pear.php.net" to update
yum のアップデートみたいなものでしょう…ということで、言われるとおりにアップデートします。
$ sudo pear channel-update pear.php.net
Updating channel "pear.php.net"
Update of Channel "pear.php.net" succeeded
特に問題なく終了します。


・PEARライブラリの検索とインストール
Mail_mimeDecode というPEARパッケージのインストールを指定されているので、これを検索してインストールします。
$ pear search Mail_mimeDecode
Retrieving data...0%
Matched packages, channel pear.php.net:
=======================================
Package Stable/(Latest) Local
Mail_mimeDecode 1.5.5 (stable) 1.5.5 Provides a class to decode mime messages.

$ sudo pear install Mail_mimeDecode
downloading Mail_mimeDecode-1.5.5.tgz ...
Starting to download Mail_mimeDecode-1.5.5.tgz (11,554 bytes)
.....done: 11,554 bytes
downloading Mail_Mime-1.8.8.tgz ...
Starting to download Mail_Mime-1.8.8.tgz (32,059 bytes)
...done: 32,059 bytes
install ok: channel://pear.php.net/Mail_Mime-1.8.8
install ok: channel://pear.php.net/Mail_mimeDecode-1.5.5
インストールできたら、念の為 Apache を再起動しておきます。
$ sudo apachectl -k restart
最後に動作確認。
$ php -r 'require "Mail/mimeDecode.php";'
特にエラーが出なければ正常です。


今回はここまで。

AmazonLinux で メールサーバーを作る(その6)


今回は、no-ip.biz のIPアドレス更新を自動化します。

もっとも、EIP(固定IP)を利用しているので、更新しなくても良いんですがね…。



・更新プロトコルの確認

IP更新のための更新プロトコルが分かれば、例えば curl コマンドなどで IP更新を自動化できます。

ところが、no-ip.biz ではザっと見たところ プロトコルを公開していないような…。



・IP更新ツールのインストール

no-ip.biz 専用の IPアドレス更新ツールが存在するようなので、コレをダウンロードしてインストールしてみます。

no-ip.biz 用 Linux DUF (IPアドレス更新ツール) - https://www.noip.com/downloads.php?page=linux

tar.gzを展開すると、以下のようなファイルが展開されます。

noip-2.1.9-1
|
|-- COPYING
|-- LEEME.PRIMERO
|-- LIESMICH.ERST.deutsch
|-- LISEZMOI.ENPREMIER
|-- Makefile
|-- README.FIRST
|-- README.FIRST-SWE
|-- README.FIRST.FRANCAIS
|-- README.FIRST.ITALIANO
|-- README.FIRST.JAPANESE
|-- README.FIRST.pt_BR
|-- README.FIRST_PT
|-- binaries
| |-- noip2-i686
| `-- noip2-x86_64
|-- debian.noip2.sh
|-- gentoo.noip2.sh
|-- mac.osx.startup
|-- noip2.c
`-- redhat.noip.sh
README.FIRSTを読むとビルド方法が書かれていますが…。AmazonLinuxには gccはインストールされていない(インストールするのもメンドクサイ)ので、中身含まれているビルド済みバイナリを利用することにします。

binaries にあるものを /usr/local/bin に入れて、その中の 32bit 版の symlink を用意します(OSかせ32bitなので)。
$ cd  no-ip.duf/noip-2.1.9-1/binaries/
$ sudo cp noip2-* /usr/local/sbin/noip-2.1.9-1/

$ cd /usr/local/sbin
$ ls
noip-2.1.9-1
$ sudo ln -s noip-2.1.9-1/noip2-i686 noip2

$ cd
次に、設定ファイルが必要みたいなので、作成します。
$ sudo /usr/local/sbin/noip2 -C

Auto configuration for Linux client of no-ip.com.

Please enter the login/email string for no-ip.com *****
Please enter the password for user '*****' ***************

Only one host [~.no-ip.biz] is registered to this account.
It will be used.
Please enter an update interval:[30] 120
Do you wish to run something at successful update?[N] (y/N) N

New configuration file '/usr/local/etc/no-ip2.conf' created
EIP(固定IP)を利用しているので、そんなに頻繁にDDNS用IPアドレスを更新する必要は無いので、ここでは 120分の更新間隔を指定しておきます。
$ sudo /usr/local/sbin/noip2
$ sudo /usr/local/sbin/noip2
$ One noip2 process is already active,
and the multiple instance flag (-M) is not set.

$ ps auxwww | grep noip2
nobody 4493 0.0 0.1 2280 808 ? Ss 20:31 0:00 noip2
ec2-user 4504 0.0 0.0 2484 512 pts/1 S+ 20:35 0:00 grep noip2
デーモンとして起動するようですね…。


添付されていた README.FIRST に従って、以下のようなバッチを作成し、/etc/rc.d/init.d/noip2
 として配備します。
#!/bin/sh

# chkconfig: - 98 02
# description: noip2 DDNS update service ... see http://no-ip.biz

source /etc/rc.d/init.d/functions

EXEPATH=/usr/local/sbin

case "$1" in
start)
echo "Starting noip2."
${EXEPATH}/noip2
echo -en '\n'
;;
stop)
echo -n "Shutting down noip2."
killproc ${EXEPATH}/noip2
echo -en '\n'
;;
restart)
echo -n "Shutting down noip2."
killproc ${EXEPATH}/noip2
echo -en '\n'
sleep 5
echo "Starting noip2."
${EXEPATH}/noip2
echo -en '\n'
;;
status)
${EXEPATH}/noip2 -S
echo -en '\n'
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0
作成したら、chkconfig の支配下に追加し、自動起動するようにしておきます。
$ sudo chmod og=rx /etc/rc.d/init.d/noip2

$ sudo chkconfig --add noip2

$ chkconfig --list noip2
noip2 0:off 1:off 2:off 3:off 4:off 5:off 6:off

$ sudo chkconfig noip2 on

$ chkconfig --list noip2
noip2 0:off 1:off 2:on 3:on 4:on 5:on 6:off
バッチリ設定出来たので、OS(EC2インスタンス)を再起動してみて 自動起動出来ていることを確認します。
$ sudo reboot

~再起動完了後~


$ sudo service noip2 status
1 noip2 process active.

Process 1493, started as noip2, (version 2.1.9)
Using configuration from /usr/local/etc/no-ip2.conf
Last IP Address set **.**.**.**
Account *****
configured for:
host ~.no-ip.biz
Updating every 120 minutes via /dev/eth0 with NAT enabled.

期待通りに動作しているようです。


今回はここまで。




AmazonLinux で メールサーバーを作る(その4)

今回は微調整。


・Apache 用 document root のパーミッション
Apache 用のドキュメントルートにファイルを配備する時、配備するユーザ(dev-user:dev-user) が読み書きでき、Apache (apache:apache) は読み込みのみできるようにしたい。それ以外(others)は読み書きできないようにするのが理想。
cd /var/www/htdocs
sudo chmod u=rwx,g=rxs,o= .
sudo chown dev-user:apache .
ディレクトリに対して chmod g+s とすると、そのディレクトリにファイルやディレクトリが作成された時に、そのグループが引き継がれるらしいです。ただし、権限ビットは引き継がれない模様…。
※もっと柔軟な引継ぎ設定が出来ると良いのだけれど…。

これで、(一応)dev-user が /var/www/htdocs/ にファイルやディレクトリを作成しても、Apache が読み込みできようになります。
Others が読み込みできてしまうのは、dev-user 自身で chmod og= * …と してもらう必要がありますが。

もうちょっとウマイ方法を考えたい…けれども、今はコレでヨシとしておきます。



・dev-user のパスワード設定
dev-user というLinux アカウントを作成していますが、パスワードが何だったか忘れた(というか設定した記憶が無い)ので、再設定しておきます。
$ sudo passwd  dev-user 


・phpからメール送信
phpからメール送信できるように設定してみます。
以下のような php ファイルを mail.php という名前で Apache のドキュメントルートに配備します。
<?php
mb_send_mail( 'abcdefg@~.no-ip.biz', 'SUBJECT', 'MESSAGE BODY' );
echo 'Sent a mail.';
まずはコマンドラインで実行…。
$ php -f mail.php
PHP Fatal error:  Call to undefined function mb_send_mail() in /var/www/~/mail.php on line 2
何故…。

しかし、この手のエラーには もう慣れました(^^; AmazonLinux(きっと、基本はCentOS)は 便利な機能は デフォルトではインストールされていないのでしょう。
/etc/php.ini を見る限り、「sendmail_path = /usr/sbin/sendmail -t -i 」という設定記述があるため、メール部分の問題ではないと思われます。
そうなると、mb~ のマルチバイト文字用関数群の設定と思われますが…。
やはり /etc/php.ini 側の mb~ 系の設定記述は(コメントアウトされているものの)存在します。
…ということは、yum でインストールされるパッケージが足りないと考えられます。

yum search mbstring とすると、以下のようなモジュールが見つかります。
php-mbstring.i686 : A module for PHP applications which need multi-byte string handling
これを sudo yum install php-mbstring.i686 としてインストールしてから、再度 mail.php を実行してみます。
$ php -f mail.php
Sent a mail.

$ ls -la ~/maildir/new
total 12
drwx------ 2 dev-user dev-user 4096 Aug  7 23:31 .
drwx------ 5 dev-user dev-user 4096 Aug  6 18:55 ..
-rw------- 1 dev-user dev-user  637 Aug  7 23:31 1375885875.Vca01I20b22M211522.ip-10-150-161-211
バッチリ送られました。


今回はここまで。

このページのトップヘ