[Memo2008][EPA]ika構築作業ログ2(今関,今村)

以下では EPA サーバ上の Hiki 利用環境構築のログを記します. Hikiによって作成, 変更される資源は CVS によって管理します.

[EPAサーバ構築ドキュメント へ戻る]

Hiki のインストールと設定

Hiki のインストール

Debian package 版を使う.

$ apt-show-versions -a -p hiki
hiki    0.8.6-1etch1    install ok installed
hiki    0.8.6-1etch1    etch
hiki/etch uptodate 0.8.6-1etch1

Debian のバージョンは 0.8.6-1etch1.

$ sudo aptitude install hiki
$ cat /var/log/aptitude
...
710 個のパッケージをインストールし、0 個のパッケージを削除します。
1673MB のディスク領域を使用します
...

hikisetup の修正

以降で作成する各 Hiki ディレクトリの初期設定は /usr/bin/hikisetup で 行うが, Debian etch の Ruby のバージョンと hikisetup とが整合的で ないためかそのままでは動かないので, 少し修正する.

$ sudo cp /usr/bin/hikisetup /usr/bin/hikisetup.org
$ sudo vi /usr/bin/hikisetup

変更後のファイルは hikisetup から入手できる. 編集前後のファイルの差分である.

$ diff -u /usr/bin/hikisetup.org  /usr/bin/hikisetup
--- /usr/bin/hikisetup.org      2008-10-15 11:20:17.000000000 +0900
+++ /usr/bin/hikisetup  2008-10-15 11:21:11.000000000 +0900
@@ -137,7 +137,7 @@
     check_datapath
     check_pluginpath
     check_templatepath
-    File.makedirs(@hikidir)
+    makedirs(@hikidir)
     create_hikicgi
     create_theme
     create_datadir  

hikiconf.rb.sample の作成

上記の修正だけでは, 実行時に, 「/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 のインストールは完了した.

Hiki の環境設定

以下では Hiki の環境設定を記す. ただし, apache の実効権限が www-data であるため, 作業には 管理者権限が必要となることに注意.

TABLE を使えるようにするための設定

plugin として table_form.rb が公開されているが, RD+ style に対応してい ないのでちょっと修正する. またスタイルシートから見た目を変更できるよう, div タグに class="table_form_rd" を含める. 一応オリジナルの table_form.rb 自体もプラグインに含めておく.

$ wget http://gouketsu.net/simm/f/20050721/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-10-15 11:41:44.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(",") + ""
           content << l
           prev = l
         else
           content << l
           content << title
-          prev = "||" + row.join("||") + "\n"
+          prev = "\s" + row.join(",") + ""
           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
--- session.rb.orig     2008-10-15 11:53:44.000000000 +0900
+++ session.rb  2008-10-15 11:31:03.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   2008-10-15 11:53:07.000000000 +0900
+++ 00default.rb        2008-10-15 11:40:23.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?

html_formatter.rb の修正

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

書き換え後のファイルは html_formatter.rb から入手できる. 以下に差分の内容も記す.

$ diff -u html_formatter.rb.orig html_formatter.rb
--- html_formatter.rb.orig      2008-10-15 11:54:53.000000000 +0900
+++ html_formatter.rb   2008-10-15 13:48:00.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>\n" * ( 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>\n" * lv)
+      s << ("</div>")
     end
   end
 end
RD+ スタイルの目次の修飾

ページの先頭に

 
{{toc}} 

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

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

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

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

rd2html.rb の修正

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

書き換え後のファイルは rd2html.rb から入手できる. 以下に差分の内容も記す.

$ diff -u rd2html.rb.orig rd2html.rb
--- rd2html.rb.orig     2008-10-15 11:53:39.000000000 +0900
+++ rd2html.rb  2008-10-16 11:47:18.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"
RT で作成された表を修飾可能に

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

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

ページ内リンクを有効に

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

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

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

((<[EPA]システムへのHikiインストールと設定#ページ内リンクを有効に>))

Hiki のページ毎の基本設定

以下では, /home/itpass/hiki に Hiki 用の資源を置くことと仮定し, このページのような Hiki 環境を整えるのに必要な作業を記す.

Hiki によって作成, 変更される資源は CVS によって管理するようにする.

Hiki用ディレクトリの作成

Hiki 用のディレクトリを作成する. (以降では, ユーザは itpass だと仮定しての作業を書いている).

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

hikisetup による初期設定

先ほど修正した hikisetup コマンドを用いて, 必要なファイルを /home/itpass/hiki 以下にインストールする. データパスはデフォルト のものを選ぶ.

$ cd /home/itpass/hiki
$ hikisetup

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

すると, 以下のようなファイル群が作成される.

$ tree -a

.
|-- .htaccess
|-- data/
|   `-- backup/
|-- hiki.cgi*
|-- hikiconf.rb
`-- theme/
    |-- hiki/
    |   |-- README
    |   `-- hiki.css
    `-- hiki_base.css

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

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

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

公開の際には, /home/itpass/hiki/cgi に対して /home/itpass/public_html/hiki というシンボリックリンクをはる. Web からは http://epa.scitec.kobe-u.ac.jp/~itpass/hiki へと アクセスすることで Hiki ページを見ることが出来るようになる.

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

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

作業例を以下に述べる. ただし, cvsroot に関しては別途 cvs コマンド から作成するため, 下記の [EPA2008]Hikiのページ毎の基本設定#cvsroot の作成 を参照のこと.

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

$ cd /home/itpass/hiki
$ mkdir cgi

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

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

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

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

CVS のインストール

CVS をシステムにインストールする. Debian の場合には cvs パッケージを インストールすればよい.

# apt-get install cvs

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

cvsroot の作成

Hiki のデータは CVS で管理する. ここでは CVS データを管理するための CVS レポジトリの作成を行う. 作成は以下のコマンドで可能である.

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

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

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

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

Apache の設定

ユーザ認証などの設定を各ディレクトリ内の .htaccess で行うため, Apache の設定ファイル /usr/local/apache2/conf/httpd.conf の末尾に以下の設定を 追加する. ディレクトリ名は場所に応じて適宜つける. この作業は管理者権限で行うこと.

#
# Settings for Hiki
#
<Directory /home/itpass/public_html/hiki >
    AllowOverride ALL
</Directory>
<Directory /home/epalab/public_html/hiki >
    AllowOverride ALL
</Directory>

(後に epalab にも同じものを作るので, ここで epalab 側の設定もしておく.)

※ 後日削除 (この項目は Apache の構築時にすでに設定してある)

CGI の基本動作のチェック

Apache を再起動し,

http://epa.scitec.kobe-u.ac.jp/~itpass/hiki

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

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

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

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

RD 形式で記述できるようにする.

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

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

を追加する. header_depth では = を <h2> にするように設定した.

ファイルの書き換えが終われば変更作業は完了である.

http://epa.scitec.kobe-u.ac.jp/~itpass/hiki

へアクセスしてみる. この際, 「Error! Please edit this page again.」 のようなメッセージが表示される場合には, 一度 data 領域以下を hikisetup による初期設定? の状態に戻す (data および data/backup 以外のファイルやディレクトリを消す) と良い.

当然ながら, まだ CVS 管理していないため, 消したデータは戻らないので, データを書き溜めた後にこれを行う際には注意せよ.

/~epalab/hiki を複製

これまで itpass の Hiki を設定してきたが, epalab にも Hiki が必要なため, 次のパスワード設定前に, ここでコピーしておいた.

$ sudo cp -r /home/itpass/hiki/ /home/epalab/hiki/

所有者, 所有グループ, パーミッションなどは itpass と同じように適宜変更すること. 以後の設定は htaccess ファイルによるパスワード制限以外, itpass, epalab の両方について行った.

管理者用パスワードの設定

http://epa.scitec.kobe-u.ac.jp/~itpass/hiki

へアクセスし, 右上の「管理」から環境設定ページへ移動し, 左側の「パスワード」から管理者用パスワードを設定する.

なお, 管理者のアカウント名は admin である. ここでパスワードを設定する と, 以後管理ページに移動するには右上の「ログイン」ボタンからログインす る必要がある. その際にはアカウント名 admin と設定したパスワードが必要 になる.

htaccess ファイルによるパスワード制限

これは, ページ全体の閲覧にパスワード制限を設けるための設定である. この IT pass HikiWiki には設定していないが, 閲覧自体に制限をする際には以下を参照せよ.

ここでは, /~epalab/hiki へパスワード制限を掛けることにする.

まず, /home/epalab/hiki/cgi/.htaccess を編集する.

$ cd /home/epalab/hiki/cgi
$ vi .htaccess

以下を追加する.

AuthType Basic
AuthName "EPA-Lab. Hikiwiki"
AuthUserFile /home/epalab/.htpasswd-hiki
Require user XXXXXXXX

XXXXXXXX にはユーザ名を与える. その後, 以下のコマンドで パスワードファイルを作成する. コマンド入力後にパスワードを 2 回聞かれるのでパスワードを入力する.

$ htpasswd -c /home/epalab/.htpasswd-hiki XXXXXXXX

パスワードの設定が完了したら再度

http://epa.scitec.kobe-u.ac.jp/~epalab/hiki

へアクセスし, パスワード制限がかかっているかを確認する.

シンボリックリンクファイルの公開許可

シンボリックファイルを公開可能にするため, .htaccess の編集を行う.

$ cd /home/itpass/hiki/cgi
$ vi .htaccess

以下の一行を .htaccess に追加する.

Options +FollowSymLinks

なお, 元ファイルとシンボリックリンクとで所有者が異なる場合に 公開を許可しないようにしたければ,

Options +SymLinksifOwnerMatch

とすればよい.

文字コードの設定

ページのキャラクタセットを EUC-JP にセットする. /home/itpass/hiki/cgi/hikiconf.rb に元から以下のような 記述があるので, @charset の前のシャープマークを削除し, 設定を有効にする.

# ページのキャラクタセット【オプション】
#@charset         = 'EUC-JP'

CVS によるページ管理

[EPA2008]Hikiのページ毎の基本設定#cvsroot の作成 で作成した cvsroot 以下で, Hiki ページを管理するための手引きを以下に記す.

hiki/data/text の import

現在 /home/itpass/hiki/data/text 以下に存在するデータを cvsroot 以下に格納する.

$ cd /home/itpass/hiki/data/text
$ sudo -u www-data cvs -d /home/itpass/hiki/cvsroot import -m 'Initial import' hiki v_targ r_tag

格納後, そのデータをチェックアウトしておくこと. (次回の編集時に競合を起こすため).

$ cd ../
$ sudo -u www-data cvs -d /home/itpass/hiki/cvsroot co -d text hiki

hikiconf.rb の編集

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

#
# CVS によるページの管理
#
@repos_type = 'cvs'
@repos_root = '/home/itpass/hiki/cvsroot'

を追加する. cvsroot の場所は [EPA2008]Hikiのページ毎の基本設定#cvsroot の作成 で作成した ディレクトリを指定すること.

CGI 側からの設定

編集履歴を表示するために, 管理画面の左側の「プラグイン選択」を選び, "history.rb" にチェックをつけて OK ボタンを押す. これでプラグインの 導入は終了である.

CVS のテスト

CGI からページの作成や編集を行ってみよう. history.rb プラグインを導入したため, ページを選択すると 右上に「編集履歴」というボタンが追加されている.

これを選ぶと, 過去の履歴や比較などを行うことが可能になっている.

ページの基本情報の設定

Hiki の Top から admin でログインし, 「管理」メニューから 基本情報を設定する. 以下は設定例である.

基本:
  サイト名:
    IT pass Hikiwiki
  著者名:
    IT pass members
  メールアドレス
    xxxx@xxxxxxx.xx.xx
  更新をメールで通知
    非通知

CGI からの環境設定

Hiki の Top から admin でログインし, 「管理」メニュー へ移動後, 「表示設定」へ移動し, 以下の設定を行う.

  • サイドバーの設定: 使用する
  • オートリンクの利用: 使用する
  • WikiName によるリンク機能の利用: 使用する

スタイルシートの変更

Hiki のテーマとして佐々木氏謹製の graph-paper を改変した epa-itpass を使う. スタイルシート本体と関連する画像は <URL:/~itpass/hiki/theme/epa-itpass/> から入手できる.

/home/itpass/hiki/cgi/theme/epa-itpass を作成し, 上記から入手できるファイル群をこのディレクトリ以下に置く.

$ mkdir ~itpass/hiki/cgi/theme/epa-itpass

これが完了したら, ブラウザから hiki のページを開き, admin でログインして [管理] メニューの [表示設定] でテーマとして Epa-itpass を選択し, 「OK」ボタンをクリックする.

編集ユーザ制限

プラグインとして edit_user.rb を使用する. 必要なユーザを「ユーザの追加」から追加し, 「編集の制限」で「登録ユーザのみ編集できるように制限しますか?」 で「はい」を選択する.

編集ユーザのパスワードを各自で設定可能にする

上記の edit_user.rb では, 管理者アカウント admin になり, 「ユーザ編集」 からアカウントとパスワードの設定を行う. しかしこの場合, 各ユーザが自 分のパスワードの変更などを行うのに管理者アカウントのパスワードを知って いなければならず, つまるところ全てのユーザが管理者アカウントのパスワー ドを知っていなければならない. これはアカウント管理上よろしくない.

そこで, 各ユーザが自身の編集ユーザ作成やパスワード設定を可能にできるよう にする. 方法は以下のようにする. なお, 各ユーザが行う作業に関しては [TEBIKI]Hikiの編集ユーザのパスワード設定 にまとめてあるので そちらを参照のこと.

  • 各ユーザは, 自分のホームディレクトリ以下にパスワードファイル ~/.hiki-passwd を作成する. ファイルの書式は Apache に同梱される htpasswd コマンドで作成されるものと同じとする. (作り方は任意だが, htpasswd で作成するのが最も容易だろう).
  • CRON で定期的に, 各 Hiki ページでスクリプト (下記参照) を実行し, その Hiki ページを 管理するグループに含まれるユーザのホームディレクトリ以下の ~/.hiki-passwd を読み込み, パスワードを集積した後, パスワードの 管理ファイルである data/hiki.conf のパスワードエントリを上書きする.
  • data/hiki.conf へのパスワードエントリ上書きルールは以下の通り. なお, 以下での「編集ユーザ」は data/hiki.conf 内のパスワード エントリに含まれる (= CGI を編集できる) ユーザのことを指す. また, ここでの「ユーザ」は, Hiki ページの管理グループ (例えば itpass) のメンバーと仮定する. (メンバーか否かは, /etc/group の itpass のエントリにメンバーとして含まれているか否かで判断する).
    • 個々のユーザの ~/.hiki-passwd の有無に関わらず, 既存の編集ユーザの削除は行わない. (削除は管理者が CGI 上から手動で行う).
    • あるユーザがまだ編集ユーザには含まれておらず, かつそのユーザのホームディレクトリに ~/.hiki-passwd ファイルが 作成されている場合, そのユーザを data/hiki.conf の パスワードエントリに追加する.
    • あるユーザはすでに編集ユーザに含まれており, そのユーザの ~/.hiki-passwd の内容と data/hiki.conf の パスワードエントリが異なる場合, data/hiki.conf のそのユーザの 欄を上書きする. 中身が同じ場合は何もしない.

上記の「スクリプト」には, このために作成した hiki-passwd-collector.rb を用いる. これを data ディレクトリ以下に置く. data ディレクトリ以下は www-data ユーザの管理下なので, 所有者及びグループは www-data とする.

$ wget http://epa.scitec.kobe-u.ac.jp/~itpass/epa/hiki_pagesetup/hiki-passwd-collector.rb
$ cp hiki-passwd-collector.rb /home/itpass/hiki/data/
$ chmod 755 /home/itpass/hiki/data/hiki-passwd-collector.rb
$ sudo chown www-data:www-data /home/itpass/hiki/data/hiki-passwd-collector.rb

以下のコマンドで, www-data ユーザとして CRON の設定を行う. なお, 以下のようにコマンドした際には, 環境変数 EDITOR で設定されるエディタで開かれるため, エディタにこだわりがある場合は この環境変数を設定してからこのコマンドを実行すること.

$ sudo -u www-data crontab -e

以下のように書き込み, 保存と終了を行う.

25 3 * * *     umask 002; cd /home/itpass/hiki/data && /usr/bin/ruby ./hiki-passwd-collector.rb -b -q -o hiki.conf -g itpass

この設定は,

  • 毎日 03/25 分に
  • umask 002 を設定 (作成されるファイルにグループ書き込み権限をつける)
  • /home/itpass/hiki/data へ移動後
  • ruby で hiki-passwd-collector.rb を実行する (オプションの詳細は, このコマンドに -h をつけた際に表示される ヘルプを参照のこと).
    • -b: バックアップファイルを作る
    • -q: メッセージを表示しない
    • -o hiki.conf: hiki.conf ファイルの変更を行う
    • -g itpass: itpass グループに含まれるユーザのパスワードファイルを探査

を意味する. crontab ファイルの書き方に関しては, crontab (5) を参照のこと.

HikiのCGIを介さずCVSツールから編集(管理側作業)

ここでの目的は, ブラウザから CGI を介してページを編集するのではなく, CVS なんだから CVS ユーティリティ越しにファイルを編集できるようにしたい である. 実際には cvsroot/CVSROOT 以下のファイル群の設定により, これを実現している.

以下ではまず, Hiki を用意する側で必要な準備について述べる. ユーザが実際に編集を行う際には, [EPA2008]HikiのCGIを介さずCVSツールから編集する(ユーザ側作業) の作業を行う必要がある.

Ruby, Perl のインストール

以下では Ruby スクリプトと Perl スクリプトを使用するため, Ruby と Perl をシステムにインストールしておく.

# apt-get install ruby perl

data 領域以下へのグループ書き込み権限の設定

/home/epalab/hiki/data/ 以下の全てのファイルとディレクトリに グループ書き込み権限を設定する. ディレクトリには sbit を立てる.

$ cd /home/epalab/hiki/
$ sudo -u www-data chmod -R g+w data
$ sudo -u www-data chmod 2775 `find data/ -type d`

tako から ika に /home/itpass(epalab)/hiki 以下を rsync する

概要

hiki の動作確認として, tako の /home/itpass(epalab)/hiki, 以下を ika の /home/itpass(epalab)/hiki, 以下に rsync する.

接続認証設定の確認

以下の項目を確認する.

  • tako に /root/.ssh/id_dsa と /root/.ssh/id_dsa.pub のペアが作成されているか
  • tako の /root/.ssh/id_dsa.pub の中身が tako の /root/.ssh/authorized_keys に記述されているか
  • ika の /root/.ssh/authorized_keys の "ssh-dss .... root@tako" の行頭に以下の記述があるか

    command="rsync --server -av --delete . /home/itpass(epalab)/hiki/",no-pty,
    from="tako.epa.scitec.kobe-u.ac.jp",no-port-forwarding,
    no-X11-forwarding,no-agent-forwarding

    この記述をする際には,

    • 1 行で書くこと
    • コンマの後ろには空白をいれないこと
    • この記述と "ssh-dss" の間には空白をいれること

    に注意されたい.

  • tako の /etc/ssh/sshd_config に以下の記述があるか

    PermitRootLogin forced-commands-only

    この設定にすると /root/.ssh/authorized_keys の command="..." で指定されたコマンドでのみログインが許可される.

確認されない項目があれば, 適宜設定されたい. なお, /etc/ssh/sshd_config を変更した場合は,

# /etc/init.d/ssh restart

を実行し設定を反映させることをお忘れなく.

rsync の動作確認

いきなり rsync コマンドを実行すると思いもよらない間違いが起こってしまうかもしれないので, まずは rsync コマンドに -n オプションをつけて実行する. -n オプションをつけて実行すると, ファイルの転送は行わずして結果が出力される.

しかし, 先の認証設定では ika の /root/.ssh/authorized_keys には

command="rsync --server -av --delete . /home/itpass(epalab)/hiki/"

と記述されており, このままでは -n オプションをつけて rsync コマンドを実行することはできない. したがって, 一時的にこの記述を

command="rsync --server -n -av --delete . /home/itpass(epalab)/hiki/"

に変更する. そして以下のコマンドを実行する.

root@tako:~# rsync -n -av --delete -e ssh /home/itpass(epalab)/hiki/ ika:/home/itpass(epalab)/hiki

エラーが出力されなければ, 問題なく rsync は動作するということである.

rsync が問題なく動作することが確認されれば,

command="rsync --server -n -av --delete . /home/itpass(epalab)/hiki/"

command="rsync --server -av --delete . /home/itpass(epalab)/hiki/"

に戻しておく.

ちなみに, --server とは rsync を実行したときに受け手として働くという意味であり, 対として --sender (送り手) というものもある.

rsync の実行

以下のコマンドを実行する.

root@ika:~# rsync -av --delete -e ssh /home/itpass(epalab)/hiki/ ika:/home/itpass(epalab)/hiki/

ここで, -a は -rlptgoD と同値であり, -av をつけることによって -vlogDtpr をつけたことになる. --delete をつけることによって, 転送元にないファイルが転送先に存在する場合には転送先のそのファイルは消去される.

なお, 転送先, 転送元のディレクトリを指定するときに, 後ろの / を抜くとまったく別の意味になるので注意されたい.

さらに接続認証設定の確認で変更した部分を変更前に戻しておく.

rsync の後, hiki がちゃんと動作をしているか確認するため, ブラウザから hiki の編集等を試してみる.

後日作業(ミスの修正)

  • Apache の設定の修正

Apache の設定において /usr/local/apache2/conf/httpd.conf の末尾に以下の内容を 2度記述してしまったので削除する.

#
# Settings for Hiki
#
<Directory /home/itpass/public_html/hiki >
    AllowOverride ALL
</Directory>
<Directory /home/epalab/public_html/hiki >
    AllowOverride ALL
</Directory>
  • TABLE を使えるようにするための設定の修正

TABLE を使えるようにするための設定においてミスが見つかったので修正した.

25行目くらい

修正前:   <div class="table_form_rd>
修正後:   <div class="table_form_rd">

85行目くらい

修正前:   content << "\s" + row.join(",") + ""
修正後:   content << "\s" + row.join(",") + "\n"

90行目くらい

修正前:   prev = "\s" + row.join(",") + ""
修正後:   prev = "\s" + row.join(",") + "\n"

[EPAサーバ構築ドキュメント へ戻る]