PHP5.3のインストール

http://jp.php.net/get/php-5.3.1.tar.gz/from/a/mirrorから最新版のソースを入手する。
インストール手順はここを参照。
主要なconfigureオプションの説明はここ
全てのオプションについての情報は、./configure --helpコマンドで参照できる。


# cd /usr/local/src
# wget http://jp.php.net/get/php-5.3.1.tar.gz/from/this/mirror
# tar xzvf php-5.3.1.tar.gz
# cd php-5.3.1
# ./configure
--enable-mbstring
--enable-mbregex
--with-apxs2=/usr/local/httpd/bin/apxs
--with-gd
--with-jpeg-dir=/usr/lib
--with-png-dir=/usr/lib
--with-freetype-dir=/usr/lib
--with-mysql=/usr/local/mysql
--with-mysqli=/usr/local/mysql/bin/mysql_config
--with-pdo-mysql=/usr/local/mysql
--with-zlib-dir=/usr/lib
SSL使う場合は、--with-openssl[=DIR]オプションも必要

> configure: error: xml2-config not found. Please check your libxml2 installation.

エラーが出た。調べてみると自分の環境にはlibxml2はあるがlibxml2-develが無いのでこれを入れてみる。

# yum install libxml2-devel
再びconfigureでうまくいった。

# make
# make install
以上の作業で/usr/local/httpd/modulesにlibphp5.soが作成される。
以下設定手順。
雛型をコピーしてPHPの設定ファイルを作成する。

# cp php.ini-development /usr/local/lib/php.ini
Apacheの設定をする。
httpd.confに以下を記述する。

LoadModule php5_module modules/libphp5.so
Include conf/extra/httpd-php.conf
httpd-php.confを新規作成して、以下を記述する。

AddHandler application/x-httpd-php .phtml .php
AddHandler application/x-httpd-php-source .phps
ApacheクックブックによるとAddTypeよりAddHandlerを使うのが正しいらしい。


最後に動作確認をする。
/var/www/public/test.phpを作成して以下を記述

<?php phpinfo(); ?>
Apache起動

# /usr/local/httpd/bin/apachectl start
http://localhost/test.phpにアクセスするとビルド情報が表示された。

php-modeのインストール


$ wget http://sourceforge.net/projects/php-mode/files/php-mode/1.5.0/php-mode-1.5.0.tar.gz/download
$ tar xzvf php-mode-1.5.0.tar.gz
$ cp php-mode-1.5.0/php-mode.el ~/.emacs.d/plugins/
.emacsの記述

;; php-mode
(require 'php-mode)

php-mode.el内に以下のようなコメントがあるので、最新のphp-modeでもPHP5には対応してないようだ。


;;; Commentary:
;; PHP mode is a major mode for editing PHP 3 and 4 source code.

次に、php用のyasnippetを探したところ、http://d.hatena.ne.jp/n314/20091116/1258354156こんなのがあったの入れてみる。


$ git clone git://github.com/nishimura/minimal-yasnippet-php-mode.git
$ cp -R minimal-yasnippet-php-mode/php-mode/ ~/.emacs.d/plugins/yasnippet-0.6.1c/snippets/text-mode/html-helper-mode/
これでphp-modeでhtmlタグとPHP構文の補完ができるようになる…と思ったのだが使っていると以下のような警告が出た。

Warning (php-indent):
Indentation fails badly with mixed HTML and PHP.
Look for an Emacs Lisp library that supports "multiple
major modes" like mumamo, mmm-mode or multi-mode.
警告が出るだけで使えるからいいやとも思ったけど、mmm-mode入れるのが正しいのかな。

モジュールにinitializeメソッドを定義する時の注意


module Mod
def initialize
puts 'module initialized'
end
end

class Parent
def initialize
puts 'parent class initialized'
end
end

class Child < Parent
include Mod
def initialize
super
end
end

Child.new

実行結果

module initialized
initializeメソッドを持つモジュールをインクルードすると、スーパークラスで定義した初期化処理がされなくなる。
これを避けるためにはモジュールのinitializeメソッドの中でもsuperを呼ぶようにする。

module Mod
def initialize
super
puts 'module initialized'
end
end

class Parent
def initialize
puts 'parent class initialized'
end
end

class Child < Parent
include Mod
def initialize
super
end
end

Child.new

実行結果

parent class initialized
module initialized
さらにこのモジュールを汎用化するためにinitializeメソッドを以下のように修正すれば、インクルード元クラスのinitializeがどんな引数を持っていても、スーパークラスのinitializeに処理を投げられるようになる。

module Mod
def initialize(*args, &block)
super
puts 'module initialized'
end
end

そもそもモジュールにinitializeやsuperを書くこと自体どうなのかとも思ったけど、
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/29888 のようにコミッタの方が良しとしてるのだからありなのだろう。

rubygemsの動作がよく分からない


$ gem install mislav-will_paginate
一般ユーザー権限で上のようにgem installを実行すると、~/.gem/ruby/1.8以下にmislav-will_paginateがインストールされる。
しかし以下のような警告が出る。

WARNING: Installing to ~/.gem since /usr/lib/ruby/gems/1.8 and
/usr/bin aren't both writable.
WARNING: You don't have /home/totemn/.gem/ruby/1.8/bin in your PATH,
gem executables will not run.
書き込み権限が無いので/usr/lib/ruby/gems/1.8/以下にはインストールできないということらしい。
この状態で

$ gem list
を実行すると、mislav-will_paginateはちゃんと出力される。
しかし

$ gem uninstall mislav-will_paginate
を実行してアンインストールしようとすると、以下のエラーが出てアンインストールできない。

ERROR: While executing gem ... (Gem::InstallError)
Unknown gem mislav-will_paginate >= 0
~/.gem/ruby/1.8以下のライブラリは見つけられないようだ。
仕方なく~/.gem/ruby/1.8以下のgem本体やspecファイルを手動で削除するとgem listの出力からも消えた。
gem listは/usr/lib/ruby/gems/1.8と~/.gem/ruby/1.8を両方見てくれるけど、gem uninstallは/usr/lib/ruby/gems/1.8を調べた時点でmislav-will_paginateが無いければすぐにエラー出すてことなのかな。
ネットで調べると

$ sudo gem install mislav-will_paginate
とするのが正しいらしい。
この方法だと、/usr/lib/ruby/gems/1.8以下にのみインストールされる。
gem listで出力されるし、sudo gem uninstallでちゃんとアンインストールできる。
~/.gemを作成する機能があるのにユーザごとにライブラリを管理することは想定してないのだろうか。
何のための~/.gemなんだろう。





※追記


$ gem install mislav-will_paginate
でインストールした場合も、

$ gem uninstall -i ~/.gem/ruby/1.8 mislav-will_paginate
とパスを指定してやるとアンインストールできた。


$ gem env
> - GEM PATHS:
> - /usr/lib/ruby/gems/1.8
> - /home/totemn/.gem/ruby/1.8
gemコマンドはこのパスを見ていて、
gem installは、上から順にパスを見ていき、インストールできるところがあればそこにインストールする。
gem listは、全てのパスを調べて全部出力してる。
gem uninstallは、/usr/lib/ruby/gems/1.8からアンインストールしようとするが、パスを指定すればそこからのアンインストールも可能。
という感じか。

Rinariのインストール

EmacsRails開発をするためのElispライブラリ。
公式サイトhttp://rinari.rubyforge.org/が丁寧で分かりやすい。

インストール

公式では、ELPAというelispを介してのインストールと、gitから直接インストールする方法が紹介されている。
ELPAを使うと、Rinariを使うにあたって必要なelispも一緒にインストールできるようだ。
今回はgitから入れることにする。
まずhttp://git-scm.com/からgitのインストールをする。(参考)


$ wget http://kernel.org/pub/software/scm/git/git-1.6.5.2.tar.gz
$ tar xzvf git-1.6.5.2.tar.gz
$ make
$ sudo make install
Rinariのインストール。(参考)

$ git clone git://github.com/eschulte/rinari.git
$ cd rinari
$ git submodule init
$ git submodule update
.emacsに以下を記述してrinariの場所をload-pathに追加。

(add-to-list 'load-path "~/.emacs.d/plugins/rinari")
(require 'rinari)
次にRinariが必要とするelispをインストールする。
http://rinari.rubyforge.org/Add-Ons.html#Add-Onsに必要なelispの一覧がある。
自分の環境ではruby-mode、javascript-mode、css-modeはインストール済みなので、

をインストールする。

yaml-modeのインストール


$ wget http://tweedle-dee.org/svn/emacs.d/site-lisp/yaml-mode.el
.emacsの記述

(require 'yaml-mode)
(add-to-list 'auto-mode-alist '("\\.yml$" . yaml-mode))

rhtml-modeのインストール


$ git clone git://github.com/eschulte/rhtml.git
.emacsの記述

(add-to-list 'load-path "~/.emacs.d/plugins/rhtml")
(require 'rhtml-mode)
(add-hook 'rhtml-mode-hook (lambda () (rinari-launch)))

yasnippetのインストール


$ wget http://yasnippet.googlecode.com/files/yasnippet-0.6.1c.tar.bz2
$ bzip2 -dc yasnippet-0.6.1c.tar.bz2 | tar xvf -
.emacsの記述

(add-to-list 'load-path "~/.emacs.d/plugins/yasnippet-0.6.1c")
(require 'yasnippet)
(yas/initialize)
(yas/load-directory "~/.emacs.d/plugins/yasnippet-0.6.1c/snippets")

yasnippets-railsのインストール


$ git clone git://github.com/eschulte/yasnippets-rails.git
.emacsの記述

(yas/load-directory "~/.emacs.d/plugins/yasnippets-rails/rails-snippets")

これで使えるようになった。
rinariとyasnippetはいずれもマイナーモードとして働く。
yasnippetの動作が煩わしい時は、yas/minor-mode-offという関数でモードをオフにできる。

CentOSにEmacs23を入れる

CentOSyumリポジトリにEmacs23のRPMパッケージが無いのでhttp://sea-mew.jp/nox/modules/rpms/ls/el5/i386からインストールする。
まず古いEmacs21を削除する。


$ rpm -qa | grep -i emacs
> emacs-el-21.4-20.el5
> emacs-21.4-20.el5
> emacs-leim-21.4-20.el5
> emacs-common-21.4-20.el5
> emacspeak-23.0-3.el5
$ sudo rpm -e emacs-el
$ sudo rpm -e emacs-leim
$ sudo rpm -e emacspeak
$ sudo rpm -e emacs
$ sudo rpm -e emacs-common
Emacs23を入れる。

$ wget ftp://sea-mew.jp/rpms//el5/i386/emacs-23.1-10.i386.rpm
$ wget ftp://sea-mew.jp/rpms//el5/i386/emacs-common-23.1-10.i386.rpm
$ wget ftp://sea-mew.jp/rpms//el5/i386/emacs-el-23.1-10.i386.rpm
$ sudo rpm -Uvh emacs-common-23.1-10.i386.rpm
$ sudo rpm -Uvh emacs-23.1-10.i386.rpm
> エラー: 依存性の欠如:
> hunspell は emacs-23.1-10.i386 に必要とされています
> libotf.so.0 は emacs-23.1-10.i386 に必要とされています
hunspellとlibotfを入れてからやり直す。

$ wget ftp://sea-mew.jp/rpms//el5/i386/hunspell-1.2.7-1.i386.rpm
$ wget ftp://sea-mew.jp/rpms//el5/i386/libotf-0.9.9-1.i386.rpm
$ sudo rpm -Uvh hunspell-1.2.7-1.i386.rpm
$ sudo rpm -Uvh libotf-0.9.9-1.i386.rpm
$ sudo rpm -Uvh emacs-23.1-10.i386.rpm
$ sudo rpm -Uvh emacs-el-23.1-10.i386.rpm
これでEmacs23が使えるようになった。

Vimの色設定

背景を黒にしたらデフォルトのハイライトが見難くなったので色の変更をする。
まず、http://www.vim.org/scripts/script.php?script_id=1778からwombat.vimをダウンロードし、~/.vim/colorsに保存する。
次に~/.vimrcに以下を記述してwombat.vimを読み込ませる。


colorscheme wombat
これで色が変わった。wombatは蛍光色なので背景が黒だと見やすい。
他の色設定ファイルを使う場合は、http://www.vim.org/search.phpに行き、
Search for Vim Scriptsのtypeをcolor schemeにしてsearchするとリストが表示される。