wata.dev

[まとめ] さくらのVPSで一気に perl の環境を整える

IMG_0561さくらのVPSを借りたらまず最初にすべき6のことの続きからという設定。

インストールはすべてソースからコンパイル。yum とかでも良いと思うけど、こっちは yum で、こっちはソースから、とかやるとパスが違ったりして何かとはまる。はまった。。あと mod_perl は、perlbrew な perl でビルドしてます。

※追記(2011/12/23):最近では nginx + plackup 、 starman などの perl 製サーバが主流だと思うので、こちらの記事もあわせてどうぞ

ここでは下記を入れちゃいます。

  1. perlbrew
  2. cpanm
  3. MySQL
  4. Apache
  5. 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

▼参考

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 と打ち込んで、

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だった。

ブログの記事一覧