2003年07月30日(水) HikiFarm [長年日記]
§1 Amritaとか0744とか
すでにHikiFarmは運用を始めていたけれど、新しいWikiが作れても、すぐにそのWikiを運用開始できない状態だった。
ボクの借りているサーバーの問題で、Amritaが標準のライブラリにインストールできないのが第一の原因だった。手作業でRubyのパスの後に"-I"で引数を書き込んでやると上手く動くようになる。これをHikiFarmからの作成時に自動で設定されないとFarmの意味が無くなる。アレコレしていたが結論は以外と簡単だった。hikifarm.confのrubyのパスに引数も含めて設定しておけばちゃんと出来るのがわかった。1つ解決である。
# rubyのパス -- ruby = '/usr/bin/env ruby' ++ ruby = '/usr/bin/env ruby -I/foo/bar/hoge/lib-ruby/'
これで新しく作成したWikiにAmritaの在処を告げることが出来るわけだ。
さて、新しいWikiのindex.cgiはちゃんと動くようになったが、新しいWikiディレクトリのパーミッションがサーバーに合わなくて実際には動作しない、FTPでパーミッションを設定してやると動くようになる。これも自動でできないと意味がない。
Hikiの本家のご意見などのコーナーで少し訪ねてみた、File.umask(nnn)で解決することがわかった。HikiFarmのindex.cgiのdef create_wikiのすぐ下の行にFile.umask(0)をセットしてHikiFarmで新しいWikiを作成してみる。その後FTPでアクセスして新しいWikiのディレクトリとファイル、それからDATA_PATHのディレクトリとファイルのパーミッションを確認してみる。これで出来たパーミッションから自分が設定したいパーミッションになるように引き算するようにセットする。0777で作成されたディレクトリを0755にしたいときはFile.umask(022)とすれば上手く行く。ちなみにボクの場合は、
def create_wiki( wiki, data_path, cvsroot=nil ) ++ File.umask(022) Dir.mkdir( wiki ) File.open( "#{wiki}/index.cgi", 'w' ) do |f| f.puts( index( wiki ) ) -- f.chmod( 0744 ) ++ f.chmod( 0701 ) end File::open( "#{wiki}/hikiconf.rb", 'w' ) do |f| f.puts( conf( wiki ) ) end ++ File.umask(033) Dir.mkdir( "#{data_path}/#{wiki}" ) Dir.mkdir( "#{data_path}/#{wiki}/text" ) Dir.mkdir( "#{data_path}/#{wiki}/backup" ) Dir.mkdir( "#{data_path}/#{wiki}/cache" ) Dir["#{@default_pages}/*"].each do |file|
で、ほぼ目的が達成できた。他にも最初にFile.umask(0)を設定して、それぞれのDir.mkdirにそれぞれ個別のパーミッションを設定することも出来る。たとえば、
Dir.mkdir( "#{data_path}/#{wiki}" ) を Dir.mkdir( "#{data_path}/#{wiki}",0744 )
の様にしていけば良いわけだ。これで完璧なWikiのFarmが出来たわけだ、誰でも自由にWikiサイトを作って運営できる。だが、大丈夫かなぁと言う不安もある、本来のWikiから逸脱するけれど、自分のサイト作成のツールと割り切れば、作成部分だけ別cgiにして基本認証でも掛ければ出来そうだが、しばらく様子を見ることにしよう。
ここまでの道のりを後々、nob's_Hikiでドキュメントにしようと思う。
おっ、あと90日か! これでもツッコミやで(笑)
FTPなら、オーナーの実行権つけるだけという感じですが、読んでいると中々一筋縄ではいかないようですね。
cgiから生成されるディレクトリとファイルのパーミッションがサーバー毎に設定できるようになった方が良いみたいですね。出来ないとセキュリティの問題になりかねないわけですから。自分で適当に修正しておくとバージョンアップに気を使います(^^;