おらくるのいる生活

OracleのDBAとしての、障害対応やらパフォーマンス・チューニングやらの日々を綴っています

preinstall.rpmを使ってOracle 21c をインストールしてみた(1)

2021年8月30日にオンプレミス版の21cがリリースされましたね。

業務で使う事は当分、無さそうですが検証環境でインストールしてみました。

環境は以下の通りです。

Oracle Restart(SIHA) EE 21.3.0.0

Oracle Linux 8.2

動作保証を確認すると、使用できるOSは以下の通りです。

・SLES15、RHEL8、OracleLinux8、OracleLinux7

・Windows2019,2016,2012R2、10

上記の通り、一番無難そうなOracleLinux8を選び、VMサーバにインストールしました。

インストールユーザ(ここではoracle)を作成し、ASMで使用するディスクも用意しておきます。

※preinstall.rpmを使えばインストールユーザも自動作成してくれますが、ここではidを指定したかったので先に作成しておきました。

# groupadd -g 301 oinstall
# groupadd -g 302 dba
# useradd -u 301 -g oinstall -G dba oracle

次にインストールユーザでディレクトリを作成し、インストールバイナリを解凍します。

$ mkdir -p /u01/app/21.0.0/grid

$ unzip LINUX.X64_213000_grid_home.zip -d /u01/app/21.0.0/grid/

Oracleのインストールには追加パッケージが色々と必要になるのでこのままインストールできないのは明らかですが、とりあえず前提条件チェックを実行してみました。

$ cd /u01/app/21.0.0/grid

$ ./runcluvfy.sh stage -pre hacfg -fixup -verbose 
/u01/app/21.0.0/grid/perl/bin/perl: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory

$ ls -l /u01/app/21.0.0/grid/lib/stubs/libnsl.so.1
 -rw-r--r--. 1 oracle oinstall 28512 Apr 23  2018 /u01/app/21.0.0/grid/lib/stubs/libnsl.so.1

エラーになってしまいましたね…。libnsl.so.1が存在しないとか言っていますが、ファイルはあるし、権限の問題でも無さそうです。

環境変数の LD_LIBRARY_PATH を設定してみましたが、改善せず。

必要な追加パッケージをインストールしておかないと、前提条件チェックすら動かないようです。

インストールマニュアルを読んで、必要な追加パッケージをインストール…とやるのは面倒なので、今回は便利な preinstall.rpm を使用する事にします。

Oracle Preinstallation RPMは、Oracle Linux NetworkまたはOracle Linux DVDから入手でき、インストール前のほとんどの構成タスクを完了できます。

 

インターネットに接続できる環境かつOSがOracleLinuxであれば、preinstall.rpmを用意するだけでそのままインストール可能ですが、OSがRHELであったり、インターネットに接続できない環境であればローカルリポジトリの設定が必要です。

 

今回、使用するOSはOracleLinuxですが、外部ネットワークには接続できない環境なので、ローカルリポジトリを設定します。

まずOSのisoイメージを、任意のマウントポイント(ここでは/mnt )にマウントします。

/etc/yum.repos.d の直下にリポジトリファイルを置きます。拡張子が「.repo」であれば、名前は任意です。

[dvd_app]
name=OL8_app
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=1
gpgkey=file:///mnt/RPM-GPG-KEY-oracle

[dvd_base]
name=OL8_base
baseurl=file:///mnt/BaseOS
enabled=1
gpgcheck=1
gpgkey=file:///mnt/RPM-GPG-KEY-oracle

name ・・・ リポジトリ名。分かりやすい任意の名前を付けておきます。
baseurl ・・・ 「file://」に続けてリポジトリのパス(マウントポイント以下のrepodataディレクトリの一つ上のパス)を指定。「/」が3つになるのがポイントです。
enabled ・・・ 1であれば、このリポジトリは有効。
gpgcheck ・・・ 1であれば、パッケージの署名を確認。
gpgkey ・・・ マウントポイント以下のGPG署名ファイルを『file://』に続けて指定。

[dvd_app]、[dvd_base]はリポジトリIDですが、これもリポジトリ名同様、分かりやすい任意の名前を付けておきます。

他のリポジトリは無効にしておくので、/etc/yum.repos.dの下にある他のファイルのenabledを0に設定します。

この状態で使用可能なリポジトリを確認すると、以下の様になります。

# yum repolist all
repo id                 repo name                                                                     status
dvd_app                 OL8_app                                                                       enabled
dvd_base                OL8_base                                                                      enabled
ol8_UEKR6               Latest Unbreakable Enterprise Kernel Release 6 for Oracle Linux 8 (x86_64)    disabled
ol8_UEKR6_RDMA          Oracle Linux 8 UEK6 RDMA (x86_64)                                             disabled
ol8_addons              Oracle Linux 8 Addons (x86_64)                                                disabled
ol8_appstream           Oracle Linux 8 Application Stream (x86_64)                                    disabled
ol8_baseos_latest       Oracle Linux 8 BaseOS Latest (x86_64)                                         disabled
ol8_codeready_builder   Oracle Linux 8 CodeReady Builder (x86_64) - Unsupported                       disabled
ol8_u0_baseos_base      Oracle Linux 8 BaseOS GA (x86_64)                                             disabled
ol8_u1_baseos_base      Oracle Linux 8.1 BaseOS (x86_64)                                              disabled
ol8_u2_baseos_base      Oracle Linux 8.2 BaseOS (x86_64)

rootユーザでインストールします。

# yum -y localinstall oracle-database-preinstall-21c-1.0-1.el8.x86_64.rpm

(中略)

Installed:
  compat-openssl10-1:1.0.2o-3.el8.x86_64        glibc-devel-2.28-101.0.1.el8.x86_64
  ksh-20120801-254.0.1.el8.x86_64               libnsl-2.28-101.0.1.el8.x86_64
  libxcrypt-devel-4.1.1-4.el8.x86_64            lm_sensors-libs-3.4.0-21.20180522git70f7e08.el8.x86_64
  make-1:4.2.1-10.el8.x86_64                    oracle-database-preinstall-21c-1.0-1.el8.x86_64
  sysstat-11.7.3-2.el8.x86_64

Complete!

9つの追加パッケージがインストールされました。

preinstall.rpmが便利なのはこれだけではありません。

sysctl.confを確認すると、カーネルパラメータも変更されています。

# oracle-database-preinstall-21c setting for fs.file-max is 6815744
fs.file-max = 6815744

# oracle-database-preinstall-21c setting for kernel.sem is '250 32000 100 128'
kernel.sem = 250 32000 100 128

# oracle-database-preinstall-21c setting for kernel.shmmni is 4096
kernel.shmmni = 4096

# oracle-database-preinstall-21c setting for kernel.shmall is 1073741824 on x86_64
kernel.shmall = 1073741824

# oracle-database-preinstall-21c setting for kernel.shmmax is 4398046511104 on x86_64
kernel.shmmax = 4398046511104

# oracle-database-preinstall-21c setting for kernel.panic_on_oops is 1 per Orabug 19212317
kernel.panic_on_oops = 1

# oracle-database-preinstall-21c setting for net.core.rmem_default is 262144
net.core.rmem_default = 262144

# oracle-database-preinstall-21c setting for net.core.rmem_max is 4194304
net.core.rmem_max = 4194304

# oracle-database-preinstall-21c setting for net.core.wmem_default is 262144
net.core.wmem_default = 262144

# oracle-database-preinstall-21c setting for net.core.wmem_max is 1048576
net.core.wmem_max = 1048576

# oracle-database-preinstall-21c setting for net.ipv4.conf.all.rp_filter is 2
net.ipv4.conf.all.rp_filter = 2

# oracle-database-preinstall-21c setting for net.ipv4.conf.default.rp_filter is 2
net.ipv4.conf.default.rp_filter = 2

# oracle-database-preinstall-21c setting for fs.aio-max-nr is 1048576
fs.aio-max-nr = 1048576

# oracle-database-preinstall-21c setting for net.ipv4.ip_local_port_range is 9000 65500
net.ipv4.ip_local_port_range = 9000 65500

さらにoracleユーザのシェル制限も設定されています。

こちらはlimits.confではなく、oracle-database-preinstall-21c.confというファイルが/etc/security/limits.dの配下に設定されていました。

oracle   soft   nofile    1024
oracle   hard   nofile    65536
oracle   soft   nproc    16384
oracle   hard   nproc    16384
oracle   soft   stack    10240
oracle   hard   stack    32768
oracle   hard   memlock    134217728
oracle   soft   memlock    134217728
oracle   soft   data    unlimited
oracle   hard   data    unlimited

ネットワーク設定(/etc/sysconfig/network)もされています。

NOZEROCONF=yes

設定を有効にします。

# /sbin/sysctl -p
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500

SELinuxの設定はしてくれないので、自分で修正します。

/etc/selinux/configファイルの

SELINUX=enforcing を

SELINUX=permissive に変更して、コマンド実行。

# setenforce Permissive

ファイアウォールの設定も行います。

検証環境なので止めておきます。

# systemctl stop firewalld
# systemctl disable firewalld
# systemctl status firewalld

● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

これでOS周りの準備が整いました。

preinstall.rpmを使うとかなり楽ですね。