2011年6月28日火曜日

Confluenceのインストール

今までシステム関係のメモは本ブログやプライベート利用のMediaWikiに書き散らしてきましたが、ぼちぼちセキュリティや管理が気になってきました。ドメイン名をhogeに書き換えたり、あくまで個人用のメモとしては、やってられません。
もっと使い勝手の良いソリューションに乗り換えを企てます、会社でAtlassian Confluenceを愛用していて、使い勝手に満足しているので、それにします。

○前準備
メモリ1GBじゃ足りない。Javaメモリ食い過ぎ。

○JDKのインストール
wget http://download.oracle.com/otn-pub/java/jdk/6u26-b03/jdk-6u26-linux-x64-rpm.bin
mv 'jdk-6u26-linux-x64-rpm.bin?e=1309186109&h=c1696b1b8ee4394e96ec0e35d0ac1bef' 'jdk-6u26-linux-x64-rpm.bin'
chmod a+x jdk-6u26-linux-x64-rpm.bin
./jdk-6u26-linux-x64-rpm.bin

○Confluence(体験版)のインストール
インストール先:/usr/local/confluence/
ホームディレクトリ(データ置き場):/var/data/confluence/

wget http://www.atlassian.com/software/confluence/downloads/binary/confluence-3.5.6-std.tar.gz
tar -xvf confluence-3.5.6-std.tar.gz
mv confluence-3.5.6-std /usr/local/confluence
vi /usr/local/confluence/confluence/WEB-INF/classes/confluence-init.properties
-# confluence.home=c:/confluence/data
+confluence.home=/var/data/confluence/
/usr/local/confluence/bin/startup.sh

で以下にアクセスするとSetup Wizardが始まる。
http://localhost:8080/

○日本語化
http://www.ricksoft.jp/document/pages/viewpage.action?pageId=77332576

2011年6月25日土曜日

PEAR File_Archiveのバグ マルチバイト文字(SJIS)対応編

またPEARのPHPライブラリ「File_Archive」のバグを見つけました。
英語できんし、どうフィードバックしたらいいのかわからないので、とりあえずひとりごちります。

■現象
SJISのファイル名を圧縮しようとすると、対象ファイルが出力ファイルに含まれない場合がある。

○対象バージョン
1.5.4

■例
○対象ファイル
ソ/1.jpg

○「ソ/」を対象に書庫ファイルを生成した時の書庫内容物
(空っぽ)

■原因
PHPのいわゆる「5C問題」

■対策パッチ
/usr/share/pear/File/Archive/Reader.php
こうしたら直った。

- $std = str_replace("\\", "/", $path);
+ $std=$path;

○補足
ディレクトリの区切り文字を「\」(0x5c)から「/」に置き変える処理なんですけど、SJIS文字の2byte目に含まれる0x5cまで置換してしまっています。
マルチバイト対応版str_replace関数を自作するなどして置き換えてやるのが正攻法なんでしょうが、僕のやりたいことはLinux上にすでに存在するローカルファイルを圧縮するだけなんで、この関数は不要だと思った。
Windows版PHPとか使ってる人は、だめですよ。

○過去にさかのぼって調べてみた
調べてません。

2011年6月24日金曜日

PEAR File_Archiveのバグ

PEARのPHPライブラリ「File_Archive」のバグを見つけました。
英語できんし、どうフィードバックしたらいいのかわからないので、とりあえずひとりごちります。

■現象
ディレクトリを丸ごと圧縮すると、生成された書庫ファイル内に同じファイルが二重に取り込まれてしまっていることがある。

○対象バージョン
1.5.4

■例
○ディレクトリ構成
a/1.jpg
a/2.jpg
a/3.jpg
a/4.jpg

○「a/」を対象に書庫ファイルを生成した時の書庫内容物
a/1.jpg
a/1.jpg
a/2.jpg
a/2.jpg
a/3.jpg
a/4.jpg

■原因
どうやら「readdir()」で取得されたディレクトリ「.」「..」の取り扱いに不具合がある様子。
正しくスキップせず周辺のファイルを二重に取り込んでしまう模様。

■対策パッチ
/usr/share/pear/File/Archive/Reader/Directory.php
111行目あたり、なんか判定順序がおかしい気がする。こうしたら直った。

- if ($this->source !== null) {
- $this->source->close();
- }

$file = readdir($this->directoryHandle);
if ($file == '.' || $file == '..') {
continue;
}
if ($file === false) {
return false;
}

+ if ($this->source !== null) {
+ $this->source->close();
+ }

○過去にさかのぼって調べてみた
1.1.0頃から発生している様子だけど、実際にはテストしてないのでわかりません。