[Memo2011][ITPASS] ika 構築作業ログ 12 (Hiki3)
- Hiki のインストールと設定
- Hiki のページ毎の基本設定
- Hiki の CGI を介さず CVS ツールから編集 1
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 から入手できる. 既に修正されていたので編集は行わなかった.
$ 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 においてある. 以下に差分の内容も記す.
$ 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 から入手できる. 以下に差分の内容も記す.
$ 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 の修正を行う.
書き換え後のファイルは html_formatter.rb から入手できる. 以下に差分の内容も記す.
$ 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+ スタイルの目次の修飾
ページの先頭に という文字を埋め込むと, 文頭に目次が挿入される. ただし, デフォルトの設定では <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 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のインストールと設定>))
参考文献
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 領域以下を 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 を用いる. これを 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) を参照のこと.
CGI からの動作チェック
https://133.30,109.21/~itpass/hiki
へアクセスし, CGI からページの作成や削除, 変更を行ってみる. 「編集履歴」ボタンをクリックし, 過去の編集履歴が残っていることを確認した.
参考文献
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 に関するメモ など, Web 上の情報や CVS に関する書籍などを参照せよ.
スクリプトの用意
CVS ユーティリティから CGI 上のデータベースを更新するため, また ページをコミットする際, CGI 上で行われるような処理 (末尾の空白の除去など) のチェックを行うためのスクリプトを用意する. 用意したスクリプトを,
/home/itpass/hiki/cvsroot/CVSROOT/
下に置く.
- コミット前にファイルをチェックするためのスクリプト群
(commitinfo で使用)
- commitinfo
- 下記ファイルの情報を書きこんだ commitinfo (CVSROOT 以下にあるオリジナルの commitinfo を上書きする)
- kanjichecker.pl
(地球流体電脳倶楽部 -- CVS に関するメモ -- euc のファイルのみ登録するには より取得)
- ファイルの文字コードをチェックするスクリプト
- commitinfo.sh
- commitinfo ファイル内で下記の複数のスクリプトを 呼び出すためのラッパー
- extra_spaces_checker.rb
- 本来は CGI 側で処理される, ファイルの先頭や末尾の 余計な空行の有無をチェックするスクリプト
- file_creator_checker.sh
- CVS 越しからのファイル作成を禁止するためのスクリプト (所有者が Apache の設定ファイルで指定される User と異なる場合, タイムスタンプ更新時にエラーが生じるため, Apache を起動する User 以外がファイルを作成することを禁止する必要がある).
- user_auth_checker.sh
- ユーザ認証チェッカ
- commitinfo
- コミット前にコミットメッセージをチェックするためのスクリプト群
(verifymsg で使用)
- verifymsg
- 下記ファイルの情報を書きこんだ veryfymsg (CVSROOT 以下にあるオリジナルの veryfymsg を上書きする)
- msgchecker.pl
(地球流体電脳倶楽部 -- CVS に関するメモ -- commit メッセージを euc のみに より取得)
- コミットメッセージをチェックするスクリプト
- verifymsg
- コミット後に Hiki データベースの更新やメールを送信するための
スクリプト群
(verifymsg で使用)
- loginfo
- 下記ファイルの情報を書きこんだ loginfo (CVSROOT 以下にあるオリジナルの loginfo を上書きする)
- cvsform.pl
(地球流体電脳倶楽部 -- CVS に関するメモ -- commit をメール通知する設定 より取得)
- コミットログの送信メールを整形するスクリプト
- html2cgiform.rb
- CGI から受け取った HTML ファイルから CGI に渡す情報を 抽出するためのスクリプト
- hikidb_update.sh
- オフラインで CGI スクリプトを呼び出し, Hiki ディレクトリ内で CVS の更新と Hiki データベースの更新を行う.
- loginfo
これらのファイルをダウンロードする. コミットはまだ行わない.
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サーバ構築ドキュメント へ戻る]
Keyword(s):
References:[[ITPASS2011]2011年度サーバ構築ログ]