[2001/6/4] CVS は分散したメンバーでプログラム開発するのに便利な、バージョン管理ツールです。 この CVS に knjwrp という日本語パッチを当てて使おうという話です。 ここでの日本語とは、ファイルの中身の日本語コードの話であって、 日本語ファイル名の面倒を見るわけではありません。
[2003/1/22] Winクライアントで漢字コード変換を行う CVS の euc / sjis 相互変換 を発見しました。こちらのアプローチのほうが適切と思います。knjwrp 概要
CVS クライアントに Unix 系と MS-Win が混じると、 登録ファイルの改行コードの違いはオリジナルの CVS が吸収してくれるからよいとしても、 漢字コードは EUC と SJIS で使い分けたくなります。
knjwrp を使うと、Unix 系サーバーで EUC に固定、 クライアントは EUC と SJIS を選択できるようになります (正確には、クライアントごとではなく、ユーザーアカウントごとに選択します)。 サーバー、クライアント共にパッチが必要です。
knjwrp は加藤裕史さんの WinCVS / cvs knjwrp ダウンロードなページ で配布してらっしゃいます。
knjwrp では漢字コードの変換はサーバー側で受け持つことになります。 もしもクライアント側で漢字コードの変換をすれば、 サーバーでは何も気にする必要がなさそうに思えるのですが、 おそらくサーバー側の wrapper 機能が利用できて実装しやすかったからでしょう、 このようになっています。 ところがこの wrapper 機能は、本家からは cvs-1.9.28 以降、 動作不安定として無効にされてしまってます。
knjwrp はこの無効にされた wrapper を有効にした上で、 若干の機能追加を行い、 漢字コード変換スクリプトを併用することで上記を実現しているようです。 危険を承知のうえで使う必要があるというわけです。
knjwrp 適用済みバイナリの入手
Unix 側クライアント+サーバーに必要なのは、 cvs-1.10.8.tar.gz と knjwrp20001107.gz です。 VineLinux2.1.5 の cvs-1.10.8-0vl3 には Vine 独自?のパッチが追加されているため、 公開されている knjwrp20001107.gz そのままは使えません。 また、その後 [cvs-ml 1109] で山田 聡さんによるパッチがあるのですが、まだ取り込まれてないようです。
そこで、山田さんのパッチを取りこんだものと、 さらに VineLinux2.1 用に修正したものを公開します。 (あつかましくも、同じ名前のバージョン違いにさせていただきました。)
[2003/1/22] 注意!この RPM には、いくつかセキュリティーホールが発見されています。 もう私は使っていないので、いつ更新できるかわかりません。 CVSサーバーはオリジナルのままで、Winクライアントを改造する方法 CVS の euc / sjis 相互変換 も検討してみて下さい。
knjwrp20001107.gz + [cvs-ml 1109] パッチVine2.x 用 RPM
knjwrp20010224.gz
knjwrp20010224-zlib.gz
(Vine 用)Vine2.x 用 RPM(せっかく作ったので公開しますが、knjwrp にはもう不要です。)
cvs.spec
cvs-1.10.8-0vl3knjwrp20010224.i386.rpm(1Mbyte)
cvs-1.10.8-0vl3knjwrp20010224.src.rpm(2.3Mbyte)
Windows 側クライアントに必要なのは次の2つです。 コマンドライン CVS も入っているようです。
- WinCvs11b17.zip
- WinCVS / cvs knjwrp ダウンロードなページ の WinCvs11b15_sjis_knjwrp20001107.lzh (735Kbyte) .. patch 済 binary. Win32 cvs.exe 付
サーバーの設定
Unix 系で立てる CVS サーバーのタイプにいくつかあるようなのですが、 私の把握しているのは pserver(password server)だけです。
pserver では、サーバー上にユーザーアカウントがない人でも、 アカウントのある別ユーザ(実効ユーザー) に代理でファイル操作をしてもらうように設定できますが、 wrapper の設定のためには、サーバー上にホームディレクトリを持つ必要があるので、 最低 EUC 用と SJIS 用の2つのユーザーアカウントを用意することになります。
Vine Linux 2.1.5 で行ったサーバー側の設定です。
"-f"
オプションが重要で、 ユーザーのホームディレクトリを参照するようになります。 これがないと /root を見に行ってエラーになってしまいます。 追記後に'/etc/rc.d/init.d/inet restart'
を実行します。 [cvs-ml 1026] を参考にしました。
"/etc/inetd.conf"
に追記 cvspserver stream tcp nowait root /usr/bin/env env /usr/bin/cvs -f --allow-root=/home/cvs pserver
knjwrp に付属の README.jp には ack という漢字コードコンバータが必要なように書いてありますが、 最近の nkf だけで事足ります。 みかままさんの「入門CVS下書き」 第5章 CVSコマンドの少し賢い使い方 に紹介してらっしゃいますスクリプトを、ここに引用させていただきます。 上記 RPM にも含めています。
wrapnkf2.sh
#!/bin/sh # # wrappper nkf filter for cvs-server/windows-clients 2 # # Usage: wrapnkf2.sh kanji_code infile [outfile] # NKF=/usr/bin/nkf # Line Terminator: CR/LF->LF(-Lu), LF->CR/LF(-Lw): No use # Kanji Code: SJIS(-s), EUC(-e) including hankaku->zenkaku TR=/usr/bin/tr # Cntl-Z=\032(0x1a) opt=$1 infile=$2 outfile=$3 if [ ${opt} = "-e" ]; then ${NKF} -eLu ${infile} | ${TR} -d '\032' > /tmp/unkf-cvs$$ mv -f /tmp/unkf-cvs$$ ${outfile} elif [ ${opt} = "-s" ]; then ${NKF} -s ${infile} > /tmp/wnkf-cvs$$ mv -f /tmp/wnkf-cvs$$ ${infile} else echo "Usage: wrapnkf2.sh [-s|-e] infile [outfile]" fiwrapnkf2.sh
この変換スクリプトを使う限り、 サーバー側で持つファイルは EUC 決め打ちのようです。 クライアント側は、何もしなければ当然 EUC ですので、 SJIS のユーザーだけ、サーバー上の ホームディレクトリに次の設定ファイルを作ります。
"$HOME/.cvswrappers"
* -f '/usr/lib/cvs/contrib/wrapnkf2.sh -s %s' -t '/usr/lib/cvs/contrib/wrapnkf2.sh -e %s %s' -s
ここで
'*.* -f ...'
と書くと、 拡張子なしのファイルが EUC になってしまうので注意して下さい。ユーザーアカウントごとに漢字コードを選択するため、 Unix クライアントでも SJIS を選択できるという利点(?)があるものの、 Win/Unix の両方の環境で CVS を使おうとすると、 1人でも2つのユーザーアカウントを用意するしかないようです。
これ以外の CVS の設定については、奥村さんの バージョン管理システム CVS (バイナリファイルの扱い方の解説もあります)や、西本さんの バージョン管理システム CVS を使う をご覧ください。WinCVS の日本語化については山田さんの がらくた置場 が先進的です。
ホーム
リンクはご自由にどうぞ。 |
土村 展之(tutimura(a)nn.iij4u.or.jp) '(a)'は'@'に置き換えて 更新日 1/22 10:08, 2003 |