[ITPASS2012]Hikiのインストールと設定
[ITPASSサーバ構築・運用ドキュメント へ戻る]
概要
ここでは, Hiki のインストールおよび環境設定について記す.
なお, OS やパッケージのバージョン (例えば squeeze, 0.8.8.1-1 など) は適宜読み替えること.
インストール
Debian package 版を使う. パッケージのインストールは [ITPASS2012]debianパッケージの引き継ぎ で行う作業によって既に完了しているはずなので, インストールされているか の確認を行う.
$ apt-show-versions -a -p hiki hiki 0.8.8.1-1 install ok installed hiki 0.8.8.1-1 squeeze cdn.debian.or.jp hiki/squeeze uptodate 0.8.8.1-1
hikiconf.rb.sample の作成
ページ毎の基本設定 (確認)で行う各 Hiki ディレクトリの作成において, 初期設定は /usr/bin/hikisetup で行う. しかし, パッケージをインストールしただけで実行すると,
「/usr/share/doc/hiki/examples/hikiconf.rb.sample が無い」ために失敗する. そのため /usr/share/doc/hiki/examples/hikiconf.rb.sample.ja.gz を /usr/share/doc/hiki/examples/ 以下に展開し, hikiconf.rb.sample へシンボリックリンクを張る.
$ cd /usr/share/doc/hiki/examples/ $ sudo gunzip hikiconf.rb.sample.ja.gz $ sudo ln -s hikiconf.rb.sample.ja hikiconf.rb.sample
これでシステムへの Hiki のインストールは完了した.
環境設定
apache の実効権限が www-data であるため, 以下の作業には管理者権限が必要となることに注意.
TABLE を使えるようにするための設定
plugin として table_form.rb が公開されているが, RD+ style に対応していないのでちょっと修正する. またスタイルシートから見た目を変更できるよう, div タグに class="table_form_rd" を含める. 一応オリジナルの table_form.rb 自体もプラグインに含めておく. 2011 年度までは http://gouketsu.net/simm/f/20050721/table_form.rb から table_form.rb を取得していたが, ページが削除されたため itpass サーバから取得する.
$ wget http://ika-itpass.scitec.kobe-u.ac.jp/server/2012/hiki_system/table_form.rb $ sudo mv table_form.rb /usr/share/hiki/misc/plugin $ cd /usr/share/hiki/misc/plugin $ sudo cp table_form.rb table_form_rd.rb $ sudo vi table_form_rd.rb
修正後のファイルは table_form_rd.rb においてある. 以下に差分の内容も記す.
$ diff -u table_form.rb table_form_rd.rb --- table_form.rb 2005-07-22 00:51:42.000000000 +0900 +++ table_form_rd.rb 2008-11-11 15:25:39.000000000 +0900 @@ -20,11 +20,10 @@ @table_num += 1 result = <<EOS <form action="#{$cgi_name}" method="post"> - <div> + <div class="table_form_rd"> <table border="1"> EOS items.each do |i| - i.gsub!(/\|\|/,"。ツ") result << <<EOS <tr> <th><input type="hidden" name="title#{count}" value="#{i}">#{i} </th> @@ -60,8 +59,8 @@ i = 0 while i < count - title << "||'''#{params["title#{i}"][0].to_s.gsub(/\|\|/,"。ツ")}'''" - elem = params["col#{i}"][0].to_s.gsub(/\|\|/,"。ツ") + title << "#{params["title#{i}"][0].to_s}," + elem = params["col#{i}"][0].to_s row << elem empty = false unless "" === elem i += 1 @@ -82,14 +81,14 @@ if /^\{\{table_form.*\}\}/ =~ l && flag == false if count == table_no if style == 0 then - content << title unless /^\|\|/ =~ prev - content << "||" + row.join("||") + "\n" + content << "\s#RT\s" + title.gsub(/,$/,"") unless /^\s/ =~ prev + content << "\s" + row.join(",") + "\n" content << l prev = l else content << l content << title - prev = "||" + row.join("||") + "\n" + prev = "\s" + row.join(",") + "\n" content << prev end flag = true @@ -98,7 +97,7 @@ content << l prev = l end - elsif title === l and /^\|\|/ =~ prev + elsif title === l and /^\s*#RT/ =~ prev nil else content << l
タイムアウト時間の延長
デフォルトのタイムアウトは, ログインしてから 1 時間である. 長時間の編集作業の際には強制ログアウトされてしまうため, /usr/share/hiki/hiki/session.rb を直接編集し, タイムアウト時間を 24 時間に延ばす. 以下は差分の内容である.
編集後のファイルは session.rb から入手できる.
$ diff -u session.rb.orig session.rb --- /usr/share/hiki/hiki/session.rb.orig 2007-10-26 17:47:15.000000000 +0900 +++ /usr/share/hiki/hiki/session.rb 2007-10-26 17:47:21.000000000 +0900 @@ -3,7 +3,7 @@ module Hiki class Session - MAX_AGE = 60 * 60 + MAX_AGE = 24 * 60 * 60 attr_reader :session_id attr_writer :user
admin でのログイン時に注記を表示
運用の際には, admin はあくまで管理用に使用することにし, 一般的なページの書き換えは行わないことが望ましい. しかしページの書換え中に, 自身が admin でログインしているのか一般ユーザでログインしているのかが, 編集ページを一見して分からないため, admin でのログインの際にはその旨をページ上部に表示するようにする.
書き換えを行うのは /usr/share/hiki/plugin/00default.rb である. 書き換え後のファイルは 00default.rb から入手できる. 以下に差分の内容も記す.
$ diff -u 00default.rb.orig 00default.rb --- 00default.rb.orig 2007-10-25 20:01:21.000000000 +0900 +++ 00default.rb 2007-10-25 20:01:07.000000000 +0900 @@ -188,6 +188,7 @@ if @conf.bot? menu << %Q!<a href="#{@conf.cgi_name}?c=index">#{@conf.msg_index}</a>! else + menu << %Q!<span class="caution">Logged in as Admin. Don't edit any pages.</span><br/>! if admin? menu << %Q!<a href="#{@conf.cgi_name}?c=create">#{@conf.msg_create}</a>! if creatable? menu << %Q!<a href="#{@conf.cgi_name}?c=edit;p=#{@page.escape}">#{@conf.msg_edit}</a>! if @page && editable? menu << %Q!<a href="#{@conf.cgi_name}?c=diff;p=#{@page.escape}">#{@conf.msg_diff}</a>! if @page && editable?
rdtool, rttool のインストール
RD(Ruby Document format)は, Ruby スクリプトファイルに埋め込むことを念頭に定義されたドキュメントフォーマット(書式)であり, Wiki に似た文法でマークアップ(構造化)できるため HTML などよりも簡潔な記述ができる. Hiki のドキュメントは基本的に RD で記述されており, これらをブラウザで表示できるよう HTML に変換するのが rdtool である.
rdtool をインストールする.
# aptitude install rdtool
また, rdtool だけでは作表機能がサポートされていない. 作表機能を追加するために, rttool をインストールする.
# aptitude install rttool
(ただし, 上の方法でインストールできない, もしくは正しく動作しない場合は, <URL:http://www.rubyist.net/~rubikitch/computer/rttool> より直接取得してインストールすること. インストール方法は, リンク先を参考にされたい. )
html_formatter.rb の修正
以下の 2 点の目的のため, /usr/share/hiki/style/rd+/html_formatter.rb の修正を行う.
RD+ スタイルの目次を修飾する
Hiki では, ページの先頭に
{{toc}}
という文字を埋め込むと, 文頭に目次が挿入される. ただし, デフォルトの設定では <ul> 等のタグがそのまま記述されているだけなので, 目次に関してスタイルシートによる指定ができない.
基本的には RD+ スタイルを用いることを考えているため, html_formatter.rb を修正し, 目次の前後に <div class="toc"> を埋め込むこととする.
目次からのページ内リンク (日本語) を有効にする
上記目次からページ内へリンクを作成する際, 日本語の見出しの場合には 一部ブラウザ (Mozilla Firefox 2.0 等) ではリンクが有効にならない場合がある. そのための修正を html_formatter.rb に施す. (なお, 目次からのページ内リンク (日本語) を有効にするためには, この修正とあわせて rd2html.rb の修正も必要である. これは次の作業項目で行う. )
書き換え後のファイルは html_formatter.rb から入手できる. 以下に差分の内容も記す.
$ diff -u html_formatter.rb.orig html_formatter.rb --- html_formatter.rb.orig 2007-06-27 20:56:18.000000000 +0900 +++ html_formatter.rb 2007-10-28 23:55:25.000000000 +0900 @@ -39,7 +39,7 @@ end def toc - s = "<ul>\n" + s = "<div class=\"toc\"><ul>" lv = 1 @visitor.toc.each do |h| if h['level'] > lv @@ -49,9 +49,10 @@ s << ( "</ul>" * ( lv - h['level'] ) ) lv = h['level'] end - s << %Q!<li><a href="##{h['index']}">#{h['title'].escapeHTML}</a>\n! + s << %Q!<li><a href="##{h['index'].gsub(/^%/, '').gsub(/%/, '-')}" class="toc">#{h['title'].escapeHTML}</a>! end s << ("</ul>" * lv) + s << ("</div>") end end end
rd2html.rb の修正
以下の 2 点の目的のため, /usr/share/hiki/style/rd+/rd2html.rb の修正を行う.
RT で作成された表を修飾可能にする
RD+ モードの場合, RT を用いて表の作成が可能である. (詳しくは TextFormattingRules を参照のこと).
しかし, オリジナルの RD+ で作成された表には div タグなどで 括られていないため, その表に対する修飾ができない. 従って, /usr/share/hiki/style/rd+/rd2html.rb を書き換え, <div class="rt2html"> .. </div> というタグで括るようにする.
ページ内リンクを有効にする
デフォルトの rd2html.rb ではページ内リンクを使用できない. そのため, 以下のように記述した際にページ内リンクが有効になるよう,
((<URL:#ページ内リンクを有効に>))
また以下のように記述した際には別のページ内の見出しを参照できるよう 修正を施す.
((<[ITPASS]Hikiのインストールと設定#ページ内リンクを有効に>))
書き換え後のファイルは rd2html.rb から入手できる. 以下に差分の内容も記す.
$ diff rd2html.rb.orig rd2html.rb --- rd2html.rb.orig 2007-10-25 12:38:34.000000000 +0900 +++ rd2html.rb 2007-11-15 17:07:52.000000000 +0900 @@ -174,7 +174,7 @@ else label[0].gsub!(ESC_WORD_RE, "") end - %Q[<a name="#{anchor}" href="##{anchor}" title="#{anchor.unescape.escapeHTML}">#{label}</a>] + %Q[<a name="#{anchor.gsub(/^%/, '').gsub(/%/, '-')}" href="##{anchor.gsub(/^%/, '').gsub(/%/, '-')}" title="#{anchor.unescape.escapeHTML}">#{label}</a>] end def apply_to_Headline(element, title) @@ -226,6 +226,13 @@ url = element.label.url if /\.(jpg|jpeg|png|gif)\z/ =~ url %Q[<img src="#{meta_char_escape(url)}" title="#{content.join("")}" alt="#{content.join("")}" />] + elsif /^(.*?)\#(.*?)$/ =~ url + url = $1 + '#' + $2.escape.gsub(/^%/, '').gsub(/%/, '-') + content_join = content.join("") + if content_join =~ /^\<URL:\#(.*?)\>$/ + content_join = $1 + end + %Q[<a href="#{meta_char_escape(url)}" class="external">#{content_join}</a>] else %Q[<a href="#{meta_char_escape(url)}" class="external">#{content.join("")}</a>] end @@ -249,7 +256,9 @@ escaped += '#' + option.join.gsub(@regex_modulenames, "\\&#{ESC_WORD}").escape if option and option.size > 0 end @references << key - @plugin.hiki_anchor(escaped, content) + internal_link = '' + internal_link << '#' + option[0].escape.gsub(/^%/, '').gsub(/%/, '-') if option.size > 0 + @plugin.hiki_anchor(escaped + internal_link, content) else key, option, name = @anchorlist.separate(label) if @anchorlist.has_key?(key) @@ -272,7 +281,9 @@ if /\A#\s*RT\s*/ =~ content[0] content.shift rt_visitor = ::RT::RT2HTMLVisitor.new - return rt_visitor.visit(::RT::RTParser.parse(content.join)) + htm = rt_visitor.visit(::RT::RTParser.parse(content.join)) + htm = "<div class=\"rt2html\">" + htm + "</div>" + return htm end rescue LoadError $stderr.puts "RTtool cannot be load"
rd2 の修正
Makefile.rd2html を用いて rd ファイルを make すると Error: file empty. と表示され, html ファイルへ正しく変換できない. そのため rd2 ファイルを修正する.
まず, 変更前のrd2 ファイルをバックアップしておく.
# cp /usr/bin/rd2 /usr/bin/rd2.bk
書き換え後のファイルは rd2 から入手できる. 以下に差分の内容も記す.
$ diff -u /usr/bin/rd2.bk /usr/bin/rd2 --- /usr/bin/rd2.bk 2011-11-14 18:19:35.000000000 +0900 +++ /usr/bin/rd2 2011-11-15 20:11:59.000000000 +0900 @@ -128,8 +128,10 @@ end # accept "PART:FILTER" and "PART" + class PART ; end + q.accept(PART, /(\w+)(?:\s*:\s*(\w+))?/){|s,p,f|[s,p,f]} q.on("--with-part=PART", - /(\w+)(?:\s*:\s*(\w+))?/, + PART, "include PART with Filter") do |src, part, filter| with_part.push([part, filter || part]) unless include_path.index(RD::RDTree.tmp_dir)
なお, パッチ (rd2-filter.patch) を用いて書き換える際には, 以下のような手順となる.
# cd /usr/bin/ # wget http://www.gfd-dennou.org/library/dcmodel/doc/rd2-filter.patch # patch <rd2-filter.patch
ページ毎の基本設定 (確認)
/home 領域を旧サーバから引き継いだ後に, itpass の Hiki に関する設定が [TEBIKI]Hikiのページ毎の基本設定 のようになっていることを 確認する.
なお, itpass の Hiki 資源の置き場等は以下の通りである. 手引きの該当箇所を適宜以下に読み替えて参照すること.
- Hiki 資源置き場: /home/itpass/hiki, /home/itpass/hiki-secret
- 実行ユーザ: itpass
- アクセス制限: hiki-secret のみにかける
Keyword(s):
References:[[ITPASS2012]2012年度サーバ構築ログ]