パンダのメモ帳

技術系のネタをゆるゆると

CentOS 5 に Node.js と npm をインストールする

Mac だと Homebrew なんかで簡単にインストールできたんだけど、CentOS の場合まだ yum じゃインストールできなかった。そこで色々な手順を試してみて一番しっくりきた手順をメモ。

Node.js をインストール

git を使う方法nave を導入する方法 など、色々な手順が解説されているけれども、サーバーサイドに普通にインストールする場合、結局公式のソースをダウンロードしてコンパイルするのがいいとの結論に達した。以下手順。

[root@localhost ~]# cd /usr/local/src
[root@localhost src]# wget http://nodejs.org/dist/v0.6.11/node-v0.6.11.tar.gz
[root@localhost src]# tar xf node-v0.6.11.tar.gz
[root@localhost src]# cd node-v0.6.11
[root@localhost node-v0.6.11]# ./configure
[root@localhost node-v0.6.11]# make install

上記手順で /usr/local/bin/node がインストールされる。今回の最新安定版は v0.6.11 だった。

npm もインストール

npm は Node.js 向けのパッケージマネージャ。Node.js を使って開発をする上で入れない理由がないのでとっととインストール。

[root@localhost ~]# curl http://npmjs.org/install.sh | sh

上記手順で /usr/local/bin/npm がインストールされる。

バージョン確認

[root@localhost ~]# node --version
v0.6.11
[root@localhost ~]# npm --version
1.1.1

CentOS 5.5 で MTU の値を変更する

CentOS 5.5 で MTU(Maximum Transmission Unit)を変更する方法について

一時的、または即座に変更したい場合

次のコマンドを実行する。

[root@localhost ~]# ifconfig <インターフェース名> mtu <MTU値>

eth0 のMTU値を 1454 に変更したい場合は次の通り。

[root@localhost ~]# ifconfig eth0 mtu 1454

これで即座にMTU値が変更されるが、OSまたはネットワークの再起動を行った場合、デフォルト値に戻ってしまう。恒久的に変更したい場合は次の手順を踏む必要がある。

恒久的に変更したい場合

ネットワークインターフェースの設定ファイル(初期化スクリプト)に次の1行を加える。ただし、この方法では即座に反映されるわけではないので、すぐに変更したい場合は前述の ifconfig コマンドによる方法と併用する必要がある。

MTU=<MTU値>

eth0 のMTU値を 1454 に変更したい場合は次の通り。

MTU=1454

設定ファイルの場所は

/etc/sysconfig/network-scripts/ifcfg-<インターフェース名>

なので、eth0 の場合は

/etc/sysconfig/network-scripts/ifcfg-eth0

となる。

なぜMTU値を変更するのか?

CentOS 5.5 の場合、MTU値のデフォルトは 1500。この値はイーサネットに最適な値とされており、最近のブロードバンド環境においてもこの値であまり問題ないとされている。……が、先日 Postfix で特定のホストからのメールのみ受信できないという問題が発生した。ログを確認すると次のようなエラーメッセージが確認された。

timeout after DATA from foo.example.com[xxx.xx.xx.xxx]

調べてみると、メールのヘッダ+本文が一定のサイズ以上になった場合に同メッセージを吐いて受信に失敗している模様。そこでぐぐってみると以下のようなスレッドを発見した。

スレッドを追ってみると、どうやらMTU値が適正に設定されていないのでは?ということでさらに調べてみると次のページを発見。

利用しているネットワークがBフレッツの場合、どうやらMTU値は 1454 に設定するべし、ということらしい。そこで今回紹介した手順でMTU値を変更してみたところ、無事にメールが受信できたというわけだ。
同じような問題に困っているネットワーク管理者の人はぜひ試してみて欲しい。

CentOS 5 の BIND で IPv6 機能を無効化する

CentOSIPv6 を無効化してるのに、BIND を素のまま使ってると AAAA レコードを探しに行ったりしてネットワークの遅延が発生する……らしい。実際、使用しているネットワークでちょいちょい名前解決で時間が掛かるケースがあったので無効化してみた。

1. 手順

/etc/sysconfig/named に次の一文を加えて named を再起動するだけの簡単なお仕事です。

OPTIONS="-4"

2. 解説

/etc/sysconfig/named に加えた文は named の起動オプションを追加するための設定。追加したオプション「-4」は IPv4 のみを有効にするためのオプション*1

IPv6 を無効化してソースからコンパイルしたり、無効版の野良 rpm を入れるという解説も散見されたけど、この方法なら標準パッケージでも利用できるのでオススメです。

*1:ただし日本語版の man を眺めてもオプション一覧にないので注意。英語版の man を読むとしっかり載っていた。

CentOS 5 で PHP4 と PHP5 を共存させる

CentOS 5.5(5.4) で稼働している同一サーバー上で PHP4 と PHP5 を共存させる方法について。

1. 要件

今回の要件は以下の通り。

  • Apache (httpd) および PHP5 はOS標準のパッケージを使用する(すでにインストールされているものとする)。
  • PHP4 をソースコードからコンパイルし、Apacheのモジュールとして組み込む。
  • PHP4 と PHP5 を同時に実行できる環境を構築する。

2. 注意

PHP4 は2008年でサポートが終了しており、セキュリティメンテナンス等がすでに行われていない。どうしても PHP4 が必要、という場合でない限り、PHP4 の使用はおすすめできない。今回は PHP4 で構築されたアプリケーションを PHP5 を維持したまま同一サーバー上で動作させる必要があったため、やむなく行った。

3. 準備

まず、現在の httpd.conf をどこかにバックアップしておく。

[root@localhost ~]# cd /etc/httpd/conf
[root@localhost conf]# cp httpd.conf httpd.conf.tmp

PHP4 の最終バージョン(4.4.9)のアーカイブを取得し、解凍する。

[root@localhost ~]# cd /usr/local/src
[root@localhost src]# wget http://jp2.php.net/get/php-4.4.9.tar.gz/from/this/mirror
[root@localhost src]# tar xvf php-4.4.9.tar.gz

4. PHP4 のインストール

PHP4 のインストール(configure, make)を行う前に、共存させる上でソースコードの変更が1カ所必要になる。

[root@localhost src]# cd php-4.4.9
[root@localhost php-4.4.9]# vim sapi/apache2handler/sapi_apache2.c

以下のような部分を探し、次の通り変更する。

#define PHP_MAGIC_TYPE "application/x-httpd-php"

#define PHP_MAGIC_TYPE "application/x-httpd-php4"

変更したら、configure → make を実行する。configure オプションで prefix を指定することで、標準の PHP5 ファイル群を上書きしないようにする。configure 実行時にエラーが発生する場合は必要なモジュールをインストールする必要がある。今回は次の通り実施。

[root@localhost php4.4.9]# yum -y install \
  httpd-devel \
  bzip2-devel \
  openssl-devel \
  libjpeg-devel \
  libpng-devel \
  gmp-devel \
  ncurses-devel
(中略)
[root@localhost php4.4.9]# ./configure \
  --prefix=/usr/local/php4 \
  --with-apxs2=/usr/sbin/apxs \
  --with-sqlite \
  --with-mysql \
  --with-gd \
  --with-jpeg=/usr/lib \
  --with-png=/usr/lib \
  --with-zlib \
  --with-bz2 \
  --with-openssl \
  --with-gettext \
  --with-gmp \
  --with-iconv \
  --with-ncurses=shared \
  --enable-exif \
  --enable-gd-native-ttf \
  --enable-memory-limit \
  --enable-mbstring=shared \
  --enable-mbstr-enc-trans \
  --enable-mbregex \
  --enable-bcmath \
  --enable-trans-sid \
  --enable-sysvsem \
  --enable-sysvshm
(中略)
[root@localhost php4.4.9]# make
(中略)
[root@localhost php4.4.9]# make install

php.ini をコピーして作成する。コピー後、必要に応じて内容を編集する。

[root@localhost php4.4.9]# cp php.ini-dist /usr/local/php4/lib/php.ini

5. Apache の設定

PHP4 のインストール前準備でバックアップしておいた httpd.conf から復元する。

[root@localhost ~]# cd /etc/httpd/conf
[root@localhost conf]# rm httpd.conf
[root@localhost conf]# mv httpd.conf.tmp httpd.conf

/etc/httpd/conf.d に php4.conf を次の通り作成する。AddType の MIMEタイプにソースコード修正時に指定した MIMEタイプを指定するのがミソ。

LoadModule php4_module modules/libphp4.so
AddType application/x-httpd-php4 .php4

Apache を再起動する。

[root@localhost ~]# service httpd restart

以上で拡張子 .php4 の場合は PHP4スクリプトとして実行されるようになる。後は .htaccess などで、特定のディレクトリ以下のみ .php を PHP4スクリプトとして実行したりもできる……んじゃないかなぁ?

6. 参考

今回の作業、および記事の作成にあたって以下のページを参考にした。また、今回とは異なる手法での共存方法などもあるので参考にして欲しい。

Ruby on Rails + Apache 2.2 + FastCGI 環境の構築

CentOS 5.4(x86_64)に Ruby on Rails + Apache 2.2 + FastCGI 環境を構築した際のメモ。

1. 要件

  • Apache 2.2は導入済みであるとする。
  • Ruby は yum でなくソースからインストールする。

構築した環境は下記の通り。

2. Ruby のインストール

rpm版の ruby がインストールされている場合はあらかじめ削除しておく。

[root@localhost ~]# yum -y remove ruby

Rubyのソースを取得してインストールする。2010年2月2日現在の最新版は 1.9.1-p378 だが、今回は安定版の 1.8.7-p249 を選択した。

[root@localhost ~]# cd /usr/local/src
[root@localhost src]# wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p249.tar.gz
[root@localhost src]# tar xvzf ruby-1.8.7-p249.tar.gz
[root@localhost src]# cd ruby-1.8.7-p249
[root@localhost ruby-1.8.7-p249]# ./configure --prefix=/usr
[root@localhost ruby-1.8.7-p249]# make
[root@localhost ruby-1.8.7-p249]# make install

3. RubyGems のインストール

Rails などのRubyモジュール/ライブラリを管理するために RubyGems を導入する。

[root@localhost ~]# cd /usr/local/src
[root@localhost src]# wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
[root@localhost src]# tar xvzf rubygems-1.3.5.tgz
[root@localhost src]# cd rubygems-1.3.5
[root@localhost rubygems-1.3.5]# ruby setup.rb

4. Ruby on Rails のインストール

RubyGems を使って簡単にインストールできる。

[root@localhost ~]# gem install rails

5. Passenger のインストール

Passenger はRubyアプリケーションをApache経由で実行するために必要となるモジュール。

[root@localhost ~]# gem install passenger
[root@localhost ~]# passenger-install-apache2-module
[root@localhost ~]# vim /etc/httpd/conf.d/ruby-passenger.conf

ruby-passenger.conf は以下の通り作成。

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.9/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.9
PassengerRuby /usr/bin/ruby

6. fcgi, mod_fastcgi のインストール

http://fastcgi.com/dist/ からそれぞれ最新版をダウンロードしてインストール。32bit版と64bit版では、mod_fastcgiのmakeオプションが異なるので注意。また、make時にapt-

[root@localhost ~]# cd /usr/local/src
[root@localhost src]# wget http://fastcgi.com/dist/fcgi-2.4.0.tar.gz
[root@localhost src]# tar xvzf fcgi-2.4.0.tar.gz
[root@localhost src]# cd fcgi-2.4.0
[root@localhost fcgi-2.4.0]# ./configure --prefix=/usr
[root@localhost fcgi-2.4.0]# make
[root@localhost fcgi-2.4.0]# make install
[root@localhost ~]# cd /usr/local/src
[root@localhost src]# wget http://fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz
[root@localhost src]# tar xvzf mod_fastcgi-2.4.6.tar.gz
[root@localhost src]# cd mod_fastcgi-2.4.6
[root@localhost mod_fastcgi-2.4.6]# cp Makefile.AP2 Makefile
[root@localhost mod_fastcgi-2.4.6]# make top_dir=/usr/lib64/httpd
[root@localhost mod_fastcgi-2.4.6]# make install top_dir=/usr/lib64/httpd
[root@localhost mod_fastcgi-2.4.6]# vim /etc/httpd/conf.d/fastcgi.conf

/etc/httpd/conf.d/fastcgi.conf は下記の通り作成。

LoadModule fastcgi_module modules/mod_fastcgi.so
<IfModule mod_fastcgi.c>
  FastCgiIpcDir	/tmp/fcgi_ipc/
  AddHandler	fastcgi-script .fcgi
</IfModule>

7. fcgiモジュール(Ruby)のインストール

RubyGemsfcgiモジュールをインストールする。

[root@localhost ~]# gem install fcgi

すべて完了したらApacheを再起動。