複数バージョンのrubyを共存させるツールとして、過去にはRVMを使っていたが少し前にrbenvに変えた。
Rails3世代になり、RVMのgemsetはbundlerで代替可能になったので、RVMの豊富な機能が少し邪魔に感じたので。同時に、サーバーサイドでも管理が簡単なのでrbenvを使うようにした。あまり推奨はされてないようだけど。

rbenvの通常インストール方法はsstephenson/rbenv – GitHubにあるのでそちらを参照するとよい。

また、rbenvで使うrubyインストーラーであるsstephenson/ruby-build – GitHubも一緒に使うとすごく便利。

以下、サーバーで行った作業のログをメモ。


# rbenvインストール
$ git clone git://github.com/sstephenson/rbenv.git /usr/share/rbenv

# profile.dにrbenvの設定を追加
$ vi /etc/profile.d/rbenv.sh
# ここから
export PATH="/usr/share/rbenv/bin:$PATH"
export RBENV_VERSION=ree-1.8.7-2011.12
export RBENV_DIR=/usr/share/rbenv
export RBENV_ROOT=/usr/share/rbenv
eval "$(rbenv init -)"
# ここまで

# /etc/profile.d/rbenv.shに実行権限を与える
$ chmod 755 /etc/profile.d/rbenv.sh

# 一旦上記設定を読み込む
$ source /etc/profile.d/rbenv.sh

# ruby-buildインストール
$ git clone git://github.com/sstephenson/ruby-build.git
$ cd ruby-build
$ ./install.sh

# 今回はREE1.8.7をインストール
$ rbenv install ree-1.8.7-2011.12

# REE1.8.7をデフォルトで使用する
$ rbenv global ree-1.8.7-2011.12

と、ここまででrbenvのセットアップは完了。動作確認のために、一度シェルを再起動した上でrubyのバージョンを確認してみる。

$ ruby -v
ruby 1.8.7 (2011-12-28 MBARI 8/0x8770 on patchlevel 357) [i686-linux], MBARI 0x8770, Ruby Enterprise Edition 2011.12

正しくREEが使われることが確認できた。あとは、gemでrailsとunicorn_railsをインストールすればよい。

rbenv上のREEでunicornを起動するには、以下のようなスクリプトを作ればよい。

app_root=/var/www/rails_application
rbenv_bin=/usr/share/rbenv/versions/ree-1.8.7-2011.12/bin
cd $app_root && $rbenv_bin/bundle exec $rbenv_bin/unicorn_rails -c $app_root/config/unicorn.conf.rb -e production $app_root/config.ru

普段はUpstartで自動起動などをしているが、その場合 /etc/init/以下に次のような設定ファイルを作ればいい。これは、アプリケーションごとに1つのファイルになるので、例えばアプリケーション名がRailsAppならばRailsApp.confなどとする。

#!/bin/sh
description "Rails Application"
start on runlevel [2345]

script
  app_root=/var/www/rails_application
  rbenv_bin=/usr/share/rbenv/versions/ree-1.8.7-2011.12/bin
  cd $app_root && $rbenv_bin/bundle exec $rbenv_bin/unicorn_rails -c
  $app_root/config/unicorn.conf.rb -e production $app_root/config.ru >> /tmp/upstart.log 2>&1
end script

respawn

このアプリケーションの起動や終了はLinuxの場合ディストリビューションによって変わるが、大体の場合以下のようなコマンドで実行できるので自分の環境に最適なものを選択する。

# 起動
$ sudo service railsapp start
# または
$ sudo initctl start railsapp

# 終了
$ sudo service railsapp stop
# または
$ sudo initctl stop railsapp

UpstartはUbuntu10.04、CentOS6、Amazon Linuxなどで使える。従来の/etc/init.d/以下にあるようなスクリプトよりだいぶシンプルに書けるので積極的に使っている。他にもいろいろとメリットがあるらしいが、正直よくわからない。

 

Scientific Linux6のapacheで、DocumentRootのDirectoryIndexだけ表示できなくて困った。サブディレクトリ以下のDirectoryIndexはきちんと表示されてるので何のことやらさっぱりだ。このSL6は仮想マシン上で動いてるのでパーミッションの問題にハマったのかと思いきや、デフォルトで用意されてるconfにそういう記述があるだけだった。

問題のconfはこれで、DocumentRootだけDirectoryIndexを許可しないようにしていた。

# /etc/httpd/conf.d/welcome.conf
<LocationMatch "^/+$">
  Options -Indexes
  ErrorDocument 403 /error/noindex.html
</LocationMatch>

なぜこれがここにあるのかよくわからないので削除して見なかったことにした。
検証してないけどきっとCentOS6でも同じなのではないかと思われる。
apacheに限らず、設定ファイル全般はRHEL系よりDebian系、特にUbuntuがわかりやすくて整理されてる気がする。

そもそもなぜDirectoryIndexが必要かというと、主にPHP開発のとき、作業ディレクトリをDocumentRootにして、各プロジェクトはサブディレクトリでブラウザから見れるようにしてあるので、DocumentRootのDirectoryIndexはそのままプロジェクト一覧として使えるのです。

 

Ubuntu10.04からSysVintの後継であるUpstartが搭載されているので、アプリケーションのデーモン化がすごく簡単になったらしいのでrvm+unicorn_railsなRailsアプリで試してみました。

下記は/etc/init/rails_example.confです。

#!/bin/sh
description "Example ROR3.1 application"

start on runlevel [2345]
stop on runlevel [016]

console owner

exec /var/www/.rvm/bin/rails31_unicorn_rails -c /var/www/example.com/config/unicorn.conf.rb -E production /var/www/example.com/config.ru

respawn

これをおいとくだけで以下の事が出来るようになるらしいです。

# サービスの起動
sudo service rails_example start
# サービスの停止
sudo service rails_example stop
# サービスの状況を確認
sudo service rails_example status
# サービスの再起動
sudo service rails_example resart

実はsudo service rails_example reloadするとUSR2が送られてリロードされてたりするんでしょうか。
確認してないけど十分楽なのでいいのではないでしょうか。

 

現状、Apache+mod_phpをnginxで置き換えるとすると、nginx+spawn-fcgi+php-cgiを使ってる人が多いと思うんだけど、Ubuntuの公式リポジトリだとnginxのバージョンが低く(0.7系)、spawn-fcgiはinit.dスクリプトを書くかdaemontools使わなきゃいけないし、Apache+mod_phpみたいにインストール一発で動かせないので割とメンドクサイ。

同じこと思ってる人はnginxチームが提供しているaptリポジトリを使うと、nginx1.0.2+php5.3.5+php-fpmをaptでインストールできるので楽になりますよ。

既にnginxがインストールされている場合は念のためremoveしておく、spawn-cgiなどはkillしておきましょう。
以下、手順。

# nginxリポジトリを登録
$ sudo echo "deb http://ppa.launchpad.net/nginx/stable/ubuntu lucid main" > /etc/apt/sources.list.d/nginx-stable-lucid.list
$ sudo echo "deb http://ppa.launchpad.net/nginx/php5/ubuntu lucid main" > /etc/apt/sources.list.d/nginx-stable-lucid.list
$ sudo echo "deb-src http://ppa.launchpad.net/nginx/php5/ubuntu lucid main" > /etc/apt/sources.list.d/nginx-stable-lucid.list
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
# aptitudeのリストを更新
$ sudo aptitude update
# nginxをインストール
$ sudo aptitude install nginx
# PHP関連をインストール
$ sudo aptitude install php5 php5-cgi php5-cli php5-mysql php5-memcached php5-gd php5-curl php-pear php-apc php-fpm

インストールできたら、プロセスを確認してみる。

$ ps aux | grep nginx
root     14051  0.0  0.1  71092  1568 ?        Ss   May28   0:00 nginx: master process /usr/sbin/nginx
www-data 14052  0.1  0.2  72496  3568 ?        S    May28   3:47 nginx: worker process

$ ps aux | grep php
root     14238  0.0  0.3 182432  4944 ?        Ss   May28   0:25 php-fpm: master process (/etc/php5/fpm/main.conf)
www-data 14255  0.1  3.1 192428 48292 ?        S    May28   4:54 php-fpm: pool www
www-data 14256  0.1  4.0 207328 62988 ?        S    May28   4:43 php-fpm: pool www
www-data 14258  0.1  3.8 202720 59212 ?        S    May28   4:36 php-fpm: pool www
www-data 14291  0.1  3.6 199648 55496 ?        S    May28   4:39 php-fpm: pool www
www-data 14293  0.1  3.3 196576 52260 ?        S    May28   4:51 php-fpm: pool www
www-data 14294  0.1  3.4 196576 52952 ?        S    May28   4:47 php-fpm: pool www
www-data 14297  0.1  4.5 214756 70368 ?        S    May28   4:34 php-fpm: pool www
www-data 14298  0.1  3.1 192336 48900 ?        S    May28   4:46 php-fpm: pool www
www-data 14299  0.1  3.1 192332 48856 ?        S    May28   5:05 php-fpm: pool www
www-data 14300  0.1  2.9 191044 46132 ?        S    May28   4:58 php-fpm: pool www

ちゃんとユーザーwww-dataでphp-fpmのプロセスが起動されてますね。一番上のrootで実行されているのでphp-fpmの子プロセスを管理してるマスタープロセスです。起動していないければsudo service nginx startとsudo service php-fpm startで起動させて再度確認します。
起動するプロセス数やfastcgiのlisten URLなどは/etc/php5/php-fpm/pool.d/www.confにて設定します。

次に、nginxのバーチャルホストの設定。
下の設定だとwordpressとCakePHPは動くはず。

# /etc/nginx/sites-avilable/example.com

# www.example.comへのアクセスをexample.comへリダイレクト
server {
  listen 80;
  server_name www.example.com;
  rewrite ^(.*) http://example.com$1 permanent;
}
server {
  listen   80;
  server_name  example.com;

  access_log  /var/log/nginx/example.com.access.log;
  error_log  /var/log/nginx/example.com.error.log;

  root   /var/www/example.com;
  index  index.php index.html;

  try_files $uri $uri/ /index.php?q=$1;

  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  }

  # deny access to .htaccess files, if Apache's document root
  # concurs with nginx's one
  location ~ /\.ht {
    deny  all;
  }
}

この内容を/etc/nginx/sites-available/example.comに保存し、/etc/nginx/sites-enabled/example.comからシンボリックリンクを張ります。

$ sudo vi /etc/nginx/sites-available/example.com
$ cd
$ sudo ln -s /etc/nginx/sites-availabe/example.com /etc/nginx/sites-enabled/example.com

ここまでやったらnginxとphp-fpmを再起動して、http://example.comをブラウザで開き、正常に動けばOKです。ダメだったら何とかしましょう。

 

標題の通りなんですが、Ubuntu 10.04 LTSをアップデートしたらウェルカムメッセージが2重になって大変気持ち悪い。

具体的には以下のようになっている。

Linux ip-10-170-90-19 2.6.32-314-ec2 #27-Ubuntu SMP Wed Mar 2 22:54:48 UTC 2011 i686 GNU/Linux
Ubuntu 10.04.2 LTS

Welcome to Ubuntu!
 * Documentation:  https://help.ubuntu.com/

  System information as of Tue May 10 09:28:09 UTC 2011

  System load:  0.91              Processes:           100
  Usage of /:   33.8% of 7.87GB   Users logged in:     0
  Memory usage: 8%                IP address for eth0: 10.170.175.104
  Swap usage:   0%

  Graph this data and manage this system at https://landscape.canonical.com/
---------------------------------------------------------------------
At the moment, only the core of the system is installed. To tune the
system to your needs, you can choose to install one or more
predefined collections of software by running the following
command:                                                             

   sudo tasksel --section server
---------------------------------------------------------------------

Ubuntu 10.04.2 LTS

Welcome to Ubuntu!
 * Documentation:  https://help.ubuntu.com/

  System information as of Tue May 10 09:24:16 UTC 2011

  System load:  0.0               Processes:           87
  Usage of /:   32.4% of 7.87GB   Users logged in:     0
  Memory usage: 58%               IP address for eth0: 10.170.175.104
  Swap usage:   0%

  Graph this data and manage this system at https://landscape.canonical.com/
---------------------------------------------------------------------
At the moment, only the core of the system is installed. To tune the
system to your needs, you can choose to install one or more
predefined collections of software by running the following
command:                                                             

   sudo tasksel --section server
---------------------------------------------------------------------

8 packages can be updated.
6 updates are security updates.

*** System restart required ***
Last login: Tue May 10 09:24:20 2011 from example.com

要するに、新しいウェルカムメッセージが表示された後にアップデート前に出ていたウェルカムメッセージが続けて表示されてしまっておるわけですね。気持ち悪い。

ウェルカムメッセージを表示しているmotdの仕様変更か何からしいです。

/etc/motd.tailをcatしてみるとわかるんですが、古いウェルカムメッセージがそのまま保存されっ放しになっておるのが原因なので、以下のようにすれば直ります。

$ sudo mv -f /etc/motd.tail /etc/motd.tail.org
 

EC2の各regionで使えるofficialなUbuntu AMIのインスタンスでは、デフォルトでは日本時間に設定されていない。当然だけど。

us-westなら西海岸、us-eastなら東海岸とregionの物理的な位置に合わせてtimezoneが設定されているかどうかは未確認だけど、これは単純にTimezoneの設定の問題なので、下記のようにすればよい。

$ sudo dpkg-reconfigure tzdata

こうするとTimezoneの設定画面が出てくるので、Asia/Tokyoの順に選択してあげればよい。
同じ問題におけるRHEL系の解決方法として

$ cp /usr/share/zoneinfo/Japan /etc/localtime

っていうのが紹介されてるけど、Ubuntuの場合これをやっても再起動すると元に戻ってしまうのでやっぱり上記の方法の方がいいです。

 

今日(7/27)の午前ぐらいから、あるブログがTwitter上のIT系の人々の間で非常に話題になっていました。
それがこのブログ。その名も、「小悪魔女子大生のサーバーエンジニア日記」です。

Continue reading »

 

Linux向けアンチウィルスソフトの定番であるClamAVを使ってると起こる問題について、簡単な対策をメモ。

大した負荷がかかるはずのないサーバーからload averageに関するalertが来て、topコマンドでチェックしてみたら大量のclamscanで埋め尽くされていたことはありませんか?

Continue reading »

 

7月1日深夜から7月2日深夜にかけて、サーバー移転作業のため当ブログがダウンしておりました。
ご覧下さっている皆様に深くお詫び申し上げます。

当ブログはGMOインターネットのVPSサービスを使用していのです。
作業の手順としては、旧VPSのsanojimaru.comのドメイン割り当てを解除してから新VPSにドメインを割り当てるのですが、管理画面からの作業がるのですが、今回実験やgitリポジトリ用にもう一つ同じVPSを借り、そちらに移転しました。
ところが、GMOインターネットのVPSサービスではDNSのレコードが編集できず(!)、全て管理画面からドメインの割り当て等の作業をしなくてはならなず、ダウンタイムが発生してしまいました。
仕様の確認不足でした。

そんなお茶目な仕様ではありますが、このVPSはコストパフォーマンスが優秀だったり、ドメインと同時に申し込むとドメインが無料になったり、初期費用と最初の3ヶ月の利用料が無料だったりと大変お得なサービスとなっております。VPSを検討してる方はぜひ一度使ってみてください。

 

ThinkPadには、ポインティングデバイスが2つあります。

  1. TrackPoint(トラックポイント,キーボードの真ん中についてる赤ポッチ)
  2. TouchPad(タッチパッド,普通のノートPCについてる、触って操作するやつ)

1のトラックポイントは、これだけでthinkpadを買う理由に値するほど使いやすい。
両手の無駄な動作が最も少なくなるPCだと思います、thinkpad。
特筆すべきは、トラックポイントのセンターボタンを使ったスクロール機能。
マウスホイールみたいにコロコロ転がすなんて煩わしくてありゃしない、賢い大人はセンターボタンを押しながらトラックポイントを少し下にズラすだけでいいのさ、的なスマートな感覚は慣れると病み付き間違いなし。

Ubuntuでは、もちろん両方のデバイスが使用できますが、特筆すべきスマートさを誇るスクロール機能だけはデフォルトでは使えません。

前のUbuntu9.10では、従来の方法で使用できました(ubuntu9.10でthinkpad x61のトラックポイントスクロールを使う)。拙い文章すぎてリンクするのも躊躇します。大変恐縮です。

しかし、期待すべき時期バージョン、Ubuntu10.04ではどうやら従来の方法では使用できません。何故だ。

少し調べてみたら、どうやら以下の変更が原因のよう。
[雑記]Ubuntu 10.04ではHALがなくなる
ブートプロセスからHALを削除して起動時間を短縮したらしい。

HALとは?

wikipedia: HAL(ソフトウェア)

ブートプロセスとは?

Turbolinux 11 Server: ユーザーガイド 1.1. ブートプロセスの概要

従来の方法は、/etc/hal/fdi/policy以下にトラックポイント用の設定ファイルを置く作業だった=バッチリHALを使っていたので、HALがブートプロセスから削除されたUbuntu10.04では使用出来なくなった、ということ。

というわけで、HALに依存しない新しい方法を見つければいいわけです。
・・・と思ってたんですが、既に記事があったようなのでご紹介。

ThinkPad X61 + Ubuntu 10.04 トラックポイントでスクロールできるようにする

この方法で、ThinkPad SL500も動作を確認しました。
快適過ぎる。

© 2011 sanojimaru.com Suffusion theme by Sayontan Sinha