[ 地球流体電脳倶楽部 ] [ 村上のページのトップ ]

hiki 1.0.0 install log

Debian wheezyにhiki 1.0.0をインストールしたときのログです。

パッチは<URL:../tools/hiki-1.0.0>に置いてあります。

hikiのアンインストール

既にhikiがインストールされている場合はアンインストールしておく。

インストールソフトウェアの確認

docdiff 0.4.0-2がインストールされていることを確認。

$ dpkg -l docdiff

ruby1.9.1がインストールされていることを確認。

$ dpkg -l ruby1.9.1

環境の確認

端末の文字コードはUTF-8であることを仮定する。

hikiのインストール

/etc/apt/sources.list に以下を追加。

deb http://dennou-k.gfd-dennou.org/debian experimental main contrib non-free
deb-src http://dennou-k.gfd-dennou.org/debian experimental main contrib non-free

次のコマンドを実行。

apt-get update
apt-get install hiki/experimental

hikiのピン止め

/etc/apt/preferences.d/rubyの中身に

Package: hiki
Pin: release n=experimental
Pin-Priority: 1001

を追加。

パッチ当て

エラー削減

<URL:http://jyurai.ddo.jp/~amorita/?Hiki-1.0.0>にある

hiki-1.0.0-util.diff.gz
hiki-1.0.0-bayes.diff

のパッチを当てる。

$ cd /usr/share/hiki
$ sudo patch -p0 < ~murashin/hiki-1.0.0-util.diff
$ sudo patch -p0 < ~murashin/hiki-1.0.0-bayes.diff

必須項目

hiki.cgiのshebangを書き換え。

$ cd /usr/share
$ sudo patch -p0 < ~murashin/hiki_hiki.cgi-shebang.patch

hikisetupでインストールされるhiki.cgiのshebangを書き換え

$ cd /usr/bin/
$ sudo patch -p0 < ~murashin/usr_bin_hikisetup-shebang.patch

auth_ldapをインストール(ITPASSサーバでは不要)

$ cd /usr/share/hiki
$ sudo tar xfz ~murashin/hiki-auth-ldap.tar.gz

/usr/share/hiki/misc/plugin/ja/auth_ldap.rb の文字コードをUTF-8に変更(emacsなどで)

attach.rbにパッチ当て。

$ cd /usr/share/hiki/misc/plugin
$ sudo patch -p0 < ~murashin/hiki_misc_plugin_attach.rb-encoding.patch
$ sudo patch -p0 < ~murashin/hiki_misc_plugin_attach.rb-encoding2.patch

attach.cgiにパッチ当て。

$ cd /usr/share/hiki/misc/plugin/attach
$ sudo patch -p0 < ~murashin/hiki_misc_plugin_attach_attach.cgi.patch

hiki/util.rbにパッチ当て。

$ cd /usr/share/hiki/hiki
$ sudo patch -p0 < ~murashin/hiki_hiki_util.rb-fix-error-message.patch

ツール関係

$ cd
$ git clone https://github.com/hiki/hiki.git
$ sudo mkdir /usr/share/hiki/tool
$ sudo cp hiki/tool/convert.rb /usr/share/hiki/tool

convert.rbにパッチ当て。

$ cd /usr/share/hiki/tool/
$ patch -p2 < ~murashin/hiki_tool_convert.rb.patch

rttoolのインストール

ruby1.8向けにインストールされてしまうため、ruby1.9.1のディレクトリにコピー。

# cd /usr/lib/ruby/1.8
# cp -rp rt ../1.9.1/

機能拡張

以下はCPSサーバーのログからコピー

html_formatter.rb の修正

以下の 2 点の目的のため, /usr/share/hiki/style/rd+/html_formatter.rb の修正を行う.

詳細は hiki_style_rd+_html_formatter.rb.patch を参照のこと.

RD+ スタイルの目次の修飾

ページの先頭に {{toc}} という文字を埋め込むと, 文頭に目次が挿入される. ただし, デフォルトの設定では <ul> 等のタグがそのまま記述されているだけなので, 目次に関してスタイルシートによる指定ができない.

基本的には RD+ スタイルを用いることを考えているため, html_formatter.rb を修正し, 目次の前後に <div class="toc"> を埋め込むこととした. 社内SEの独り言 -- Hikiメモ::目次部分のスタイルを変えたい を参考にした.

目次からのページ内リンク (日本語) を有効に

上記目次からページ内へリンクを作成する際, 日本語の見出しの場合には 一部ブラウザ (Mozilla 2.0 等) ではリンクが有効にならない場合がある. そのための修正を html_formatter.rb に施した. なおこの修正とあわせ, 下記の, <URL:#rd2html.rb の修正> も行う必要がある.

rd2html.rb の修正

以下の 2 点の目的のため, /usr/share/hiki/style/rd+/rd2html.rb の修正を行う.

詳細は hiki_style_rd+_rd2html.rb.patchを参照のこと.

RT で作成された表を修飾可能に

RD+ モードの場合, RT を用いて表の作成が可能である. (詳しくは TextFormattingRules を参照のこと).

しかし, オリジナルの RD+ で作成された表には div タグなどで 括られていないため, その表に対する修飾ができない. 従って, /usr/share/hiki/style/rd+/rd2html.rb を書き換え, <div class="rt2html"> .. </div> というタグで括るようにした.

ページ内リンクを有効に

デフォルトの rd2html.rb ではページ内リンクを使用できない. そのため, 以下のように記述した際にページ内リンクが有効になるよう,

((<URL:#ページ内リンクを有効に>))

また以下のように記述した際には別のページ内の見出しを参照できるよう 修正を施した.

((<FrontPage#基盤CG 関連資源>))

セッションの有効期限を伸ばす

hiki_hiki_session.rb を参照のこと。

文字コード指定の変更

hikiconf.rbのキャラクタセット@charsetをUTF-8にする。

@charset = 'UTF-8'

ファイル自体もUTF-8で保存する。

CVSを使っている場合

以下はITPASSの設定の例。

次に、~hoge/hiki/cvsroot/CVSROOT/に移動する。

# cd ~hoge/hiki/cvsroot/CVSROOT/

commitinfoを次のように書き換える

--- ./commitinfo        2012-05-16 18:57:44.000000000 +0900
+++ /home/murashin/hiki.success/cvsroot/CVSROOT/commitinfo      2013-11-20 03:16:23.000000000 +0900
@@ -25,4 +25,4 @@
 # If the name "ALL" appears as a regular expression it is always used
 # in addition to the first matching regex or "DEFAULT".
 hiki       sh $CVSROOT/CVSROOT/commitinfo.sh %s
-DEFAULT    perl $CVSROOT/CVSROOT/kanjichecker.pl euc %r/%p %s
+DEFAULT    perl $CVSROOT/CVSROOT/kanjichecker.pl utf8 %r/%p %s

commitinfo.shを次のように書き換える。

--- ./commitinfo.sh     2009-07-21 19:40:44.000000000 +0900
+++ /home/murashin/hiki.success/cvsroot/CVSROOT/commitinfo.sh   2013-11-20 03:17:09.000000000 +0900
@@ -2,4 +2,4 @@
 ruby $CVSROOT/CVSROOT/extra_spaces_checker.rb $*
 sh $CVSROOT/CVSROOT/file_creator_checker.sh $*
 sh $CVSROOT/CVSROOT/user_auth_checker.sh $*
-perl $CVSROOT/CVSROOT/kanjichecker.pl euc dir $*
+perl $CVSROOT/CVSROOT/kanjichecker.pl utf8 dir $*

kanjichecker.plを次のように書き換える。

--- ./kanjichecker.pl   2012-05-16 18:57:44.000000000 +0900
+++ /home/murashin/hiki.success/cvsroot/CVSROOT/kanjichecker.pl 2013-11-19 21:49:13.000000000 +0900
@@ -1,7 +1,7 @@
 #!/usr/bin/perl

 use Jcode;
-$correct_default = 'euc';  # 'euc' or 'sjis' or 'jis' or 'utf8'
+$correct_default = 'utf8';  # 'euc' or 'sjis' or 'jis' or 'utf8'
 $jcodecheck_size = 2048;

 if ($#ARGV < 2){

verifymsgを次のように書き換える。

--- ./verifymsg 2012-05-16 18:57:44.000000000 +0900
+++ /home/murashin/hiki.success/cvsroot/CVSROOT/verifymsg       2013-11-19 21:49:52.000000000 +0900
@@ -29,5 +29,5 @@
 # One thing that should be noted is the the ALL keyword is not
 # supported.  There can be only one entry that matches a given
 # repository.
-hiki      perl $CVSROOT/CVSROOT/msgchecker.pl euc %l
+hiki      perl $CVSROOT/CVSROOT/msgchecker.pl utf8 %l
 DEFAULT   perl $CVSROOT/CVSROOT/msgchecker.pl ASCII %l

extra_spaces_checker.rbを次のように書き換える。本体をUTF-8で保存する。
--- extra_spaces_checker.rb.orig	2013-11-20 16:02:26.000000000 +0900
+++ extra_spaces_checker.rb	2013-11-20 16:01:51.000000000 +0900
@@ -1,4 +1,5 @@
 #!/usr/bin/env ruby
+# -*- coding: utf-8 -*-

 SCRIPTNAME  = 'extra_spaces_checker.rb'

データの移行

hikiの記事ひとつひとつはEUC-JPに基づいたファイル名になっている。 これをUTF-8に基づいたファイル名に変換する。 また、メタデータ(info.db)も変換する。 通常はデータは ~/hiki/data/ に置いてある。

hoge ユーザが所有するhikiのデータを変換するとする。 記事をバックアップする。

# cp -rp ~hoge/hiki/data/text ~hoge/hiki/data/text.orig

info.dbをバックアップする。

# cp -rp ~hoge/hiki/data/info.db ~hoge/hiki/data/info.db.orig

記事を変換する。

# sudo -u www-data ./tool/convert.rb -i euc-jp -o utf-8 --nkf -D ~hoge/hiki/data > log 2>&1

info.dbを念のため書き戻す。

# sudo -u www-data ~hoge/hiki/data/info.db.orig ~hoge/hiki/data/info.db

info.dbを変換する。

# sudo -u www-data ./tool/convert_info_db.rb -i euc-jp -o utf-8 --nkf -D ~hoge/hiki/data

ログを見る。

# lv log

次のようにエラーが出ていた場合は、その記事のページ名が長過ぎる、 つまり255文字以上なので、変換に失敗している。=>の前にあるのが変換前のファイル名、=>の後ろにあるのが変換後のファイル名。

合宿型セミナー開催のための作業手順・内容-撮影部隊スケジュール: %B9%E7%BD%C9%B7%BF%A5%BB%A5%DF%A5%CA%A1%BC%B3%AB%BA%C5%A4%CE%A4%BF%A4%E1%A4%CE%BA%EE%B6%C8%BC%EA%BD%E7%A1%A6%C6%E2%CD%C6-%BB%A3%B1%C6%C9%F4%C2%E2%A5%B9%A5%B1%A5%B8%A5%E5%A1%BC%A5%EB => %E5%90%88%E5%AE%BF%E5%9E%8B%E3%82%BB%E3%83%9F%E3%83%8A%E3%83%BC%E9%96%8B%E5%82%AC%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E4%BD%9C%E6%A5%AD%E6%89%8B%E9%A0%86%E3%83%BB%E5%86%85%E5%AE%B9-%E6%92%AE%E5%BD%B1%E9%83%A8%E9%9A%8A%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB NG.
 Errno::ENAMETOOLONG: File name too long - /RAID0/home/mosir/services/wiki/contents/text/%E5%90%88%E5%AE%BF%E5%9E%8B%E3%82%BB%E3%83%9F%E3%83%8A%E3%83%BC%E9%96%8B%E5%82%AC%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E4%BD%9C%E6%A5%AD%E6%89%8B%E9%A0%86%E3%83%BB%E5%86%85%E5%AE%B9-%E6%92%AE%E5%BD%B1%E9%83%A8%E9%9A%8A%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB
 /usr/share/hiki/hiki/db/flatfile.rb:43:in `initialize'
 /usr/share/hiki/hiki/db/flatfile.rb:43:in `open'
 /usr/share/hiki/hiki/db/flatfile.rb:43:in `store'
 ./tool/convert.rb:77:in `block in convert'
 ./tool/convert.rb:62:in `each'
 ./tool/convert.rb:62:in `convert'
 ./tool/convert.rb:149:in `main'
 ./tool/convert.rb:154:in `<main>'

失敗しなかった場合は、

# ./site_name.sh ~hoge/data/hiki.conf

として、その出力を

# emacs ~hoge/data/hiki.conf

として、site_nameの値に書き入れる。そしてUTF-8で保存する。 移行できたかどうかWebから閲覧して確認する。

失敗した場合、バックエンドにCVSを利用している場合は、 先に「CVSを利用している場合」を済ませる。

ログを見て変換に失敗したページ名を適当に短くして、新規作成する。 中身はバックアップ~hoge/hiki/data/text.orig/の下にある

%B9%E7%BD%C9%B7%BF%A5%BB%A5%DF%A5%CA%A1%BC%B3%AB%BA%C5%A4%CE%A4%BF%A4%E1%A4%CE%BA%EE%B6%C8%BC%EA%BD%E7%A1%A6%C6%E2%CD%C6-%BB%A3%B1%C6%C9%F4%C2%E2%A5%B9%A5%B1%A5%B8%A5%E5%A1%BC%A5%EB

などをログから見つけ出して、lvなりemacsなりで開いてコピペする(一括でコピペできるemacs on Xがおすすめ)。 info.dbをemacsで開いて、変換後のファイル名を探す。

"%E5%90%88%E5%AE%BF%E5%9E%8B%E3%82%BB%E3%83%9F%E3%83%8A%E3%83%BC%E9%96%8B%E5%82%AC%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E4%BD%9C%E6%A5%AD%E6%89%8B%E9%A0%86%E3%83%BB%E5%86%85%E5%AE%B9-%E6%92%AE%E5%BD%B1%E9%83%A8%E9%9A%8A%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB" => {
:count => 0,
:freeze => false,
:keyword => [
],
:last_modified => Time.at(1384334835),
:references => [
],
:title => "",
},

この部分を丸々消す(これは変換後のページのメタデータ)。 以上をエラーが出たページ分だけ繰り返す。

CVSを利用している場合

CVSの履歴情報を活かすため、リポジトリごと移行する。 convert-cvs.rbを使う。

実行する。

$ sudo -u www-data ~/convert-cvs.rb -i euc-jp -o utf-8 --nkf -c ~hoge/hiki/cvsroot > log 2>&1

リポジトリからデータをチェックアウトする。

$ sudo -u www-data mv text text.converted
$ sudo -u www-data cvs -d /home/hoge/hiki/cvsroot co -d text hiki

ファイル名が長くてエラーがでていた場合、ここでtext.origから救出作業を行うこと。


Last modified: unknown (unknown), Since: unknown (unknown)