IT pass HikiWiki - [Memo2011][ITPASS] ika 構築作業ログ 12 (Hiki3) Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
11/10/31 に Hiki の設定を小林, 船橋で行った. (ロガー: 小林)
[((<ITPASSサーバ構築ドキュメント>)) へ戻る]
前回の管理者用パスワードの設定において出たエラーの原因がわからなかった為,もう一度 Hiki のインストールをやり直した.
= Hiki のインストールと設定
== Hiki のアンインストール
以下のコマンドを実行した.
$ sudo apt-get remove hiki
$ sudo rm -r /usr/share/doc/hiki
$ sudo aptitude purge rdtool
$ cd /home/itpass/
$ sudo rm ./public_html/
$ sudo rm -r./hiki/
== Hiki のインストール
Debian package 版を使う.
$ 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
== hikisetup の修正
以降で作成する各 Hiki ディレクトリの初期設定は /usr/bin/hikisetup で
行うが, Debian squeeze の Ruby のバージョンと hikisetup とが整合的で
ないためかそのままでは動かない.
$ sudo cp /usr/bin/hikisetup /usr/bin/hikisetup.org
変更後のファイルは
((<hikisetup|URL:../server/2010/hiki_system/hikisetup>))
から入手できる.
既に修正されていたので編集は行わなかった.
$ diff -u hikisetup.org hikisetup
--- /usr/bin/hikisetup.orig 2007-06-27 20:56:18.000000000 +0900
+++ /usr/bin/hikisetup 2007-10-23 15:47:35.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 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
$ 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/2010/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 時間に延ばす.
前回の問題があった可能性があるので元ファイルの MAX_AGE のみを変更したものを用いることとした .
$ sudo cp /usr/share/hiki/hiki/session.rb /usr/share/hiki/hiki/session.rb.orig
$ sudo vi /usr/share/hikihiki/session.rb
以下は差分の内容である.
$ 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/2010/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 librttool-ruby
(上の方法でインストールできなかったので, ((<URL:http://www.rubyist.net/~rubikitch/computer/rttool>)) より直接取得してインストールした. インストール方法は, リンク先を参考にされたい. )
# cd /usr/local/src/
# cd rttool-1.0.3
# ruby setup.rb config
# ruby setup.rb setup
# ruby setup.rb install
=== html_formatter.rb の修正
以下の 2 点の目的のため,
/usr/share/hiki/style/rd+/html_formatter.rb の修正を行う.
* ((<URL:#RD+ スタイルの目次の修飾>))
* ((<URL:#目次からのページ内リンク (日本語) を有効に>))
書き換え後のファイルは
((<html_formatter.rb|URL:../server/2010/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>"
+ 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>!
+ s << %Q!<li><a href="##{h['index'].gsub(/^%/, '').gsub(/%/, '-')}" class="toc">#{h['title'].escapeHTML}</a>!
end
s << ("</ul>" * lv)
+ s << ("</div>")
end
end
end
==== RD+ スタイルの目次の修飾
ページの先頭に {{toc}} という文字を埋め込むと,
文頭に目次が挿入される. ただし, デフォルトの設定では
<ul> 等のタグがそのまま記述されているだけなので,
目次に関してスタイルシートによる指定ができない.
基本的には RD+ スタイルを用いることを考えているため,
html_formatter.rb を修正し, 目次の前後に <div class="toc">
を埋め込むこととした.
((<社内SEの独り言 -- Hikiメモ::目次部分のスタイルを変えたい|URL:http://pochitto001.blog14.fc2.com/blog-entry-19.html>))
を参考にした.
==== 目次からのページ内リンク (日本語) を有効に
上記目次からページ内へリンクを作成する際, 日本語の見出しの場合には
一部ブラウザ (Mozilla 2.0 等) ではリンクが有効にならない場合がある.
そのための修正を html_formatter.rb に施した. なおこの修正とあわせ,
下記の, ((<URL:#rd2html.rb の修正>)) も行う必要がある.
=== rd2html.rb の修正
以下の 2 点の目的のため,
/usr/share/hiki/style/rd+/rd2html.rb の修正を行う.
* ((<URL:#RT で作成された表を修飾可能に>))
* ((<URL:#ページ内リンクを有効に>))
書き換え後のファイルは
((<rd2html.rb|URL:../server/2010/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 =~ /^\<URL:\#(.*?)\>$/
+ 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:#ページ内リンクを有効に>))
また以下のように記述した際には別のページ内の見出しを参照できるよう
修正を施した.
((<[ITPASS]Hikiのインストールと設定>))
== 参考文献
* ((<[ITPASS2010]Hikiのインストールと設定>))
= Hiki のページ毎の基本設定
== Hiki用ディレクトリの作成
Hiki 用のディレクトリを作成する.
(以降では, ユーザは itpass だと仮定しての作業を書いている).
$ sudo -s
$ chown itpass:itpass ../itpass/
$ su itpass
$ cd /home/itpass
$ mkdir hiki
$ chmod 2775 hiki
== hikisetup による初期設定
先ほど修正した hikisetup コマンドを用いて, 必要なファイルを
/home/itpass/hiki 以下にインストールする. データパスはデフォルト
のものを選ぶ.
$ cd /home/itpass/hiki
$ hikisetup --lang ja
INFO: hiki basedir is /home/itpass/hiki
Please input data_path [/home/itpass/hiki/data]:
すると, 以下のようなファイル群が作成された.
$ tree -a
.
|-- .htaccess
|-- data/
| `-- text/
| `-- backup/
| `-- backup/
| `-- backup/
| `-- 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://133.30.109.21/~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 コマンド
から作成するため, 下記の ((<[ITPASS2010]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 の中身のファイルに関してはグループ書き込み権限は不要である.
(ディレクトリに対しては, 上記のようにグループ書き込み権限が必要である).
== ファイルへのアクセス制御の設定
/usr/local/apache2/etc/httpd.conf の末尾に
<Directory "/home/itpass/public_html/hiki">
AllowOverride FileInfo AuthConfig Limit Indexes Options=ExecCGI,FollowSymlinks
</Directory>
という記述があるかどうか確認した.
(itpassの場合は既に
((<[ITPASS2010]apache2のインストールと設定#設定ファイルの編集>))
で作業したはずなので確認するだけでよい)
== CGI の基本動作のチェック
Apache を再起動し,
https://133.30.109.21/~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> にするように設定した.
ファイルの書き換えが終われば変更作業は完了である.
https://133.30.109.21/~itpass/hiki
へアクセスしてみる. この際, 「Error! Please edit this page again.」
のようなメッセージが表示されたので, 一度 data 領域以下を
((<URL:#hikisetup による初期設定>)) の状態に戻した (data および data/backup
以外のファイルやディレクトリを消した) .
当然ながら, まだ CVS 管理していないため, 消したデータは戻らないので,
データを書き溜めた後にこれを行う際には注意せよ.
== 管理者用パスワードの設定
https://133.30.109.21/~itpass/hiki
へアクセスし, 右上の「管理」から環境設定ページへ移動し,
左側の「パスワード」から管理者用パスワードを設定する.
なお, 管理者のアカウント名は admin である. ここでパスワードを設定する
と, 以後管理ページに移動するには右上の「ログイン」ボタンからログインす
る必要がある. その際にはアカウント名 admin と設定したパスワードが必要
になる.
== htaccess ファイルによるパスワード制限
これは, ページ全体の閲覧にパスワード制限を設けるための設定である.
今回は行わなかった.
== シンボリックリンクファイルの公開許可
シンボリックファイルを公開可能にするため, .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'
変更後
# ページのキャラクタセット【オプション】
@charset = 'EUC-JP'
== CVS によるページ管理
((<[ITPASS2010]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_tag 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 の場所は ((<[ITPASS2010]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 を使用する.
まず, Hiki のトップページから admin でログイン後, 「管理」を選択する.
その後, 左の「プラグイン選択」から 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|URL:../server/2010/hiki_pagesetup/hiki-passwd-collector.txt>))
を用いる. これを data ディレクトリ以下に置いた.
data ディレクトリ以下は www-data ユーザの管理下なので,
所有者及びグループは www-data とする.
$ wget https://itpass.scitec.kobe-u.ac.jp/~itpass/epa/hiki_pagesetup/hiki-passwd-collector.txt
$ mv hiki-passwd-collector.txt /home/itpass/hiki/data/hiki-passwd-collector.rb
$ 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
で設定されるエディタで開かれるため, エディタにこだわりがある場合は
この環境変数を設定してからこのコマンドを実行すること. ここでは, EDITOR として vi を使用するので, ユーザ www-data になってから
$ export EDITOR=vi
を実行する. その後
$ 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)|URL:http://www.linux.or.jp/JM/html/cron/man5/crontab.5.html>))
を参照のこと.
==CGI からの動作チェック
https://133.30,109.21/~itpass/hiki
へアクセスし, CGI からページの作成や削除, 変更を行ってみる. 「編集履歴」ボタンをクリックし, 過去の編集履歴が残っていることを確認した.
== 参考文献
* ((<[ITPASS2010]Hikiのページ毎の基本設定>))
= Hiki の CGI を介さず CVS ツールから編集 1
== Ruby, Perl のインストール
以下では Ruby スクリプトと Perl スクリプトを使用するため,
Ruby と Perl をシステムにインストールしておく.
# apt-get install ruby perl
== data 領域以下へのグループ書き込み権限の設定
/home/itpass/hiki/data/ 以下の全てのファイルとディレクトリに
グループ書き込み権限を設定する. ディレクトリには sbit を立てる.
$ cd /home/itpass/hiki/
$ sudo -u www-data chmod -R g+w data
$ sudo -u www-data chmod 2775 `find data/ -type d`
== CVSROOT 以下の編集
CVSROOT 以下のファイルを編集するには, CVSROOT 以下をチェックアウトし,
CVS 越しに編集を行う. ここでは cvsroot が存在するホストにログインして
作業すると仮定する.
$ cd
$ cvs -d /home/itpass/hiki/cvsroot/ checkout -d hiki_CVSROOT CVSROOT
以降では cvs コマンドを用いた基本操作は可能として話を進める.
よく分からない場合は,
((<地球流体電脳倶楽部 -- CVS に関するメモ|URL:http://www.gfd-dennou.org/library/cc-env/cvs/>))
など, Web 上の情報や CVS に関する書籍などを参照せよ.
=== スクリプトの用意
CVS ユーティリティから CGI 上のデータベースを更新するため, また
ページをコミットする際, CGI 上で行われるような処理 (末尾の空白の除去など)
のチェックを行うためのスクリプトを用意する.
#(後日, ちゃんと置き場を指定する予定)
用意したスクリプトを,
/home/itpass/hiki/cvsroot/CVSROOT/
下に置く.
* コミット前にファイルをチェックするためのスクリプト群
(commitinfo で使用)
* ((<commitinfo|URL:../server/2010/hiki_cvsroot/commitinfo>))
* 下記ファイルの情報を書きこんだ commitinfo
(CVSROOT 以下にあるオリジナルの commitinfo を上書きする)
* kanjichecker.pl
(((<地球流体電脳倶楽部 -- CVS に関するメモ -- euc のファイルのみ登録するには|URL:http://www.gfd-dennou.org/library/cc-env/cvs/customize/cvs-eucfile.htm>)) より取得)
* ファイルの文字コードをチェックするスクリプト
* ((<commitinfo.sh|URL:../server/2010/hiki_cvsroot/commitinfo.sh>))
* commitinfo ファイル内で下記の複数のスクリプトを
呼び出すためのラッパー
* ((<extra_spaces_checker.rb|URL:../server/2010/hiki_cvsroot/extra_spaces_checker.txt>))
* 本来は CGI 側で処理される, ファイルの先頭や末尾の
余計な空行の有無をチェックするスクリプト
* ((<file_creator_checker.sh|URL:../server/2010/hiki_cvsroot/file_creator_checker.sh>))
* CVS 越しからのファイル作成を禁止するためのスクリプト
(所有者が Apache の設定ファイルで指定される User と異なる場合,
タイムスタンプ更新時にエラーが生じるため, Apache を起動する User
以外がファイルを作成することを禁止する必要がある).
* ((<user_auth_checker.sh|URL:../server/2010/hiki_cvsroot/user_auth_checker.sh>))
* ユーザ認証チェッカ
* コミット前にコミットメッセージをチェックするためのスクリプト群
(verifymsg で使用)
* ((<verifymsg|URL:../server/2010/hiki_cvsroot/verifymsg>))
* 下記ファイルの情報を書きこんだ veryfymsg
(CVSROOT 以下にあるオリジナルの veryfymsg を上書きする)
* msgchecker.pl
(((<地球流体電脳倶楽部 -- CVS に関するメモ -- commit メッセージを euc のみに|URL:http://www.gfd-dennou.org/library/cc-env/cvs/customize/cvs-eucmsg.htm>)) より取得)
* コミットメッセージをチェックするスクリプト
* コミット後に Hiki データベースの更新やメールを送信するための
スクリプト群
(verifymsg で使用)
* ((<loginfo|URL:../server/2010/hiki_cvsroot/loginfo>))
* 下記ファイルの情報を書きこんだ loginfo
(CVSROOT 以下にあるオリジナルの loginfo を上書きする)
* cvsform.pl
(((<地球流体電脳倶楽部 -- CVS に関するメモ -- commit をメール通知する設定|URL:http://www.gfd-dennou.org/library/cc-env/cvs/customize/cvs-commitmail.htm>)) より取得)
* コミットログの送信メールを整形するスクリプト
* ((<html2cgiform.rb|URL:../server/2010/hiki_cvsroot/html2cgiform.txt>))
* CGI から受け取った HTML ファイルから CGI に渡す情報を
抽出するためのスクリプト
* ((<hikidb_update.sh|URL:../server/2010/hiki_cvsroot/hikidb_update.sh>))
* オフラインで CGI スクリプトを呼び出し, Hiki ディレクトリ内で
CVS の更新と Hiki データベースの更新を行う.
これらのファイルをダウンロードする. コミットはまだ行わない.
=== cvsform.pl の編集
cvsform.pl 冒頭の以下の部分を編集する.
$mailto0 はデフォルトのメール送信先, $project はメールのヘッダに
付記される情報である. $envelop_from は, 送信先のメールアドレスが
投稿制限される際などに使用する From のアドレスである.
$ sudo -u www.data mv cvsform1.12.pl cvsform.pl
$ sudo -u www.data vi cvsform.pl
$mailto0 = 'xxxxxxxx@gfd-dennou.xxx';
$envelop_from = '';
$project = 'hiki-commit';
コミットしようとしたが上手くいかなかった.
[((<ITPASSサーバ構築ドキュメント>)) へ戻る]
[((<ITPASSサーバ構築ドキュメント>)) へ戻る]
前回の管理者用パスワードの設定において出たエラーの原因がわからなかった為,もう一度 Hiki のインストールをやり直した.
= Hiki のインストールと設定
== Hiki のアンインストール
以下のコマンドを実行した.
$ sudo apt-get remove hiki
$ sudo rm -r /usr/share/doc/hiki
$ sudo aptitude purge rdtool
$ cd /home/itpass/
$ sudo rm ./public_html/
$ sudo rm -r./hiki/
== Hiki のインストール
Debian package 版を使う.
$ 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
== hikisetup の修正
以降で作成する各 Hiki ディレクトリの初期設定は /usr/bin/hikisetup で
行うが, Debian squeeze の Ruby のバージョンと hikisetup とが整合的で
ないためかそのままでは動かない.
$ sudo cp /usr/bin/hikisetup /usr/bin/hikisetup.org
変更後のファイルは
((<hikisetup|URL:../server/2010/hiki_system/hikisetup>))
から入手できる.
既に修正されていたので編集は行わなかった.
$ diff -u hikisetup.org hikisetup
--- /usr/bin/hikisetup.orig 2007-06-27 20:56:18.000000000 +0900
+++ /usr/bin/hikisetup 2007-10-23 15:47:35.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 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
$ 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/2010/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 時間に延ばす.
前回の問題があった可能性があるので元ファイルの MAX_AGE のみを変更したものを用いることとした .
$ sudo cp /usr/share/hiki/hiki/session.rb /usr/share/hiki/hiki/session.rb.orig
$ sudo vi /usr/share/hikihiki/session.rb
以下は差分の内容である.
$ 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/2010/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 librttool-ruby
(上の方法でインストールできなかったので, ((<URL:http://www.rubyist.net/~rubikitch/computer/rttool>)) より直接取得してインストールした. インストール方法は, リンク先を参考にされたい. )
# cd /usr/local/src/
# cd rttool-1.0.3
# ruby setup.rb config
# ruby setup.rb setup
# ruby setup.rb install
=== html_formatter.rb の修正
以下の 2 点の目的のため,
/usr/share/hiki/style/rd+/html_formatter.rb の修正を行う.
* ((<URL:#RD+ スタイルの目次の修飾>))
* ((<URL:#目次からのページ内リンク (日本語) を有効に>))
書き換え後のファイルは
((<html_formatter.rb|URL:../server/2010/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>"
+ 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>!
+ s << %Q!<li><a href="##{h['index'].gsub(/^%/, '').gsub(/%/, '-')}" class="toc">#{h['title'].escapeHTML}</a>!
end
s << ("</ul>" * lv)
+ s << ("</div>")
end
end
end
==== RD+ スタイルの目次の修飾
ページの先頭に {{toc}} という文字を埋め込むと,
文頭に目次が挿入される. ただし, デフォルトの設定では
<ul> 等のタグがそのまま記述されているだけなので,
目次に関してスタイルシートによる指定ができない.
基本的には RD+ スタイルを用いることを考えているため,
html_formatter.rb を修正し, 目次の前後に <div class="toc">
を埋め込むこととした.
((<社内SEの独り言 -- Hikiメモ::目次部分のスタイルを変えたい|URL:http://pochitto001.blog14.fc2.com/blog-entry-19.html>))
を参考にした.
==== 目次からのページ内リンク (日本語) を有効に
上記目次からページ内へリンクを作成する際, 日本語の見出しの場合には
一部ブラウザ (Mozilla 2.0 等) ではリンクが有効にならない場合がある.
そのための修正を html_formatter.rb に施した. なおこの修正とあわせ,
下記の, ((<URL:#rd2html.rb の修正>)) も行う必要がある.
=== rd2html.rb の修正
以下の 2 点の目的のため,
/usr/share/hiki/style/rd+/rd2html.rb の修正を行う.
* ((<URL:#RT で作成された表を修飾可能に>))
* ((<URL:#ページ内リンクを有効に>))
書き換え後のファイルは
((<rd2html.rb|URL:../server/2010/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 =~ /^\<URL:\#(.*?)\>$/
+ 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:#ページ内リンクを有効に>))
また以下のように記述した際には別のページ内の見出しを参照できるよう
修正を施した.
((<[ITPASS]Hikiのインストールと設定>))
== 参考文献
* ((<[ITPASS2010]Hikiのインストールと設定>))
= Hiki のページ毎の基本設定
== Hiki用ディレクトリの作成
Hiki 用のディレクトリを作成する.
(以降では, ユーザは itpass だと仮定しての作業を書いている).
$ sudo -s
$ chown itpass:itpass ../itpass/
$ su itpass
$ cd /home/itpass
$ mkdir hiki
$ chmod 2775 hiki
== hikisetup による初期設定
先ほど修正した hikisetup コマンドを用いて, 必要なファイルを
/home/itpass/hiki 以下にインストールする. データパスはデフォルト
のものを選ぶ.
$ cd /home/itpass/hiki
$ hikisetup --lang ja
INFO: hiki basedir is /home/itpass/hiki
Please input data_path [/home/itpass/hiki/data]:
すると, 以下のようなファイル群が作成された.
$ tree -a
.
|-- .htaccess
|-- data/
| `-- text/
| `-- backup/
| `-- backup/
| `-- backup/
| `-- 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://133.30.109.21/~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 コマンド
から作成するため, 下記の ((<[ITPASS2010]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 の中身のファイルに関してはグループ書き込み権限は不要である.
(ディレクトリに対しては, 上記のようにグループ書き込み権限が必要である).
== ファイルへのアクセス制御の設定
/usr/local/apache2/etc/httpd.conf の末尾に
<Directory "/home/itpass/public_html/hiki">
AllowOverride FileInfo AuthConfig Limit Indexes Options=ExecCGI,FollowSymlinks
</Directory>
という記述があるかどうか確認した.
(itpassの場合は既に
((<[ITPASS2010]apache2のインストールと設定#設定ファイルの編集>))
で作業したはずなので確認するだけでよい)
== CGI の基本動作のチェック
Apache を再起動し,
https://133.30.109.21/~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> にするように設定した.
ファイルの書き換えが終われば変更作業は完了である.
https://133.30.109.21/~itpass/hiki
へアクセスしてみる. この際, 「Error! Please edit this page again.」
のようなメッセージが表示されたので, 一度 data 領域以下を
((<URL:#hikisetup による初期設定>)) の状態に戻した (data および data/backup
以外のファイルやディレクトリを消した) .
当然ながら, まだ CVS 管理していないため, 消したデータは戻らないので,
データを書き溜めた後にこれを行う際には注意せよ.
== 管理者用パスワードの設定
https://133.30.109.21/~itpass/hiki
へアクセスし, 右上の「管理」から環境設定ページへ移動し,
左側の「パスワード」から管理者用パスワードを設定する.
なお, 管理者のアカウント名は admin である. ここでパスワードを設定する
と, 以後管理ページに移動するには右上の「ログイン」ボタンからログインす
る必要がある. その際にはアカウント名 admin と設定したパスワードが必要
になる.
== htaccess ファイルによるパスワード制限
これは, ページ全体の閲覧にパスワード制限を設けるための設定である.
今回は行わなかった.
== シンボリックリンクファイルの公開許可
シンボリックファイルを公開可能にするため, .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'
変更後
# ページのキャラクタセット【オプション】
@charset = 'EUC-JP'
== CVS によるページ管理
((<[ITPASS2010]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_tag 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 の場所は ((<[ITPASS2010]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 を使用する.
まず, Hiki のトップページから admin でログイン後, 「管理」を選択する.
その後, 左の「プラグイン選択」から 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|URL:../server/2010/hiki_pagesetup/hiki-passwd-collector.txt>))
を用いる. これを data ディレクトリ以下に置いた.
data ディレクトリ以下は www-data ユーザの管理下なので,
所有者及びグループは www-data とする.
$ wget https://itpass.scitec.kobe-u.ac.jp/~itpass/epa/hiki_pagesetup/hiki-passwd-collector.txt
$ mv hiki-passwd-collector.txt /home/itpass/hiki/data/hiki-passwd-collector.rb
$ 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
で設定されるエディタで開かれるため, エディタにこだわりがある場合は
この環境変数を設定してからこのコマンドを実行すること. ここでは, EDITOR として vi を使用するので, ユーザ www-data になってから
$ export EDITOR=vi
を実行する. その後
$ 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)|URL:http://www.linux.or.jp/JM/html/cron/man5/crontab.5.html>))
を参照のこと.
==CGI からの動作チェック
https://133.30,109.21/~itpass/hiki
へアクセスし, CGI からページの作成や削除, 変更を行ってみる. 「編集履歴」ボタンをクリックし, 過去の編集履歴が残っていることを確認した.
== 参考文献
* ((<[ITPASS2010]Hikiのページ毎の基本設定>))
= Hiki の CGI を介さず CVS ツールから編集 1
== Ruby, Perl のインストール
以下では Ruby スクリプトと Perl スクリプトを使用するため,
Ruby と Perl をシステムにインストールしておく.
# apt-get install ruby perl
== data 領域以下へのグループ書き込み権限の設定
/home/itpass/hiki/data/ 以下の全てのファイルとディレクトリに
グループ書き込み権限を設定する. ディレクトリには sbit を立てる.
$ cd /home/itpass/hiki/
$ sudo -u www-data chmod -R g+w data
$ sudo -u www-data chmod 2775 `find data/ -type d`
== CVSROOT 以下の編集
CVSROOT 以下のファイルを編集するには, CVSROOT 以下をチェックアウトし,
CVS 越しに編集を行う. ここでは cvsroot が存在するホストにログインして
作業すると仮定する.
$ cd
$ cvs -d /home/itpass/hiki/cvsroot/ checkout -d hiki_CVSROOT CVSROOT
以降では cvs コマンドを用いた基本操作は可能として話を進める.
よく分からない場合は,
((<地球流体電脳倶楽部 -- CVS に関するメモ|URL:http://www.gfd-dennou.org/library/cc-env/cvs/>))
など, Web 上の情報や CVS に関する書籍などを参照せよ.
=== スクリプトの用意
CVS ユーティリティから CGI 上のデータベースを更新するため, また
ページをコミットする際, CGI 上で行われるような処理 (末尾の空白の除去など)
のチェックを行うためのスクリプトを用意する.
#(後日, ちゃんと置き場を指定する予定)
用意したスクリプトを,
/home/itpass/hiki/cvsroot/CVSROOT/
下に置く.
* コミット前にファイルをチェックするためのスクリプト群
(commitinfo で使用)
* ((<commitinfo|URL:../server/2010/hiki_cvsroot/commitinfo>))
* 下記ファイルの情報を書きこんだ commitinfo
(CVSROOT 以下にあるオリジナルの commitinfo を上書きする)
* kanjichecker.pl
(((<地球流体電脳倶楽部 -- CVS に関するメモ -- euc のファイルのみ登録するには|URL:http://www.gfd-dennou.org/library/cc-env/cvs/customize/cvs-eucfile.htm>)) より取得)
* ファイルの文字コードをチェックするスクリプト
* ((<commitinfo.sh|URL:../server/2010/hiki_cvsroot/commitinfo.sh>))
* commitinfo ファイル内で下記の複数のスクリプトを
呼び出すためのラッパー
* ((<extra_spaces_checker.rb|URL:../server/2010/hiki_cvsroot/extra_spaces_checker.txt>))
* 本来は CGI 側で処理される, ファイルの先頭や末尾の
余計な空行の有無をチェックするスクリプト
* ((<file_creator_checker.sh|URL:../server/2010/hiki_cvsroot/file_creator_checker.sh>))
* CVS 越しからのファイル作成を禁止するためのスクリプト
(所有者が Apache の設定ファイルで指定される User と異なる場合,
タイムスタンプ更新時にエラーが生じるため, Apache を起動する User
以外がファイルを作成することを禁止する必要がある).
* ((<user_auth_checker.sh|URL:../server/2010/hiki_cvsroot/user_auth_checker.sh>))
* ユーザ認証チェッカ
* コミット前にコミットメッセージをチェックするためのスクリプト群
(verifymsg で使用)
* ((<verifymsg|URL:../server/2010/hiki_cvsroot/verifymsg>))
* 下記ファイルの情報を書きこんだ veryfymsg
(CVSROOT 以下にあるオリジナルの veryfymsg を上書きする)
* msgchecker.pl
(((<地球流体電脳倶楽部 -- CVS に関するメモ -- commit メッセージを euc のみに|URL:http://www.gfd-dennou.org/library/cc-env/cvs/customize/cvs-eucmsg.htm>)) より取得)
* コミットメッセージをチェックするスクリプト
* コミット後に Hiki データベースの更新やメールを送信するための
スクリプト群
(verifymsg で使用)
* ((<loginfo|URL:../server/2010/hiki_cvsroot/loginfo>))
* 下記ファイルの情報を書きこんだ loginfo
(CVSROOT 以下にあるオリジナルの loginfo を上書きする)
* cvsform.pl
(((<地球流体電脳倶楽部 -- CVS に関するメモ -- commit をメール通知する設定|URL:http://www.gfd-dennou.org/library/cc-env/cvs/customize/cvs-commitmail.htm>)) より取得)
* コミットログの送信メールを整形するスクリプト
* ((<html2cgiform.rb|URL:../server/2010/hiki_cvsroot/html2cgiform.txt>))
* CGI から受け取った HTML ファイルから CGI に渡す情報を
抽出するためのスクリプト
* ((<hikidb_update.sh|URL:../server/2010/hiki_cvsroot/hikidb_update.sh>))
* オフラインで CGI スクリプトを呼び出し, Hiki ディレクトリ内で
CVS の更新と Hiki データベースの更新を行う.
これらのファイルをダウンロードする. コミットはまだ行わない.
=== cvsform.pl の編集
cvsform.pl 冒頭の以下の部分を編集する.
$mailto0 はデフォルトのメール送信先, $project はメールのヘッダに
付記される情報である. $envelop_from は, 送信先のメールアドレスが
投稿制限される際などに使用する From のアドレスである.
$ sudo -u www.data mv cvsform1.12.pl cvsform.pl
$ sudo -u www.data vi cvsform.pl
$mailto0 = 'xxxxxxxx@gfd-dennou.xxx';
$envelop_from = '';
$project = 'hiki-commit';
コミットしようとしたが上手くいかなかった.
[((<ITPASSサーバ構築ドキュメント>)) へ戻る]