Ubuntu 24.04 で Subclipse + JavaHL による SVN操作を有効化する方法
↓ の物語に、もし続きがあるとしたら、僕はきっとこの選択を後悔するだろう。
これは、「Mac で JavaHL をビルドできたのだから、Ubuntu24.04 でも同じように環境を構築できるのでは?」と軽い気持ちで試した記録である。
環境
- Ubuntu 24.04
- 配布されている GUI 付きの ISO イメージを使ってインストールした直後を想定
- Ubuntu24.10 on MBP2014 環境でもビルドが通った。
- Eclipse 2024-09
- 2024-12 版は Gradle プラグインのアップデートが追いついておらず、すごい微妙だったので消し去った。
- Eclipse の普及率を考えると、定期アップデートして存在感を示すことは大事かもしれないが、プラグイン周りをないがしろにしてまで無理にバージョンアップしなくてよくね?
- Subclipse (スナップショット版)
- JavaHL の SVN 最新向けオプションを有効にすること。忘れてしまったり、違う JavaHL のバージョンを入れてしまうと、「違うよ?」ってエラーを返してくる。
- Subversion V1.14.5 LTS
- 執筆時点の最新。
免責事項
手順上で subversion をビルドするが、そのビルド環境や実装についての詳細を存じていない(ちゃんと細かく README やソースコード読みこんでいない)。あくまで手元でビルドが通って SVN が正常動作したパターンの記録である。
もし、必要なライブラリの記述が足りてないとか、全く違う引数を求められる場合があったら、適宜読み替えること。
作業
主に必要となるライブラリ
- make, gcc, zlib, apr, apr-util, serf
- svn をビルドするにあたり、最低限必要になる。
- sqlite3.8
- Ubuntu24.04 においては、V3.8なんて古すぎて apt やセルフビルドで入れることが困難なバージョンのため、後述する特殊な方法に従う
- g++, Java8
- JavaHL のビルドに必要
- 気になる人は Temurin とかを入れるといいかもしれない。
- bzip2
- svn のソースを解凍するために必要
- [opt.] ruby
- なくてもビルドは通るが、存在確認の対象ではあるっぽい。あるとなんか最適化?されるのかもしれない。
ライブラリとソースの準備
apt で入れられるものは予め入れておく。
#zlib, gcc, g++ bzip2, make, apr, apr-util, java8, libserf-dev,
sudo apt install zlib1g-dev gcc g++ bzip2 make libapr1-dev libaprutil1-dev libserf-dev
# 今回 Java は Temurin 8 を入れる
sudo apt install -y wget apt-transport-https gpg
sudo wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/adoptium.gpg > /dev/null
sudo echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | sudo tee /etc/apt/sources.list.d/adoptium.list
sudo apt update && sudo apt install temurin-8-jdk
cd /usr/local/src
sudo curl -LO https://archive.apache.org/dist/subversion/subversion-1.14.5.tar.bz2
sudo tar -xvjf subversion-1.14.5.tar.bz2
cd subversion-1.14.5
sudo chmod -R 755 .
ここまでやって環境を整える。
SQLite3の準備
まず、何も考えず、以下のコマンドを実行する。
./configure --prefix=/usr/local --enable-javahl --enable-optimize \
--with-jdk=/usr/lib/jvm/temurin-8-jdk-amd64 \
--with-lz4=internal --with-utf8proc=internal
すると、実行エラーとなるが、よく見ると以下のような記述が最後に吐かれていることが読み取れる。
checking sqlite library version (via pkg-config)... no
An appropriate version of sqlite could not be found. We recommmend
3.8.11.1, but require at least 3.8.2.
Please either install a newer sqlite on this system
or
get the sqlite 3.8.11.1 amalgamation from:
https://www.sqlite.org/2015/sqlite-amalgamation-3081101.zip
unpack the archive using unzip and rename the resulting
directory to:
/usr/local/src/subversion-1.14.5/sqlite-amalgamation
configure: error: Subversion requires SQLite
つまり、「SQlite3.8をもってこい。なければ『amalgamation』ってやつを指定の場所に配置しろ」とのことで、それに従って、再度実行する。
# パーミッションめんどくさいので root 取って作業してもいいかも
sudo curl -LO https://www.sqlite.org/2015/sqlite-amalgamation-3081101.zip
sudo unzip sqlite-amalgamation-3081101.zip
sudo mv sqlite-amalgamation-3081101 sqlite-amalgamation
./configure --prefix=/usr/local --enable-javahl --enable-optimize \
--with-jdk=/usr/lib/jvm/temurin-8-jdk-amd64 \
--with-lz4=internal --with-utf8proc=internal
make
sudo make install
make javahl
sudo make install-javahl
sudo ldconfig # キャッシュ更新を行わないと、svnが正常動作しないことがある. 注意.
svn --version
#svn, version 1.14.5 (r1922182)
# compiled ${ビルド日時!}
ビルド中、ポロポロwarningが出るけど、止まらなければOK!(見てみぬふり!!)
svnの実行時、ビルドした日になってれば成功.
Eclipse に Subclipse を入れて JavaHL を通す
ビルドさえ正しく通っていれば、あとはウィニングラン。
手順は割愛。
SVNのユーザー・パスワードは、KeyRingに覚えさせると良い。
下手にEclipse側に委ねようとするとバグ?かなんかで、1操作ごとにパスワード聞かれる。
[opt.] Eclipse に JavaHL を通す
/usr/local/lib/ に入っているのに、参照の対象になっていない場合がある。
その時は、Eclipseの起動時設定に以下を与えてパスを通すこと。
- eclipse.ini
-Djava.library.path=usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib:/usr/local/lib
終わりに
Ubuntu 24.10 on MBP に電源ケーブル繋がずバッテリーだけでビルド実行したら、90%あったのがみるみるうちに消耗し始めて、ファンがフルパワーで回りだして、数分後、終わったころには50%下回ってゲラゲラ笑ってしまった。
Discussion