プロジェクトの進捗とプロセスの改善は分けて考えないといけない

参考書籍は Software Development Metrics

もう少し整理したほうがいいんだけどとりあえずメモ。

 

www.manning.com

書籍紹介

著者はウォーターフォールなプロジェクトやアジャイルなプロジェクトのPMやコンサルをやってきた方。

ソフトウェア工学の知識よりも現場での経験が豊富な感じ。

アジャイル(適応型)やウォーターフォール(計画重視)それぞれの手法で、どのようなメトリクスをどのように活用できるのか説明している。

メトリクスを活用する目的として、プロジェクトの状況を予測可能にすること、プロセスを改善することを挙げている。

プロジェクトの状況を予測可能にすることはステークホルダーにとって重要。

プロセスを改善することはチームにとって重要。

目的別にメトリクスの正しい使い方や間違った使い方を紹介している。

書籍で紹介されているメトリクスを計算する Excel シートがサポートサイトで公開されている。

https://www.manning.com/downloads/1565

メトリクスの性質

メトリクス自体には次のような性質がある。基本的には数値化された事実であり、解釈する人によって意味が変わってくる。

  • 情報
    • 善悪・良し悪しと関係ない事実
  • 兆候
    • 問題が発生している(しそうになっている)ことを伝える
  • 動機づけ
    • 人間の行動を変えるきっかけになる

メトリクスの解釈

  • 過去を照らし出す
    • 「計画」と「現在の状態」を比較して得られるメトリクスのこと
    • 「今までの自分たちは間違ってないよね」を大事にする考え方
    • 状況が変化しないことを前提としている
  • 未来に向き合う
    • 「現在の状態」から「達成すべき目標」を比較して得られるメトリクスのこと
    • 「自分たちはどれだけできたのか」を大事にする考え方
    • 常に状況が変化することを前提としている

プロジェクト管理手法vs目的別メトリクス一覧

どのメトリクスも「ビジネス価値を提供できる状態になった」ことを計測しないと意味のある情報にならない。

リリースできない中間成果物(設計書やテスト結果)を計測するのは効果がない。

書籍ではプロジェクト管理手法だけでなく、プロセスモデルや出荷モデルも分類の軸として紹介している。

  • プロセスモデルの分類は次のとおり
    • 線形(最初に固定した要件を段階的に具体化していく)
    • 反復(要件の具体化を繰り返して洗練していく)
    • タイムボックス(反復の期間を固定して、それぞれの期間で出荷できるソフトウェアを開発する)
    • フロー(流れ作業的な)
  • 出荷モデルの分類は次のとおり
    • 開発して提供したら終わり
    • 継続的に保守開発
  計画重視のプロジェクト管理 適応型のプロジェクト管理
プロジェクトの状況を予測可能にする

スコープ達成率

アーンド・バリュー

予算バーンダウン

バッファバーンダウン

ベロシティ

サイクルタイム

バーンアップチャート

バーンダウンチャート

スループット

累積フロー図

スコープ達成率

予算バーンダウン

バッファバーンダウン

テストの完了した機能数

アーンド・ビジネスバリュー

ベロシティ

サイクルタイム

バーンアップチャート

バーンダウンチャート

スループット

累積フロー図

プロセスを改善する

ベロシティ

サイクルタイム

バーンアップチャート

バーンダウンチャート

累積フロー図

プロセスサイクル効率

ソースコードバージョン管理システムの履歴

ソースコードの静的解析の履歴

ニコニコカレンダー

感情振幅図

幸福度

ボール・イン・ボール

健全さと幸福度

パーソナリティチェック

cacerts の中身を精査した

TL;DR

  • Oracle OpenJDK に同梱された cacerts と他のプロバイダの配布物を比較した
  • Zulu 11 は Oracle OpenJDK の cacerts にエントリを追加したように見える
    • fingerprint type が同一
    • エントリ名に [jdk] と付けるルールを揃えてる
  • AdoptOpenJDK および Redhat の OpenJDK は cacerts を作り直しているようだ
    • fingerprint type が異なる

比較結果

配布物 エントリ数 fingerprint type
Oracle OpenJDK 11 93 SHA1
OpenJDK 11 (AdoptOpenJDK) 93 SHA256
OpenJDK 11 (Redhat) 133 SHA256
Zulu 11 158 SHA1

個別の観察

OpenJDK 11 (AdoptOpenJDK)

  • fingerprint type が違う
  • エントリの名前とタイムスタンプは同じ
  • エントリ数は一致

Oracle OpenJDK と同じソースから作り直している、と考えてよさそう。

OpenJDK 11 (Redhat)

  • fingerprint type が違う
  • 同じ名前のエントリでもタイムスタンプが違う
  • Oracle OpenJDK に存在しないエントリが増えてる

完全に作り直している雰囲気。

Zulu 11

  • fingerprint type は同じ
  • Oracle OpenJDK に存在するエントリの名前とタイムスタンプは同じ
  • Oracle OpenJDK に存在しないエントリが増えてる

作り直しているというより、キーストアファイルにエントリを追加しているような雰囲気。

JDK-8191031で削除対象になっている Symantec の証明書が残っていることから、OpenJDK 本体へ追従できてないような気がする。

深入り

cURL の公開している cacerts.pem と比較して存在する(1)存在しない(0)を整理した。

openjdk cacerts

Java のインストール方法とか同梱される cacerts や tzdb.dat の確認

Java の導入方法や配置されるファイルを説明しているページがなかったので作った。

TL;DR

  • Oracle Java SE とそれ以外の各種 OpenJDK 配布物についていろいろと確認
  • (Amazon Corretto / OpenJDK(Redhat) 以外では) cacerts の更新を別の運用として考えておくほうがよさそう
    • 利用する Web サービスの情報に合わせるか、とりあえず最新情報を反映するか
    • 手放しだとどこかで刺さりそう
      • 証明書の検証が失敗する問題に出くわす可能性
      • 利用している配布物の違いにより片方では証明書の検証に成功し、もう一方では失敗するなどの問題に出くわす可能性
  • (OpenJDK(Redhat) 以外では) tzdb.dat の更新を別の運用として考えておくほうがよさそう
    • Oracle の提供する tzupdater を利用する (提供ライセンスは BCL)
    • Azul の提供する ziupdater を利用する (提供ライセンスは GPLv2+CE)
    • だがどちらも tzdata2018f.tar.gz より新しいタイムゾーンデータを反映できないという不具合がある
      • Redhat はこの不具合を解決済みで tzdata2018g を反映している!
    • 要チェック! JDK-8212684

対象にした配布物

考慮事項

  • 環境
  • インストール方法
  • 配置先
  • バージョン情報
  • cacerts
  • tzdb.dat

調査した結果

Amazon Corretto 8

確認した環境

amazonlinux:2.0.20181010 (d656eea421ba)

インストール方法

$ amazon-linux-extras install corretto8

$ yum install -y java-1.8.0-amazon-corretto-devel

配置

インストール先は /usr/lib/jvm の下でした。

alternatives にも対応しています。

$ ls -ld /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64
drwxr-xr-x 9 root root 4096 Nov 23 05:38 /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64

$ alternatives --config java

There are 4 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java
   2           /usr/lib/jvm/zulu-8/bin/java
   3           /usr/lib/jvm/zulu-11/bin/java
*+ 4           /usr/java/jdk-11.0.1/bin/java

Enter to keep the current selection[+], or type selection number: ^C

バージョン情報

2018/11/23 時点ではバージョン情報に amazon-corretto-preview という文字列が入っています。

$ /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java -version
openjdk version "1.8.0_192"
OpenJDK Runtime Environment (build 1.8.0_192-amazon-corretto-preview-b12)
OpenJDK 64-Bit Server VM (build 25.192-b12, mixed mode)

cacerts

cacertsca-certificates パッケージ (Mozilla の CA root certificate bundle)に含まれるファイルを参照するようになっています。

依存パッケージとして管理されているため、更新の手間は軽減できそうです。

キーストアに登録されている CA ルート証明書の総数は 133 でした。 おそらく、Mozilla の CA ルート証明書から生成しているのではないかと思います (簡単に確認する方法が思いつかなかった…)。

$ yum deplist java-1.8.0-amazon-corretto | grep ca-certificate
  dependency: ca-certificates
   provider: ca-certificates.noarch 2018.2.22-70.0.amzn2

$ ls -l /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/lib/security/cacerts
lrwxrwxrwx 1 root root 53 Nov 23 05:35 /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/lib/security/cacerts -> ../../../../../../../../../../../etc/pki/java/cacerts

$ ls -l /etc/pki/java/cacerts
lrwxrwxrwx 1 root root 40 Oct 10 18:54 /etc/pki/java/cacerts -> /etc/pki/ca-trust/extracted/java/cacerts

$ yum provides /etc/pki/ca-trust/extracted/java/cacerts
Loaded plugins: ovl, priorities
153 packages excluded due to repository priority protections
ca-certificates-2017.2.14-71.amzn2.noarch : The Mozilla CA root certificate bundle
Repo        : amzn2-core
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2018.2.22-70.0.amzn2.noarch : The Mozilla CA root certificate bundle
Repo        : amzn2-core
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2018.2.22-70.0.amzn2.noarch : The Mozilla CA root certificate bundle
Repo        : installed
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts

$ keytool -list -keystore /etc/pki/ca-trust/extracted/java/cacerts -storepass changeit | head -n 4
Keystore type: jks
Keystore provider: SUN

Your keystore contains 133 entries

$ grep -c "BEGIN CERTIFICATE" /etc/pki/tls/cert.pem
133

tzdb.dat

tzdb.datJava だけが利用するタイムゾーン情報データベースです。 tzdata2018e から変換したファイルが配置されていました。

OS の tzdata パッケージとは独立しています。

IANAで公開されているデータベースファイルを ziupdatertzupdater で変換して使用します。

$ ls -l /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/lib/tzdb.dat
-rw-r--r-- 1 root root 105882 Nov 13 17:31 /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/lib/tzdb.dat

$ od -Ax -t x1z /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/lib/tzdb.dat  | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 65  >...TZDB....2018e<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

Azul Zulu 8

確認した環境

amazonlinux:2.0.20181010 (d656eea421ba)

インストール方法

$ yum install -y https://cdn.azul.com/zulu/bin/zulu8.33.0.1-jdk8.0.192-linux.x86_64.rpm

RHELOracle Linux なら Yum リポジトリを利用することもできる。

$ yum-config-manager --add-repo http://repos.azulsystems.com/rhel/zulu.repo
$ yum-config-manager --enable zulu
$ yum install -y zule-8

配置

インストール先は /usr/lib/jvm の下でした。

alternatives にも対応しています。

$ ls -ld /usr/lib/jvm/zulu-8
drwxr-xr-x 9 root root 4096 Nov 23 18:14 /usr/lib/jvm/zulu-8

$ alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java
*+ 2           /usr/lib/jvm/zulu-8/bin/java

Enter to keep the current selection[+], or type selection number:

バージョン情報

2018/11/23 時点ではバージョン情報に Zulu 8.33.0.1-linux64 という文字列が入っています。

$ /usr/lib/jvm/zulu-8/jre/bin/java -version
openjdk version "1.8.0_192"
OpenJDK Runtime Environment (Zulu 8.33.0.1-linux64) (build 1.8.0_192-b01)
OpenJDK 64-Bit Server VM (Zulu 8.33.0.1-linux64) (build 25.192-b01, mixed mode)

cacerts

cacerts に登録されている CA ルート証明書の総数は 158 でした。

$ keytool -list -keystore /usr/lib/jvm/zulu-8/jre/lib/security/cacerts -storepass changeit | head -n 4
Keystore type: jks
Keystore provider: SUN

Your keystore contains 158 entries

tzdb.dat

tzdata2018e から変換したファイルが配置されていました。

$ ls -l /usr/lib/jvm/zulu-8/jre/lib/tzdb.dat
-rw-r--r-- 1 root root 105882 Oct 20 00:52 /usr/lib/jvm/zulu-8/jre/lib/tzdb.dat

$ od -Ax -t x1z /usr/lib/jvm/zulu-8/jre/lib/tzdb.dat  | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 65  >...TZDB....2018e<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

Azul Zulu 11

確認した環境

amazonlinux:2.0.20181010 (d656eea421ba)

インストール方法

yum install -y https://cdn.azul.com/zulu/bin/zulu11.2.3-jdk11.0.1-linux.x86_64.rpm

RHELOracle Linux なら Yum リポジトリを利用することもできる。

$ yum-config-manager --add-repo http://repos.azulsystems.com/rhel/zulu.repo
$ yum-config-manager --enable zulu
$ yum install -y zule-11

配置

インストール先は /usr/lib/jvm の下でした。

alternatives にも対応しています。

$ ls -ld /usr/lib/jvm/zulu-11
drwxr-xr-x 9 root root 4096 Nov 23 21:23 /usr/lib/jvm/zulu-11

$ alternatives --config java

There are 4 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java
   2           /usr/lib/jvm/zulu-8/bin/java
   3           /usr/lib/jvm/zulu-11/bin/java
*+ 4           /usr/java/jdk-11.0.1/bin/java

Enter to keep the current selection[+], or type selection number: ^C

バージョン情報

2018/11/23 時点ではバージョン情報に Zulu11.2+3 という文字列が入っています。

$ /usr/lib/jvm/zulu-11/bin/java -version
openjdk version "11.0.1" 2018-10-16 LTS
OpenJDK Runtime Environment Zulu11.2+3 (build 11.0.1+13-LTS)
OpenJDK 64-Bit Server VM Zulu11.2+3 (build 11.0.1+13-LTS, mixed mode)

cacerts

cacerts に登録されている CA ルート証明書の総数は 158 でした。

$ keytool -list -keystore /usr/lib/jvm/zulu-11/lib/security/cacerts -storepass changeit | head -n 4
Keystore type: jks
Keystore provider: SUN

Your keystore contains 158 entries

tzdb.dat

tzdata2018e から変換したファイルが配置されていました。

$ ls -l /usr/lib/jvm/zulu-11/lib/tzdb.dat
-rw-r--r-- 1 root root 105882 Oct 20 00:04 /usr/lib/jvm/zulu-11/lib/tzdb.dat

$ od -Ax -t x1z /usr/lib/jvm/zulu-11/lib/tzdb.dat | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 65  >...TZDB....2018e<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

Oracle OpenJDK 11

確認した環境

amazonlinux:2.0.20181010 (d656eea421ba)

インストール方法

$ curl -L https://download.java.net/java/GA/jdk11/13/GPL/openjdk-11.0.1_linux-x64_bin.tar.gz |
tar xzf - -C /usr/lib/jvm/

配置

配布形式が tar.gz のため、インストール先は任意。 当然 alternatives にも未対応。

$ ls -ld /usr/lib/jvm/jdk-11.0.1
drwxr-xr-x 8 root root 4096 Nov 24 09:12 /usr/lib/jvm/jdk-11.0.1

バージョン情報

2018/11/23 時点ではバージョン情報に特徴的な文字列が入っていません。

$ /usr/lib/jvm/jdk-11.0.1/bin/java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)

cacerts

cacerts に登録されている CA ルート証明書の総数は 93 でした。

$ ls -l /usr/lib/jvm/jdk-11.0.1/lib/security/cacerts
-rw-r--r-- 1 668 668 102883 Oct  6 21:17 /usr/lib/jvm/jdk-11.0.1/lib/security/cacerts

$ keytool -list -keystore /usr/lib/jvm/jdk-11.0.1/lib/security/cacerts -storepass changeit | head -n 4
Keystore type: jks
Keystore provider: SUN

Your keystore contains 93 entries

tzdb.dat

tzdata2018e から変換したファイルが配置されていました。

$ ls -l /usr/lib/jvm/jdk-11.0.1/lib/tzdb.dat
-rw-r--r-- 1 668 668 105882 Oct  6 21:17 /usr/lib/jvm/jdk-11.0.1/lib/tzdb.dat

$ od -Ax -t x1z /usr/lib/jvm/jdk-11.0.1/lib/tzdb.dat | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 65  >...TZDB....2018e<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

Oracle Java SE 11

確認した環境

amazonlinux:2.0.20181010 (d656eea421ba)

インストール方法

$ yum install -y jdk-11.0.1_linux-x64_bin.rpm

配置

インストール先は /usr/java の下でした。 alternatives にも対応しているようです。

$ ls -ld /usr/java/jdk-11.0.1
drwxr-xr-x 9 root root 4096 Nov 24 11:27 /usr/java/jdk-11.0.1

$ alternatives --config java

There are 4 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java
 + 2           /usr/lib/jvm/zulu-8/bin/java
   3           /usr/lib/jvm/zulu-11/bin/java
*  4           /usr/java/jdk-11.0.1/bin/java

Enter to keep the current selection[+], or type selection number: ^C

バージョン情報

特徴的なのは Java(TM) という文字列ですね。

$ /usr/java/jdk-11.0.1/bin/java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

cacerts

cacerts に登録されている CA ルート証明書の総数は 93 でした。

Oracle OpenJDK のファイルと完全に一致しています (diff で確認)。

$ ls -l /usr/java/jdk-11.0.1/lib/security/cacerts
-rw-r--r-- 1 root root 102883 Oct  6 21:30 /usr/java/jdk-11.0.1/lib/security/cacerts

$ /usr/java/jdk-11.0.1/bin/keytool -list -cacerts -storepass changeit | head -n 4
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 93 entries

$ diff /usr/lib/jvm/jdk-11.0.1/lib/security/cacerts /usr/java/jdk-11.0.1/lib/security/cacerts

tzdb.dat

tzdata2018e から変換したファイルが配置されていました。

Oracle OpenJDK のファイルと完全に一致しています (diff で確認)。

$ ls -l /usr/java/jdk-11.0.1/lib/tzdb.dat
-rw-r--r-- 1 root root 105882 Oct  6 21:30 /usr/java/jdk-11.0.1/lib/tzdb.dat

$ od -Ax -t x1z /usr/java/jdk-11.0.1/lib/tzdb.dat | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 65  >...TZDB....2018e<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

$ diff /usr/lib/jvm/jdk-11.0.1/lib/tzdb.dat /usr/java/jdk-11.0.1/lib/tzdb.dat

OpenJDK 8 (AdoptOpenJDK)

確認した環境

amazonlinux:2.0.20181010 (d656eea421ba)

インストール方法

$ curl -L https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u192-b12/OpenJDK8U-jdk_x64_linux_hotspot_8u192b12.tar.gz |
tar xzf - -C /usr/lib/jvm/

配置

配布形式が tar.gz のため、インストール先は任意。 当然 alternatives にも未対応。

$ ls -ld /usr/lib/jvm/jdk8u192-b12
drwxrwxr-x 9 root root 4096 Nov  1 04:41 /usr/lib/jvm/jdk8u192-b12

バージョン情報

特徴的なのは AdoptOpenJDK という文字列ですね。

$ /usr/lib/jvm/jdk8u192-b12/jre/bin/java -version
openjdk version "1.8.0_192"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_192-b12)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.192-b12, mixed mode)

cacerts

cacerts に登録されている CA ルート証明書の総数は 92 でした。

Oracle OpenJDK よりも 1 少ない。

diffJava 11 のリリースノート(JDK-8210432) より、TeliaSoneraルート証明書が不足しているようです。

Jira 課題は JDK-8210432 で解決済みになっています。 バックポートが必要だと思うのですが… あとで報告します。

$ ls -l /usr/lib/jvm/jdk8u192-b12/jre/lib/security/cacerts
-rw-rw-r-- 1 root root 101493 Nov  1 04:41 /usr/lib/jvm/jdk8u192-b12/jre/lib/security/cacerts

$ /usr/lib/jvm/jdk8u192-b12/jre/bin/keytool -list -keystore /usr/lib/jvm/jdk8u192-b12/jre/lib/security/cacerts -storepass changeit | head -n 4
Keystore type: jks
Keystore provider: SUN

Your keystore contains 92 entries

$ diff -u oopenjdk_cacerts.txt adoptopenjdk8_cacerts.txt | grep -E '^[\+\-]'
--- oopenjdk_cacerts.txt    2018-11-24 10:00:11.942617000 +0900
+++ adoptopenjdk8_cacerts.txt   2018-11-24 17:46:05.708039000 +0900
-Your keystore contains 93 entries
+Your keystore contains 92 entries
-addtrustclass1ca [jdk], Dec 1, 2017, trustedCertEntry,
-Certificate fingerprint (SHA1): CC:AB:0E:A0:4C:23:01:D6:69:7B:DD:37:9F:CD:12:EB:24:E3:94:9D
+addtrustclass1ca [jdk], Dec 1, 2017, trustedCertEntry,
+Certificate fingerprint (SHA1): CC:AB:0E:A0:4C:23:01:D6:69:7B:DD:37:9F:CD:12:EB:24:E3:94:9D
-keynectisrootca [jdk], Dec 1, 2017, trustedCertEntry,
-Certificate fingerprint (SHA1): 9C:61:5C:4D:4D:85:10:3A:53:26:C2:4D:BA:EA:E4:A2:D2:D5:CC:97
+keynectisrootca [jdk], Dec 1, 2017, trustedCertEntry,
+Certificate fingerprint (SHA1): 9C:61:5C:4D:4D:85:10:3A:53:26:C2:4D:BA:EA:E4:A2:D2:D5:CC:97
-verisignclass3g3ca [jdk], Dec 1, 2017, trustedCertEntry,
-Certificate fingerprint (SHA1): 13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6
-certumtrustednetworkca [jdk], Dec 1, 2017, trustedCertEntry,
-Certificate fingerprint (SHA1): 07:E0:32:E0:20:B7:2C:3F:19:2F:06:28:A2:59:3A:19:A7:0F:06:9E
-teliasonerarootcav1 [jdk], Sep 6, 2018, trustedCertEntry,
-Certificate fingerprint (SHA1): 43:13:BB:96:F1:D5:86:9B:C1:4E:6A:92:F6:CF:F6:34:69:87:82:37
+certumtrustednetworkca [jdk], Dec 1, 2017, trustedCertEntry,
+Certificate fingerprint (SHA1): 07:E0:32:E0:20:B7:2C:3F:19:2F:06:28:A2:59:3A:19:A7:0F:06:9E
+verisignclass3g3ca [jdk], Dec 1, 2017, trustedCertEntry,
+Certificate fingerprint (SHA1): 13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6
-globalsigneccrootcar5 [jdk], Jul 13, 2018, trustedCertEntry,
-Certificate fingerprint (SHA1): 1F:24:C6:30:CD:A4:18:EF:20:69:FF:AD:4F:DD:5F:46:3A:1B:69:AA
-ttelesecglobalrootclass2ca [jdk], Jul 13, 2018, trustedCertEntry,
-Certificate fingerprint (SHA1): 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9
+globalsigneccrootcar5 [jdk], Jul 13, 2018, trustedCertEntry,
+Certificate fingerprint (SHA1): 1F:24:C6:30:CD:A4:18:EF:20:69:FF:AD:4F:DD:5F:46:3A:1B:69:AA
-digicertglobalrootca [jdk], Dec 1, 2017, trustedCertEntry,
-Certificate fingerprint (SHA1): A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36
+ttelesecglobalrootclass2ca [jdk], Jul 13, 2018, trustedCertEntry,
+Certificate fingerprint (SHA1): 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9
+digicertglobalrootca [jdk], Dec 1, 2017, trustedCertEntry,
+Certificate fingerprint (SHA1): A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36

tzdb.dat

tzdata2018e から変換したファイルが配置されていました。

$ ls -l /usr/lib/jvm/jdk8u192-b12/jre/lib/tzdb.dat
-rw-rw-r-- 1 root root 105882 Nov  1 04:41 /usr/lib/jvm/jdk8u192-b12/jre/lib/tzdb.dat

$ od -Ax -tx1z /usr/lib/jvm/jdk8u192-b12/jre/lib/tzdb.dat | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 65  >...TZDB....2018e<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

OpenJDK 11(AdoptOpenJDK)

確認した環境

amazonlinux:2.0.20181010 (d656eea421ba)

インストール方法

$ curl -L https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.1%2B13/OpenJDK11U-jdk_x64_linux_hotspot_11.0.1_13.tar.gz |
tar xzf - -C /usr/lib/jvm/

配置

配布形式が tar.gz のため、インストール先は任意。 当然 alternatives にも未対応。

$ ls -ld /usr/lib/jvm/jdk-11.0.1+13
drwxrwxr-x 10 root root 4096 Nov 15 19:42 /usr/lib/jvm/jdk-11.0.1+13

バージョン情報

特徴的なのは AdoptOpenJDK という文字列ですね。

$ /usr/lib/jvm/jdk-11.0.1+13/bin/java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.1+13)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.1+13, mixed mode)

cacerts

cacerts に登録されている CA ルート証明書の総数は 93 でした。

Oracle OpenJDK のファイルと完全に一致しています (diff で確認)。

$ ls -l /usr/java/jdk-11.0.1/lib/security/cacerts
-rw-r--r-- 1 root root 102883 Oct  6 21:30 /usr/java/jdk-11.0.1/lib/security/cacerts

$ /usr/lib/jvm/jdk-11.0.1+13/bin/keytool -list -cacerts -storepass changeit | head -n 4
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 93 entries

$ diff /usr/lib/jvm/jdk-11.0.1/lib/security/cacerts /usr/lib/jvm/jdk-11.0.1+13/lib/security/cacerts

tzdb.dat

tzdata2018e から変換したファイルが配置されていました。

Oracle OpenJDK のファイルとは一致しませんが、内容は変わらないと考えたい (diff で確認)。

$ ls -l /usr/lib/jvm/jdk-11.0.1+13/lib/tzdb.dat
-rw-rw-r-- 1 root root 105882 Nov 15 19:42 /usr/lib/jvm/jdk-11.0.1+13/lib/tzdb.dat

$ od -Ax -t x1z /usr/lib/jvm/jdk-11.0.1+13/lib/tzdb.dat | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 65  >...TZDB....2018e<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

$ diff /usr/lib/jvm/jdk-11.0.1/lib/tzdb.dat /usr/lib/jvm/jdk-11.0.1+13/lib/tzdb.dat
Binary files /usr/lib/jvm/jdk-11.0.1/lib/tzdb.dat and /usr/lib/jvm/jdk-11.0.1+13/lib/tzdb.dat differ

OpenJDK 8 (Redhat)

確認した環境

$ cat /etc/os-release
NAME="Red Hat Enterprise Linux Server"
VERSION="7.5 (Maipo)"
ID="rhel"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="7.5"
PRETTY_NAME="Red Hat Enterprise Linux Server 7.5 (Maipo)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:7.5:GA:server"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7"
REDHAT_BUGZILLA_PRODUCT_VERSION=7.5
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="7.5"

インストール方法

$ yum install -y java-1.8.0-openjdk-headless

配置

インストール先は /usr/lib/jvm の下でした。 alternatives にも対応しているようです。

$ ls -ld /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64
drwxr-xr-x. 3 root root 17 Nov 24 03:38 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64

$ alternatives --config java

There is 1 program that provides 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/bin/java)

Enter to keep the current selection[+], or type selection number: ^C

バージョン情報

特徴的なところが何もありません。

$ /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/bin/java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

cacerts

cacertsca-certificates パッケージ (Mozilla の CA root certificate bundle)に含まれるファイルを参照するようになっています。

依存パッケージとして管理されているため、更新の手間は軽減できそうです。

キーストアに登録されている CA ルート証明書の総数は 133 でした。 おそらく、Mozilla の CA ルート証明書から生成しているのではないかと思います (簡単に確認する方法が思いつかなかった…)。

$ ls -l /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/security/cacerts
lrwxrwxrwx. 1 root root 41 Nov 24 03:38 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/security/cacerts -> ../../../../../../../etc/pki/java/cacerts

$ ls -l /etc/pki/java/cacerts
lrwxrwxrwx. 1 root root 40 Nov 17 02:38 /etc/pki/java/cacerts -> /etc/pki/ca-trust/extracted/java/cacerts

$ ls -l /etc/pki/ca-trust/extracted/java/cacerts
-r--r--r--. 1 root root 160286 Nov 17 02:38 /etc/pki/ca-trust/extracted/java/cacerts

$ yum provides /etc/pki/ca-trust/extracted/java/cacerts
Failed to set locale, defaulting to C
Loaded plugins: product-id, search-disabled-repos, subscription-manager
Repo rhel-7-server-rpms forced skip_if_unavailable=True due to: /etc/pki/entitlement/2829246006869238773-key.pem
ca-certificates-2013.1.95-71.el7.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2014.1.98-70.0.el7_0.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2014.1.98-72.el7.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2015.2.4-70.0.el7_1.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2015.2.4-71.el7.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2015.2.6-70.1.el7_2.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2015.2.6-73.el7.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2017.2.11-70.1.el7_3.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2017.2.14-70.1.el7_3.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2017.2.14-71.el7.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2017.2.20-71.el7.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2018.2.22-70.0.el7_5.noarch : The Mozilla CA root certificate bundle
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts



ca-certificates-2017.2.20-71.el7.noarch : The Mozilla CA root certificate bundle
Repo        : @anaconda/7.5
Matched from:
Filename    : /etc/pki/ca-trust/extracted/java/cacerts

$ yum deplist java-1.8.0-openjdk-headless | grep ca-certificates
Failed to set locale, defaulting to C
  dependency: ca-certificates
   provider: ca-certificates.noarch 2018.2.22-70.0.el7_5
  dependency: ca-certificates
   provider: ca-certificates.noarch 2018.2.22-70.0.el7_5

$ usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/bin/keytool -list -keystore /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/security/cacerts -storepass changeit | head -n 4
Keystore type: jks
Keystore provider: SUN

Your keystore contains 133 entries

$ grep -c "BEGIN CERTIFICATE" /etc/pki/tls/cert.pem
133

tzdb.dat

tzdb.dattzdata-java パッケージに含まれるファイルを参照するようになっています。

依存パッケージとして管理されているため、更新の手間は軽減できそうです。

2018/11/24 時点では tzdata2018g から変換したファイルが配置されていました。

$ ls -l /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/tzdb.dat
lrwxrwxrwx. 1 root root 30 Nov 24 03:38 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/tzdb.dat -> /usr/share/javazi-1.8/tzdb.dat

$ ls -l /usr/share/javazi-1.8/tzdb.dat
-rw-r--r--. 1 root root 105734 Oct 29 14:27 /usr/share/javazi-1.8/tzdb.dat

$ yum provides /usr/share/javazi-1.8/tzdb.dat
Failed to set locale, defaulting to C
Loaded plugins: product-id, search-disabled-repos, subscription-manager
epel/x86_64/filelists                                                                                                                                          |  10 MB  00:00:01
rhel-7-server-rpms/7Server/x86_64/filelists_db                                                                                                                 |  37 MB  00:00:03
tzdata-java-2015e-1.el7.noarch : Timezone data for Java
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/share/javazi-1.8/tzdb.dat
(省略)

$ yum deplist java-1.8.0-openjdk-headless | grep tzdata-java
Failed to set locale, defaulting to C
  dependency: tzdata-java >= 2015d
   provider: tzdata-java.noarch 2018g-1.el7
  dependency: tzdata-java >= 2015d
   provider: tzdata-java.noarch 2018g-1.el7

$ od -Ax -t x1z /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/tzdb.dat | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 67  >...TZDB....2018g<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

OpenJDK 11 (Redhat)

確認した環境

$ cat /etc/os-release
NAME="Red Hat Enterprise Linux Server"
VERSION="7.5 (Maipo)"
ID="rhel"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="7.5"
PRETTY_NAME="Red Hat Enterprise Linux Server 7.5 (Maipo)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:7.5:GA:server"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7"
REDHAT_BUGZILLA_PRODUCT_VERSION=7.5
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="7.5"

インストール方法

$ yum install -y java-11-openjdk-headless

配置

インストール先は /usr/java の下でした。 alternatives にも対応しているようです。

$ ls -ld /usr/lib/jvm/java-11-openjdk-11.0.1.13-3.el7_6.x86_64
drwxr-xr-x. 6 root root 68 Nov 24 03:58 /usr/lib/jvm/java-11-openjdk-11.0.1.13-3.el7_6.x86_64

$ alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/bin/java)
   2           java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.1.13-3.el7_6.x86_64/bin/java)

Enter to keep the current selection[+], or type selection number: ^C

バージョン情報

Oracle OpenJDK と完全に一致しています。

/usr/lib/jvm/java-11-openjdk-11.0.1.13-3.el7_6.x86_64/bin/java -version
openjdk version "11.0.1" 2018-10-16 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.1+13-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode, sharing)

cacerts

cacertsca-certificates パッケージ (Mozilla の CA root certificate bundle)に含まれるファイルを参照するようになっています。

依存パッケージとして管理されているため、更新の手間は軽減できそうです。

キーストアに登録されている CA ルート証明書の総数は 133 でした。 おそらく、Mozilla の CA ルート証明書から生成しているのではないかと思います (簡単に確認する方法が思いつかなかった…)。

$ ls -l /usr/lib/jvm/java-11-openjdk-11.0.1.13-3.el7_6.x86_64/lib/security/cacerts
lrwxrwxrwx. 1 root root 21 Nov 24 03:58 /usr/lib/jvm/java-11-openjdk-11.0.1.13-3.el7_6.x86_64/lib/security/cacerts -> /etc/pki/java/cacerts

$ yum deplist java-11-openjdk-headless | grep ca-certificates
Failed to set locale, defaulting to C
  dependency: ca-certificates
   provider: ca-certificates.noarch 2018.2.22-70.0.el7_5
  dependency: ca-certificates
   provider: ca-certificates.noarch 2018.2.22-70.0.el7_5

$ /usr/lib/jvm/java-11-openjdk-11.0.1.13-3.el7_6.x86_64/bin/keytool -list -cacerts -storepass changeit | head -n 4
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 133 entries

tzdb.dat

tzdb.dattzdata-java パッケージに含まれるファイルを参照するようになっています。

依存パッケージとして管理されているため、更新の手間は軽減できそうです。

2018/11/24 時点では tzdata2018g から変換したファイルが配置されていました。

$ ls -l /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/tzdb.dat
lrwxrwxrwx. 1 root root 30 Nov 24 03:38 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/tzdb.dat -> /usr/share/javazi-1.8/tzdb.dat

$ yum deplist java-11-openjdk-headless | grep tzdata-java | head -n 10
Failed to set locale, defaulting to C
  dependency: tzdata-java >= 2015d
   provider: tzdata-java.noarch 2018g-1.el7
  dependency: tzdata-java >= 2015d
   provider: tzdata-java.noarch 2018g-1.el7

$ od -Ax -t x1z /usr/lib/jvm/java-11-openjdk-11.0.1.13-3.el7_6.x86_64/lib/tzdb.dat  | head
000000 01 00 04 54 5a 44 42 00 01 00 05 32 30 31 38 67  >...TZDB....2018g<
000010 02 57 00 0e 41 66 72 69 63 61 2f 41 62 69 64 6a  >.W..Africa/Abidj<
000020 61 6e 00 0c 41 66 72 69 63 61 2f 41 63 63 72 61  >an..Africa/Accra<
000030 00 12 41 66 72 69 63 61 2f 41 64 64 69 73 5f 41  >..Africa/Addis_A<
000040 62 61 62 61 00 0e 41 66 72 69 63 61 2f 41 6c 67  >baba..Africa/Alg<
000050 69 65 72 73 00 0d 41 66 72 69 63 61 2f 41 73 6d  >iers..Africa/Asm<
000060 61 72 61 00 0d 41 66 72 69 63 61 2f 41 73 6d 65  >ara..Africa/Asme<
000070 72 61 00 0d 41 66 72 69 63 61 2f 42 61 6d 61 6b  >ra..Africa/Bamak<
000080 6f 00 0d 41 66 72 69 63 61 2f 42 61 6e 67 75 69  >o..Africa/Bangui<
000090 00 0d 41 66 72 69 63 61 2f 42 61 6e 6a 75 6c 00  >..Africa/Banjul.<

builderscon tokyo 2018 の参加ログ

初めて参加してきた。
builderscon.io

よかったこと
もっと良くするためにできること
  • たぶんスピーカーに挑戦する(CfPを出す)のが一番なんだと思います
    • 「向こう側」はいつも楽しそう
    • 自分で乗り込んでいくのが一番早い
    • 採択されなかったらブログの記事が増えるだけなのでいいことなのでは

XP祭り2017で参加した「振り返りを振り返る」ワークショップのメモ

XP祭り2017:さまざまな振り返りを知り,振り返りを振り返る (栗田 太郎さん)

チームまたは個人の仕事において,振り返り (ふりかえり),リフレクション,レトロスペクティブなどと言われる活動には,
さまざまなフレームワーク (“KPT”,”YWT”,”ORID” など,また,KPT だけでも多くのバリエーション) と課題があります.
本ワークショップでは,参加者の皆さんの日頃の目的と工夫と課題の共有,いろいろなフレームワークの試行と比較,
振り返りにまつわる対話,を通して,日常の振り返りを多様な視点から振り返り,振り返りの意義と意味について考えていきます.

いろいろと話題の講演がある中、裏番組的なワークショップに参加していました。
懇親会でもいろいろお話を聞くことができてとてもためになりました。
関係ないけど、レトロスペクティブやイントロスペクティブの スペクトは「よく見る」という意味らしい

やったこと

  • ふりかえりのフレームワークの講義
  • マシュマロチャレンジ を実践
  • マシュマロチャレンジについて ORID で「ふりかえり」
  • 「各自がふりかえりで課題だと思っていること」について「KPT でふりかえり」
  • ワークショップ全体について「YWT でふりかえり」

最初に説明があったわけではないので、すごくメタい構造だった。

ふりかえりの由来

  • 「ふりかえりとは基本的に内省のことである」
    • プラトンまで遡るので人によっては気味が悪くなる可能性がある
  • 「内省とはリフレクション(反射)である」
  • 「過ぎ去ったことに光を当てるようにふりかえり、こころに描かれたことを呼び戻したり表出したりすること、すなわち注意深く考えることや黙想すること」
    • この考え方は雰囲気があって素敵だ
    • 過去は闇であり、闇に光を当てその有り様を観測するから反射なのだ、と

ふりかえりのフレームワーク

  • メジャーなやつ KPT
    • たくさん亜種がある KPT + Stop、KTP + Action、YWT + KPTKPT + Thanks、KPTそれぞれに5W1H
    • KPT 採集
    • 改善サイクルを回しやすい
  • YWT
    • 試行錯誤的な学習に向いている
  • 知らなかったやつ ORID
    • その場にいる人間の文脈が多岐に渡る場合などに有効かもしれない
    • Objective: 事実やデータ
    • Reflective: その時の気持ち(ここが発見だった)
    • Interpretative: 解釈や意味
    • Decision: これから、あるいは次にどうするか

チームでふりかえりをするとき、書く時間と共有する時間を分ける理由

  • ちゃんと他の人の話を聞くため
    • 他の人が話しているときは、自分のことを考えたり書いたりしないで、ちゃんと聞くため
  • 共感とは、「自分ならこうするとか」そういうことを考えずにただただ相手の身になって聞くこと
  • 「話している人が認識している事実や感じた想い」から学習する?
    • この辺よくわからない。ワークショップ中でも説明はされてなかった

看護師の人たちは日常的にふりかえりを活用している

  • 看護記録とか
  • リフレクションの研究自体が看護教育に端を発するものだとか
  • (後で聞いた話)
    • ワークショップの講師の人は、病院の看護師さんを相手にリフレクションのワークショップを開催しているとのこと

考察

所属する組織に不満があるわけではないので特に声を上げるようなことはしていないけど、ときどき考えさせられることがあるので気が向いたら書くようにしよう。

  • コピペはよくない(ただし場合による)
    • 脊髄反射的にコピペしたものをそのまま動かすとか常識を疑わざるを得ません
  • 何の思想も目的も意思も意図も希望も展望も設計もなくガラクタを寄せ集めても粗大ゴミにしかならない
    • とりあえず集まったところで何も生まれません

思ったよりも忘れている。
他にもなんかあったような気がするんだけど、大して気に留めなかったんだろうな。

n回目のDevsumiで見聞きしたことのメモ

Developers Summit 2017

何回目か忘れてるけど一般参加してきた。
ちょっとした発見があったりしたので、自分用に記録しておく。

16-D-2 Elastic Stack による異常検知

Elastic Stack の紹介。
基本的に収集したログをいかに扱うか、という問題になるのだけど、部分的には AWS CloudWatch よりも柔軟性がありそうなところが気になった。

時系列データのトレンドを自動的に学習して異常を検出するPrelertというプラグインはよさそうだった。
普通のしきい値判定と組み合わせることができればほとんどのケースがカバーできそう。

16-A-3 ヤフーの開発を10倍速くした社内 PaaS 構築の今とこれから

開発ツールに起因する問題を解消するため,Cloud Foundry を導入した話。
Spring Blogでは Cloud Foundry の話がしょっちゅう登場するのできっと世界的には主流なんだと思う。
日本の大手SIerのプラットフォームで使われているのは知らなかった…そうなんだ。

17-E-1 自動化はどこに向かうのか 〜まだ開発・運用の自動化で消耗しているの?〜

一度前佛さんにお会いしたかったので参加。
slideshareのプレゼン資料が本当にすごい。エンターテイメント。
ツール推しな人だと思ってたら全然そんなことはなく、とてもバランス感覚のある話だった。

17-D-6 『もしもスクラムマスターがテストエンジニアだったら』(もしテス)

社内ツールをインクリメンタルなプロセスで開発してみたという話。
もともとトップダウン開発プロセスに馴染みがあり、かつ、テスト設計が専門ということで、ユースケースの書き方を工夫してみたとのこと。