準備
                 前回fairy support runのインストールと基本的な動かし方を紹介しました
                 今回はhttpサーバーのインストールを例に基本機能の紹介を行います
                 こちらからサンプルをダウンロードしてください
             
実行環境の起動
                 前回vagrantを起動したままにしている場合vagrant haltでシャットダウンしてください
                 ダウンロードしてきたサンプル内のvagrantフォルダに移動
                 vagrant up
                 と入力
             
cd vagrant vagrant up
VirtualBoxマネージャーを起動すると仮想環境が2つ起動しているのが確認できます
環境の初期化
                 立ち上げた仮想環境はDNSの設定もされていませんし、yumのupdateもされてないので、fairy support runを使って行っていきます
                 ダウンロードしてきたサンプル内のfairysupport_runフォルダに移動
                 java -jar com_fairysupport_run.jar dnsを実行
                 java -jar com_fairysupport_run.jar yum_initを実行
             
cd fairysupport_run java -jar com_fairysupport_run.jar dns
java -jar com_fairysupport_run.jar yum_init
                 java -jar com_fairysupport_run.jar dnsでDNSの設定が行われました
                 java -jar com_fairysupport_run.jar yum_initでyumのupdateと必要なソフトウェアのインストールが行われました
             
シェルの作成
                 apache httpサーバーをインストールシェルを作っていきましょう
                 ダウンロードしてきたサンプル内のfairysupport_runフォルダに移動
                 apache_testというフォルダを作成します
                 作成したapache_testフォルダ内にmain.shというファイルを作成します
                 改行コードにCRが入らないようにしましょう。CR+LFでなく、LFで保存
             
#!/bin/bash sudo -S yum -y install httpd sudo -S firewall-cmd --permanent --zone=public --add-service=http sudo -S firewall-cmd --permanent --zone=public --add-service=https sudo -S firewall-cmd --reload sudo -S systemctl start httpd.service sudo -S systemctl enable httpd.service
                 main.shの内容
                 yumでhttpdをインストールしています
                 firewalldにhttp、httpsを許可しています
                 httpdを起動します
                 httpdの自動起動を有効にします
             
ファイル構成
     |-- fairysupport_run
     |   |-- apache_test
     |   |   `-- main.sh
     |   |-- com_fairysupport_run.jar
     |   |-- env.txt
     |   `-- server.properties.local
     |-- vagrant
     |   `-- Vagrantfile
     
             server.propertiesの切り替え
                 前回server.propertiesを作成しましたが、サンプルはserver.properties.localというファイルになっています
                 env.txtの中身を見てみましょう。localと記載されています。env.txtという名前のファイルを用意するとserver.propertiesの接尾辞を記載しておくことができます
                 server.properties.local、server.properties.dev、server.properties.stg、server.properties.prdとファイルを用意した場合、env.txtの中身を変えれば、使用するserver.propertiesを切り替えることが可能となります
             
fairy support runの実行
                 実行してみます
                 com_fairysupport_run.jarの置いてあるフォルダに移動
                 java -jar com_fairysupport_run.jar apache_test
                 と入力
             
cd fairysupport_run java -jar com_fairysupport_run.jar apache_test
                 実行すると出力内容でapache httpサーバーがインストールされたのがわかると思います
                 ブラウザでhttp://localhost:8080にアクセスしてみましょう
                 ブラウザでhttp://localhost:8181にアクセスしてみましょう
                 両方とも正常にページが表示されていると思います
                 2つの環境にapache httpサーバーをインストールすることができました
                 今までjava -jarと入力してきましたが、毎回java -jarと入力するのは面倒です
                 サンプル内のfairysupport_run配下にfairysupport_run.batとfairysupport_run.shがあります
                 これを利用すれば毎回java -jarと入力する必要はありません。使用しているOSによってbatを使うかshを使うか選んでください。下記で実行可能です
             
fairysupport_run.bat apache_test
./fairysupport_run.sh apache_test
ファイルのアップロード
                 apache httpサーバーのインストールができましたが、通常この後、設定ファイルをカスタマイズしなければなりません。
                 設定ファイルを用意し、どのサーバーに対しても同じ設定ファイルを設置するようにしていきましょう
                 ダウンロードしてきたサンプル内のfairysupport_run/apache配下のhttpd.confをコピーし、先ほど作成したapache_testフォルダ内にペーストしましょう
             
     |-- fairysupport_run
     |   |-- apache_test
     |   |   |-- httpd.conf
     |   |   `-- main.sh
     |   |-- com_fairysupport_run.jar
     |   |-- env.txt
     |   `-- server.properties.local
     |-- vagrant
     |   `-- Vagrantfile
     
             設定ファイルを設置できるようにシェルを修正しましょう
main.sh#!/bin/bash sudo -S yum -y install httpd sudo -S mv /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bk sudo -S \cp -f ./httpd.conf /etc/httpd/conf/httpd.conf sudo -S chmod 644 /etc/httpd/conf/httpd.conf sudo -S semanage fcontext -a -t httpd_config_t /etc/httpd/conf/httpd.conf sudo -S restorecon -v /etc/httpd/conf/httpd.conf sudo -S firewall-cmd --permanent --zone=public --add-service=http sudo -S firewall-cmd --permanent --zone=public --add-service=https sudo -S firewall-cmd --reload sudo -S systemctl restart httpd.service sudo -S systemctl enable httpd.service
                 main.shの修正内容
                 mvで設定ファイルのバックアップを取っています
                 apache_test内のファイルはfairy support runの実行でアップロードされるので、アップロードされた設定ファイルをcpで置き換えます。cpの前についている\はfオプションを有効にするため意図的につけています
                 chmodで権限設定しています
                 semanage、restoreconでSELinux対応をしています
                 これでfairy support runを実行するとhttpd.confのバックアップを取り、httpd.confの置き換えが行われます
             
共通処理化
                 バックアップを取ったり、ファイルを置き換えたり、ファイルのラベルを設定する処理はよく行う処理です
                 あらかじめ共通処理にまとめておきましょう
                 apache_testと同階層にcommon_testというフォルダを作成します
                 作成したcommon_testフォルダ内にcommon.shというファイルを作成します
                 改行コードにCRが入らないようにしましょう。CR+LFでなく、LFで保存
             
bk_cp_mode_label() {
  sudo -S mv "${2}" "${2}.bk"
  sudo -S \cp -f "${1}" "${2}"
  sudo -S chmod ${3} "${2}"
  sudo -S semanage fcontext -a -t "${4}" "${2}"
  sudo -S restorecon -v "${2}"
}
     
             
                 common.shの内容
                 上記で修正したmain.shのバックアップからSELinux対応までを関数にしました
             
                 apache_testフォルダ内にinclude.txtというファイルを作成します
                 include.txtの内容は../common_testとします
                 include.txtという名前のファイルを作成すると、fairy support runはinclude.txtに書かれているフォルダを実行時に一緒にアップロードします
             
../common_test
共通処理を利用するようにシェルを修正しましょう
main.sh#!/bin/bash . ../common_test/common.sh sudo -S yum -y install httpd bk_cp_mode_label "./httpd.conf" "/etc/httpd/conf/httpd.conf" 644 httpd_config_t sudo -S firewall-cmd --permanent --zone=public --add-service=http sudo -S firewall-cmd --permanent --zone=public --add-service=https sudo -S firewall-cmd --reload sudo -S systemctl restart httpd.service sudo -S systemctl enable httpd.service
                 main.shの修正内容
                 共通関数が書かれたファイルを読み込みます。. ../common_test/common.shを追記しています。ドット半角スペースcommon.shへの相対パスとなります。半角スペースの前にドットを忘れると共通関数が使えません
                 common.sh内に作成した関数bk_cp_mode_labelを呼んでいます
             
ファイル構成
     |-- fairysupport_run
     |   |-- apache_test
     |   |   |-- httpd.conf
     |   |   |-- include.txt
     |   |   `-- main.sh
     |   |-- common_test
     |   |   `-- common.sh
     |   |-- com_fairysupport_run.jar
     |   |-- env.txt
     |   `-- server.properties.local
     |-- vagrant
     |   `-- Vagrantfile
     
             これでfairy support runを実行するとcommon_testフォルダも一緒にアップロードされているのがわかります
実行ファイルの作成と引数
                 今度はenv.txtの内容をシェルに渡して、env.txtの内容によってhttpd.confを変える処理を入れてみましょう
                 今まではfairy support runの引数にフォルダ名を渡していましたが、ファイル名を与えることができます
                 引数に与えることができるファイルを作成してみましょう
                 com_fairysupport_run.jarと同階層にrun_apache_test.txtというファイルを作成してください
                 run_apache_test.txtの内容は下記です
             
run_apache_test.txt
apache_test ${ENV} -f server.properties
             
                 run_apache_test.txtの内容
                 ${ENV}と書くとfairy support runの実行時にenv.txtの内容になります
                 ${ENV}の他に使用できる特殊変数は下記です
                 ${整数}:引数、${DATE}:実行日、${HH}:実行時刻の時部分、${MM}:実行時刻の分部分、${SS}:実行時刻の秒部分
                 fオプションはサーバ情報が記載されたファイルを指定するオプションです。今までfオプションを指定しませんでしたが、fオプションを省略した場合、server.propertiesを指定したことになります
             
次にダウンロードしてきたサンプル内のfairysupport_run/apache配下のhttpd.conf.dev、httpd.conf.localをコピーし、apache_testフォルダ内にペーストしましょう
次にシェルを修正しましょう
main.sh
#!/bin/bash
. ../common_test/common.sh
sudo -S yum -y install httpd
bk_cp_mode_label "./httpd.conf.${1}" "/etc/httpd/conf/httpd.conf" 644 httpd_config_t
sudo -S firewall-cmd --permanent --zone=public --add-service=http
sudo -S firewall-cmd --permanent --zone=public --add-service=https
sudo -S firewall-cmd --reload
sudo -S systemctl restart httpd.service
sudo -S systemctl enable httpd.service
     
             
                 main.shの修正内容
                 bk_cp_mode_labelの第1引数を./httpd.conf.${1}にしました。apache_testの第1引数に${ENV}を指定したので、env.txtの内容が${1}に格納されています
             
ファイル構成
     |-- fairysupport_run
     |   |-- apache_test
     |   |   |-- httpd.conf.dev
     |   |   |-- httpd.conf.local
     |   |   |-- include.txt
     |   |   `-- main.sh
     |   |-- common_test
     |   |   `-- common.sh
     |   |-- com_fairysupport_run.jar
     |   |-- env.txt
     |   |-- run_apache_test.txt
     |   `-- server.properties.local
     |-- vagrant
     |   `-- Vagrantfile
     
             実行してみましょう。下記のように拡張子まで含めてファイル名を与えると実行できます
fairysupport_run.bat run_apache_test.txt
./fairysupport_run.sh run_apache_test.txt
httpd.conf.localが/etc/httpd/conf/配下にhttpd.confとして置かれます
冪等性
                 上記のapache_testを何回も実行すると毎回シェルに記載した内容が全て実行されてしまいます。
                 ツールによっては独自記法の中で1回しか行わないように自動的に制御するものや、実行させない為のif文をYAMLやJSONで記載させるものもあります。
                 fairy support runは自分でif文を書くことになります。しかし、これは大したif文ではありません。非常に簡単なif文だけで実現できます
                 ツールがコマンドを実行してくれる条件を調べる必要もないですし、実行させないためのYAMLやJSONの独自記法を覚える必要もありません
                 実際に書いてみましょう
             
yum_installed_exit() {
  if sudo -S yum list installed | grep "${1}" > /dev/null 2>&1; then
    echo "${2}"
    exit 0
  fi
}
bk_cp_mode_label() {
  sudo -S mv "${2}" "${2}.bk"
  sudo -S \cp -f "${1}" "${2}"
  sudo -S chmod ${3} "${2}"
  sudo -S semanage fcontext -a -t "${4}" "${2}"
  sudo -S restorecon -v "${2}"
}
     
             
                 common.shの修正内容
                 yum_installed_exitという関数を追加しました
                 yum list installedコマンドで既にインストール済みか確認して、インストール済みならメッセージを出力してシェルを終了するというだけです
             
シェルに上記で追加した関数を入れてみましょう
main.sh
#!/bin/bash
. ../common_test/common.sh
yum_installed_exit "httpd" "Apache HTTP SERVER is already installed"
sudo -S yum -y install httpd
bk_cp_mode_label "./httpd.conf.${1}" "/etc/httpd/conf/httpd.conf" 644 httpd_config_t
sudo -S firewall-cmd --permanent --zone=public --add-service=http
sudo -S firewall-cmd --permanent --zone=public --add-service=https
sudo -S firewall-cmd --reload
sudo -S systemctl restart httpd.service
sudo -S systemctl enable httpd.service
     
             
                 main.shの修正内容
                 yum_installed_exitの呼び出しを追記しました
                 これでhttpdがインストール済みの場合、yum_installed_exitより下行は実行されません
             
これで十分だと思うのですが、他のコマンドも必要な時だけ実行される関数を作成してみましょう
common.sh
yum_installed_exit() {
  if sudo -S yum list installed | grep "${1}" > /dev/null 2>&1; then
    echo "${2}"
    exit 0
  fi
}
yum_install() {
  if ! sudo -S yum list installed | grep "${1}" > /dev/null 2>&1; then
     sudo -S yum -y install "${2}"
  fi
}
bk_cp_mode_label() {
  if ! sudo -S diff "${1}" "${2}" > /dev/null 2>&1; then
    sudo -S mv "${2}" "${2}.bk"
    sudo -S \cp -f "${1}" "${2}"
    sudo -S chmod ${3} "${2}"
    sudo -S semanage fcontext -a -t "${4}" "${2}"
    sudo -S restorecon -v "${2}"
  fi
}
systemctl_start() {
  if sudo -S systemctl status "${1}" | grep "Active: inactive" > /dev/null 2>&1; then
    sudo -S systemctl start "${1}.service"
  fi
}
systemctl_enable() {
  if sudo -S systemctl is-enabled "${1}" | grep disabled > /dev/null 2>&1; then
    sudo -S systemctl enable "${1}.service"
  fi
}
firewalld_add_service() {
  if ! echo " `sudo -S firewall-cmd --list-services --permanent --zone=public` " | grep " ${1} " > /dev/null 2>&1; then
      sudo -S firewall-cmd --permanent --zone=public --add-service="${1}"
      sudo -S firewall-cmd --reload
  fi
}
     
             
                 common.shの修正内容
                 yum_installという関数を追加しました。yumでインストール済みでない場合、yum installが実行される関数です
                 bk_cp_mode_labelという関数を修正しました。コピー元のファイルとコピー先のファイルの内容が異なる場合のみ、処理が実行されるように修正しました
                 systemctl_startという関数を追加しました。サービスが停止状態の場合、サービスがstartされる関数です
                 systemctl_enableという関数を追加しました。サービスが自動起動しない場合、サービスを自動起動設定にする関数です
                 firewalld_add_serviceという関数を追加しました。サービスがpublicゾーンに無い場合、publicゾーンに追加する関数です
             
シェルに上記で追加した関数を入れてみましょう
main.sh
#!/bin/bash
. ../common_test/common.sh
yum_installed_exit "httpd" "Apache HTTP SERVER is already installed"
yum_install httpd httpd
bk_cp_mode_label "./httpd.conf.${1}" "/etc/httpd/conf/httpd.conf" 644 httpd_config_t
firewalld_add_service http
firewalld_add_service https
systemctl_start httpd
systemctl_enable httpd
     
             
                 main.shの修正内容
                 common.shに増やした関数を呼び出すように修正しました
             
実行してみましょう
fairysupport_run.bat run_apache_test.txt
./fairysupport_run.sh run_apache_test.txt
                 httpdがインストール済みなら
                 Apache HTTP SERVER is already installed
                 とメッセージが出力されて処理が終了します
             
server.propertiesの分割
                 server.properties.localにサーバー情報を2つ記載して、2つの環境に対して処理を実行してきましたが、httpサーバーのインストールはwebサーバーにのみ行う作業です
                 しかし、ユーザー追加やグループ追加はwebサーバーにもDBサーバーにも行う作業です
                 server.properties.localに記載したserver1をwebサーバー、server2をDBサーバーに見立ててserver.propertiesを分割してみましょう
             
server1.user=vagrant server1.password=vagrant server1.address=127.0.0.1 server1.port=2230 server1.keyPath=C:\\fairy_support_run_sample\\.vagrant\\machines\\vm1\\virtualbox\\private_key server1.passphrase=server_db.properties.local
server1.user=vagrant server1.password=vagrant server1.address=127.0.0.1 server1.port=2240 server1.keyPath=C:\\fairy_support_run_sample\\.vagrant\\machines\\vm2\\virtualbox\\private_key server1.passphrase=server_all.txt
server_web.properties server_db.propertiesrun_all_apache_test.txt
apache_test ${ENV} -i server_all.txt
             run_apache_test.txt
             
apache_test ${ENV} -f server_web.properties
             ファイル構成
             
     |-- fairysupport_run
     |   |-- apache_test
     |   |   |-- httpd.conf.dev
     |   |   |-- httpd.conf.local
     |   |   |-- include.txt
     |   |   `-- main.sh
     |   |-- common_test
     |   |   `-- common.sh
     |   |-- com_fairysupport_run.jar
     |   |-- env.txt
     |   |-- run_apache_test.txt
     |   |-- run_all_apache_test.txt
     |   |-- server_all.txt
     |   |-- server_web.properties.local
     |   `-- server_db.properties.local
     |-- vagrant
     |   `-- Vagrantfile
     
             
                 server_web.properties.local、server_db.properties.local、server_all.txt、run_all_apache_test.txtの4ファイルを作成しました
                 run_apache_test.txtを修正しました
                 run_all_apache_test.txtにはiオプションでserver_all.txtが指定されています。server_all.txtには2つのpropertiesファイル名が書かれています
                 見た通り、分割したproperties名を記載したファイルをiオプションでfairy support runに渡し、複数のサーバー上でシェルを実行することができます
             
実行してみましょう
fairysupport_run.bat run_all_apache_test.txt
./fairysupport_run.sh run_all_apache_test.txt
server_web.properties.localとserver_db.properties.localに記載されたサーバー上でシェルが実行されます
fairysupport_run.bat run_apache_test.txt
./fairysupport_run.sh run_apache_test.txt
server_web.properties.localに記載されたサーバー上でのみシェルが実行されます
                 次ページmysql dumpを例にfairy support runの機能を紹介
                 
                 
                 目次