LoginSignup
0
2

More than 5 years have passed since last update.

Chefを使ってOracle Databaseをサイレント・インストールしてみた

Last updated at Posted at 2016-06-28

概要

Oracle Data baseにはOracle Universal Installerを利用してGUIからのインストールと、GUIを利用しないサイレント・モード・インストールがあります。

サイレント・インストールは、対話形式をとらずにバッチ処理としてインストール作業を実施します。そのため、画面表示ができないサーバ環境などには便利な機能です。
一方で、サイレント・インストールを実施するために、事前にレスポンスファイルと呼ばれるインストール時に入力する情報を事前に定義しておくファイルを作成する必要があります。

Chefを使ってやりたい事

通常であれば、レスポンスファイルを作成して任意の場所に配置し、Oracle Universal Installerでサイレント・インストールを実施する際にパラメータとして設定を行います。
そこで、Chefを利用してレスポンスファイルの作成、そして配置作業も、Oracle Databaseのインストールに併せて自動で実施できるようにします。

今回作成するRecipe

  • Oracle Databaseのサイレント・インストール時に使用するレスポンスファイルを生成する
  • Oracle Databaseをサイレント・インストールする

Recipe. サイレント・インストール用のレスポンスファイルの生成

以下の3種類のファイルを作成します。
- Recipe
- Template
- Attribute

## レスポンスファイル配置用のディレクトリを作成
テンプレートから生成するレスポンスファイルの配置ディレクトリを作成し、オーナー/グループ権限を設定します。

recipes/responsefile.rb
directory node['database']['response_file_dir'] do
  owner node['database']['owner']
  group node['database']['group']
  mode '0775'
end

レスポンスファイルを生成

テンプレートからレスポンスファイルを生成し、オーナー/グループ権限を設定します。

recipes/responsefile.rb
template node['database']['response_file_install'] do
  source 'install_oracledb.rsp.erb'
  owner node['database']['owner']
  group node['database']['group']
  mode '0644'
end

レスポンスファイルのひな型

インストールに最低限必要な属性値をパラメータ化しています。
パラメータ化している主な項目は以下のものです。

項目名 説明
ORACLE_HOSTNAME ホスト名の指定
UNIX_GROUP_NAME UNIXプラットフォーム上のグループ名の指定
INVENTORY_LOCATION インベントリの場所の指定
SELECTED_LANGUAGES 選択された言語の指定
ORACLE_HOME Oracleソフトウェアを格納するディレクトリを指定
ORACLE_BASE Oracleディレクトリ構造(格納先)の最上位ディレクトリの場所の指定
oracle.install.db.InstallEdition データベースのエディション
oracle.install.db.DBA_GROUP DBAグループ名の指定
データベースの管理者グループ
oracle.install.db.OPER_GROUP OPERグループ名の指定
制限されたデータベースの管理者グループ
oracle.install.db.BACKUPDBA_GROUP BACKUPDBAグループ名の指定
データベースのバックアップとリカバリの管理グループ
oracle.install.db.DGDBA_GROUP DBDBAグループ名の指定
Oracle Data Guard管理グループ
oracle.install.db.KMDBA_GROUP KMDBAグループ名の指定
暗号化キー管理の管理グループ

以下、Templateファイル

tempalates/default/default.rb
ORACLE_HOSTNAME=<%= node['database']['host_name'] %>
UNIX_GROUP_NAME=<%= node['database']['group'] %>
INVENTORY_LOCATION=<%= node['database']['inventory_location'] %>
SELECTED_LANGUAGES=en
ORACLE_HOME=<%= node['database']['oracle_home'] %>
ORACLE_BASE=<%= node['database']['oracle_base'] %>
oracle.install.db.InstallEdition=EE
oracle.install.db.DBA_GROUP=<%= node['database']['dba_group'] %>
oracle.install.db.OPER_GROUP=<%= node['database']['oper_group'] %>
oracle.install.db.BACKUPDBA_GROUP=<%= node['database']['backupdba_group'] %>
oracle.install.db.DGDBA_GROUP=<%= node['database']['dgdba_group'] %>
oracle.install.db.KMDBA_GROUP=<%= node['database']['kmdba_group'] %>

デフォルト値の設定

パラメータ化している属性値のデフォルト値を設定します。

以下の"ignoreSysPrereqs"オプションはコメントアウトし、使用しないようにしていますが、これはOracle Databaseインストール時の前提条件を無視する場合に使用します。
例えば、Swap領域が足らないような場合などにでも強制的にインストールする事が可能です。

default['database']['ignore_sysprereq'] = '-ignoreSysPrereqs'
attributes/default.rb
default['database']['user'] = 'oracle'
default['database']['user_home'] = '/home/oracle'
default['database']['group'] = 'oinstall'
default['database']['owner'] = 'oracle'
default['database']['host_name'] = 'oel72db'
default['database']['inventory_location'] = '/u01/app/oraInventory'
default['database']['oracle_home'] = '/u01/app/oracle/product/12.1.0/dbhome_1'
default['database']['oracle_base'] = '/u01/app/oracle'
default['database']['dba_group'] = 'dba'
default['database']['oper_group'] = 'oper'
default['database']['backupdba_group'] = 'backupdba'
default['database']['dgdba_group'] = 'dgdba'
default['database']['kmdba_group'] = 'kmdba'
default['database']['runinstaller_path'] = '/vagrant_data/database_12102/runInstaller'
#default['database']['ignore_sysprereq'] = '-ignoreSysPrereqs'
default['database']['ignore_sysprereq'] = ''
default['database']['response_file_dir'] = '/home/oracle/responsefile'
default['database']['response_file_install'] = '/home/oracle/responsefile/install_oracledb.rsp'
default['database']['response_file_uninstall'] = '/home/oracle/responsefile/deinstall_oracledb.rsp'

Oracle Databaseのサイレント・インストール

Oracle Universal Installerをサイレント・モードで起動し、作成しておいたレスポンスファイルを指定しています。

以下のようにUniversal Installerを起動する時に、su -l -cでコマンドを実行しています。
実は、Chefのexecuteリソースでuser属性を使用して実行ユーザを切り替えても実行uidを変更しているのみで、環境変数などがchef実行ユーザ(root)のままとなっています。
そこで、suにログインオプションを付けてスクリプト実行を行うようにして対応しています。

command "su oracle -l -c .......
recipes/install.rb
execute "install oracle database" do
  command "su oracle -l -c '#{node['database']['runinstaller_path']} #{node['database']['ignore_sysprereq']} -waitforcompletion -silent -responseFile #{node['database']['response_file_install']}'"
end

Chefの実行イメージ

chef-oracle-database-install.gif

まとめ

Oracle Databaseは導入した後に、Database Configuration Assistant (DBCA)をこの後実行してデータベースの作成を行っていきます。
この一連の作業の中で導入作業がChefを使って自動化できたのは作業効率があがると思います。

ところで、*su -l -c *でユーザを切り替えて実行をしていますが、それでも一部切り替わりきっていない点があるようでWARNINGが発生してしまいます。
解消方法は、引き続き探してみようと思います。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2