CentOS 7.4系にOracle Database 12c Release 2 (12.2.0.1.0) をサイレンスインストール

サイレンスインストールってなんぞや?

サイレントインストールとは、インストーラ実行時にダイアログを表示してユーザからの応答を受けることなく、自動的にインストールを行う機能です。 インストール先のフォルダやインストールオプションがすべてのクライアントマシンで同じである場合には、この機能が便利です。 この機能を使用すると、ユーザのインストール時の手間が軽減されるとともに、誤った指定によるインストールミスを防ぐことができます。

4.4 サイレントインストール機能 - Fujitsu

ということらしいですね。

GUIの環境がないときに、コマンドでインストーラーを実行していくことができるということですかね。

というわけで、今回は、Oracle12cのサイレントインストールにトライしてまいりますか~。今回もハマりにハマってます(涙)。

独学の限界を感じますね...しかもネットの見識のみという(苦笑)。LinuxOracle DataBase関連を書籍で学習したいとこですね。

ということで、大いに誤ってる可能性もあるかもしれませんが、何卒ご了承ください。

 

必要なOS(オペレーティング・システム)

Oracle Database 12c Release 2 (12.2.0.1.0)をインストールするためには、それに適したOSが必要のようで、

docs.oracle.com

⇧  Oracleの公式の説明では、

項目 タスク
OSの一般的な要件 OpenSSHが手動でインストールされている(デフォルトのLinuxインストールの一部としてインストールしていない場合)。 このガイドに記載されているサポート対象のカーネルおよびリリースのリストにあるLinuxカーネル
Linux x86-64 次のLinux x86-64カーネルがサポートされています。
Oracle Linux 7およびUnbreakable Enterpriseカーネル3: 3.8.13-35.3.1.el7uek.x86_64以上
Oracle Linux 7.2およびUnbreakable Enterpriseカーネル4: 4.1.12-32.2.3.el7uek.x86_64以上
Oracle Linux 7およびRed Hat互換カーネル: 3.10.0-123.el7.x86_64以上
Red Hat Enterprise Linux 7: 3.10.0-123.el7.x86_64以上
Oracle Linux 6.4およびUnbreakable Enterpriseカーネル2: 2.6.39-400.211.1.el6uek.x86_64以上
Oracle Linux 6.6およびUnbreakable Enterpriseカーネル3: 3.8.13-44.1.1.el6uek.x86_64以上
Oracle Linux 6.8およびUnbreakable Enterpriseカーネル4: 4.1.12-37.6.2.el6uek.x86_64以上
Oracle Linux 6.4およびRed Hat互換カーネル: 2.6.32-358.el6.x86_64以上
Red Hat Enterprise Linux 6.4: 2.6.32-358.el6.x86_64以上
SUSE Linux Enterprise Server 12 SP1: 3.12.49-11.1以上
パッケージの最小要件のリストは、システム要件に関する項を確認してください。
IBM: Linux on System z 次のIBM: Linux on System zカーネルがサポートされています。
Red Hat Enterprise Linux 7.2: 3.10.0-327.el7.s390x以降
Red Hat Enterprise Linux 6.6: 2.6.32-504.el6.s390x以降
SUSE Linux Enterprise Server 12 SP1: 3.12.49-11-default s390x以上
パッケージの最小要件のリストは、システム要件に関する項を確認してください。
Oracle Linux用のOracle Preinstallation RPM Oracle Linuxを使用している場合は、使用しているLinuxリリース用のOracle Preinstallation RPMを実行して、Oracle DatabaseおよびOracle Grid Infrastructureのインストール用にオペレーティング・システムを構成することをお薦めします。
IBM: Linux on System zでのOracle RPM Checkerユーティリティ Oracle DatabaseまたはOracle Grid Infrastructureのインストールを開始する前に、Oracle RPM Checkerユーティリティを使用して、必要なRed Hat Enterprise LinuxまたはSUSEのパッケージがお使いのIBM: Linux on System zオペレーティング・システムにインストールされていることを確認することをお薦めします。
透過的なHugePagesの無効化 パフォーマンスを強化するために、透過的なHugePagesを無効にして標準のHugePagesを使用することをお薦めします。

となっています。 

そう!CentOSについては全く記載はないわけです(涙)。

Linux x86-64』の説明の中に記載されている

Oracle Linux 7およびRed Hat互換カーネル: 3.10.0-123.el7.x86_64以上
Red Hat Enterprise Linux 7: 3.10.0-123.el7.x86_64以上』の「Red Hat互換カーネル: 3.10.0-123.el7.x86_64以上」という言葉が、CentOS7系も含むことを信じるしかないかと。

 

で、Red Hat Enterprise Linux 7の場合、

docs.oracle.com

⇧   必要なパッケージが相当あるようです。

 

必要なパッケージのインストール

必要なパッケージをインストールしていくわけですが、

www.orangetakam.com

⇧  上記サイト様のコマンドを利用させていただくことにしました。

yumコマンドでインストールすればパッケージのバージョンとかはよしなに取計らわれるのではなかろうか?と信じて。

とりあえず、仮想マシンにログインして、スーパーユーザー(root)になっときます。

su

f:id:ts0818:20180311173542p:plain

そしたらば、必要パッケージをインストール。 

yum -y install \
 binutils \
 compat-libcap1 \
 compat-libstdc++-33.i686 \
 compat-libstdc++-33 \
 gcc-c++ \
 glibc.i686 \
 glibc \
 glibc-devel.i686 \
 glibc-devel \
 ksh \
 libaio.i686 \
 libaio \
 libaio-devel.i686 \
 libaio-devel \
 libgcc.i686 \
 libgcc \
 libstdc++.i686 \
 libstdc++ \
 libstdc++-devel.i686 \
 libstdc++-devel \
 libxcb.i686 \
 libxcb \
 libX11.i686 \
 libX11 \
 libXau.i686 \
 libXau \
 libXi.i686 \
 libXi \
 libXtst.i686 \
 libXtst \
 make \
 net-tools \
 smartmontools \
 sysstat

 

f:id:ts0818:20180311173812p:plain

f:id:ts0818:20180311173859p:plain

パッケージがインストールできたようです。

別途、SSHも必要となるので、OpenSSHがインストールされているか確認します。

qiita.com

⇧  上記サイト様を参考に、openssh-server がインストールされているか確認。

yum list installed | grep ssh

f:id:ts0818:20180311174618p:plain

インストールされているようです。

docs.oracle.com

⇧  一応、rpmでも確認しておきます。

rpm -qa | grep ssh

f:id:ts0818:20180311175603p:plain

 

 

カーネルパラメータの設定

Oracle Database 12c Release 2 (12.2.0.1)のインストレーション・ガイド by Linux x86-64 版』に記載されているようです。

http://www.oracle.com/technetwork/jp/database/enterprise-edition/documentation/sidb12201-inst-linux-x64-ja-v10-3627443-ja.pdf

 

そも、カーネルパラメータって何ぞや? 

そもそも呼び方が、「カーネルパラメータ」だったり「起動オプション」だったり 「引数」だったりと、統一されていないようですが、ここでは、 「カーネルパラメータ」と呼ぶことにします。

で、カーネルパラメータというのは、カーネルの個々の機能やドライバが解釈して、 それぞれの振る舞いを変更できるようにするためのものです。

カーネルパラメータ自体は、1つの文字列です。
具体的には、機能などを表すパラメータ名だけか、 「パラメータ名=値」で値を指定したものを、スペースで連結した形式になります。

Linuxのカーネルパラメータをいじくってみる - いますぐ実践! Linuxシステム管理 / Vol.237

う、う~ん...よく分からんですが、 Oracle Database 12c Release 2 (12.2.0.1)のインストレーション・ガイドで設定しろってなってるんで、設定しないといけないんでしょうね。

インストレーション・ガイドでは、

パラメータ値 要件値
semmsl 250
semmns 32000
semopm 100
semmni 128
shmall 物理メモリーサイズの 40%(単位:ページ)
shmmax 物理メモリーサイズの半分(単位:バイト)
shmmni 4096
file-max 6815744
panic_on_oops 1
aio-max-nr 1048576
ip_local_port_range 最小:9000 最大:65500
rmem_default 262144
rmem_max 4194304
wmem_default 262144
wmem_max 1048576

となっています。

 

eno0514.hatenadiary.jp

piro-shiki.dreamlog.jp

⇧  上記サイト様を参考に、カーネルパラメータのチェックをしていきたいと思います。

「semmsl」「semmns」「semopm」「semmni」のチェック。OK。

sysctl -a | grep sem

f:id:ts0818:20180311183152p:plain

「shmall」「shmmax」「shmmni」のチェック。 OK。

sysctl -a | grep shm

f:id:ts0818:20180311184037p:plain

「file-max」のチェック。 NG。

sysctl -a | grep file-max

f:id:ts0818:20180311184352p:plain

「ip_local_port_range」のチェック。 NG。

sysctl -a | grep ip_local_port_range

f:id:ts0818:20180311184601p:plain

「rmem_default」「rmem_max」のチェック。 NG。

sysctl -a | grep rmem

f:id:ts0818:20180311191406p:plain

「wmem_default」「wmem_max」のチェック。 NG。

sysctl -a | grep wmem

f:id:ts0818:20180311191628p:plain

「aio-max-nr」のチェック。 NG。

 sysctl -a | grep aio-max-nr

f:id:ts0818:20180311191750p:plain

/etc/sysctl.confの修正。viエディターで/etc/sysctl.confを開きます。

vi /etc/sysctl.conf

下記を追記します。

fs.file-max = 6815744
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000    65500
net.core.rmem_max = 4194304
net.core.rmem_default = 262144
net.core.wmem_max = 1048576
net.core.wmem_default = 262144

f:id:ts0818:20180311195129p:plain

追記したら、「Esc」キーを押して、「:wq」で保存してviエディターを終了します。 

f:id:ts0818:20180311195226p:plain

 そしたらば、一旦、仮想マシンを停止し、再起動します。

f:id:ts0818:20180311195635p:plain

f:id:ts0818:20180311195931p:plain

仮想マシンにログインします。 

f:id:ts0818:20180311200118p:plain

カーネルパラメータが設定されているかチェック。

f:id:ts0818:20180311200248p:plain

f:id:ts0818:20180311200330p:plain

f:id:ts0818:20180311200414p:plain

f:id:ts0818:20180311200454p:plain

f:id:ts0818:20180311200555p:plain

修正した値が反映されています。

再起動しなくても、

/sbin/sysctl -p

/etc/sysctl.conf ファイルに設定した値を反映できるみたいですね。

 

OS グループの作成

Oracle Database のインストールに oracle ユーザーを使用するには、OS グループおよびユーザーを作成する必要があるようです。

グループ名 グループ ID 備考
oinstall 54321 Oracle Inventory グループ
dba 54322 Database 用 OSDBA グループ
oper 54323 Database 用 OSOPER グループ
backupdba 54324 Database 用 OSBACKUPDBA グループ
dgdba 54325 Database 用 OSDGDBA グループ
kmdba 54326 Database 用 OSKMDBA グループ
racdba 54327 OSRACDBA グループ

というわけで、スーパーユーザー(root)で下記コマンドを実行。

groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
groupadd -g 54327 racdba

f:id:ts0818:20180311202715p:plain

追加されてればOK。

 

OS ユーザーの作成

Oracleというユーザーを作成。 

ユーザー名 oracle
ユーザーID 1200
プライマリ・グループ oinstall
セカンダリ・グループ dba,oper,backupdba,dgdba, kmdba,racdbahome
ディレクト /home/oracle

 

useradd -u 1200 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba -d /home/oracle oracle

f:id:ts0818:20180311204128p:plain

Oracleユーザーの パスワードを変更。

passwd oracle

f:id:ts0818:20180311204346p:plain

 

 

インストール・ディレクトリの準備

インストールに必要なディレクトリを作成します。

項目 ディレクトリ・パス 所有 OS ユーザー
Oracle Database 用 ORACLE ベース /opt/app/oracle oracle

$ORACLE_BASEに設定するディレクトリを作成。

mkdir -p /opt/app/oracle
chown oracle:oinstall /opt/app/oracle
chmod -R 775 /opt/app/oracle

f:id:ts0818:20180311205108p:plain

インベントリディレクトリの作成。(サイレントインストールの場合に必要らしいです。)

mkdir -p /opt/app/oraInventory
chown oracle:oinstall /opt/app/oraInventory
chmod -R 775 /opt/app/oraInventory

f:id:ts0818:20180311205530p:plain

 

リソース制限の設定

インストール・ソフトウェア所有者で、リソース制限が以下の推奨範囲にあるかを確認します。oracleユーザーが利用できるリソースが足りているかのチェックですかね。

/etc/security/limits.confに設定していきます。

vi /etc/security/limits.conf

f:id:ts0818:20180311221126p:plain

ファイルが開けたらば、下記を追記します。

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768

f:id:ts0818:20180311221009p:plain

保存して、viエディターを終了。

 

Oracle Database 12c Release 2 (12.2.0.1.0)のインストーラーを配置

インストーラーをダウンロードします。

http://www.oracle.com/technetwork/jp/database/enterprise-edition/downloads/index.html

にアクセスします。(Oracleへのユーザ登録が済んでいない場合は登録します。)

f:id:ts0818:20180311221905p:plain

「ライセンスに同意する」のラジオボタンにチェックを入れます。

f:id:ts0818:20180311222112p:plain

Linux x86-64」の「See All」を選択。

f:id:ts0818:20180311222254p:plain

「Accept License Agreement」にチェックを入れます。

f:id:ts0818:20180311222546p:plain

zipファイルをダウンロードします。

f:id:ts0818:20180311222729p:plain

サインインしていないと、ダウンロードが進まないので、サインインします。

f:id:ts0818:20180311223106j:plain

ダウンロードできました。 

f:id:ts0818:20180311224404p:plain

 ダウンロードしたzipファイルを仮想マシンに転送したいわけですが、今回は、Tera Termを使っていきたいと思います。

インストールしてない方は、

eng-entrance.com

⇧  上記サイト様を参考にインストールしてみてください。

(※Tera TermはWindowsでしか使えないようです。)

MacOS X)を使う場合は、

rcmdnk.com

⇧  上記サイト様が参考になるかと。

 

Tera Termでの接続情報を調べます。 

「ユーザー名」「パスワード」はともに、『OSユーザーの作成』で作成した「Oracle」ユーザーのものを利用していきます。

IPアドレスについては、仮想マシンsshログインしてる場合は、ifconfigで調べられます。

f:id:ts0818:20180311225837j:plain

もしくは、Vagrantfileで確認するのもありです。(Vagrantを使っている場合)

f:id:ts0818:20180311230127p:plain

Tera Termを起動し、ホスト(T):に仮想マシンIPアドレスを入力。

f:id:ts0818:20180311230359p:plain

初回のみ警告が出ますが、「続行(C)」をクリック。

f:id:ts0818:20180311230738j:plain

「ユーザー名」に「oracle」、「パスフレーズ」に「oracle」ユーザーのパスワードを入力し、「OK」。

f:id:ts0818:20180311234956p:plain

接続されました。

f:id:ts0818:20180311235044p:plain

 

接続ができたので、ダウンロードしていたzipファイルを仮想マシンに転送したいのですが、 

qiita.com

⇧  上記サイト様によると、Tera Termでは、Windows側から仮想マシン側へは、ドラッグ&ドロップでファイル転送ができるとのこと。

f:id:ts0818:20180311235202p:plain

 「SCP」をクリック。 

f:id:ts0818:20180311235308p:plain

ファイルが転送されます。

f:id:ts0818:20180311235358p:plain

/home/oracleにzipファイルが配置されました。

f:id:ts0818:20180311235707p:plain

 

Oracle Database 12c Release 2 (12.2.0.1.0) インストールのための準備

まずは、仮想マシンに配置したzipファイルを展開します。引き続き、Tera Termで作業していきます。

www.atmarkit.co.jp

⇧  zipファイルの場合はunzipコマンドを使って展開(解凍)する必要があるみたいですね。 

unzip linuxx64_12201_database.zip

f:id:ts0818:20180317114041p:plain

 出た...command not found。

shinomiya.hatenablog.com

⇧  上記サイト様によると、zip、unzipのコマンドはともにインストールされていないことがあるらしいですね(涙)。

というわけで、登録されてるリポジトリにunzipコマンドが存在し、yumでインストールできるか確認。

sudo yum --enablerepo=epel,remi,rpmforge info zip

f:id:ts0818:20180317121957p:plain

⇧  なんかむっちゃ怒られてる?と思いきや、

taiga.hatenadiary.com

⇧  上記サイト様によると、sudoコマンドを利用したときに、初回だけ表示されるメッセージだそうです。

内容的には、先輩プログラマーからのメッセージ的な感じで、プログラマーとしての心構えとかを贈ってくれているようです。送辞みたいな感じで、感動的ですらある雰囲気を漂わせてくれているようでした。(エラーじゃなかったんですね...失礼いたしました。)

var.blog.jp

⇧  上記サイト様は、sudoのメッセージをソースコードから追っているようです。C言語ができる方はためしてガッテンですかね。 

 

まぁ、sudoコマンド初回利用時のメッセージが問題ない(怒られているとかでは無い)こと、つまりエラーが出ているとかではないということは分かりましたが、

su: Authentication failure

⇧ こっちは完全にエラーっぽいですね。というか、failure(失敗)とか表示されちゃってますから...。

偉大な発明家として名高いトーマス・エジソンは、

失敗したわけではない。 それを誤りだと言ってはいけない。 勉強したのだと言いたまえ。私は失敗したことがない。 ただ、1万通りの、 うまく行かない方法を 見つけただけだ。

トーマス・エジソンの名言・格言集。失敗は勉強である! | 癒しツアー

と仰っているのに~、failrue!

すみません、脱線しました。『su: Authentication failure』の話に戻りますと、

rcmdnk.com

⇧  上記サイト様によると、権限の問題ということですかね?

 

oracle is not in the sudoers file. This incident will be reported.』 と怒られていたのは、一般ユーザー(今回で言うと、oracleユーザー)にsudoコマンドを使えるグループに入っていなかったからのようです。

/etc/sudoers ファイルにユーザーを追加すればいいのですが、/etc/sudoers ファイルには、あらかじめsudoコマンドを利用できるグループが用意されています。Debianの場合は、sudoグループ。CentOSの場合はwheelグループ。このグループにユーザーを追加するだけでsudoコマンドが利用できるようになります。

sudoユーザーを追加する方法 - Linux入門 - Webkaru 

webkaru.net

 

そもそも、sudoとsuって何?

sudo は sudo パッケージに含まれている。
su は util-linux パッケージに含まれている。
つまり開発元が別。ソースをちら見してみたら、全然別物のようだった。

suとsudoの違い - Qiita

qiita.com

 

sudoとsuって何のためにあるの? 

どうやら、Unixの歴史から、root権限作業を合理的に行うためにsudoは生まれたようですかね。

sudo su と su の違いとしては、パスワードで保護されている場合、sudo su で入れるのは今ログインしている一般ユーザのパスワード、su はrootのパスワードという違いがあります。/etc/sudoers の設定でsudoする際にパスワード不要にも出来ます。

Ubuntuで、suとsudoの違いが分かりません。 -Ubuntuで、suとsudoの違い- UNIX・Linux | 教えて!goo

oshiete.goo.ne.jp

sudo、suのどちらのコマンドも、root権限での作業を行うためのもののようです。 

 

javatechnology.net

⇧  上記サイト様でも仰っていますが、sudoコマンドを使う場合、sudoを実行するユーザにsudo権限がついていることが前提条件となるので、

  • /etc/sudoers ファイルを編集
  • 「usermodコマンド」を利用

のどちらか(他にも方法はあると思われますが)で、sudoコマンドを利用できるグループに、一般ユーザー(作成したユーザー、今回で言うとoracleユーザー)を追加してあげる必要があるようです。

現段階で、sudoコマンドが使えないのは納得。

じゃあ、suコマンドが使えないのは?

d.hatena.ne.jp

⇧  上記サイト様によると、 

  • パスワードを間違っている
  • suコマンドがsetuidされてない
  • pam.wheel.soが入ってる(/etc/pam.d/suでauth required pam.wheel.so use_uidが有効になってしまっている)

このへんが影響してくるようです。

一旦、コマンドプロンプトvagrantユーザーでsshログインして確認してみます。

だが、しかし!

f:id:ts0818:20180317143311p:plain

特に問題なさそうな感じ?と思いきや、Vagrantの仕様の問題によりPAM(Pluggable Authentication Modules)がかっちり設定されている場合があるという情報が!

www.ikemo3.com

⇧  上記サイト様によると、 

account         required        pam_succeed_if.so user notin root:vagrant

⇧ の部分がrootとvagrantのユーザーのみsuが利用できるという設定になってしまっているということみたいです。

 

ちなみにPAM(Pluggable Authentication Modules)については、

oxynotes.com

⇧  上記サイト様が説明してくれています。

 

PAM の設定を理解する - いますぐ実践! Linuxシステム管理 / Vol.105

⇧  上記サイト様も詳しいです。 

 

Wikipediaによると、PAM(Pluggable Authentication Modules)は、

pluggable authentication module (PAM) is a mechanism to integrate multiple low-level authentication schemes into a high-level application programming interface (API). It allows programs that rely on authentication to be written independently of the underlying authentication scheme. PAM was first proposed by Sun Microsystems in an Open Software Foundation Request for Comments (RFC) 86.0 dated October 1995. It was adopted as the authentication framework of the Common Desktop Environment. As a stand-alone open-source infrastructure, PAM first appeared in Red Hat Linux 3.0.4 in August 1996 in the Linux PAM project. PAM is currently supported in the AIX operating systemDragonFly BSD,FreeBSDHP-UXLinuxMac OS XNetBSD and Solaris.

Since no central standard of PAM behavior exists, there was a later attempt to standardize PAM as part of the X/Open UNIX standardization process, resulting in the X/Open Single Sign-on (XSSO) standard. This standard was not ratified, but the standard draft has served as a reference point for later PAM implementations (for example, OpenPAM).

Pluggable authentication module - Wikipedia

と説明してくれています...分からん~。

 

困ったときは、日本のサイト!

www.atmarkit.co.jp

PAM(Pluggable Authentication Module)とは、 各種の認証処理を実行するモジュール群と、 それを利用するための標準的なAPIApplication Programming Interface)を備えたライブラリからなるユーザー認証システムのことです。 ユーザーに各種サービスを提供するアプリケーションプログラムは、PAMのAPIを通してPAMモジュールに認証処理を依頼することができます。

PAMを利用して認証を行う

ということらしいっすね。

 

長々と脱線しましたが、rootとvagrant以外のユーザーである、一般ユーザー(今回で言うとoracleユーザー)でsuが利用できるようにしたいですね。

qiita.com

⇧  上記サイト様を参考に、設定できるかトライ。

まずは、スーパーユーザー(rootユーザー)に切り替わります。exitコマンド連打の理由は、

eng-entrance.com

⇧  上記サイト様で。

そしたらば、viエディターで、/etc/pam.d/suファイルを開きます。スーパーユーザー(rootユーザー)以外の一般ユーザーの場合は、sudo viでファイルを開かないとファイルの保存ができないので注意ですかね。

vi /etc/pam.d/su

f:id:ts0818:20180317162459p:plain

で開いてみたけど... 

『account required pam_succeed_if.so user notin root:vagrant』ていう記述は見当たらいっすね...CentOS7系だとまた異なるっちゅうことですかね。

#%PAM-1.0
auth            sufficient      pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient      pam_wheel.so trust use_uid

# Uncomment the following line to require a user to be in the "wheel" group.
#auth           required        pam_wheel.so use_uid
auth            substack        system-auth
auth            include         postlogin
account         sufficient      pam_succeed_if.so uid = 0 use_uid quiet
account         include         system-auth
password        include         system-auth
session         include         system-auth
session         include         postlogin
session         optional        pam_xauth.so
~

f:id:ts0818:20180317165603p:plain

 

teratail.com

⇧  上記サイト様によると、

 『account sufficient pam_succeed_if.so uid = 0 use_uid quiet』の記述があるとrootユーザーのみsuできるってことですかね?

 

というか、

mag.osdn.jp

 ⇧  上記サイト様によりますと、

『auth sufficient pam_rootok.so』という記述があると、「それ以上のチェックを行わずに、rootユーザのアクセスを許可する。」となっていますね、vagrantユーザーでsuできるのは何でやねん!と謎が深まるばかり。

と思ったけど、rootユーザーじゃない場合は、『auth sufficient pam_rootok.so』の条件で処理を抜けずに、次の『auth substack system-auth』の条件にマッチするかっていう感じで、次へ次へとチェックしていく感じですかね。

そんじゃ、uidを調べてみますか~。

eng-entrance.com

あいや~、結果からすると、/etc/pam.d/suファイルにvagrantユーザーの設定は無さそうなんですが~。『account sufficient pam_succeed_if.so uid = 0 use_uid quiet』はrootユーザー向けの設定ってことですね。

f:id:ts0818:20180317184220p:plain

行き詰った感が...。

 

ちなみに、モジュールは、

モジュールの正式な一覧は存在しないが、以下では、利用される可能性の高いモジュールについて説明する。通常、PAMモジュールは「/lib/security」(64ビット版の場合は「/lib64/security」)に用意されているが、ディストリビューションによっては「/usr/lib/security」になっていることもある。

詳細については、「man <PAMモジュール名>」を実行して確認してほしい。

PAMを利用したGNU/Linuxのセキュリティ管理 | OSDN Magazine

 ということみたいですね。

f:id:ts0818:20180317175404p:plain

PAM認証の設定ファイルは、/etc/pam.d/ に配置されてるそうな。

f:id:ts0818:20180317185921p:plain

f:id:ts0818:20180317190220p:plain

確かに、

「system-auth」「postlogin」とかいますね。

だから、何?と思ってしまうわけです。suコマンドに関しての問題は全く前進してないですしね。

とりあえず、/etc/pam.d/su のバックアップを作成して、編集してみますか。

 

f:id:ts0818:20180317200756p:plain

lsコマンドで文字化けすると思ったら、ロケール設定がダメらしい。

f:id:ts0818:20180317203407p:plain

 

ygkb.jp

⇧  上記サイト様によると、 locale -a で指定できるロケールの一覧が表示できるそう。

f:id:ts0818:20180317203933p:plain

 日本語対応のutf8にすれば解消されますかな?

f:id:ts0818:20180317204139p:plain

export LC_ALL=ja_JP.utf8
export LANG=ja_JP.utf8
export LANGUAGE=ja_JP.utf8
export LC_CTYPE="ja_JP.utf8"
export LC_NUMERIC="ja_JP.utf8"
export LC_TIME="ja_JP.utf8"
export LC_COLLATE="ja_JP.utf8"
export LC_MONETARY="ja_JP.utf8"
export LC_MESSAGES="ja_JP.utf8"

f:id:ts0818:20180317204841p:plain

 localeが変わったようだけど、

f:id:ts0818:20180317205219p:plain

全く解消されず...

f:id:ts0818:20180317205503p:plain

⇧  コマンドプロンプトだと限界かな...。このへんの問題は時間のあるときに調査で。

 

/etc/pam.d/su のバックアップとしてsu.bakファイルができてるのを確認できたので、/etc/pam.d/su を編集していきます。「account sufficient pam_succeed_if.so uid = 0 use_uid quiet」行のすぐ下に、追記。(uid、gidの値は、作成したoracleユーザーのものを指定しています。)

account         [success=ignore default=1]  pam_succeed_if.so uid = 1200 quiet
account         required        pam_succeed_if.so gid = 54321 use_uid quiet

f:id:ts0818:20180317211856p:plain

で、編集したけど全く解消されず。しかも日本語になってもしょうがないところが日本語になってるし...。

f:id:ts0818:20180317212834p:plain

致し方ないので、rootユーザーに戻るときは、exitコマンドでいく方針で。

誰か解決策あったら教えてください!

 

ともかく、unzipコマンドをyumでインストールっすね。 unzipコマンドは登録されてるリポジトリに存在するようです。

f:id:ts0818:20180317214259p:plain

さっそくインストール。

sudo yum install unzip

f:id:ts0818:20180317214521p:plain

f:id:ts0818:20180317214547p:plain

f:id:ts0818:20180317214715p:plain

ようやく、zipファイル(Oracle Database 12c Release 2 )を展開(解凍)できますかね。一応、oracleユーザーに切り替えて、cd ~ で/home/oracle に移動しておきます。(zipファイルを配置したディレクトリまで移動)

そしたらば、unzip!

 unzip linuxx64_12201_database.zip

f:id:ts0818:20180317215450p:plain

f:id:ts0818:20180317215917p:plain

 databaseフォルダとして展開されています。

f:id:ts0818:20180317220220p:plain

 

レスポンスファイルの作成

GUIインストーラーの指示があるときに入力していく項目などを、ファイルに設定しておくことで、サイレントインストールを行うことができるようです。

本来であれば、AnsibleやChefやPuppetなどの「構成管理ツール」(Configuration Management) と呼ばれるもので、インストールしていくのが良いとは思われますが、技術習得の時間がないため割愛。

話を戻しまして、レスポンスファイルの雛形が展開されたフォルダの中にあり、「database/response/db_install.rsp」がそれにあたります。バックアップを作成しておきます。

f:id:ts0818:20180317222053p:plain

編集するので、一旦、rootユーザーに切り替えてから、viエディターで開きます。

f:id:ts0818:20180317222512p:plain

 ファイルの中身を書き換えます。(今回は、ファイルの中身を一旦、全部削除してますが、必要な設定箇所に追記する感じのほうが良いかもです。)

f:id:ts0818:20180317223820p:plain

全選択削除は、

Vimで全選択コピーをクリップボードに | じゃがいもは野菜です

⇧  上記サイト様を参考に、

ggVGd

f:id:ts0818:20180317225218p:plain

「--No lines in buffer--」と表示されていれば削除されてるので、

f:id:ts0818:20180317225455p:plain

⇧  ここに設定を張り付けます。内容は、

github.com

⇧  上記サイト様を参考にさせていただきました。

database/response/db_install.rspに下記内容を記述します。

oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v12.2.0
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/opt/app/oraInventory
SELECTED_LANGUAGES=ja,en
ORACLE_BASE=/opt/app/oracle
ORACLE_HOME=/opt/app/oracle/product/12.2.0.1/dbhome_1
oracle.install.db.InstallEdition=EE

###############################################################################
#                                                                             #
# PRIVILEGED OPERATING SYSTEM GROUPS                                          #
# ------------------------------------------                                  #
# Provide values for the OS groups to which SYSDBA and SYSOPER privileges     #
# needs to be granted. If the install is being performed as a member of the   #
# group "dba", then that will be used unless specified otherwise below.       #
#                                                                             #
# The value to be specified for OSDBA and OSOPER group is only for UNIX based #
# Operating System.                                                           #
#                                                                             #
###############################################################################


oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=oper
oracle.install.db.BACKUPDBA_GROUP=backupdba
oracle.install.db.DGDBA_GROUP=dgdba
oracle.install.db.KMDBA_GROUP=kmdba
oracle.install.db.OSRACDBA_GROUP=racdba

###############################################################################
#                                                                             #
#                               Grid Options                                  #
#                                                                             #
###############################################################################

oracle.install.db.rac.configurationType=
oracle.install.db.CLUSTER_NODES=
oracle.install.db.isRACOneInstall=
oracle.install.db.racOneServiceName=
oracle.install.db.rac.serverpoolName=
oracle.install.db.rac.serverpoolCardinality=


###############################################################################
#                                                                             #
#                        Database Configuration Options                       #
#                                                                             #
###############################################################################

oracle.install.db.config.starterdb.type=
oracle.install.db.config.starterdb.globalDBName=
oracle.install.db.config.starterdb.SID=
oracle.install.db.ConfigureAsContainerDB=
oracle.install.db.config.PDBName=
oracle.install.db.config.starterdb.characterSet=
oracle.install.db.config.starterdb.memoryOption=
oracle.install.db.config.starterdb.memoryLimit=
oracle.install.db.config.starterdb.installExampleSchemas=

###############################################################################
#                                                                             #
# Passwords can be supplied for the following four schemas in the	      #
# starter database:      						      #
#   SYS                                                                       #
#   SYSTEM                                                                    #
#   DBSNMP (used by Enterprise Manager)                                       #
#                                                                             #
# Same password can be used for all accounts (not recommended) 		      #
# or different passwords for each account can be provided (recommended)       #
#                                                                             #
###############################################################################

oracle.install.db.config.starterdb.password.ALL=
oracle.install.db.config.starterdb.password.SYS=
oracle.install.db.config.starterdb.password.SYSTEM=
oracle.install.db.config.starterdb.password.DBSNMP=
oracle.install.db.config.starterdb.password.PDBADMIN=
oracle.install.db.config.starterdb.managementOption=
oracle.install.db.config.starterdb.omsHost=
oracle.install.db.config.starterdb.omsPort=
oracle.install.db.config.starterdb.emAdminUser=
oracle.install.db.config.starterdb.emAdminPassword=

###############################################################################
#                                                                             #
# SPECIFY RECOVERY OPTIONS                                 	              #
# ------------------------------------		                              #
# Recovery options for the database can be mentioned using the entries below  #
#                                                                             #
###############################################################################

oracle.install.db.config.starterdb.enableRecovery=
oracle.install.db.config.starterdb.storageType=
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
oracle.install.db.config.asm.diskGroup=
oracle.install.db.config.asm.ASMSNMPPassword=
MYORACLESUPPORT_USERNAME=
MYORACLESUPPORT_PASSWORD=
SECURITY_UPDATES_VIA_MYORACLESUPPORT=
DECLINE_SECURITY_UPDATES=true
PROXY_HOST=
PROXY_PORT=
PROXY_USER=
PROXY_PWD=
COLLECTOR_SUPPORTHUB_URL=

f:id:ts0818:20180317232906p:plain

 右クリックで貼り付けたら(稀に、先頭行の先頭が欠けてペーストされることがあるので注意です。自分は気づかず相当ハマりました。)、「Esc」キーを押し、「:wq」で保存し、viエディターを閉じます。

 

2018年5月6日(日) 追記(超超超重要):

データベースを作成した後でキャラクタ・セットを変更すると、一般的に、時間およびリソースの面で大きなコストがかかります。このような処理を行うには、データベース全体をエクスポートした後で再びインポートすることにより、すべての文字データの変換が必要な場合もあります。そのため、データベース・キャラクタ・セットは、インストールの時点で慎重に選択することが重要です。

インストール中のキャラクタ・セット選択について - Oracle® Databaseグローバリゼーション・サポート・ガイド リリース2 (12.2)

ってあるように、データベース・キャラクタ・セットはインストール時に設定しておく必要があるようです。

設定できるデータベース・キャラクタ・セットは、種類がいろいろあり、

 

#-------------------------------------------------------------------------------
# Specify the Starter Database character set.
#
#  One of the following
#  AL32UTF8, WE8ISO8859P15, WE8MSWIN1252, EE8ISO8859P2,
#  EE8MSWIN1250, NE8ISO8859P10, NEE8ISO8859P4, BLT8MSWIN1257,
#  BLT8ISO8859P13, CL8ISO8859P5, CL8MSWIN1251, AR8ISO8859P6,
#  AR8MSWIN1256, EL8ISO8859P7, EL8MSWIN1253, IW8ISO8859P8,
#  IW8MSWIN1255, JA16EUC, JA16EUCTILDE, JA16SJIS, JA16SJISTILDE,
#  KO16MSWIN949, ZHS16GBK, TH8TISASCII, ZHT32EUC, ZHT16MSWIN950,
#  ZHT16HKSCS, WE8ISO8859P9, TR8MSWIN1254, VN8MSWIN1258
#-------------------------------------------------------------------------------
oracle.install.db.config.starterdb.characterSet=

で、どれ設定すれば良いの?ですが、

Oracle Databaseのキャラクタ・セット「UTF8」mutatsu.wordpress.com

⇧  上記サイト様によりますと、「AL32UTF8」を設定しておけば良さそうです。

database/response/db_install.rspの中で、「oracle.install.db.config.starterdb.characterSet」の項目を

oracle.install.db.config.starterdb.characterSet=AL32UTF8

としておけば問題なさそうです。

Oracleの説明でも、

国際的な汎用性を維持し、最新技術や今後の技術、言語の要件に合せるためにUnicodeを選択することをお薦めします。Unicode規格で規定されているキャラクタ・セットは、使用頻度が高い最近の書き言葉にも、めったに使用されない古い文字にもすべて対応しています。また、技術分野、科学分野、音楽表記などの各種の記号にも対応しています。JavaWindows、HTML、XMLなどの各種技術に固有のキャラクタ・セットであり、また推奨のキャラクタ・セットです。このような汎用キャラクタ・セットは他にありません。さらに、Unicodeは工業分野で大きな支持を受けており、採用する動きが急速に広まっています。

キャラクタ・セットの移行の概要 - Oracle® Databaseグローバリゼーション・サポート・ガイド リリース2 (12.2)

となっており、 

AL32UTF8はOracleが実装したUnicodeであり、ASCII文字の文字コードを1バイト、欧州系の文字と中東地方の言語を2バイト、東南アジア系の言語を3バイトで表現します。したがって、Unicodeの保存に必要な領域は通常、同じ言語で比較した場合に、従来のキャラクタ・セットの必要領域よりも多くなります。

キャラクタ・セットの移行の概要 - Oracle® Databaseグローバリゼーション・サポート・ガイド リリース2 (12.2)

「AL32UTF8」 を推奨?してそうです。

 

⇧  2018年5月6日(日)追記  終了。 

2018年5月13日(日) 追記(超超超重要):

どうやら、文字データに関しては、

Oracleでは、データベースが文字データを保存する際の文字コードを示す「データベースキャラクタセット」と、クライアント環境に適した文字コードを指定する「NLS_LANG」と呼ばれる2つのパラメータで、主に文字コードの扱いを決定しています。

文字化けに関するトラブルに強くなる【基礎編】 (1/3):Oracleトラブル対策の基礎知識(5) - @IT

www.atmarkit.co.jp

⇧  上記サイト様によりますと、

  • データベース・キャラクタ・セット
  • NLS_LANG

の2つが影響してくるようで、「NLS_LANG」の設定も行ってあげる必要があるようです。 (ただし、JDBC接続を利用する場合はこの限りではない。後述)

「NLS_LANG」は、NLSパラメータのうちの1つで、 

NLS (各国語サポート)パラメータにより、クライアントおよびサーバー両方でのロケール固有の動作が決定します。NLSパラメータは、次の4通りの方法で指定できます。

  • SQL関数での明示的な設定

  • ALTER SESSION文による設定
  • 環境変数としての設定
  • 初期化パラメータ・ファイル内での指定

NLSパラメータの設定 - Oracle® Databaseグローバリゼーション・サポート・ガイド リリース2 (12.2)

⇧  4つの方法で設定できるようです。

「NLS_LANG」に何も設定しない場合は、デフォルトの設定が適用されるらしく、

たとえば、Oracle InstallerでNLS_LANGが移入されない場合、その値はデフォルトでAMERICAN_AMERICA.US7ASCIIとなります。

NLS_LANG のデフォルト値は AMERICAN_AMERICA.US7ASCII - ablog

d.hatena.ne.jp

⇧  上記サイト様によりますと、「US7ASCII(AMERICAN_AMERICA.US7ASCII)」になってしまうようです。

 

ただ、JDBC接続で接続時は、「NLS_LANG」は利用されないようです。

Oracle JDBCを使用してOracle Databasesに接続するJavaアプリケーションは、NLS_LANGを使用しません。かわりに、アプリケーションが実行されるJava VMのデフォルト・ロケールが、Oracle JDBCによってOracle Databaseの言語とテリトリ設定にマップされます。Oracle JDBCは、これらの設定を使用して、接続されたデータベース・セッションを構成します。Javaは内部的にUnicodeで動作するため、クライアント・キャラクタ・セットは常にUnicodeに設定されます。アプリケーションで明示的に変更した場合を除き、Java VMのデフォルト・ロケールは、Java VMが実行されるユーザーのオペレーティング・システムに基づいて設定されます。Java VMのデフォルト・ロケールの設定の詳細は、Java VMのドキュメントを確認してください。

クライアント接続の言語およびロケール・プリファレンスの設定 - Oracle® Databaseインストレーション・ガイド リリース2 (12.2) for Linux

JavaからJDBC接続でDBとやり取りする場合は、「データベース・キャラクタ・セット」「Java VMのデフォルト・ロケール」の2つを考えておけば良さそうです。

 

⇧  2018年5月13日(日)追記  終了。 

 

 

oracleユーザーでインストール

oracleユーザーに切り替えておきます。

f:id:ts0818:20180317233323p:plain

フォルダを移動して、インストーラーを実行!

/home/oracle/database/runInstaller -ignoreSysPrereqs -waitforcompletion -silent -responseFile /home/oracle/database/response/db_install.rsp

f:id:ts0818:20180318140504p:plain

 [WARNING]とか出てるし...

gowatana.blogspot.jp

⇧  上記サイト様によると、この[WARNING]は出ても大丈夫そうです。

f:id:ts0818:20180318145010p:plain

 しばし待つと、手順が表示されます。

f:id:ts0818:20180318145336p:plain

rootユーザーになってから、

  • /opt/app/oraInventory/orainstRoot.sh
  • /opt/app/oracle/product/12.2.0.1/dbhome_1/root.sh

のコマンドを実行すれば良さそうですね。

rootユーザーに切り替えて、

f:id:ts0818:20180318145826p:plain

さっそく、コマンドを実行。1つ目。

/opt/app/oraInventory/orainstRoot.sh

f:id:ts0818:20180318150149p:plain

f:id:ts0818:20180318150220p:plain

⇧  無事にコマンドが実行されたようです。

では、2つ目のコマンドを実行。

/opt/app/oracle/product/12.2.0.1/dbhome_1/root.sh

f:id:ts0818:20180318150345p:plain

f:id:ts0818:20180318150442p:plain

 ⇧  分かりづらいですが、OKみたいです。

 で、本当にインストールされたんですかね?Checkって言われてるけど、log見れば良いんですかね?

f:id:ts0818:20180318151953p:plain

で、log見ますと、

f:id:ts0818:20180318153106p:plain

ってなってますね。ORACLE_HOMEにいろいろインストールされていればOKのようです。

f:id:ts0818:20180318155704p:plain

⇧  無事、インストールされてますね。sqlplusやsqldeveloperなど(SQL*Plus、 SQL Developerのこと)のクライアントソフト(DBに接続するためのソフト)などもインストールされています。

sqlplusの実行ファイルは、 $ORACLE_HOME/bin/sqlplus にあるようです。

ちなみに、ORACLE_HOMEを環境変数に追加してないので、

f:id:ts0818:20180318160903p:plain

⇧  echo $ORACLE_HOMEを実行しても、まだ何も表示されない状態です。

docs.oracle.com

⇧  公式の説明だと、何かしら設定する感じですね。

ORACLE_HOMEやORACLE_SIDの設定やデータベースの作成などは、また時間を見てトライしていきたいですね。

そして、Tera Termほとんど使ってないですね....

今回はこのへんで。

 

 

 

番外編:Windowsだけでもsshできる時代

ちょっと前までは、WindowsSSHを利用するには、Tera TermやPuttyなどのSSHに対応しているクライアントソフトを導入するか、コマンドプロンプトの代わりにMsys2(Minimal SYStem2) やCygwinなどのUnix系のコマンド(OpenSSHとかが使える)が実行できる環境を導入する必要があったわけです、たぶん。

日記/2017/10/09/MSYS2,MinGW64,Cygwinの違い - Glamenv-Septzen.net

⇧  Msys2とかについては上記サイト様が詳しいかと。

 

ですが、Microsoftも『それではいかんよね、時代の波に乗らねば』ということで、

Microsoftは、2015年半ばからOpenSSHのWindows実装を目指しており、既にGitHub上では「Win32-OpenSSH」として開発してきた。

Windows 10ミニTips(237) Microsoft製SSHクライアントを使う | マイナビニュース

ということらしく、

news.mynavi.jp

⇧  上記サイト様によると、

Windows10 バージョン1607(Anniversary update)から、SSH(Secure Shell)を暗にサポートしてきたWindows 10だが、現在のバージョン1709(Fall Creators Update)では、より簡単な操作でSSHの利用が可能になる。 

Windows 10ミニTips(237) Microsoft製SSHクライアントを使う | マイナビニュース

Windows 10のあるバージョンからは、デフォルトでSSHが使えるようになってきているらしいですね。

 

 そんなこんなで、コマンドプロンプト仮想マシンにログインしようとして、

f:id:ts0818:20180317001608j:plain

f:id:ts0818:20180317001621j:plain

 ありゃ?エラーですやん。仮想マシンにログインできとらんですね...。

f:id:ts0818:20180316233622p:plain

ネットで調べても、「Write failed: Broken pipe」ってワードが圧倒的にヒットしますが、『packet_write_wait: Connection to <host> port 22: Broken pipe』と同じ意味と考えて良さそうな気がします。

Linux環境設定/Broken pipeでsshが切断される場合の対処 - Linuxと過ごす

⇧  上記サイト様によりますと、

Broken pipeと出力される原因は、クライアントからサーバ(ssh接続先)に対して
一定時間無操作ためタイムアウトにより切断されたと思われます。

Linux環境設定/Broken pipeでsshが切断される場合の対処 - Linuxと過ごす

ということらしく、 

qiita.com

 ⇧  上記サイト様によると、

sshはある程度の時間操作をせずにいるとタイムアウトにより自然に切断される仕組みになっているためであり、クライアント側orサーバ側でsshの設定を変更する必要があります。

「Write failed: Broken pipe」によりsshが切断された時の対処法 - Qiita

SSHの設定の問題ですかね。 

 

inamuu.com

⇧  上記サイト様によると、MACアドレスの問題も絡んでる場合があるようですね。

自分の場合ですと、VM仮想マシン)を結構作成していたので、知らず知らずのうちにMACアドレスが同じになってしまっていたということですかね。

 

今回は、設定とかを変えることなく再度sshコマンドを実行したら、接続できましたが、MACアドレスの設定とかも考慮しないといけないようですね。

f:id:ts0818:20180317003246p:plain

 

ネットワークの知識が欲しいですね~。