IT pass HikiWiki - [Memo2009][ITPASS] tako 構築作業ログ(Hiki 2)(山元, 辻野) Diff

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

{{toc}}
[((<EPAサーバ構築ドキュメント>)) へ戻る]

以下では, /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 --lang ja

  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://itpass.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 コマンド
から作成するため, 下記の ((<[EPA2008b]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 に書き込み/読み込み権限を渡す.

  # chown -R www-data:www-data data
  # chmod -R g+w data
  # 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/conf/httpd.conf の末尾に

<Directory "/home/itpass/public_html/hiki">
      AllowOverride FileInfo AuthConfig Limit Indexes Options=ExecCGI,FollowSymlinks
</Directory>
という記述があるかどうか確認し, なければ付け足す. ここでは確認だけ行う.

== 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 ディレクトリの中の backup 以外のファイルやディレクトリを消す) と良い.

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


== 管理者用パスワードの設定 (CGI による作業)

  https://133.30.109.21/~itpass/hiki

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

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



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

これは, ページ全体の閲覧にパスワード制限を設けるための設定である.
閲覧自体に制限をする際には以下を行う. ここでは, テストページを作成し, そのページに正しく制限がかかるか確認するだけにとどめた.

ここでの設定の前に, 先の操作で admin で Hiki にログインしている場合は, 一度ログアウトをしておくこと.

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

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

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

以下を追加する.

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

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

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

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

  https://133.30.109.21/~itpass/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'

変更後

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


== CVS によるページ管理

((<[EPA2008b]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 の場所は ((<[EPA2008b]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:../epa/hiki_pagesetup/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
  # 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 からの動作チェック

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

へアクセスし, CGI からページの作成や削除, 変更を行ってみる.
「編集履歴」ボタンをクリックし, 過去の編集履歴が残っている
ことを確認する.

= ika から tako に /home/itpass/hiki 以下を rsync する

== 概要

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

== 接続認証設定の確認

以下の項目を確認する.

* ika に /root/.ssh/id_dsa と /root/.ssh/id_dsa.pub のペアが作成されているか
  * 確認した.
* ika の /root/.ssh/id_dsa.pub の中身が tako の /root/.ssh/authorized_keys に記述されているか
  * authorized_keys が存在しなかったため, 作成したうえで記入した.
* tako の /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" の間には空白をいれること
  に注意されたい.
    * 記入した.
* ika の /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 オプションをつけて実行すると, ファイルの転送は行わずして結果が出力される.

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

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

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

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

に変更し, さらに, 以下のコマンドを実行した.

root@ika:~# rsync -n -av --delete -e "ssh /home/itpass/hiki/ 133.30.109.21:/home/itpass/hiki"

このとき, 構築の際に tako の RSA 鍵が更新されているために, ika の known_hosts に記載された tako の RSA 鍵と相違が生じ, 警告が出て ssh が通らない.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
..
Offending key in /root/.ssh/known_hosts:4
..

今回は上記のように警告が出たので, /root/.ssh/known_hosts の 4 行目を削除した.



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