SSブログ

ChefでOracle Databaseをセットアップしてみた [Chef]

このエントリは、JPOUGのAvent Calendar 15日目の記事です。

Opscode.comでCookbookをつらつらと見ていたら、echa-oracle(1.0.4)というCookbookがあったので、試してみました。

http://community.opscode.com/cookbooks/echa-oracle

echa-oracle (1.0.4)
Installs and configures the Oracle Database Enterprise Edition on CentOS 6.4, patches it to the latest version, and creates databases. Oracle binaries are not included with this cookbook.

Cookbookの準備

このCookbookは、Oracle社のページからあらかじめ入手したzipファイルをどこかのWeb Serverに置いて、そこからOracle Databaseをインストールするサーバにダウンロードする方法を取っています。
また、試したところ、PSR 11.2.0.3とPSR 11.2.0.4にしか対応していません。
そのかわり、PSUをあてることができます。
11.2.0.1や12.1.0.1には対応していません。
OTNからダウンロードしたインストールイメージには対応していませんので、あしからずご了承ください。
自分の場合は、PSR 11.2.0.4だけをインストールすることにしました。

依存Cookbookはないので、そのままOpscodeからCookbookをダウンロードして、自分のChefのリポジトリのCookbooksディレクトリに置きます。

Oracleサーバの準備

あらかじめ、CentOS6.4をminimalでインストールした環境を用意しました。
とりあえず、SELINUXはdisableに、ファイアウォールの設定もOFFにしておきます。
自分の環境はプロキシを使用しているので、/etc/environmentにプロキシの設定をしてあります。
ここに、Chef-soloとrsyncを追加インストールしました。
PC(Windows7 Proffesional)に、Chef-solo・Knife-solo・cwRsyncなど動作環境を整えてあります。

さて、これからecha-oracleを動かすための設定です。

ChefのJSONファイルを書く

まず、nodeとしてhoge203.jsonを用意しました。

【chef-repo\nodes\hoge203.json】
// hoge203.json { "run_list" : [ "role[oraserver]" ] }
また、echa-oracle用のattributesを指定してRoleのJSONファイルを記述します。

このとき、Oracle DatabaseのインストールイメージをダウンロードさせるWebサーバが必要なので、https://192.168.56.202/assets/download/で、Oracle サーバからアクセスできるように設定し直し、ファイルを配置しておきます。
(ここでは、プロキシの除外設定も必要です)

個別パッチは適用しないので、latest_patchのis_installedは、falesにしておきます。

【chef-repo\roles\oraserver.json】
// oraserver.json { "name": "oraserver", "default_attributes": {}, "override_attributes": { "oracle" : { "ora_base" : "/opt/oracle", "ora_inventory" : "/opt/oraInventory", "user" : { "uid" : "1000", "gid" : "1000", "shell" : "/bin/bash", "sup_grps" : { "dba" : "1001" }, "pw_set" : "false" }, "rdbms" : { "install_files" : [ "https://192.168.56.202/assets/download/p13390677_112040_Linux-x86-64_1of7.zip", "https://192.168.56.202/assets/download/p13390677_112040_Linux-x86-64_2of7.zip" ], "ora_home" : "/opt/oracle/product/11.2.0/dbhome_1", "env" : { "ORACLE_BASE" : "/opt/oracle", "ORACLE_HOME" : "/opt/oracle/product/11.2.0/dbhome_1", "NLS_LANG" : "Japanese_Japan.AL32UTF8" }, "sys_pw" : "oracle", "system_pw" : "oracle", "dbsnmp_pw" : "oracle", "dbs" : { "ORCL" : false }, "dbs_root" : "/opt/oracle/oradata", "latest_patch" :{ "is_installed" : "false" } } } }, "json_class": "Chef::Role", "descripution": "", "chef_type": "role", "run_list": [ "recipe[echa-oracle]", "recipe[echa-oracle::logrotate_alert_log]", "recipe[echa-oracle::logrotate_listener]", "recipe[echa-oracle::createdb]" ] }

Chefを実行する

この設定で、PC側から、Knife soloでcookコマンドを実行しました。
DOS > knife solo cook root@hoge203
これでDBまで作成されます。
ただし、1時間以上かかります。
Oracle Databaseを1からサイレントインストールして、DBCAしています。
このときに、~oracle/.bash_profileに環境変数を作らないので注意してください。
このcookbookは、oracleの起動shellとしてkshを前提にしているため、
~oracle/.profileに各種環境変数などを記述したファイルを作成します。

いろいろと追加でいじりたいのでもう一度

しかし、kshではなくbashを使いたかったことと、sqlplusではrlwrapを使わないとダメな体になっているので、自前で追加のCookbookを作成しました。

内容としては、以下の通り。
  • EPELをインストール(yum)
  • rlwrapをインストール、設定
  • ~oracle/.bash_profileに環境変数、aliasを設定
まず、rlwrapパッケージのインストールには、EPELが必要なので、yumのCookbookを用意しておきます。
DOS > knife cookbook site download yum
yum.tar.gzはcookbooks配下に解凍しておきます。

空のCookbookを作成します。
DOS> knife cookbook create setting4oracle -o site-cookbooks
レシピを書いていきます。まずは、依存Cookbookを指定しておくことからはじめます。

【chef-repo\site-cookbooks\setting4oracle\metadata.rb】
name 'setting4oracle' maintainer 'YOUR_COMPANY_NAME' maintainer_email 'YOUR_EMAIL' license 'All rights reserved' description 'Installs/Configures setting4oracle' long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) version '0.1.0' depends "echa-oracle" depends "yum"
rlwrapパッケージのインストール部分をレシピに記載します。

【chef-repo\site-cookbooks\setting4oracle\recipes\rlwrap.rb】
package "rlwrap" do action :install end
rlwrap.rbをdefault.rbから呼び出します。EPELのインストールも呼び出します。
環境変数はテンプレートファイルを利用して設定します。

【chef-repo\site-cookbooks\setting4oracle\recipes\default.eb】
# # Cookbook Name:: setting4oracle # Recipe:: default # # Copyright 2013, YOUR_COMPANY_NAME # # All rights reserved - Do Not Redistribute # include_recipe "yum::epel" include_recipe "setting4oracle::rlwrap" template "/home/oracle/.bash_profile" do source "bash_profile.erb" group "oinstall" owner "oracle" mode "0644" end

【chef-repo\site-cookbooks\setting4oracle\templates\default\bash_profile.erb】
# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH umask 022 export ORACLE_BASE=<%= node[:oracle][:ora_base] %> export ORACLE_HOME=<%= node[:oracle][:rdbms][:ora_home] %> export ORACLE_SID=<%= node[:oracle][:rdbms][:ora_sid] %> export NLS_LANG=<%= node[:oracle][:rdbms][:env][:NLS_LANG] %> export PATH=$PATH:$ORACLE_HOME/bin alias sqlplus='rlwrap sqlplus' # EOF
※bash_profile.erbは、改行コードをLFで保存すること。

【chef-repo\roles\oraserver.json】
// oraserver.json { "name": "oraserver", "default_attributes": {}, "override_attributes": { "oracle" : { "ora_base" : "/opt/oracle", "ora_inventory" : "/opt/oraInventory", "user" : { "uid" : "1000", "gid" : "1000", "shell" : "/bin/bash", "sup_grps" : { "dba" : "1001" }, "pw_set" : "false" }, "rdbms" : { "install_files" : [ "https://192.168.56.202/assets/download/p13390677_112040_Linux-x86-64_1of7.zip", "https://192.168.56.202/assets/download/p13390677_112040_Linux-x86-64_2of7.zip" ], "ora_home" : "/opt/oracle/product/11.2.0/dbhome_1", "ora_sid" : "ORCL",// ←ココは、反則。setting4oracleが参照している。 "env" : { "ORACLE_BASE" : "/opt/oracle", "ORACLE_HOME" : "/opt/oracle/product/11.2.0/dbhome_1", "NLS_LANG" : "Japanese_Japan.AL32UTF8" }, "sys_pw" : "oracle", "system_pw" : "oracle", "dbsnmp_pw" : "oracle", "dbs" : { "ORCL" : false }, "dbs_root" : "/opt/oracle/oradata", "latest_patch" :{ "is_installed" : "false" } } } }, "json_class": "Chef::Role", "descripution": "", "chef_type": "role", "run_list": [ "recipe[echa-oracle]", "recipe[echa-oracle::logrotate_alert_log]", "recipe[echa-oracle::logrotate_listener]", "recipe[echa-oracle::createdb]", "recipe[setting4oracle]" ] }
この設定でOraサーバをKnifeコマンドでCookを実行します。

約1時間後、Oracle Database 11.2.0.4.0の製品をインストールして、DBを作成、各種環境が設定されます。

作成されたデータベース

SYS@ORCL>select tablespace_name,file_name from dba_data_files ; TABLESPACE FILE_NAME ---------- ------------------------------------------------------------ SYSTEM /opt/oracle/oradata/ORCL/data1/system01.dbf SYSAUX /opt/oracle/oradata/ORCL/data1/sysaux01.dbf UNDOTBS1 /opt/oracle/oradata/ORCL/undo1/undotbs01.dbf DATA /opt/oracle/oradata/ORCL/data1/data01.dbf INDEX /opt/oracle/oradata/ORCL/index1/index01.dbf USERS /opt/oracle/oradata/ORCL/data1/users01.dbf SYS@ORCL>select tablespace_name,file_name from dba_temp_files ; TABLESPACE FILE_NAME ---------- ------------------------------------------------------------ TEMP /opt/oracle/oradata/ORCL/temp1/temp01.dbf
$ pwd /opt/oracle/oradata/ORCL $ ls arch1 backup1 export index1 redo2 undo1 arch2 data1 flash_recovery_area redo1 temp1
SYS@ORCL>select group#,member from v$logfile ; GROUP# MEMBER ---------- -------------------------------------------------- 1 /opt/oracle/oradata/ORCL/redo1/redo01_1.rdo 1 /opt/oracle/oradata/ORCL/redo2/redo01_2.rdo 2 /opt/oracle/oradata/ORCL/redo1/redo02_1.rdo 2 /opt/oracle/oradata/ORCL/redo2/redo02_2.rdo 3 /opt/oracle/oradata/ORCL/redo1/redo03_1.rdo 3 /opt/oracle/oradata/ORCL/redo2/redo03_2.rdo 4 /opt/oracle/oradata/ORCL/redo1/redo04_1.rdo 4 /opt/oracle/oradata/ORCL/redo2/redo04_2.rdo 5 /opt/oracle/oradata/ORCL/redo1/redo05_1.rdo 5 /opt/oracle/oradata/ORCL/redo2/redo05_2.rdo 6 /opt/oracle/oradata/ORCL/redo1/redo06_1.rdo 6 /opt/oracle/oradata/ORCL/redo2/redo06_2.rdo 7 /opt/oracle/oradata/ORCL/redo1/redo07_1.rdo 7 /opt/oracle/oradata/ORCL/redo2/redo07_2.rdo 8 /opt/oracle/oradata/ORCL/redo1/redo08_1.rdo 8 /opt/oracle/oradata/ORCL/redo2/redo08_2.rdo
Cookbookを書いた「aririikonen」さんの好みのデータベースができあがります。
templatesを書きなおさないと自分好みのデータベースにはならないです。

さいごに

Chefはかじった程度で複雑なレシピはまだまだ自分では書けないのであるものでやってみましたが、そもそも「Chefなのに1時間もかかるのはどうなのよ?」と思います。

2013-10-08 : Oracle Database 12cインストール(hatenob プログラムって分からないことだらけ)

ここを見ても、他にOpscodeを探してもoracle (0.0.9)というOracleインストールの準備をするCookbookしかないことを見ても、あまりChefでOUIとdbca動かすのは、現実的ではないと感じました。
自動化という目的は果たしたものの、Responsefileを用意しても同じデータベースはいくつでも作れます。
ようはうまく道具を使うことにつきるということかもしれません。

明日は、s4r_agentさんです。よろしくお願いします。

タグ:JPOUG Chef Oracle

共通テーマ:blog

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。