Subclipseのsvn+ssh利用時のポート番号について
なんかSubclipseでsvn+sshを利用するとき、ポート番号を指定しても意味がないというか反映されていないようなので報告メモ
Subclipseでポート番号を指定してみる
Subclipseでsvn+sshを利用するときに、ポート番号(port)を
svn+ssh://username@hostname:port/repos/myreposのようにして、ポート番号の指定をしてみました。ただ、そのポート番号の様子がおかしい。
ポート番号にどんな番号を指定しても、常にSSHのデフォルトである22番ポートを使っているような気がしてきたので、Wiresharkで調べてみると、確かにどんな番号を指定しても22番ポートを利用しています。なので、
svn+ssh://username@hostname:10000000000/repos/myreposなんていう無茶な設定から
svn+ssh://username@hostname:99/repos/myreposなんていう微妙な設定まで、どう設定しようと22番ポートを利用しているようなのです。
Subclipseのソースコードをちょっと読んでみた
Subclipse自体のソースコードをチェックしてみたところ、URLのパース自体はちゃんとやっているみたい。ただ、それ以上どのタイミングでポート番号を指定して利用しているかがちょとすぐには見つからないのではっきりしません。すいません。
ポート指定方法はあるけれど
Subclipseの設定ファイルを利用して、ポート番号を指定することは確かにできるみたいなのですが、レポジトリごとの設定ができない模様。不便すぎる。
まさか
実は上記のポート番号の指定方法が間違っているのかもしれないんですけど、とりあえず、適当に入力しても何のエラーにもならないのは問題かと。とりあえず、もうちょっと調べてみようかな。
svnコマンドをSubclipseで実行しチェックアウトする
オープンソースソフトウェアは、ソースコードのダウンロード方法として、コマンドラインだけ提示されていることがあります。今回は、そういう場合にコマンドラインを使わず、Subclipseを利用してソースコードをダウンロードしてみます。
SubclipseをSubclipseでチェックアウトしよう
EclipseプラグインSubclipseのソースコードを、まさにそれ自体であるSubclipseでチェックアウトしてみます。
コマンドラインによるチェックアウト方法は書いてある
Subclipseの公式ページには、ソースコードをチェックアウトする方法として、
svn checkout http://subclipse.tigris.org/svn/subclipse/trunk subclipse --username guestというコマンドが提示されています。これは、コマンドラインを利用する場合の方法です。このコマンドによって、guestユーザの権限で、subclipseというディレクトリにtrunkフォルダ内のソースコードがチェックアウトされます。
ただ、Subclipseに直接このようなコマンドを入力することはできません。また、Subclipseに限らず、このようにコマンドラインでのチェックアウト方法だけが書いてあることは多々あります。
Subclipseでチェックアウトする
まず、パッケージエクスプローラ(Package Explorer)上の何もないところで右クリックをして、「Import...(インポート)」を選択しますEclipseを日本語化していないので、日本語表記は怪しいです。日本語化している人の方が少数派ですよね。。。
続いて、表示された選択肢の中から、「SVN>SVNからプロジェクトをチェックアウト」を選択し、「Next>」をクリックします。
ロケーションの選択/生成画面が表示されたら、「新規レポジトリー・ロケーションを生成」を選択して「Next>」をクリックします。
次は、ロケーションを求められます。ここでは、ロケーションとして、
svn://[email protected]/svn/subclipse/trunkなんかに勝手にしないことです。なんとなく、「subversionだから、svn://とかあったよな」という考えでこのようにしてはいけません。なぜなら、svn://は、svnサーバが提供されている場合しか使えず、あくまでhttp://でアクセスしろと言うことなので、余計なことはしてはいけないからです。じゃぁ、どうすればいいかというと、ここは普通に
http://subclipse.tigris.org/svn/subclipse/trunkと入力してください。入力後、「Next>」をクリックします。
続いて、「ユーザ名とパスワードの入力」画面が表示されるので、
ユーザ名:guestとします。パスワードを保存しても何も困らないので、「パスワードを保存する」にチェックを入れておくといいかもしれません。入力後、「OK」です。
パスワード:<何も入力しない!>
すると、以下のようにチェックアウトするフォルダの候補がずらっと表示されます。
subclipseここで、チェックアウトしたいプロジェクトのフォルダを選択して「Next>」です。普通は「subclipse」ですね。
subclipse_mylyn
subclipse_mylyn3
svnClientAdapter
svnant
www
すると、「チェックアウトの方法とリビジョンの選択」画面が表示されます。
フォルダ subclipse をチェックアウトする方法を選択してくださいでは、「プロジェクトとしてワークスペースへチェックアウト」が選べる場合は選んでしまった方が楽です。 また、
- 新規プロジェクトウィザードを使ってプロジェクトとしてチェックアウト
- プロジェクトとしてワークスペースへチェックアウト
Check out HEAD revisionにチェックを入れることで、最新版がチェックアウトされます。通常、チェックを入れたままにしましょう。
残りのオプションですが、「Depth」は、「Fully recursive」を選択してください。Fully recursive以外だと、すべてのファイルがチェックアウトされません。また、「Ignore externals」にチェックを入れると、外部参照を無視してしまいます。普通はチェックを入れてください。「Allow unversioned obstructions」にチェックを入れないと、ローカルフォルダにたまたまあったバージョン管理されていないファイルと衝突した場合、チェックアウトがキャンセルされます。これはそのままでいいと思います。 以上の入力が完了したら「Next>」。
最後に「プロジェクトのロケーション選択」画面が表示されるので、必要に応じてワークスペースを選択してください。選択したら、いよいよ「Finish」です。
Javaプロジェクトとしてチェックアウトしたい
Javaプロジェクトとしてチェックアウトしたい場合など、プロジェクトのタイプを指定したい場合は、
フォルダ subclipse をチェックアウトする方法を選択してくださいで「新規プロジェクトウィザードを使ってプロジェクトとしてチェックアウト」を選択してください。直後の画面で、「Java>Java Project」を選択してください。ほかにもいろいろありますが、適切なものを選択してくださいここでまた「SVN>SVNからプロジェクトをチェックアウト」にしてしまうと、無限ループが始まってしまうので注意
- 新規プロジェクトウィザードを使ってプロジェクトとしてチェックアウト
- プロジェクトとしてワークスペースへチェックアウト
ちなみに、Subclipseをチェックアウトするなら「Plug-in Project」でいいんでしょうかね。
おわり
以上でチェックアウト終了です。
追記:Subclipseをチェックアウトするとき
チェックアウトをプロジェクトごとに行うなら、「/trunk/subclipse」ではなく一つ深い階層のたとえば「/trunk/subclipse/org.tigris.subversion.subclipse.core」を選択して「プロジェクトとしてワークスペースへチェックアウト」をチェックしてチェックアウトしてください。すると、.projectファイルがあるので、正しくチェックアウトできます。
Eclipseでsvn+sshを行う方法メモ2 エラー対策編
前掲の記事「Eclipseでsvn+sshを行う方法(Putty+Subclipse@Windows)メモ」の実行中に発生するかもしれないエラーについて、その現象と対策をメモしておきます。
対象環境
前回より詳しく私の利用している環境を記しておきます。
サーバ OS:Cent OS 5.3 (Final) 64bit カーネル:Linux 2.6.18-128.el5 CPU:x86_64 クライアントPC OS:Windows Vista Ultimate SP2 32bit Eclipse: Eclipse Java EE IDE for Web Developers. Build id: 20090920-1017 (英語) Subclipse: Subclipse 1.6.5 PuTTY: PuTTY Release 0.60-JP_Y-2007-08-06
エラーとその対策法
以下、Eclipseでロケーションを作成しようとして発生したエラーと、その原因について紹介します。
Permission denied エラー
Error while creating module: org.tigris.subversion.javahl.ClientException: Permission denied.というエラーが発生した場合、レポジトリのパーミッションの設定がおかしなことになっている可能性があります。普通にSSHサーバにログインして、レポジトリのあるフォルダに書き込みができるかどうか確認してください。
svn: ディレクトリ '/repos/myrepos/db/transactions/0-1.txn' を作成できません: 許可がありません
Network connection closed unexpectedly エラー
plink.exeのコマンドプロンプト画面(黒い画面)が一定時間表示された後、
検証不能と表示される場合、ホスト名が間違っている可能性が高いです。確認してください。
ロケーションの検証中にエラー: "org.tigris.subversion.javahl.ClientException: Network connection closed unexpectedly
Couldn't find a repository エラー
plink.exeのコマンドプロンプト画面(黒い画面)が短く表示された後、
検証不能と表示される場合、レポジトリのURL(hostname以降)がレポジトリの位置を正しく指定できていない可能性があります。hostname以降は、サーバ内部での絶対パスで指定します。homeディレクトリからなどではありません。確認してみてください。前回の記事であげた例(/repos/myrepos)も参考にしてください。
ロケーションの検証中にエラー: "org.tigris.subversion.javahl.ClientException: Couldn't find a repository
黒い画面のまま固まるエラー
plink.exeのコマンドプロンプト画面(黒い画面)が表示されっぱなしになり、一切画面が変化しなくなってしまう状態になった場合、接続先サーバ側の鍵がレジストリにキャッシュされていない可能性があります。一度putty.exeで接続先サーバにSSH接続を行い、サーバ側の鍵を保存するかどうかと言う質問に対して「はい」と答えてください。そうすることで、サーバ側の鍵のキャッシュが保存されます。
最後に
ありがちなエラーをまとめてみましたが、基本は、それぞれの機能(SSH, Subversion, ...)を一つ一つまずは確認することです。どこが原因になっているかをうまく絞ってみてください。
Eclipseでsvn+sshを行う方法(Putty+Subclipse@Windows)メモ
Eclipseでsvn+ssh(SSH接続を介したSubversionの利用)を行う方法について、おおざっぱなメモをしておきます
対象環境
今回の対象環境は、Windowsで、Eclipseを使用します。Eclipse用SubversionプラグインとしてSubclipseを利用し、Windows用SSHクライアントとしてPuttyを利用します。
手順概要
-
環境変数(ユーザ環境変数)に、変数SVN_SSHを追加して、値をPuttyに含まれるプログラムplink.exeへのフルパスにする。このとき、フォルダの区切りは"\"ではなく、"/"(スラッシュ)を利用すること。以下、例を示す。
変数:SVN_SSH
値:D:/putty/plink.exe -
putty.exeでいったんサーバにSSH経由でログインを試みる。初回ログイン時、
--------------------------- PuTTY セキュリティ警告 --------------------------- このサーバの鍵はレジストリにキャッシュされていません。 このサーバがあなたの期待するコンピューターである という保証はありません。 このサーバのrsa2鍵の指紋は次の通りです: ssh-rsa 2048 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 このホストを信用するのであれば、「はい」を押して PuTTYのキャッシュに鍵を追加し接続してください。 キャッシュには追加せずに一度だけ接続したいので あれば、「いいえ」を押してください。 このホストを信用しないのであれば、「キャンセル」 を押して接続を破棄してください。 --------------------------- はい(Y) いいえ(N) キャンセル ヘルプ ---------------------------
-
subversionレポジトリをサーバで作成しておく。/reposディレクトリにレポジトリを作成し、SSHログインするユーザ名をusername、レポジトリへのアクセスを許可するユーザグループをsvnusersとする場合、コマンドは
■usernameをsvnusersグループへ #groupadd svnusers #/usr/sbin/usermod -G svnusers username ■レポジトリ作成 #mkdir /repos #svnadmin create /repos/myrepos ■パーミッション設定 #chmod -R 775 /repos/myrepos #chown -R root:svnusers /repos/myrepos
- EclipseにSubclipseをインストール
-
「ウィンドウ>設定>チーム>SVN」のSVNインターフェースで、JavaHLが選択されていることを確認。SVNKit(Pure Java)などになっていた場合は、JavaHLに変更する。
-
puttyに含まれるpagent.exeを起動し、タスクトレイのアイコン右クリックから「鍵の追加」からPutty用秘密鍵ファイル(*.ppk)を登録し、要求されたパスフレーズを入力。
-
レポジトリをEclipseに登録する。具体的には、いくつか方法があり、
- ファイル>インポート>Select an import source>SVN>SVNからプロジェクトをチェックアウト
- プロジェクトを右クリック>チーム>Share Project...>SVN
- レポジトリエクスプローラで右クリック>新規>レポジトリロケーション
svn+ssh//username@hostname/repos/myrepos
となります。URL指定後、うまく読み込むことができれば、Subclipse+Puttyを利用したsvn+ssh環境の構築は成功したことになります。URLに関する参考資料「svn+ssh://の後に続くパスについて」
以上で、おおざっぱですが手順終了です。
-
参考URLまとめ
-
Eclipse 3.2 で SVN を利用する(SVN+SSH & SourceForge.jp)
SourceForge.jpへのアクセスを前提とした手順。一番参考にさせていただきました。 -
CentOS で svn+ssh 環境の構築
subversionレポジトリのパーミッション設定について - CentOS に Subversion を導入する
- SSHサーバー構築(OpenSSH)
-
Subversionのリポジトリをsvn+sshで管理する
おおまかな手順 - Subversionのsvn接続とsvn+ssh接続を比較する
-
システム管理/ユーザーをグループに追加する
グループにユーザを登録(追加)する方法 - バージョン管理システム構築(Subversion)
-
svn+ssh
レポジトリのURL表記について
DynamicDNSなしに自宅サーバにアクセスする
ダイナミックDNSなしに自宅サーバにアクセスするためには、自宅のIPアドレスさえ分かればいいのですが、家のPCでGmailの画面をブラウザで表示させておくと、外出先でGmailにログインしたとき、Gmailの画面の最下部に
他1カ所からこのアカウントへのアクセスがあります (IP xxx.xxx.xxx.xxx)。と表示され、自宅のIPアドレスが分かります。そのIPアドレスを使えばいいわけです。
そんなこと分かっても仕方ないんですけど、DDNSがこけて困ったときに、たまたま自宅のPCでGmailが表示されっぱなしになっていれば・・・とかそんなときに使える・・・かもしれません。