2013年11月3日日曜日

Subverion1.8で作成したリポジトリを1.7用にダウングレードする

JenkinsのSCMポーリングで失敗するため、Subverionを1.8から1.7に入れ替えた。
その際、リポジトリがそのままでは使えなかったため、行った内容をメモしておく。

もっとスマートな方法があるかもしれないが、今回はdumpコマンドを使って行った。

まず、1.8で以下のコマンドを実行して、リポジトリ全体をファイルにダンプする。
# svnadmin dump <リポジトリ> > <ダンプファイル>
次に、1.7で以下のコマンドを実行して、ダンプしたリポジトリを復元する。
# svnadmin create <新しいリポジトリ>
# svnadmin load <新しいリポジトリ> < <ダンプファイル>

JenkinsのSCMポーリングでエラーが出力される

JenkinsでSCMのポーリングを設定したところ、以下のようなエラーが出る。
ERROR: Failed to check repository revision for <リポジトリ>
org.tmatesoft.svn.core.SVNException: svn: E210004: Number is larger than maximum
at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:64)
at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:51)
at org.tmatesoft.svn.core.internal.io.svn.SVNReader.readItem(SVNReader.java:400)
at org.tmatesoft.svn.core.internal.io.svn.SVNReader.readItem(SVNReader.java:456)
at org.tmatesoft.svn.core.internal.io.svn.SVNReader.readItem(SVNReader.java:456)
at org.tmatesoft.svn.core.internal.io.svn.SVNReader.readItem(SVNReader.java:456)
at org.tmatesoft.svn.core.internal.io.svn.SVNReader.readItem(SVNReader.java:456)
at org.tmatesoft.svn.core.internal.io.svn.SVNReader.readTuple(SVNReader.java:288)
at org.tmatesoft.svn.core.internal.io.svn.SVNReader.parse(SVNReader.java:241)
at org.tmatesoft.svn.core.internal.io.svn.SVNConnection.read(SVNConnection.java:272)
at org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryImpl.read(SVNRepositoryImpl.java:1290)
at org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryImpl.info(SVNRepositoryImpl.java:1203)
at org.tmatesoft.svn.core.internal.wc2.remote.SvnRemoteGetInfo.run(SvnRemoteGetInfo.java:65)
at org.tmatesoft.svn.core.internal.wc2.remote.SvnRemoteGetInfo.run(SvnRemoteGetInfo.java:31)
at org.tmatesoft.svn.core.internal.wc2.SvnOperationRunner.run(SvnOperationRunner.java:20)
at org.tmatesoft.svn.core.wc2.SvnOperationFactory.run(SvnOperationFactory.java:1235)
at org.tmatesoft.svn.core.wc2.SvnOperation.run(SvnOperation.java:291)
at org.tmatesoft.svn.core.wc.SVNWCClient.doInfo(SVNWCClient.java:2461)
at hudson.scm.SubversionSCM.parseSvnInfo(SubversionSCM.java:1122)
at hudson.scm.CompareAgainstBaselineCallable.call(CompareAgainstBaselineCallable.java:71)
at hudson.scm.CompareAgainstBaselineCallable.call(CompareAgainstBaselineCallable.java:26)
at hudson.remoting.LocalChannel.call(LocalChannel.java:45)
at hudson.scm.SubversionSCM.compareRemoteRevisionWith(SubversionSCM.java:1278)
at hudson.scm.SCM._compareRemoteRevisionWith(SCM.java:356)
at hudson.scm.SCM.poll(SCM.java:373)
at hudson.model.AbstractProject._poll(AbstractProject.java:1548)
at hudson.model.AbstractProject.poll(AbstractProject.java:1473)
at hudson.triggers.SCMTrigger$Runner.runPolling(SCMTrigger.java:439)
at hudson.triggers.SCMTrigger$Runner.run(SCMTrigger.java:468)
at hudson.util.SequentialExecutionQueue$QueueEntry.run(SequentialExecutionQueue.java:118)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:679)
Caused by: svn: E210004: Number is larger than maximum
at org.tmatesoft.svn.core.SVNErrorMessage.create(SVNErrorMessage.java:208)
at org.tmatesoft.svn.core.SVNErrorMessage.create(SVNErrorMessage.java:154)
at org.tmatesoft.svn.core.SVNErrorMessage.create(SVNErrorMessage.java:97)
at org.tmatesoft.svn.core.internal.io.svn.SVNReader.readItem(SVNReader.java:399)
... 33 more
Done. Took 1 sec
No changes
以下のサイトに同様の現象が報告されていた。
https://issues.jenkins-ci.org/browse/JENKINS-18844

どうもSubversion 1.8を使っていることが関連しているらしい。
現状は1.8を使わなければいけない理由はないため、1.7にダウングレードしてみる。

その結果、正常にポーリングができた。
Subversionのポーリングログ
Started on Nov 3, 2013 8:31:46 PM
Received SCM poll call on  for MediaCollect on Nov 3, 2013 8:31:46 PM
<リポジトリ> is at revision 14
Done. Took 0.2 sec
No changes

Tera Termから公開鍵を使ってパスワード入力なしでSSHログインする

Tera TermはVer.4.79を使用した。

まずは、秘密鍵と公開鍵を作成する。
Tera Termのメニューから「設定」->「SSH鍵生成」を選択。
設定はデフォルトの
鍵の種別:RSA
ビット数:2048
で「生成」を選択する。
「公開鍵の保存」と「秘密鍵の保存」でそれぞれ生成した鍵を保存する。
秘密鍵の保存ではパスフレーズなしでよいかと確認が出るのでOKを選択する。

生成した「公開鍵」をログイン先のホストに転送する。
転送したら、.sshフォルダに「authorized_keys」というファイル名で保存する。
以下のパーミッションを変更する。
%chmod 600 .ssh/authorized_keys
Tera Termのメニューから「設定」->「SSH認証」を選択する。
『「RSA/DSA」鍵を使う』の「秘密鍵」を選択肢、さきほど生成した秘密鍵を選択する。
「設定」->「設定の保存」でこれまでの設定を保存する。

あとはTera Termでログインするときにパスフレーズを入力しないでも「OK」を選択すればログインできるようになる。

<補足>
パスワードなしでログインできるようになったら、Tera Termを起動直後にログインしてほしくなる(かも)。
コマンドラインから以下のオプションをつけて起動することでそれが可能になる。
> ttermpro.exe <ログイン先のホスト名> /auth=publickey /keyfile=<生成した秘密鍵>
ショートカットの設定に記載してもOK。

FreeBSDでファイルの文字コードを調べる

「nkf」インストールする。
# pkg_add -r ja-nkf
以下のオプションを指定して実行すると文字コードを確認できる。
% nkf -g <ファイル名>
以下のオプションを指定すると文字コードと改行コードを確認できる。
% nkf --guess <ファイル名> 
参考サイト
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/980nkfguess.html

補足
ファイルの文字コードを上書きでUTF-8(BOMなし)に変更する。
% nkf -w --overwrite <ファイル>

Vim Tips

Vimのスクリプトを実行する
:source <スクリプト名>