パスワードを忘れた? アカウント作成
402187 journal

yk700101の日記: OpenMicroServer - sarge - cvs (ssh, WinCvs)

日記 by yk700101
○概要
    OpenMicroServer + Debian GNU/Linux 3.1(sarge)に
    cvs (および ssh)をインストールしたときのメモ。
    (クライアントからの動作確認は
            Windows XP にインストールした WinCvs を使用。)

○前提
    1. OpenMicroServer + Debian GNU/Linux 3.1(sarge) に
          courier-pop と courier-imapd を インストールした後の環境を使用。

○目的
    1. cvs を使ったファイル履歴管理の評価環境を構築する。

○cvs のインストール
    apt-get install cvs

        Where are your repositories?
            (ここでリポジトリを指定して作成すると、
                    /etc/cvs-cron.conf に登録される。
                    pserver を使用する場合は、
                    cron で /etc/cron.weekly/cvs に従って処理が行われる模様。
              )
            → /srv/data1/CVSRepository/initial

        Do you wish to fix invalid repositories?
            → create

        Should the CVS pserver be enabled?
            (インターネット上に公開するわけではないので
                pserver で十分な気がするが、
                とりあえず pserver を使わずにやってみる。
            )
            → No

    #確認
    cvs -v

○ssh のインストール
    apt-get install ssh

        Allow SSH protocol 2 only
            → Yes

        Do you want /usr/lib/ssh-keysign to be installed SUID root?
            (ホストベース認証を行うときは必要らしい。
                今回は 多分必要ない。
            )
            → No

        Do you want to run the sshd server?
            → Yes

    #確認
    ps -C sshd

    #設定の確認
    cat /etc/ssh/sshd_config

    # root でログオンできるようになっていたり、
    # パスワード認証が有効になっていたりすると、
    # あまり良くないらしい。
    # さらに、 ssh でログオンできるユーザを特定(指定)したいものだが、
    # 今回は気にしない。

○cvs 用ユーザの追加
    export testusername=myuser

    #(src グループに所属する必要あり。)
    useradd -G src -m ${testusername}

    passwd ${testusername}

        Enter new UNIX password:
            → パスワードを入力する。

        Retype new UNIX password:
            → 同じパスワードを入力する。

○リポジトリ作成(テスト用)
    su - ${testusername}

    export repository=/srv/data1/CVSRepository/test
    export projectname=testproject
    export testfilename=testfile.txt

    #リポジトリ作成
    cvs -d ${repository} init

○インポート
    export tempdir=temp

    #一時ディレクトリを作成して、
    # ファイルを格納し、リポジトリに登録する。

    mkdir ${tempdir}
    cd ${tempdir}
    echo '1' > ${testfilename}

    cvs -d ${repository} \
        import \
            -m 'for test' \
                ${projectname} 'test-vendor' 'test-release'

    #一時ディレクトリの削除
    cd ..
    rm -r ${tempdir}

○チェックアウト
    cvs -d ${repository} \
        checkout ${projectname}

○ファイルの更新
    cd ${projectname}

    #変更前の状態の確認
    cvs log
    cvs status
    cvs update
    cat ${testfilename}

    #変更
    echo '2' >> ${testfilename}

    #変更後の状態の確認
    cvs log
    cvs status
    cvs update
    cat ${testfilename}

    #変更点の確認
    cvs diff
    cvs diff -c
    cvs diff --side-by-side

    #変更点のコミット
    cvs commit -m 'test change'

    #コミットの確認
    cvs log
    cvs status
    cvs update

○ファイルの追加
    export testfilename2=testfile2.txt
    echo 'a' > ${testfilename2}

    #追加前の状態の確認
    cvs log ${testfilename2}
    cvs status ${testfilename2}
    cvs update

    #追加
    cvs add ${testfilename2}

    #コミット前の状態の確認
    cvs log ${testfilename2}
    cvs status ${testfilename2}
    cvs update

    #コミット
    cvs commit -m 'test add' ${testfilename2}

    #コミット後の状態の確認
    cvs log ${testfilename2}
    cvs status ${testfilename2}
    cvs update

○ファイルの削除
    #(注:削除取り消しは、cvs add で行う。)
    cvs remove -f ${testfilename2}

    #コミット前の状態の確認
    cvs log ${testfilename2}
    cvs status ${testfilename2}
    cvs update

    #コミット
    cvs commit -m 'test remove' ${testfilename2}

    #コミット後の状態の確認
    cvs log ${testfilename2}
    cvs status ${testfilename2}
    cvs update

○サンドボックスの削除
    cd

    cvs -d ${repository} release -d ${projectname}

        Are you sure you want to release (and delete) directory
            → y

○ssh 経由での操作
    export repository_ext=:ext:${testusername}@OMS${repository}

    #--------------------
    # 公開鍵認証の準備
    #--------------------
    #鍵ペアの作成
    ssh-keygen -t rsa

        Enter file in which to save the key (/home/myuser/.ssh/id_rsa):
            → (Return)

        Enter passphrase (empty for no passphrase):
            → パスフレーズを入力する。

        Enter same passphrase again:
            → 同じパスフレーズを入力する。

    #作成した公開鍵のファイルを元に
    # 認証済み公開キーを格納するファイルを作成する。
    cp .ssh/id_rsa.pub .ssh/authorized_keys

    #ssh を通じた操作を
    # 初回のパスフレーズのみの入力で済ませるために、
    # ssh-agent を起動する。
    eval `ssh-agent`

    #秘密鍵を読み込む
    ssh-add

        Enter passphrase for /home/myuser/.ssh/id_rsa:
            → パスフレーズを入力する。

    #--------------------
    # ssh 経由での操作
    #--------------------
    #チェックアウト
    cvs -d ${repository_ext} \
        checkout ${projectname}

        Are you sure you want to continue connecting (yes/no)?
            → yes

    #サンドボックスの削除
    cvs -d ${repository_ext} release -d ${projectname}

    cvs -d ${repository_ext} \
        checkout ${projectname}

        Are you sure you want to release (and delete) directory
            → y

○WinCvs(2.0.2.4) から ssh 経由での操作
    (注:
            試用中。
            ASCII なら大丈夫だと思われるが、
            日本語が使えるものかどうか良く分からない。
      )

    以下のサイトから WinCvs をダウンロード。

        ・CvsGui
            http://www.wincvs.org/index.html

    SSH 関連のドキュメントは古い模様で、
    設定画面などが WinCvs 2.0.2.4 と異なっているので、
    あまり参考にならなかった。

    リポジトリに

        :ext:myuser@OMS:/srv/data1/CVSRepository/test

    を指定してチェックアウトを実行すると、
    以下のエラーメッセージが出力される。

        cvs diff: warning: unrecognized response `'ssh' は、内部コマンドまたは外部コマンド、
        ' from cvs server
        cvs diff: warning: unrecognized response `操作可能なプログラムまたはバッチ ファイルとして認識されていません。
        ' from cvs server
        cvs [diff aborted]: end of file from server (consult above messages if any)

    Windows 用の ssh 関連コマンドを得るために
    以下のサイトから、

        ・PuTTY: a free telnet/ssh client
            http://www.chiark.greenend.org.uk/~sgtatham/putty/

    以下のファイル(Version 0.58)をダウンロードし、
        C:\yk_prog\Putty
    に格納する。

        plink.exe
            → ssh コマンド本体(?)

        pageant.exe
            → 秘密鍵を使用する際のパスフレーズの入力を
                    最初の1回のみにするためのもの。

        puttygen.exe
            → putty のツールで使用するフォーマットの
                    秘密鍵と公開鍵を作成するためのもの。

    ssh コマンドの場所を設定する画面が見つからなかったので、
    環境変数
        CVS_RSH
    に plink.exe のフルパス
        C:\yk_prog\Putty\plink.exe
    を指定する。

    WinCvs を再起動後、
    再度 チェックアウトを実行すると、
    以下のエラーメッセージが出力され続ける。

        cvs update: warning: unrecognized response `Password:
        ' from cvs server

    パスワードを入力しなくても
    ssh を実行できるようにする必要があるようなので、
    まず、パスワード認証の代わりに公開鍵認証で認証を行うようにする。

    puttygen.exe を実行して、秘密鍵と公開鍵を作成する。
    (マウスをぐるぐる回すと、早く処理が終わる模様。)

    作成が完了したら、パスフレーズを入力し、
    秘密鍵を test.ppk として保存する。

    画面上に、OpenSSH 用のフォーマットの公開鍵(鍵の値は同じ)
    が表示されているので、
    これをすべてコピーし、

    myuser@OMS の
        ~/.ssh/authorized_keys
    に貼り付ける。
    (最終行に追加する。)

    pageant.exe を test.ppk を引数に指定して実行する。
    (パスフレーズを入力する。)

    再度 チェックアウトを実行すると、処理が成功する。

    ・検討中の事項
        日本語を含むテキストファイル(UTF-8, SJIS, EUC)はバイナリファイルと
        して取り扱われる?
        (警告がでる。)

        でも、テキストファイルとして格納して、
        サーバ側で
            cvs annotate
        を実行すると行ごとの変更が認識されているような気がする。

        日本語のファイル名は、試していない。

        日本語のコメントは SJIS で記録される模様。

    ・参考
        ・PuTTYを使ったCVS利用法
            http://rumble-jp.osdn.jp/putty-howto/putty-doc.html

○テストの後始末

    # myuser から root に戻る。
    exit

    #ユーザの削除
    # 削除できない場合は、
    # 「「ログインしていないユーザを削除できない」トラブル対応」
    # を参照。
    userdel -r myuser

    #リポジトリの削除
    rm -r /srv/data1/CVSRepository/test/

○「ログインしていないユーザを削除できない」トラブル対応
    ・現象
        削除対象のユーザがログインしていないにもかかわらず、
        以下のコマンドを実行すると、
            userdel -r myuser
        以下のエラーメッセージが出力されて、
            userdel: user myuser is currently logged in
        ユーザを削除できない。

    ・再現手順
        1.
                logon myuser
            を実行する。
        2.
                exit
            または、
                logout
            を実行する。

        3.
                users
            または、
                who
            を実行すると、
                myuser
            が出力される。

    ・原因
                /var/run/utmp
            になぜかユーザ情報が残ってしまうのが原因の模様。
            (ユーザ情報が残ってしまう根本的な原因については、
                    調査をあきらめた。)

    ・対処
            login root
        または、
            ssh root@localhost
        して
            exit
        すれば、
            myuser
        の情報は消去され、代わりに
            root
        の情報が残る。

        (
            login で残った場合は login、
            ssh で残った場合は ssh
            を別のユーザで実行すればいい模様。
            恐らく、telnet などでも同様と思われる。
        )

    ・参考
        ・[debian-users:34325] ログオフ したユーザが残る
            http://lists.debian.or.jp/debian-users/200209/msg00002.html
                → 解決していない模様。

        ・ローカルのドキュメント
            man utmp

        ・ソースコード
            coreutils, passwd, libc6

○参考
    ・ローカルのドキュメント
        /usr/share/doc/cvs/README.Debian
        /usr/share/doc/cvs/contrib/README.gz

○更新履歴
        2006/05/18 作成

以上。
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

アレゲは一日にしてならず -- アレゲ研究家

読み込み中...