OpenJ9 で NetBeans 起動を高速化

前回 NetBeans IDE 8.2 に OpenJ9 を利用してみましたが、更に OpenJ9 固有の -Xshareclasses オプションを使うことで起動の高速化を試みました。

Windows で OpenJ9 を試してみようか

方法は NetBeans IDE のショートカットをコピーして、実行コマンド (netbeans64.exe) に -J-Xshareclasses:name=netbeans_8_2 -J-Xscmx64m を追加するだけです。

これで二回目以降の起動は目に見えて速くなりましたね。IDE の再起動も気軽にできるようになりました。

Windows で OpenJ9 を試してみようか

Windows x64 バージョンの OpenJ9 を組み込んだ OpenJDK 8 がリリースされていたので、インストールしてみました。

インストールは zip ファイルをダウンロードしてばらすだけなのですが、古い OpenJDK の常で cacerts が空っぽなので、 OpenJDK 10 からコピーしておきました。

試しに NetBeans IDE 8.2 に使ってみると、気持ち起動が速いかなと感じましたね。しばらくこれで使ってみましょうか。サポートも 2022 年 9 月まで続けるようですし。

それでは。

NetBeans 9.0 を試してみました

Oracleから譲渡されて約2年、Apache財団が「NetBeans 9.0」を正式リリース – 窓の杜

とのことで、取り急ぎ試してみました。

まだ実行形式インストーラーが用意されていないので、インストールは zip ファイルをばらすだけでショートカットも何もありません。

現時点で対応しているのは Java SE プロジェクトのみなので、普段 Java EE を使っている当方では本格的な移行はまだ先になりそうです。プラグインが揃った頃にまたチャレンジしましょう。

docker-compose.yml のバージョンは 2.1 でよかった話

当方では Docker コンテナーを作成するのに Docker Compose をよく利用しています。これまでバージョン 3 としてきたのですが、 swarm モードを使わないのであれば 2.1 でよいことに今更ながら気付かされました。むしろバージョン 3 だと使えない機能があるので、 swarm の機能が不要ならバージョン 2 系列がベストですね。

Docker コンテナーに IP アドレスを付ける方法

半分は備忘録ですが、 MACVLAN を使って Docker コンテナーに IP アドレスを付ける方法を記述します。

MACVLAN の設定

/etc/network/interfaces の記述例:

allow-hotplug eth0
iface eth0 inet manual
        up ip link set $IFACE up arp off
        up ifup macvlan0 || true
iface eth0 inet6 auto
        accept_ra 0
        down ifdown macvlan0 || true
        down ip link set $IFACE down

iface macvlan0 inet static
        address 192.0.2.2
        netmask 255.255.255.0
        gateway 192.0.2.1
        pre-up ip link add link eth0 name "$IFACE" type macvlan mode bridge 1
iface macvlan0 inet6 static
        address 2001:DB8::2/64
        accept_ra 2
        autoconf 1
        post-down ip link delete "$IFACE" type macvlan || true

補足: eth0 は IP 通信に使わないので ARP と RA を無効化しておきます。

Docker ネットワークの設定

コマンド例:

docker network create -d macvlan \
    --subnet=192.0.2.0/24 \
    --gateway=192.0.2.1 \
    --ip-range=192.0.2.128/25 \
    -o parent=eth0 \
    network-name

Docker コンテナーの設定

コマンド例:

docker container --network=network-name \
    --ip=192.0.2.3 \
    image 

Dockerfile 中で鍵サーバーから公開鍵の取得を試みるとエラーになる

Dockerfile の中で gpg --recv-keys を実行して公開鍵を取得しようとすると、エラーになったりならなかったりということがあったので、試行錯誤しながら対策してみました。

原因はおそらく IPv6 で鍵サーバーに接続しようとしたことで、 IPv6 を無効化することでひとまずエラーはなくなりなりました。

今回採用した IPv6 を無効化する方法は、 dirmngr.conf

disable-ipv6

を書くというものです。 gpg のオプションではなかったので、これにたどり着くまでは少し遠回りでしたね。

追記

エラー メッセージはこうでした。

gpg: keyserver receive failed: Cannot assign requested address

Docker にマウントしたディレクトリに作られる root 所有ディレクトリ対策

Docker コンテナーにディレクトリをマウントして何か作業をすると、root 所有のディレクトリが作られてしまうことがある。

そのようなディレクトリが作られても簡単に削除できるようにするのに、あらかじめ次のコマンドを実行してディレクトリに ACL を設定しておく方法が使える。

find . -type d -exec setfacl -m d:u:${USER}:rwx {} \;