[Oracle Cloud] 無償利用可能な Oracle JDK 11(LTS) を、OCIの仮想インスタンス上にInstall

# はじめに

Oracle Cloud Infrastructure(以下OCI)で利用する際に Oracle JDK は、無償で商用利用可能となったことがアナウンスがありました。
https://blogs.oracle.com/developers/support-for-oracle-java-se-now-included-with-oracle-cloud-infrastructure

OCIにCentOSを構築し、Oracle JDK 11 をInstallする方法を記載します。Oracle JDK 11を選択した理由は以下の通りです。

- Oracle JDK のバージョン11は、LTSの対象となっており Premier Support の期間が、2018年9月～2023年9月となっているため


# 留意点
CentOSがDefaultで参照しているRepositoryを無効化し、OCIで提供しているRepositoryに切り替えています。
OCIで提供しているものを継続して利用することが出来ますが、気になる場合はJDKをInstallした後にもとに戻してください。

# Oracle JDKをInstall

## OCI で Compute Instance を構築

CentOS7 で適当に立てる。以下のチュートリアルなどを参照
https://community.oracle.com/docs/DOC-1019313



## Yum Repository参照先を変更

まず、rootへスイッチします

```
sudo su -
```



ULN(Unbreakable Linux Network) に接続するために GPG KEY をダウンロードします

```
wget https://yum.oracle.com/RPM-GPG-KEY-oracle-ol7 -O /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
```



GPG KEY を適用します

```
# gpg --quiet --with-fingerprint /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
pub  2048R/EC551F03 2010-07-01 Oracle OSS group (Open Source Software group) <build@oss.oracle.com>
      Key fingerprint = 4214 4123 FECF C55B 9086  313D 72F9 7B74 EC55 1F03
```



CentOSのDefaule 参照先を 無効化します

```
mkdir /etc/yum.repos.d/old
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/old
```



ULN側の Repository を参照するための、一時的なファイルを作成します。

```
cat <<'EOF' > /etc/yum.repos.d/ol7-temp.repo
[ol7_latest]
name=Oracle Linux $releasever Latest ($basearch)
baseurl=https://yum.oracle.com/repo/OracleLinux/OL7/latest/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1
EOF
```



yum repolist で正常に参照できているか確認します

```
# yum repolist
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
repo id                    repo name                                 status
ol7_latest/x86_64          Oracle Linux 7Server Latest (x86_64)      13,163
repolist: 13,163
```



repositoryを参照するためのパッケージをインストールします

```
yum install -y oraclelinux-release-el7
```



以下のパッケージがインストールされます

```
Dependencies Resolved

==============================================================================================================
Package                           Arch             Version                        Repository            Size
==============================================================================================================
Installing:
 oraclelinux-release-el7           x86_64           1.0-6.el7                      ol7_latest            18 k
Installing for dependencies:
 python-kitchen                    noarch           1.1.1-5.el7                    ol7_latest           265 k
 yum-utils                         noarch           1.1.31-50.0.1.el7              ol7_latest           121 k

Transaction Summary
==============================================================================================================
```



yum.repo.d ディレクトリは以下の構成になっています

```
# ls -la 
total 28 
drwxr-xr-x.  3 root root  108 Jul 16 16:01 .
drwxr-xr-x. 90 root root 8192 Jul 16 13:10 ..
-rw-r--r--.  1 root root  203 Jul 16 16:01 ol7-temp.repo
drwxr-xr-x.  2 root root  229 Jul 16 16:01 old
-rw-r--r--.  1 root root 3586 Jul 16 16:01 oracle-linux-ol7.repo
-rw-r--r--.  1 root root 2108 Jul 16 16:01 uek-ol7.repo
-rw-r--r--.  1 root root  225 Jul 16 16:01 virt-ol7.repo
```



一時的に作成したRepositoryを無効化します

```
mv /etc/yum.repos.d/ol7-temp.repo /etc/yum.repos.d/old/
```



OCI の各Regionには、高速にパッケージをダウンロードするための、yum ミラーサーバーが存在しています。
これにアクセスするために、以下の設定を行います。
まず JSON を 整形するための、jqコマンドをインストールします

```
sudo curl -o /usr/local/bin/jq -L https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 && sudo chmod +x /usr/local/bin/jq
```



Compute Instance が稼働しているRegion名を取得して、/etc/yum/vars/ociregion に格納します。

```
export OCIREGION=`curl -sfm 3 http://169.254.169.254/opc/v1/instance/ | jq -r '.region' | cut -d '-' -f 2`
echo "-$OCIREGION" > /etc/yum/vars/ociregion
```



ファイルの中身を確認します

```
# cat /etc/yum/vars/ociregion 
-tokyo 
```



yum repolist を確認します。以下の5種類のRepositoryを参照することが出来ていればOKです。

```
# yum repolist
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
repo id                    repo name                                                                    status
ol7_UEKR5/x86_64           Latest Unbreakable Enterprise Kernel Release 5 for Oracle Linux 7Server (x86    154
ol7_addons/x86_64          Oracle Linux 7Server Add ons (x86_64)                                           340
ol7_latest/x86_64          Oracle Linux 7Server Latest (x86_64)                                         13,163
ol7_ociyum_config          OCI specific release packages Oracle Linux 7Server (x86_64)                      27
ol7_optional_latest/x86_64 Oracle Linux 7Server Optional Latest (x86_64)                                 9,978
repolist: 23,662
```



正常にInstall出来るか確認するために、vimを試しにインストールしてみます

```
yum install -y vim
```



以下の依存関係が解決されて、正常にインストールを行うことが出来ます。

```
==============================================================================================================
Package                          Arch             Version                         Repository            Size
==============================================================================================================
Installing:
 vim-enhanced                     x86_64           2:7.4.160-6.el7_6               ol7_latest           1.0 M
Installing for dependencies:
 gpm-libs                         x86_64           1.20.7-5.el7                    ol7_latest            31 k
 perl                             x86_64           4:5.16.3-294.el7_6              ol7_latest           8.0 M
 perl-Carp                        noarch           1.26-244.el7                    ol7_latest            19 k
 perl-Encode                      x86_64           2.51-7.el7                      ol7_latest           1.5 M
 perl-Exporter                    noarch           5.68-3.el7                      ol7_latest            28 k
 perl-File-Path                   noarch           2.09-2.el7                      ol7_latest            26 k
 perl-File-Temp                   noarch           0.23.01-3.el7                   ol7_latest            56 k
 perl-Filter                      x86_64           1.49-3.el7                      ol7_latest            76 k
 perl-Getopt-Long                 noarch           2.40-3.el7                      ol7_latest            55 k
 perl-HTTP-Tiny                   noarch           0.033-3.el7                     ol7_latest            38 k
 perl-PathTools                   x86_64           3.40-5.el7                      ol7_latest            82 k
 perl-Pod-Escapes                 noarch           1:1.04-294.el7_6                ol7_latest            51 k
 perl-Pod-Perldoc                 noarch           3.20-4.el7                      ol7_latest            86 k
 perl-Pod-Simple                  noarch           1:3.28-4.el7                    ol7_latest           216 k
 perl-Pod-Usage                   noarch           1.63-3.el7                      ol7_latest            26 k
 perl-Scalar-List-Utils           x86_64           1.27-248.el7                    ol7_latest            35 k
 perl-Socket                      x86_64           2.010-4.el7                     ol7_latest            48 k
 perl-Storable                    x86_64           2.45-3.el7                      ol7_latest            76 k
 perl-Text-ParseWords             noarch           3.29-4.el7                      ol7_latest            13 k
 perl-Time-HiRes                  x86_64           4:1.9725-3.el7                  ol7_latest            44 k
 perl-Time-Local                  noarch           1.2300-2.el7                    ol7_latest            24 k
 perl-constant                    noarch           1.27-2.el7                      ol7_latest            18 k
 perl-libs                        x86_64           4:5.16.3-294.el7_6              ol7_latest           688 k
 perl-macros                      x86_64           4:5.16.3-294.el7_6              ol7_latest            43 k
 perl-parent                      noarch           1:0.225-244.el7                 ol7_latest            12 k
 perl-podlators                   noarch           2.5.1-3.el7                     ol7_latest           111 k
 perl-threads                     x86_64           1.87-4.el7                      ol7_latest            48 k
 perl-threads-shared              x86_64           1.43-6.el7                      ol7_latest            38 k
 vim-common                       x86_64           2:7.4.160-6.el7_6               ol7_latest           5.9 M
 vim-filesystem                   x86_64           2:7.4.160-6.el7_6               ol7_latest           9.8 k

Transaction Summary
==============================================================================================================
```



## Oracle JDK 11 を Install

Oracle JDK のパッケージを確認します。
jdkで検索すると、Open JDK も引っ掛かりますが、下の方にOracle JDK の 11 と 12 があります。

```
# yum search jdk
省略
jdk-11.0.3.x86_64 : Java Platform Standard Edition Development Kit
jdk-12.0.1.x86_64 : Java Platform Standard Edition Development Kit
jdk1.8.x86_64 : Java Platform Standard Edition Development Kit
省略
```



Oracle JDK は、OCIだと無償で商用利用が可能となっている。そのなかで JDK 11 が LTS となっているため、JDK 11 を Install します。

```
yum install -y jdk-11.0.3.x86_64
```



java の version 確認

```
# java --version 
java 11.0.3 2019-04-16 LTS 
Java(TM) SE Runtime Environment 18.9 (build 11.0.3+12-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.3+12-LTS, mixed mode)
```



# 参考URL

OCIのYum Repositoryを参照
https://yum.oracle.com/getting-started.html

OCIでJavaをInstall
https://orablogs-jp.blogspot.com/2019/06/how-to-install-oracle-java-in-oracle.html