Xdebugを使う

phpデバッグXdebugを使うようにした.環境はFreeBSD7.0-RELEASE.以下導入メモ.Xdebugportsからインストール.

# cd /usr/ports/devel/php-xdebug
# make install
*****************************************************************************
The php debugger 'xdebug' has been installed successful.
Add a line containing

    extension=/usr/local/lib/php/20060613/xdebug.so

or

    zend_extension=/usr/local/lib/php/20060613/xdebug.so

to your php.ini to load it. xdebug is not compatible with the extension
'Zend Optimizer' - you're only able to use one of them. So take care having
at least the lesser required extension disabled by commenting out it's
loader line in your php.ini.

Add following section to enable profiling:

xdebug.profiler_enable = 1
xdebug.profiler_output_dir = /tmp/profiler

*****************************************************************************
===>   Registering installation for php-xdebug-2.0.2

指示に従い,php.iniに以下を記述*1

zend_extension=/usr/local/lib/php/20060613/xdebug.so

apacheを再起動するなりするとXdebugが使用可能となるはず.

$ php -m 
(省略)
[Zend Modules]
Xdebug

Zend Modules に XdebugがあればOK*2.

プロファイラの設定

# vi /usr/local/etc/php.ini
// 以下を記述
xdebug.profiler_enable=1
xdebug.profiler_output_dir = "/var/log/xdebug/" // ログを吐き出させたい場所.

ディレクトリの準備およびapache再起動

# mkdir /var/log/xdebug
# chown www /var/log/xdebug
# apachectl restart

吐き出されるログはそのまんまだと見難いため,WinCacheGrindやKcacheGrindIndexで閲覧する.

*1:extension=/usr/local/lib/php/20060613/xdebug.so でもよいが,その場合コマンドラインから実行すると,PHP Warning: Xdebug MUST be loaded as a Zend extension in Unknown on line 0 といった警告がでる.ブラウザ上からしか確認しない場合は,どちらでもよい

*2:zend_extensionで読み込んだ場合

PHPXrefを使う

PHPのソースからドキュメントを生成してくれるPerlスクリプトPHPXref - The PHP Cross Referencing Documentation Utilityというものがある.ソース表示するとJavaScriptなんかで関係のあるものを表示してくれたりして,ソース追っかけるときに便利なので使用してみた.以下導入およびドキュメント生成手順.
まずソース落としてきて解凍する.

$ wget "http://prdownloads.sourceforge.net/phpxref/phpxref-0.7.tar.gz?download"
$ tar xzf phpxref-X.X.tar.gz

つぎに生成元となるソースと,ドキュメントの生成先となるディレクトリおよび文字エンコーディングを指定する.他にも設定できる項目はあるが,とりあえず基本的なものだけ.

$ vi phpxref.cfg // 設定ファイル
--以下適切な内容に書き換える.
SOURCE=/home/hoge/php_src // 生成元となるソースを置いているディレクトリを指定する.
OUTPUT=/home/hoge/php_doc // ドキュメントの生成先となるディレクトリを指定する.
CHARSET=UTF-8 // 適切なエンコードを指定する.今回はUTF8なソースだったのでUTF8を.

ドキュメントの生成は,phpxref.pl を実行する.

$ ./phpxref.pl

これで,OUTPUTで指定したディレクトリにドキュメントが生成される.コメントの書き方はJavadocライク.

FreeBSD7でfuse-sshfsを使う

sshでアクセスできるホストのディレクトリをローカルホストのディレクトリにマウントするsshfsを導入してみた.そのときのインストールメモ.環境は,FreeBSD7-Release.
portsからインストール.

# cd /usr/ports/sysutils/fusefs-sshfs
# make install

fusefsを起動できるように /etc/rc.conf に以下を記述.

# vi /etc/rc.conf
fusefs_enable="YES"

これで次回以降起動するときに,自動的に fuse.ko が読み込まれる.
再起動かけるのが面倒なので手動で起動する.

# /usr/local/etc/rc.d/fusefs start

kldstat で fuse.ko が読み込まれていることを確認.

一般ユーザーで使えるようにする.

/dev/fuse* の permission は root:operator 0660 なので root か operator に所属していないとアクセスできない.そのため一般ユーザーでもアクセスできるように permission を変更する.
/etc/devfs.conf に以下を記述.*1

perm    fuse*   0666

記述後,以下を実行.

# /etc/rc.d/devfs start

マウントをできるように以下を実行.*2

sysctl vfs.usermount=1

この設定は再起動すると消えるため,それが嫌なら /etc/sysctl.confに以下を記述.

vfs.usermount=1

ここまで設定すると sshfs でリモートマウントができるようになる.

マウントとアンマウント

ローカルディレクトリ ~/mnt に リモート remote.example ,ユーザーhogeをマウントする例

sshfs  hoge@remote.example: ~/mnt

アンマウントは通常と同じで

umount ~/mnt

*1:内部的には,chmod 666 fuse* を実行しているだけみたいなので直接 chmod してもよいかも.

*2:vfs.usermountが1に設定されていると一般ユーザーがファイルシステムをマウントできるようになる.

非root環境下でSubversionをインストールする

root権を持っていないサーバー環境下でSubversionを使用したい状況になり,インストールしたのでその時の作業メモ.

インストールディレクトリは,$HOME/local/以下とする.まず,インストールおよび作業用ディレクトリを作成する.

$mkdir -p $HOME/local/src
$cd $HOME/local/src

Subversionの取得および解凍.

// via http://subversion.tigris.org/project_packages.html
$wget http://subversion.tigris.org/downloads/subversion-1.5.4.tar.bz2
$bzip2 -dc subversion-1.5.4.tar.bz2 | tar xvf

次にSubversionコンパイルに必要なランタイムの取得.

// via http://ftp.kddilabs.jp/infosystems/apache/apr/
$wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-0.9.17.tar.gz
$wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-util-0.9.15.tar.gz
$tar xzvf apr-0.9.17.tar.gz
$tar xzvf apr-util-0.9.15.tar.gz
$cp -rf apr-0.9.17 subversion-1.5.4/apr
$cp -rf apr-util-0.9.15 subversion-1.5.4/apr-util

最後,コンパイルおよびインストール.インストールディレクトリはprefixで指定.

$cd subversion-1.5.4
$./configure --prefix=$HOME/local
$make && make install

インストール完了後,どこからでもsvnコマンドを使えるように$HOME/local/binへのPATHを通す.また,EDITORの設定も必要なため,指定していなければ指定する.今回は,viを指定した.

$vi $HOME/.bash_profile
PATH="$PATH":$HOME/local/bin
export EDITOR=vi

PDOでPostgresに接続する.

# cd /usr/ports/lang/php5
# make install
# cd /usr/ports/lang/php5-extensions
# make config // PDO に印をつけておく.
# make install

この段階で,PDOは使えるようになる.しかし,postgres用のドライバーはインストールされていないので,postgresへPDO経由では接続できない.そのため,postgres用のドライバーをインストールする.

# cd /usr/ports/databases/php5-pdo_pgsql
# make install

次にドライバーを読み込むために,設定ファイルに記述する.

# vi /usr/local/etc/php/extensions.ini
// 以下を追加.portsでいれた場合,記載されてるかも.
extension=pdo_pgsql.so 

256色でmlterm+Vim+Screenを使う.

環境は,FreeBSD7.0-RELEASE.

mltermの256色化

mltermは2.9.4現在,256色には対応していない.mltermを256色化するPatchは,http://d.hatena.ne.jp/shinichiro_h/20080313#1205334463にて配布されている.まずpatchをあてる.

# cd /usr/ports/x11/mlterm
# make configure
# cd work
# wget http://shinh.skr.jp/dat_dir/mlterm-2.9.4_256.patch
# patch -p0 < mlterm-2.9.4_256.patch

後は,普通にmake installでmltermはOK.256色化できているか確かめるため,256colors2.plを落として,実行する.カラフルな表示ができれば,mltermの256色化はできている.しかしながら,gnuls --color=autoでdir_colorsを256色のものにしても白黒になる.なんでだろう?設定の問題だろうか...

vimの設定

vimで256色を使えるようにするため,以下の内容を~/.vimrcに書き込む.

set t_Co=256

これで,256色のcolorscheme*1などが使えるようになる.Vim上で,t_Co?で値を確認できるためうまくいかない時は確認してみる*2.

Screenを256色化する

Screenには,256色化するコンパイルオプションがあるため,設定後コンパイルする.

# cd /usr/ports/sysutils/screen
# make config //XTERM_256にチェックする.
# make install

以下の設定を~/.screenrcに記載する.

termcapinfo xterm* 'Co#256:pa#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm:'
attrcolor b ".I"
defbce "on"

これで,screenで256色扱えるようになる.

*1:個人的なお気に入りは,xoria256.vim - Soft pastel gamma on dark background, same appearence in {,g}vim : vim online

*2:そもそも色がつかないといった場合は,TERM=xterm-colorなんかをシェルの設定ファイルに書いておくhttp://technique.sonots.com/?UNIX%2F%A5%B3%A5%DE%A5%F3%A5%C9%2F%A5%A8%A5%C7%A5%A3%A5%BF%2Fvim

gnulsのcolor設定をする.

FreeBSDでは,lsのカラー表示を行う方法は何通りかある*1.私は,gnulsを使用しているが,Terminalの背景を黒にしているため,見にくい色がある.色を変更するためには,dircolorsを使う.まず,色ファイルの雛形を生成する.

$dircolors -p > $HOME/dir_colors

個人的に,ディレクトリの色を変更したかったため,以下のように変更した.

DIR 01;36  # directory
LINK 05;36     # symbolic link.  (If you set this to 'target' instead of a
            # numerical value, the color is as for the file pointed to.)

試しに読み込んでみる.

$dircolors $HOME/dir_colors

LS_COLORS=以下ずらずら並ぶと読み込めている.使用している環境変数TERMが,dir_colorsに記載されていないときは,反映されないのでTERMを記載してやる.私の場合,xterm-colorを使用していたため,最初うまくいかなかった.以下のように記載してやる.

TERM xterm-color

個人的な注意として,読み込んだ後,シェルを再起動しないと色の変更は反映されないようで,悩んでしまった.
各ユーザーのホームディレクトリに.dircolorsファイルが存在していれば読み込むようにする.

# vi /etc/csh.cshrc
if( -f ~/dir_colors ) then
    eval `dircolors -c $HOME/dir_colors`
endif