[まとめ] さくらのVPSで一気に perl の環境を整える
さくらのVPSを借りたらまず最初にすべき6のことの続きからという設定。
インストールはすべてソースからコンパイル。yum とかでも良いと思うけど、こっちは yum で、こっちはソースから、とかやるとパスが違ったりして何かとはまる。はまった。。あと mod_perl は、perlbrew な perl でビルドしてます。
※追記(2011/12/23):最近では nginx + plackup 、 starman などの perl 製サーバが主流だと思うので、こちらの記事もあわせてどうぞ
ここでは下記を入れちゃいます。
- perlbrew
- cpanm
- MySQL
- Apache
- mod_perl
1. perlbrew
いろんな perl のバージョンを手軽に試せる perlbrew をインストール。
$ curl -LO http://xrl.us/perlbrew
$ perl perlbrew install
$ rm perlbrew
$ ~/perl5/perlbrew/bin/perlbrew init # perlbrew の初期化
$ echo 'source ~/perl5/perlbrew/etc/bashrc' >> ~/.bashrc # bashrc に追記
$ source ~/.bashrc # bashrc の有効化
$ which perlbrew # which で確認
~/perl5/perlbrew/bin/perlbrew # パスが通ってる!
そしたらお好きな perl をどうぞ。perl の現時点最新安定版は perl-5.12.3 。-D ccflags=-fPIC というオプションをつけてインストール。*1
$ perlbrew -v install perl-5.12.3 -D ccflags=-fPIC
$ perlbrew switch perl-5.12.3
$ perlbrew list
* perl-5.12.3
/usr/bin/perl (5.8.8)
$ perl -V # 現在使ってる perl の詳細情報見るとき
2. cpanm
cpan 要らずな cpanm をインストール。
$ curl -L http://cpanmin.us/ | perl - App::cpanminus
# 使い方
$ cpanm Task::Catalyst
perlbrew 使ってる場合は、そのとき使ってるバージョンの perl 以下に入る。ので perlbrew で新しく perl インストールしたときは、その度に cpanm のインストールが必要。
※追記(2011/12/23):最近の perlbrew では install-cpanm というコマンドがあり、これを使うと perlbrew と同じ場所に cpanm がインストールされます。これをやっておくと、インストールした perl ごとに cpanm を入れる必要がなくなるので楽ちんです (はてブでコメントしてくれた @otsune さん、ありがとうございます。)
$ perlbrew install-cpanm
あと便利なので下記も入れとく。
$ cpanm App::pmuninstall
# 使い方
$ pm-uninstall Acme # モジュールをお手軽アンインストール
$ cpanm App::cpanoutdated
# 使い方
$ cpan-outdated | cpanm # インストール済モジュールを一括アップデート
3. MySQL
現時点最新版は“5.5.10”。
下準備から。5.5系のインストールには cmake が必要らしいので入れておく。
$ wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz
$ tar xvzf cmake-2.8.4.tar.gz
$ cd cmake-2.8.4
$ ./configure
$ gmake
$ sudo gmake install
mysql の依存パッケージを yum で入れる。
$ sudo yum install -y ncurses-devel
mysql の実行ユーザ作成。
$ sudo su -
# useradd -s /sbin/nologin mysql
下準備が終わったところで、MySQL をインストール。オプションで -DDEFAULT_CHARSET=utf8 付けたら、-DDEFAULT_COLLATION= … も付けないとうまくいかないので注意。
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.10.tar.gz/from/http://ftp.iij.ad.jp/pub/db/mysql/
$ tar xvzf mysql-5.5.10.tar.gz
$ cd mysql-5.5.10
$ cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
$ make
$ sudo make install
DB の初期化。
$ cd /usr/local/mysql
$ sudo su -
# chown -R mysql .
# chgrp -R mysql .
# scripts/mysql_install_db --user=mysql
# chown -R root .
# chown -R mysql data
my.cnf の設定。utf8 の設定を追加。
# cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
# vi /etc/my.cnf
[client]
default-character-set=utf8
[mysqld]
skip-character-set-client-handshake
character-set-server=utf8
[mysqldump]
default-character-set=utf8
自動起動の設定。3項目のパスを修正。
# cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
# vi /etc/rc.d/init.d/mysqld
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
mysqld_pid_file_path=$datadir/`/bin/hostname`.pid
修正したら起動。
# chkconfig --add mysqld
# chkconfig mysqld on
# chkconfig --list | grep mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# service mysqld start
最後に root でログインして root 以外のユーザ削除、root のパスワード設定をしとく。
$ /usr/local/mysql/bin/mysql -u root
mysql> use mysql;
mysql> delete from user where !(host="localhost" and user="root"); # root 以外のユーザを削除
mysql> update user set password=password('hogehoge'); # パスワード(hogehoge)を設定
mysql> FLUSH PRIVILEGES;
mysql> exit
# 設定したパスワードで入れるか確認
$ /usr/local/mysql/bin/mysql -u root -p
▼参考
- mysql/インストール - おどうぐ箱
- MySQL 5.5.9 インストール Linux cmake | Linux LABS
- mysql5.1.45をCentOSにソースからインストール[Linux] | QUALL - blog
4. Apache
現時点最新版は“2.2.17”。
インストール先は /usr/local/httpd に。mod_rewrite モジュールを入れる。DSO対応にする。httpd.conf の設定はここでは割愛。
$ wget http://ftp.kddilabs.jp/infosystems/apache/httpd/httpd-2.2.15.tar.gz
$ tar zxvf httpd-2.2.17.tar.gz
$ cd httpd-2.2.17
$ ./configure --prefix=/usr/local/httpd --enable-rewrite --enable-so
$ make
$ sudo make install
自動起動の設定。3項目のパスを修正。
$ sudo su -
# cp /usr/local/src/httpd-2.2.17/build/rpm/httpd.init /etc/rc.d/init.d/httpd
# vi /etc/rc.d/init.d/httpd
httpd=${HTTPD-/usr/local/httpd/bin/httpd}
pidfile=${PIDFILE-/usr/local/httpd/logs/httpd.pid}
CONFFILE=/usr/local/httpd/conf/httpd.conf
修正したら起動。
# chkconfig --add httpd
# chkconfig httpd on
# chkconfig --list | grep httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# service httpd start
▼参考
5. mod_perl
最後に mod_perl のインストール。ここでは apxs を使って、Apache に動的に組み込み、Apache2::Status を入れて Apache と mod_perl の設定状況を確認するところまで。apxs は先ほどの Apache のインストールの例なら、 /usr/local/httpd/bin/apxs にあるはず。
$ wget http://perl.apache.org/dist/mod_perl-2.0-current.tar.gz
$ tar zxfv mod_perl-2.0-current.tar.gz
$ cd mod_perl-2.0.5
$ perl Makefile.PL MP_APXS=/usr/local/httpd/bin/apxs # ここで apxs の場所を示す
$ make
$ sudo make install *2
mod_perl についての設定は conf/extra 以下に別途 perl.conf を作って、そこに書き込んでいくことにする。
$ sudo vi /usr/local/httpd/conf/extra/perl.conf
LoadModule perl_module modules/mod_perl.so
PerlRequire conf/extra/startup.pl # startup.pl を読み込む(置く場所はどこでも良い)
# Apache2::Status の設定
<Location /perl-status>
SetHandler perl-script
PerlResponseHandler Apache2::Status
Order deny,allow
Deny from all
Allow from XXX.XXX.XXX.XXX # 自分のipアドレスを記述して自分のアクセスからしか見れないようにする
</Location>
# 拡張子が pl、cgi、pm のもの全て mod_perl で実行
<IfModule mod_perl.c>
<FilesMatch ".(pl|cgi|pm)$">
SetHandler perl-script
PerlHandler ModPerl::Registry
PerlSendHeader On
Options +ExecCGI
</FilesMatch>
</IfModule>
そしたら PerlRequire のところで指定した場所に startup.pl を作成。
$ sudo vi /usr/local/httpd/conf/extra/startup.pl
#!/usr/bin/perl
use APR::Const -compile => ':common';
use APR::Table ();
use Apache2::Status (); # perl-status を見るなら必要
use ModPerl::Registry ();
use CGI -compile => ':all';
use CGI::Carp ();
1;
httpd.conf の最後あたりに追加。
$ sudo vi /usr/local/httpd/conf/httpd.conf
Include conf/extra/perl.conf
ここまできたら Apache を再起動。
$ sudo /usr/local/httpd/bin/apachectl restart
ブラウザにhttp://“サーバのipアドレスかドメイン”/perl-status と打ち込んで、

上の画面を確認。いろいろ目で確認出来るので便利。
あと Catalyst アプリを mod_perl で動かすのに必要なCatalyst::Engine::Apache2::MP20 も入れとく。
$ cpanm Catalyst::Engine::Apache2::MP20
これで環境は整った! … はず。ツッコミ歓迎!
enjoy!
--
*1 普通に perlbrew install perl-5.12.3 とやると mod_perl のインストールのときに失敗する。詳しくは、
▼CentOS5 64bit版でmod_perlのmakeでエラー - perl勉強メモ
▼[apache][perl] perlbrewなperl-5.12.1でmod_perlをmakeする « いわぶろ(ろてん)
*2 sudo を使うので、ここで入るモジュール(~/perl5/ … /x86_64-linux 以下に Apache、Apache2、Bundle、とかいろいろ入る)は所有者、グループが root になる。後々 cpanm でモジュール入れるときパーミッションの影響で失敗するモジュールが出てくると思うので注意。例えば mod_perl
のインストール後に Task::Catalyst 入れようとすると、ディレクトリ Bundle のパーミッションが root になっていたために DBI のインストールに失敗した。chown 、chgrp で変更してOKだった。