日時をJSTに変更する

Cent OSをインストールしたばかりの素の状態だと日時がEastern Daylight Time(EDT)となっている。

$ date
Tue May 25 03:18:14 EDT 2010

これだと色々と不都合があるので、Japan Standard Time(JST)に変更する。

$ sudo rm -f /etc/localtime
$ sudo cp -p /usr/share/zoneinfo/Japan /etc/localtime

これでJSTに変更された。

$ date
Tue May 25 16:35:28 JST 2010

Apache2.2でETagの計算方法を変更する

Apache2.2では、ETagは以下の情報から自動的に計算してくれる。

  • ファイルのinode番号
  • ファイルの最終更新時刻
  • ファイルのバイト数

ウェブサーバを分散させている場合、サーバによってinode番号が異なるため、FileETagディレクティブを設定してあげればよい。

FileETag MTime Size

遅延証明書を改札口で並ばすにゲットする方法

遅延証明書ってウェブで発行してるので、電車遅延で遅刻した場合には、印刷して使ってます。わざわざ並んだする必要がないので、地味に便利です。

とりあえず主要そうなところを挙げておきます。

ProFTPDでIPアドレスとユーザーでログイン制限を行う

FTPサーバの設定なんて長らくやってなくって、すっかり忘れてたのと設定方法が変わってるっぽいので、メモしておきます。

確認したのは、CentOS 5.4、yumにてインストールしたProFTPDで、バージョンは以下の通り。

$ proftpd -v
ProFTPD Version 1.3.2b

IPアドレスとユーザーでログイン制御

頻繁に訊かれる質問らしくようで、解決方法がそのものズバリで書かれている。

mod_ifsessionモジュールを組み込んで、アクセス制御の設定を行え、ってことらしい。具体的にはこんな感じらしい。

  <Class friends>
    From 192.168.0.0/24
  </Class>

  <IfUser kouichi>
    <Limit LOGIN>
      AllowClass friends
      DenyAll
    </Limit>
  </IfUser>

で、proftpd.confに設定を施してみたけど、動作しなかったので、モジュール自体が組み込まれてないのかと思い確認したら、組み込まれてませんでした。

うーん、IPアドレス制限の方は、TCP Wrapperで設定するって方向に持っていちゃおうかなぁ。

組込済モジュールの確認

以下のコマンドを実行することで確認できます。

$ /usr/sbin/proftpd -l
Compiled-in modules:
  mod_core.c
  mod_xfer.c
  mod_auth_unix.c
  mod_auth_file.c
  mod_auth.c
  mod_ls.c
  mod_log.c
  mod_site.c
  mod_delay.c
  mod_facts.c
  mod_dso.c
  mod_ident.c
  mod_readme.c
  mod_auth_pam.c
  mod_tls.c
  mod_vroot.c
  mod_cap.c
  mod_ctrls.c
  mod_lang.c

proftpd.confの設定内容チェック

/etc/proftpd.confの設定内容が正しいかどうかのチェックは以下のコマンドを実行することできます。

$ sudo /usr/sbin/proftpd -t
Checking syntax of configuration file
Syntax check complete.

ruby1.9をインストールする

ruby1.9系もyumでインストールしようと思ってたんですが、パッケージが見つからないので、自前で作成することにしました。

checkinstallを以下のサイトを参考にインストールを行います。

まず事前にrpm-buildパッケージをインストールしておきます。

$ sudo yum install rpm-build

ruby1.9の最新版のソースコードをダウンロードし、make install直前まで通常のインストール作業を行います。最後にcheckinstallコマンドを使ってrpmパッケージを作成し、そのパッケージをrpmコマンドでインストールします。

$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p378.tar.gz
$ tar zxvf ruby-1.9.1-p378.tar.gz
$ cd ruby-1.9.1-p378
$ ./configure --prefix=/usr
$ make
$ sudo checkinstall --fstrans=no
$ sudo rpm -ivh --nodeps /usr/src/redhat/RPMS/i386/ruby-1.9.1-p378-1.i386.rpm

またruby1.9系からは、rubygemsは組み込まれているので、すぐに利用することができます。

が、そのままだと gem list などのgemコマンドを実行すると zlib関連でエラーが発生します。

上記ページによるとzlib-develがインストールされていないために発生しているので、zlibをサポートするようにインストールし直します。

$ sudo yum install zlib-devel
$ cd ruby-1.9.1-p378/ext/zlib
$ ruby extconf.rb --with-zlib-include=/usr/include --with-zlib-lib=/usr/lib
$ make
$ sudo make install

インストールしたバージョンのrubyrubygemsのバージョンは、少し古いので最新版にしておきます。

$ sudo gem update --system
$ gem -v
1.3.6

MacPortsを使ってnginxをインストールする

Linodeでは、メモリ消費量を極力抑えたいので、Apacheではなく、nginx(エンジンエックス)を使ってみようと思って、手元のMacにインストールしてみました。

nginxについては、公式サイトを参照して下さい。

上記サイトからのnginxについての説明を抜粋しておきます。

nginxは無料で利用できるオープンソースのハイパフォーマンスHTTPサーバ且つリバースプロキシで、 
IMAP/POP3のプロキシサーバとしても動作します。

ってことで、早速インストール。

Macでは、MacPortsを使うことで簡単にインストールすることができます。

$ sudo port install nginx

インストール完了時に自動起動の方法を教えてくれます。具体的には以下のコマンドを実行します。

$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.nginx.plist

また各種設定ファイルは、/opt/local/etc/nginx/以下にあるので、それをベースに編集した作成します。

$ ls -alF /opt/local/etc/nginx/
total 48
drwxr-xr-x   8 root  admin   272  3 27 22:08 ./
drwxr-xr-x  14 root  admin   476  3 27 22:08 ../
-rw-r--r--   2 root  admin   909  3 27 22:08 fastcgi_params.example
-rw-r--r--   2 root  admin  2837  3 27 22:08 koi-utf
-rw-r--r--   2 root  admin  2223  3 27 22:08 koi-win
-rw-r--r--   2 root  admin  3128  3 27 22:08 mime.types.example
-rw-r--r--   2 root  admin  2786  3 27 22:08 nginx.conf.example
-rw-r--r--   2 root  admin  3610  3 27 22:08 win-utf

nginxのオプションを確認しておきます。

$ nginx -h
nginx version: nginx/0.7.64
Usage: nginx [-?hvVt] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /opt/local/)
  -c filename   : set configuration file (default: /opt/local/etc/nginx/nginx.conf)
  -g directives : set global directives out of configuration file

基本的な起動と停止方法はこんな感じみたいです。

$ sudo nginx
$ sudo nginx -s stop

実際の起動/停止は、以下のように設定ファイルを指定することになります。パスは、絶対パスで指定する必要があります。指定しないと、prefixパスからの相対パスになってしまうので注意が必要です。

$ sudo nginx -c /path/to/nginx.conf
$ sudo nginx -c /path/to/nginx.conf -s stop

設定ファイル(nginx.conf)の記述方法は、Apacheとは全然異なるようなので、色々とドキュメントを確認しないとダメですね。

補足

設定ファイル(nginx.conf)をサンプルをコピーすると、 /opt/local/var/log/nginx/ 以下にログが出力されます。通常のアカウントで起動すると、パーミッションエラーが発生するため、rootアカウントで起動しています(手抜き)。

実際には、こんな感じの構成でアプリケーションを作ろうと思っているので、連携が必要です。

nginx(80,443) -> thin(3000-300?) -> rails

スティーブ・ジョブズが2005年に行った卒業式でのスピーチ

もう卒業式の時期を過ぎちゃいましたが、スティーブ・ジョブズの2005年のスタンフォード大学の卒業式で行ったスピーチを紹介します。(有名なスピーチなので、ほとんどの人が知ってるかと思いますが)

あらためて見ると、ジョブズって、スピーチがほんと上手いなぁと思う。話すスピードとか、独特に間とか、学ぶことが多い。あと字幕付きだけど、分かりやすい英語だから、何て言ってるのかも理解できるので、英語の学習にもなるね。