Chefを使ってOracle製品をインストールするための環境を準備してみた


概要

Oracle DatabaseやWebLogic ServerといったOracle製品をインストールしようとした時に、次のような事で悩んだりした事がないでしょうか。

  • どこのディレクトリにインストールしようかな
  • ディレクトリの階層構造はどうしようかな
  • ディレクトリの権限はどうしたらいいかな
  • 前提パッケージってなんだったっけ
  • システムリソースの制限値はどうしよう

マニュアルにも記載があったりしますが、何度も構成するのであればChefを使って定義しておけば便利ですよね。
というわけで、作ってみました。

Optimal Flexible Architecture(OFA)

ところで、ディレクトリ構成についてなのですがOptimal Flexible Architecture(OFA)というものを聞いた事があるでしょうか。

実は、OracleはOracle製品を配置するために推奨される構成のガイドラインを出していたのです。それが、Optimal Flexible Architecture(OFA)です。

Oracle Databaseのインストールマニュアルにも次のようなセクションがあります。
- Overview of the Optimal Flexible Architecture Standard

OFAの目的

以下の目的でOFAによるガイドラインを定めています

  • 大量のソフトウェアの構成
    • デバイスのボトルネックとパフォーマンス低下を防止するため,複雑な大型ソフトウェアやデータを構成
  • 定期的な管理タスクの簡略化
    • ソフトウェアとデータのバックアップなど,日常の管理作業を容易化
  • 複数のバージョンや環境の切り替え
  • データベース拡張の適切な管理
  • リソース競合の最小化支援
    • 断片化部分を分離してリソースの競合を最小

Chefを使ってやりたい事

Oracle製品をインストールする度にディレクトリ構成決めたり、ユーザー/グループを作成したり、前提パッケージを入れたりなどインストール作業の事前作業をするのは大変です。
そこで、Chefを使って最低限やっておく事を定型化しておきます。

今回作成するRecipe

  • ユーザ/グループの作成
  • OFAに従ったディレクトリの作成
  • 前提パッケージの導入(特にOracle DBの場合)
  • ulimitの設定(特にOracle DBの場合)
  • カーネル・パラメータの設定(特にOracle DBの場合)
  • 環境変数の設定

Recipe1. ユーザーの作成

Oracle製品をインストールまた運用する際のユーザーとグループを作成します。

インストールマニュアルの次の場所に必要なユーザーとグループに関する記述があります。
- Oracle Databaseのためのユーザー、グループおよび環境の構成

名称 グループ名 役割
oinstall Oracleインベントリ・グループ Oracle Universal InstallerによりoraInst.locファイルが作成されます。このファイルでは、Oracleインベントリ・グループ名(通常はoinstall)およびOracleインベントリ・ディレクトリのパスが識別
dba Oracle管理権限グループ データベース管理権限(SYSDBA権限)を持つオペレーティング・システムのユーザー・アカウントが識別
oper OSOPERグループ データベースを起動および停止するためのデータベース管理権限の一部(SYSOPER権限)を持つ別個のオペレーティング・システム・ユーザー・グループ
backupdba OSBACKUPDBAグループ オペレーティング・システム・ユーザーの別のグループにバックアップおよびリカバリ関連権限の一部(SYSBACKUP権限)を付与
dgdba OSDGDBAグループ オペレーティング・システム・ユーザーの別のグループにOracle Data Guardを管理および監視する権限の一部(SYSDG権限)を付与
kmdba OSKMDBAグループ オペレーティング・システム・ユーザーの別のグループに、Oracle Wallet Managerの管理など暗号化鍵を管理権限の一部(SYSKM権限)を付与

それを元にユーザーとグループのRecipeを作ります。

  • グループ
recipes/default.rb
groups = { 
  "oinstall" => "54321",
  "dba" => "54322",
  "backupdba" => "54323",
  "oper" => "54324",
  "dgdba" => "54325",
  "kmdba" => "54326"
}
groups.each do |name, gid|
  group name do
    gid gid
  end
end
  • ユーザー
recipes/default.rb
user "oracle" do
  uid 1200
  gid "oinstall"
  supports :manage_home => true
  home "/home/oracle"
  password "ハッシュ化したパスワード"
end
groups.each_key do |name|
  group name do
    members "oracle"
    action :modify
  end
end

Recipe2. ディレクトリの作成

OFAに従うようにディレクトリを作っていきます。

ディレクトリ構造 説明
/u01 ユーザー・データ・ディレクトリ
/u01/app ユーザーのアプリケーション・ソフトウェア・ディレクトリ
/u01/app/oracle Oracleベース・ディレクトリ
/u01/app/oracle/product ディストリビューション・ファイル
/u01/app/oracle/config WebLogicの構成情報
/u01/app/oracle/config/domains WebLogicの各ドメイン
/u01/app/oracle/config/applications WebLogicの各アプリケーション
/u01/app/oraInventory インベントリ・ディレクトリ
recipes/default.rb
dirs = [
  "/u01",
  "/u01/app",
  "/u01/app/oracle",
  "/u01/app/oracle/product",
  "/u01/app/oracle/config",
  "/u01/app/oracle/config/domains",
  "/u01/app/oracle/config/applications",
  "/u01/app/oraInventory"
]
dirs.each do |dir|
  directory dir do
    mode 00755
    owner "oracle"
    group "oinstall"
  end
end

Recipe3. 前提パッケージのインストール

Oracle DBをインストールする場合、以下の前提パッケージが必要となります。

(参照)x86-64用のサポートされるOracle Linux 7およびRed Hat Enterprise Linux 7ディストリビューション

  • binutils-2.23.52.0.1-12.el7.x86_64
  • compat-libcap1-1.10-3.el7.x86_64
  • gcc-4.8.2-3.el7.x86_64
  • gcc-c++-4.8.2-3.el7.x86_64
  • glibc-2.17-36.el7.i686
  • glibc-2.17-36.el7.x86_64
  • glibc-devel-2.17-36.el7.i686
  • glibc-devel-2.17-36.el7.x86_64
  • ksh
  • libaio-0.3.109-9.el7.i686
  • libaio-0.3.109-9.el7.x86_64
  • libaio-devel-0.3.109-9.el7.i686
  • libaio-devel-0.3.109-9.el7.x86_64
  • libgcc-4.8.2-3.el7.i686
  • libgcc-4.8.2-3.el7.x86_64
  • libstdc++-4.8.2-3.el7.i686
  • libstdc++-4.8.2-3.el7.x86_64
  • libstdc++-devel-4.8.2-3.el7.i686
  • libstdc++-devel-4.8.2-3.el7.x86_64
  • libXi-1.7.2-1.el7.i686
  • libXi-1.7.2-1.el7.x86_64
  • libXtst-1.2.2-1.el7.i686
  • libXtst-1.2.2-1.el7.x86_64
  • make-3.82-19.el7.x86_64
  • sysstat-10.1.5-1.el7.x86_64

とりあえず、最新をいれておく方針で次のようにしました。

recipes/packages.rb
pkgs = [
  "oracle-rdbms-server-12cR1-preinstall",
  "binutils",
  "compat-libcap1",
  "compat-libstdc++-33",
  "gcc",
  "gcc-c++",
  "glibc",
  "glibc-devel",
  "ksh",
  "libgcc",
  "libstdc++",
  "libstdc++-devel",
  "libaio",
  "libaio-devel",
  "libXext",
  "libXtst",
  "libX11",
  "libXau",
  "libxcb",
  "libXi",
  "make",
  "sysstat"
]
pkgs.each do |pkg|
  package pkg do
    action :install
  end
end

Recipe4. その他パラメータなど

カーネルパラメータなどその他設定する必要があるものは、事前に設定ファイルを用意しておき置き換えるようにしています。

まとめ

一度このようにインストール環境を整えるレシピを用意しておけば、何か製品をインストールするのも楽になりますね

-今回のレシピ:https://github.com/shinyay/chef-oracle-env/tree/publish_20160606