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)を変更する方法について
MTUとは?
一時的、または即座に変更したい場合
次のコマンドを実行する。
[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 機能を無効化する
CentOS 5 で PHP4 と PHP5 を共存させる
CentOS 5.5(5.4) で稼働している同一サーバー上で PHP4 と PHP5 を共存させる方法について。
1. 要件
今回の要件は以下の通り。
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 環境を構築した際のメモ。
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
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>