IT pass HikiWiki - [ITPASS2012]Hikiのインストールと設定 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

{{toc}}

[((<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 の作成

  ((<URL:#ページ毎の基本設定 (確認)>))で行う各 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|URL:../server/2012/hiki_system/table_form_rd.txt>))
においてある. 以下に差分の内容も記す.

  $ 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|URL:../server/2012/hiki_system/session.txt>))
から入手できる.

  $ 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|URL:../server/2012/hiki_system/00default.txt>))
から入手できる. 以下に差分の内容も記す.

  $ 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|URL:../server/2012/hiki_system/html_formatter.txt>))
から入手できる. 以下に差分の内容も記す.

  $ 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|URL:../server/2012/hiki_system/rd2html.txt>))
から入手できる. 以下に差分の内容も記す.

  $ 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 =~ /^\&lt;URL:\#(.*?)\&gt;$/
  +          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|URL:http://www.gfd-dennou.org/arch/dcmodel/doc/sample_Makefile/Makefile.rd2html>)) を用いて rd ファイルを make すると
Error: file empty. と表示され, html ファイルへ正しく変換できない. そのため rd2 ファイルを修正する.

* まず, 変更前のrd2 ファイルをバックアップしておく.

    # cp /usr/bin/rd2 /usr/bin/rd2.bk

* 書き換え後のファイルは ((<rd2|URL:../server/2012/hiki_system/rd2.txt>)) から入手できる. 以下に差分の内容も記す.

    $ 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|URL:http://www.gfd-dennou.org/library/dcmodel/doc/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 のみにかける


= 参考文献

* ((<[ITPASS2010]Hikiのインストールと設定>))
* ((<モデルプロジェクトのための最低限 rd|URL:http://www.gfd-dennou.org/library/dcmodel/doc/TEBIKI.dcmodel-rd-guide.htm#label-21>))
* ((<社内SEの独り言 -- Hikiメモ::目次部分のスタイルを変えたい|URL:http://web.archive.org/web/20070122233019/http://pochitto001.blog14.fc2.com/blog-entry-19.html>))


[((<ITPASSサーバ構築・運用ドキュメント>)) へ戻る]