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

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

{{toc}}

[((<[ITPASS2022]2022年度サーバ構築マニュアル>)) へ戻る]

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

* ~itpass/ftp/server/2022/hiki-update-files-2022 に 2022 年度のサーバ再構築作業で使ったファイルがあるので, それを使用する.
  * 補足説明
    * ~itpass/ftp/server/2020/hiki-update-files-2020 に 2020 年度のサーバ再構築作業で使ったファイルがある. これは, 2014 年度に村上(真)さんが用意してくださったファイルに変更を加えたものである.
    * ファイルを変更しなければいけない理由は, 2016 年 1 月に Hiki が更新され, ディレクトリの構造が変わっているためである.
      * 具体的には, /usr/local/hiki の下に昨年度までにはなかった lib/hiki ディレクトリがあり, いくつかのファイルやディレクトリが /usr/local/hiki から #/usr/local/hiki/lib/hiki に移動したようである.


== Hiki のインストール

* ファイルの取得
  * hiki をインストールする.

# # apt-get install libmariadbclient-dev を追記する.

   # apt install bundler ruby-dev libmariadbd-dev
   # apt install libmariadb-dev-compat
   # apt autoremove        (不要なパッケージを削除)
   # rehash        (bash では不要)
   # cd /usr/local/
   # apt install git
   # git clone https://github.com/hiki/hiki.git
   # cd hiki
   # bundle update --bundler
   # bundle install
   # ln -s hikiconf.rb.sample  hikiconf.rb.sample.ja


#  * 途中以下のメッセージがでるが先に進む.
#   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.

  * ika-itpass の ~itpass/ftp/server/2022/hiki-update-files-2022 をディレクトリごと/usr/local/hiki/ に置く.


== hiki の環境設定

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

   # cp hiki-update-files-2022/table_form_rd.rb /usr/local/hiki/misc/plugin/

  * session.rb と 00default.rb のバックアップをとる(念のため).

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

  * hiki-update-files-2022 内の session.rb と 00default.rb を以下の場所に置く.
    
   /usr/local/hiki/lib/hiki/session.rb
   /usr/local/hiki/lib/hiki/plugin/00default.rb

   # cp hiki-update-files-2022/session.rb /usr/local/hiki/lib/hiki/session.rb
   # cp hiki-update-files-2022/00default.rb /usr/local/hiki/lib/hiki/plugin/00default.rb

* rdtool と rttool のインストール

# apt install rdtool rttool

* hiki-update-files-2022 内の formatter.rb を以下の場所に置く(cp を使う).
  * デフォルトのものではなく, hiki-update-files-2022 の formatter.rb を用いる.  
  * デフォルトのもの (/usr/local/hiki/lib/hiki/style/rd+/formatter.rb) はバックアップをとっておく.
  * hiki-update-files-2022 の formatter.rb を確認する.

    * 48 行目
     s = "<div class=\"cot\"><ul>\n"

    * 58 行目
     s << %Q!<li><a href="##{hash['index'].gsub(/^%/, '').gsub(/%/, '-')}" class="cot">#{h(hash['title'])}</a>\n!

    * 60 行目
     s << ("</ul>\n" * lv)

    * 61 行目
     s << ("</div>\n")

  * 場所は以下の通り.
   /usr/local/hiki/lib/hiki/style/rd+/formatter.rb

* hiki-update-files-2022 内の rd2html.rb を以下の場所に置く(cp を使う).
  * デフォルトのものではなく, hiki-update-files-2022 の rd2html.rb を用いる.
  * デフォルトのもの (/usr/local/hiki/lib/hiki/style/rd+/rd2html.rb) はバックアップをとっておく.
  * hiki-update-files-2022 の rd2html.rb の, require 'style/rd+/anchorlist' が require 'hiki/style/rd+/anchorlist' となっていることを確認する.  
  * 場所は以下の通り.
   /usr/local/hiki/lib/hiki/style/rd+/rd2html.rb


* /usr/local/hiki/hiki-update-files-2022/hikisetup を確認する.

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

  * 52 行目
   @plugin_path = '/usr/local/hiki/lib/hiki/plugin' if ! @plugin_path

  * 108 行目
   # !/usr/bin/ruby -I{HIKIDIR}/lib
  であるべきだが
   # !/usr/bin/ruby -I#{HIKIDIR}/lib
  であってもそのままにしておく.

  * 135 行目
   cp "/usr/local/hiki/dot.htaccess", ".htaccess"

* ファイルをおく.
   $ sudo cp /usr/local/hiki/hiki-update-files-2022/hikisetup /usr/local/bin/

* hikisetup のパーミッションを変更する.

# chmod 775 /usr/local/bin/hikisetup

= 確認作業

自分のユーザアカウント (2024 年度作業時は chikuwa7 であったので, 以下 chikuwa7 と書く) で hiki ページを作成し, Hiki のトップページにアクセスできるか確認する(参考: ((<[TEBIKI]Hikiのページ毎の基本設定>))).

* chikuwa7 のホームディレクトリに public_html ディレクトリを作成し, ブラウザからアクセスできるかどうかを確認する.

$ mkdir public_html
  
* Hiki 用のディレクトリを作成する.

$ cd ~chikuwa7
$ mkdir hiki
$ chmod 2775 hiki

== hikisetup による初期設定

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

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

$ cd /home/chikuwa7/hiki

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


* 以下のコマンドで作成されたファイル群を表示させる.

# apt install tree
$ tree -a


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

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

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

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

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

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

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


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


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

  $ cd /home/chikuwa7/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/chikuwa7/public_html
  $ ln -s ../hiki/cgi hiki


== CVS 管理の準備

=== CVS のインストール

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

  # apt install cvs

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

=== cvsroot の作成

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

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

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

  $ cd /home/chikuwa7/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/chikuwa7/public_html/hiki">
     AllowOverride ALL
     Options -MultiViews
  </Directory>


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

Apache を再起動 (((<[Memo2022][ITPASS]Apache のインストールと設定>)) を参照)して

# systemctl restart apache2

  https://133.30.109.21/~chikuwa7/hiki

へアクセスし, Hiki のトップページが見えるかどうか確認する.

#エラー500が出た.

#  lv /var/log/httpd-ssl-error.log

#でエラーメッセージを確認したところ, 末尾に

#  [Wed Nov 07 14:31:28.096908 2018] [core:alert] [pid 1306:tid
#  140695030814464] [client 150.84.188.41:57563] #/home/chikuwa7/public_html/hiki/.htaccess:   
#  Options not allowed here

#と記述されていたため, /usr/local/apache2/conf/extra/httpd-userdir.conf 内の

#  <Directory "/home/*/public_html">
#   AllowOverride FileInfo AuthConfig Limit Indexes
#   Options MultiViews Indexes FollowSymLinks IncludesNoExec

#の箇所の二行目 Indexes の後に Options を付け加えた.
#再度 Hiki のトップページにアクセスして正常に見えることを確認する.

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

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


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

* /home/chikuwa7/hiki/cgi/hikiconf.rb の末尾に以下を追加する. これにより, header_depth では = を <h2> にするように設定できる.

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


* hiki/lib/hiki/style/rd+/formatter.rb をバックアップのものと diff を取ると以下のようになる.

chikuwa7@tako-itpass:/usr/local/hiki$ sudo diff -u
./lib/hiki/style/rd+/formatter.rb ./backup/formatter.rb.bak
--- ./lib/hiki/style/rd+/formatter.rb   2022-10-27 11:40:29.215849888 +0900
+++ ./backup/formatter.rb.bak   2022-10-27 11:33:33.644271878 +0900
@@ -16,8 +16,7 @@

  module Hiki
    module Formatter
-    #class RD < Base
-    class RDPLUS < Base
+    class RD < Base
        Formatter.register(:rd, self)

        include Hiki::Util
@@ -45,7 +44,7 @@
        end

        def toc
-        s = "<div class=\"cot\"><ul>\n"
+        s = "<ul>\n"
          lv = 1
          @visitor.toc.each do |hash|
            if hash["level"] > lv
@@ -55,10 +54,9 @@
              s << ("</ul>\n" * (lv - hash["level"]))
              lv = hash["level"]
            end
-         s << %Q!<li><a href="##{hash['index'].gsub(/^%/, '').gsub(/%/, '-')}" class="cot">#{h(hash['title'])}</a>\n!
+          s << %Q!<li><a href="##{hash['index']}">#{h(hash['title'])}</a>\n!
          end
          s << ("</ul>\n" * lv)
-       s << ("</div>\n")
        end
      end
    end

* hiki/lib/hiki/style/rd+/parser.rb を以下のように書き換える.

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

* 確認のためアクセスする.

https://133.30.109.21/~chikuwa7/hiki

この時, 「Error! Please edit this page again.」 のようなメッセージが表示される場合は, ((<[TEBIKI]Hikiのページ毎の基本設定>))を参考にして, data 領域以下を #hikisetup による初期設定 の状態に戻す.  (具体的には ~/hiki/data/ 以下の cache, info.db, session を削除する. )

以下のようなエラーが web の画面上に表示された.

Hiki Error

Plugin error in '00default.rb'.
tried to create Proc object without a block
/usr/local/hiki/lib/hiki/plugin.rb:387:in `new' (Hiki::PluginError)
/usr/local/hiki/lib/hiki/plugin.rb:66:in `rescue in initialize'
/usr/local/hiki/lib/hiki/plugin.rb:59:in `initialize'
/usr/local/hiki/lib/hiki/command.rb:82:in `new'
/usr/local/hiki/lib/hiki/command.rb:82:in `initialize'
/usr/local/hiki/hiki.cgi:35:in `new'
/usr/local/hiki/hiki.cgi:35: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/chikuwa7/public_html/hiki/hiki.cgi:2:in `load'
/home/chikuwa7/public_html/hiki/hiki.cgi:2:in `<main>'

このエラーは, ruby のバージョンが上がって動作が変わった結果,
使用してきた hiki の ruby スクリプトの動作が例外処理されるように
なったことで表示されていると考えられる.
* 参考ページ
   * https://github.com/rurema/doctree/issues/2629
   * https://techlife.cookpad.com/entry/2019/12/25/121834

     の「proc/lambdaをブロックなしで呼ぶのは非推奨/禁止になりました」

そこで,
   /usr/local/hiki/lib/hiki/plugin.rb
内のメソッドの引数における
   block = Proc.new

   &block
と書き換えた.
今後これに関わる不具合が生じた際にはその都度対応を考える.


* 書き込みテスト

Hiki のページにおいてページを新規作成し, 正しく書き込みができていることを確認する.