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

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

{{toc}}

= Hiki のインストールと設定

今回は, /home/itpass/ftp/server/2015/hiki-update-files にある, 2014 年度に村上(真)さんが用意してくださったファイルを利用して行う.

== Hiki のインストール

* ファイルの取得
  * hiki をインストールした.

   # apt-get install bundler ruby-dev libmysqld-dev
   # apt-get autoremove        (不要なパッケージを削除した)
   # rehash        (bash では不要だった)
   # cd /usr/local/
   # git clone https://github.com/hiki/hiki.git

  * ここで以下のメッセージがでる.
    * 調べてみたが, この警告は無視されているようなので未解決のまま先に進むことにした.
     Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine.

   # cd hiki
   # bundle install
   # ln -s hikiconf.rb.sample  hikiconf.rb.sample.ja

  * ika-itpass の /home/itpass/ftp/server/2015/hiki-update-files をディレクトリごと/usr/local/hiki/ に置いた.

== hiki の環境設定

  * Table を使えるようにするための設定
    * hiki-update-files 内の table_form_rd.rb を以下の場所に置いた.

       # cp table_form_rd.rb /usr/local/hiki/misc/plugin/

    * hiki-update-files 内の session.rb と 00default.rb を以下の場所に置こうとしたが, /usr/local/hiki の下に hiki/ と plugin/ がない.

       /usr/local/hiki/hiki/session.rb
       /usr/local/hiki/plugin/00default.rb

    * git log を確認したところ, 2016 年 1 月に Hiki が更新され, ディレクトリの構造が変わっていた.
      * 具体的には, /usr/local/hiki の下に昨年度までにはなかった lib/hiki ディレクトリがあり, いくつかのファイルやディレクトリが /usr/local/hiki から /usr/local/hiki/lib/hiki に移動したようである.
      * lib/ 以下に置く.
      * 万一のためにバックアップをとった.

         $ cd /usr/local/hiki
         $ sudo mkdir backup
         $ cd backup
         $ sudo cp ../lib/hiki/session.rb .

         $ diff -u /usr/local/hiki/lib/hiki/session.rb /usr/local/hiki/hiki-update-files/session.rb    (デフォルトとの違いを確認)

         $ sudo cp ../lib/hiki/plugin/00default.rb .

         $ diff -u /usr/local/hiki/lib/hiki/plugin/00default.rb /usr/local/hiki/hiki-update-files/00default.rb    (デフォルトとの違いを確認)

      * table_form_rd.rb の中身にディレクトリの記述がないか確認した.
         $ cd /usr/local/hiki/misc/plugin

      * 以下にコピーした.
       /usr/local/hiki/lib/hiki/session.rb
       /usr/local/hiki/lib/hiki/plugin/00default.rb

* rdtool と rttool のインストール

   # apt-get install rdtool rttool


* html_formatter.rb について
  * hiki-update-files 内の html_formatter.rb は使わず, デフォルトのものを用いる.
    * デフォルトのファイル名が formatter.rb だった.
    * デフォルトのファイルと比較した.

      $ diff -u /usr/local/hiki/lib/hiki/style/rd+/formatter.rb /usr/local/hiki/hiki-update-files/html_formatter | lv

  * 問題があれば再考する.
    * 場所は以下の通り.
       /usr/local/hiki/lib/hiki/style/rd+/formatter.rb  

* hiki-update-files 内の rd2html.rb を以下の場所に置いた.
  * デフォルトのものではなく, hiki-update-files の rd2html.rb を用いる.
    * ただし, require 'style/rd+/anchorlist' を require 'hiki/style/rd+/anchorlist' とした.
    * デフォルトのもの, /usr/local/hiki/lib/hiki/style/rd+/rd2html.rb はバックアップをとった.
  * 以下の場所に置いた
      /usr/local/hiki/lib/hiki/style/rd+/rd2html.rb


* hiki-update-files/hikisetup について
  * ディレクトリ構造が変わっているので内容を書き換える
  * hiki-update-files の rd2html.rb を書き換えることにしたため, コピーしてhiki-update-files-2016 を作成した.
  * 以後, 変更はこのディレクトリのファイルで行う.

   $ sudo vi /usr/local/hiki/hiki-update-files/hikisetup

  * 下のように変更する.

   @plugin_path = '/usr/local/hiki/plugin' if ! @plugin_path
   ->
   @plugin_path = '/usr/local/hiki/lib/hiki/plugin' if ! @plugin_path

   Dir.glob(File.join(HIKIDIR, "messages/*.rb")).map{ |s| s.scan(%r!([^/]+)\.rb$!).first }
   ->
   Dir.glob(File.join(HIKIDIR, "lib/hiki/messages/*.rb")).map{ |s| s.scan(%r!([^/]+)\.rb$!).first }

= 確認テスト

* chikuwa2 ユーザで hiki ページを作成してみる(参考: ((<[TEBIKI]Hikiのページ毎の基本設定>)))
  * chikuwa2 のホームディレクトリに public_html ディレクトリを作成し, ブラウザからアクセスできるかどうかを確認した.
    * できた
  
   * Hiki 用のディレクトリを作成する.

      $ cd ~chikuwa2
      $ mkdir hiki
      $ chmod 2775 hiki

   * hiki ディレクトリに移動し, hikisetup を実行した.

      $ cd /home/chikuwa2/hiki
      $ hikisetup --lang ja
      INFO: hiki basedir is /home/chikuwa2/hiki
      Please input data_path [/home/chikuwa2/hiki/data]:

   * 下のようなエラーが出たので, usr/local/hiki/hiki-update-files-2016/hikisetup を書き換えたのち, 上と同じ操作を行って成功した.

      Default text data of "ja" does not found.  Using "en" one.
      /usr/local/bin/hikisetup:175:in `+': no implicit conversion of    
      Errno::ENOENT into String (TypeError)
         from /usr/local/bin/hikisetup:175:in `rescue in main'
         from /usr/local/bin/hikisetup:152:in `main'
         from /usr/local/bin/hikisetup:180:in `<main>'

   * hikisetup は下のように書き換えた.

      cp "/usr/share/doc/hiki/examples/dot.htaccess", ".htaccess"
      -> cp "/usr/local/hiki/dot.htaccess", ".htaccess"

== hikisetup で作成されたファイルの移動

  $ cd /home/chikuwa2/hiki
  $ mkdir cgi

  $ mv .htaccess hiki.cgi hikiconf.rb theme cgi/

  $ chmod -R g+w cgi
  $ chmod 2775 `find cgi/ -type d`


== data ディレクトリのパーミッション設定

www-data に書き込み/読み込み権限を渡す.

  $ sudo chown -R www-data:www-data data
  $ sudo chmod -R g+w data
  $ sudo chmod 2775 `find data/ -type d`


== public_html 以下からのシンボリックリンクの作成

  $ cd /home/chikuwa2/public_html
  $ ln -s ../hiki/cgi hiki


== CVS 管理の準備

=== CVS のインストール

Hiki のデータを CVS で管理する.
そのために, CVS をシステムにインストールする. Debian の場合には cvs パッケージをインストールすればよい.

  # apt-get install cvs

リポジトリの場所を問われた場合は作成しないと答える (後で別途作成するため).

=== cvsroot の作成

CVS データを管理するための CVS レポジトリの作成を行う.

  $ sudo cvs -d /home/chikuwa2/hiki/cvsroot init

作成後, cvsroot ディレクトリに関しても権限を www-data に渡す.

  $ cd /home/chikuwa2/hiki
  $ sudo chown -R www-data:www-data cvsroot
  $ sudo chmod 2775 `find cvsroot/ -type d`

cvsroot の中にあるファイルに関してはグループ書き込み権限は不要である.
(ディレクトリに対しては, 上記のようにグループ書き込み権限が必要である).


== ファイルへのアクセス制御の設定

/usr/local/apache2/conf/httpd.conf に以下を付け足した.

   <Directory "/home/chikuwa2/pulic_html/hiki">
     AllowOverride ALL
     Options -MultiViews
   </Directory>


== CGI からの動作チェック

  https://133.30.109.21/~chikuwa2/hiki

へアクセスするが失敗した.

* hiki-update-files-2016/hikisetup を書き換えた結果, 成功した.
   #!/usr/bin/ruby -I{HIKIDIR}
   ->  #!/usr/bin/ruby -I{HIKIDIR}/lib  

* ファイルを置き換えて試してみる.
   $ sudo cp /usr/local/hiki/hiki-update-files-2016/hikisetup /usr/local/bin/hikisetup

= 確認テスト(二回目)

== Hiki用ディレクトリの作成

* 一回目に作成したものを削除した.

   $ sudo rm -rf /home/chikuwa2/hiki

* Hiki 用のディレクトリを作成した.

   $ cd /home/chikuwa2
   $ mkdir hiki
   $ chmod 2775 hiki


== hikisetup による初期設定

* hikisetup コマンドを用いて, 必要なファイルを /home/chikuwa2/hiki 以下にインストールする. データパスはデフォルトのものを選んだ.

   $ cd /home/chikuwa2/hiki
   $ hikisetup --lang ja

   INFO: hiki basedir is /home/chikuwa2/hiki
   Please input data_path [/home/chikuwa2/hiki/data]:

== ディレクトリ構成の変更とパーミッション設定

大まかには次の三点を行う.

* ディレクトリ構成を以下のようにする.

    /home/chikuwa2/hiki/cgi/      cgi 本体や設定ファイル, テーマを格納
                      data/     hiki のデータ (展開される場所)
                      cvsroot/  hiki のデータのリポジトリ

* パーミッション, 所有者, 所有グループを以下のようにする.

     /home/chikuwa2/hiki/       rwxrwsr-x itpass   itpass
                  cgi/       rwxrwsr-x itpass   itpass
                  data/       rwxrwsr-x www-data www-data
                  cvsroot/    rwxrwsr-x www-data www-data

*  公開に際して, /home/chikuwa2/public_html/hiki から /home/chikuwa2/hiki/cgi にシンボリックリンクをはる.


具体的な作業例を以下に述べる. ただし, cvsroot に関しては別途 cvs コマンド
から作成するため, 下記の ((<#cvsroot の作成|URL:#cvsroot の作成>)) を参照のこと.


== hikisetup で作成されたファイルの移動

  $ cd /home/chikuwa2/hiki
  $ mkdir cgi

  $ mv .htaccess hiki.cgi hikiconf.rb theme cgi/

  $ chmod -R g+w cgi
  $ chmod 2775 `find cgi/ -type d`


== data ディレクトリのパーミッション設定

* www-data に書き込み/読み込み権限を渡す.

  $ sudo chown -R www-data:www-data data
  $ sudo chmod -R g+w data
  $ sudo chmod 2775 `find data/ -type d`


== public_html 以下からのシンボリックリンクの作成

  $ cd /home/chikuwa2/public_html
  $ ln -s ../hiki/cgi hiki


== CVS 管理の準備

=== cvsroot の作成

* CVS データを管理するための CVS レポジトリの作成を行う.

  $ sudo cvs -d /home/chikuwa2/hiki/cvsroot init

* 作成後, cvsroot ディレクトリに関しても権限を www-data に渡す.

  $ cd /home/chikuwa2/hiki
  $ sudo chown -R www-data:www-data cvsroot
  $ sudo chmod 2775 `find cvsroot/ -type d`

== ファイルへのアクセス制御の設定

* /usr/local/apache2/conf/httpd.conf に以下があることを確認した.

   <Directory "/home/chikuwa2/pulic_html/hiki">
     AllowOverride ALL
     Options -MultiViews
   </Directory>

== CGI の基本動作のチェック

Apache を再起動 (((<[ITPASS2011a]apache2のインストールと設定#動作チェック>)) を参照)して

  https://133.30.109.21/~chikuwa2/hiki

へアクセスし, Hiki のトップページが見えることを確認する.

なお, この初回アクセス時に /home/chikuwa2/hiki/data/
以下に, cache, info.db, text 等のファイルが自動的に
作成されるはずである. これらに関するパーミッションも再度設定する.

  $ cd /home/chikuwa2/hiki
  $ sudo chown -R www-data:www-data data
  $ sudo chmod -R g+w data
  $ sudo chmod 2775 `find data/ -type d`


== RD 形式で記述するための作業

/home/chikuwa2/hiki/cgi/hikiconf.rb の末尾に

  # RD 形式で記述するための設定
  #   header_depth では '=' を <h2> にするよう設定
  @style = 'rd+'
  @options['rd.header_depth'] = 2

を追加する. 上記により, header_depth では = を <h2> にするように設定できる.

ファイルの書き換えが終われば作業完了である. 確認のため,

  https://133.30.109.21/~chikuwa2/hiki

へアクセスしてみたが失敗.

   * エラー内容
      uninitialized constant Hiki::Formatter::RD::RDTree (NameError)
      /usr/local/hiki/lib/hiki/style/rd+/formatter.rb:37:in `rescue in to_s'
      /usr/local/hiki/lib/hiki/style/rd+/formatter.rb:34:in `to_s'
      /usr/local/hiki/lib/hiki/command.rb:205:in `cmd_view'
      /usr/local/hiki/lib/hiki/command.rb:131:in `block in dispatch'
      /usr/lib/ruby/2.1.0/timeout.rb:91:in `block in timeout'
      /usr/lib/ruby/2.1.0/timeout.rb:35:in `block in catch'
      /usr/lib/ruby/2.1.0/timeout.rb:35:in `catch'
      /usr/lib/ruby/2.1.0/timeout.rb:35:in `catch'
      /usr/lib/ruby/2.1.0/timeout.rb:106:in `timeout'
      /usr/local/hiki/lib/hiki/command.rb:104:in `dispatch'
      /usr/local/hiki/hiki.cgi:36:in `block in <top (required)>'
      /usr/local/hiki/lib/hiki/storage/base.rb:13:in `open_db'
      /usr/local/hiki/hiki.cgi:34:in `<top (required)>'
      /home/chikuwa2/public_html/hiki/hiki.cgi:2:in `load'
      /home/chikuwa2/public_html/hiki/hiki.cgi:2:in `<main>'

   * 対処法を探す

   $ lv /usr/local/hiki/lib/hiki/command.rb
   $ lv /usr/local/hiki/lib/hiki/formatter.rb

   $ diff -ur /usr\local/hiki/formatter.rb /usr/local/hiki/hiki-update-files-2016/html_formatter.rb

   $ diff -ur /usr/local/hiki/hiki-update-files-2016/rd2html.rb /usr/local/hiki/backup/rd2html.rb

   $ lv /usr/local/hiki/lib/hiki/style/rd+/formatter.rb
   $ locate rd/rd2html
   $ locate rdfmt
   $ grep rdfmt */*/*/*/*

   * /usr/local/hiki/lib/hiki/style/rd+/formatter.rb を編集
      "require rd/rdfmt" を追加したが上手くいかなかったので元に戻した.

   $ lv /usr/lib/ruby/vendor_ruby/rd/rd2html-lib.rb
   $ lv /usr/local/hiki/lib/hiki/style/rd+/rd2html.rb
   $ lv /usr/lib/ruby/vendor_ruby/rd/tree.rb
   $ lv /usr/lib/ruby/vendor_ruby/rd/rdfmt.rb
   $ lv /usr/local/hiki/lib/hiki/style/rd+/formatter.rb

   原因がわからない(11/03 ここまで)

   $ lv /usr/loal/hiki/lib/hiki/config.rb
   ika では /usr/loal/hiki/hiki/config.rb にある.

   ika の config.rb のファイルの require の四行(load_messages の下)を tako の config.rb に追加する. その際少し変更した(locate でファイルの正しいパスを探した).

   require "style/#{@style}/parser"
   require "style/#{@style}/html_formatter"
   require "hiki/repos/#{@repos_type}"
   require "hiki/db/#{@database_type}"

   -> require "lib/hiki/style/#{@style}/parser"
      require "lib/hiki/style/#{@style}/formatter"
      require "lib/hiki/repository/#{@repos_type}"
      require "lib/hiki/storage/#{@database_type}"
  
   しかしエラー変わらず.

   uninitialized constant Hiki::Formatter::RD::RDTree (NameError)
   /usr/local/hiki/lib/hiki/style/rd+/formatter.rb:37:in `rescue in to_s'
   /usr/local/hiki/lib/hiki/style/rd+/formatter.rb:34:in `to_s'
   /usr/local/hiki/lib/hiki/command.rb:205:in `cmd_view'
   /usr/local/hiki/lib/hiki/command.rb:131:in `block in dispatch'
   /usr/lib/ruby/2.1.0/timeout.rb:91:in `block in timeout'
   /usr/lib/ruby/2.1.0/timeout.rb:35:in `block in catch'
   /usr/lib/ruby/2.1.0/timeout.rb:35:in `catch'
   /usr/lib/ruby/2.1.0/timeout.rb:35:in `catch'
   /usr/lib/ruby/2.1.0/timeout.rb:106:in `timeout'
   /usr/local/hiki/lib/hiki/command.rb:104:in `dispatch'
   /usr/local/hiki/hiki.cgi:36:in `block in <top (required)>'
   /usr/local/hiki/lib/hiki/storage/base.rb:13:in `open_db'
   /usr/local/hiki/hiki.cgi:34:in `<top (required)>'
   /home/chikuwa2/public_html/hiki/hiki.cgi:2:in `load'
   /home/chikuwa2/public_html/hiki/hiki.cgi:2:in `<main>'


#   $ lv /usr/local/hiki/lib/hiki/style/rd+/parser.rb

= 確認テスト(三回目)

ここで, ika の自分のディレクトリの下で同じことをしてみる.
手引きの手順通りだが, 途中エラーがでるので hikisetup を書き換える.

    cp "/usr/share/doc/hiki/examples/dot.htaccess", ".htaccess"
    cp "/usr/local/hiki/dot.htaccess", ".htaccess"

#   $ tree -a
同様の作業を行う
ただし, 「Error! Please edit this page again.」とメッセージが表示されたので, 一度 data 領域以下を((<#hikisetup による初期設定|URL:#hikisetup による初期設定>)) の状態に戻して成功した (data および data/backup以外のファイルやディレクトリを消した).

= 確認テスト(二回目の続き)

* chikuwa2 ユーザで hiki ページを作成していた(参考: ((<[TEBIKI]Hikiのページ毎の基本設定>))).
* RD 形式で記述するための作業で失敗していた.
* hiki/lib/hiki/style/rd+/formatter.rb と hiki/lib/hiki/style/rd+/parser.rb を以下のように書き換えた結果, Hiki のページへのアクセスが成功した.

  * formatter.rb の書き換え
       module Hiki
         module Formatter
           class RD < Base
    となっていたのを,
       module Hiki
         module Formatter
       #    class RD < Base
           class RDPLUS < Base
    とした.          

  * parser.rb の書き換え
       module Hiki
         module Parser
           class RD
    となっていたのを,
       module Hiki
         module Parser
       #    class RD
           class RDPLUS
    とした.

* 以前 /usr/local/hiki/lib/hiki/config.log に追加した以下の 4 行(load_messages の下)をコメントアウトして hiki のページにアクセスできるか試した結果, 成功したので削除した.

     require "lib/hiki/style/#{@style}/parser"
     require "lib/hiki/style/#{@style}/formatter"
     require "lib/hiki/repository/#{@repos_type}"
     require "lib/hiki/storage/#{@database_type}"