■先日のSAMBAはyumからインストールして、後は設定ファイルを再配置するだけだったのだけど、うちの環境はapacheとPHPはtarbollからオプションを指定してbuildしている。tarbollから展開してbuildしてインストールするモジュールはまだないようなのでそこはカスタムでplaybookを書くことになります。段取りとしてはAPRとAPR-UTLからbuildして、その後httpdをbuildする流れで、この手順をapacheのroleとしてまとめます。apr, apr-utilのbuild手順はオプションがほとんど無く、同じ手順になるのでplaybookを同じにして、引数で双方のbuildに使えるようにします。httpd本体のbuildではオプション指定が幾つもあるので、build用のシェルスクリプトを呼び出すようにします。
トップモジュールのplaybookはこんな感じの記述になります。
---
- hosts: freiheitstrom
sudo: yes
roles:
- role: apache
HTTPD_VER: 2.4.12
APR_VER: 1.5.1
APRUTL_VER: 1.5.4トップモジュールではバージョン指定をします。コンパイルのオプションは変更しないので、意識するのはバージョンの変更のみです。これを受けてroles/apache/tasksからmain.ymlが取り込まれます。最初に処理するのはaprとapr-utilのbuild処理です。これはrole/apache/tasksに配置したadd_submodule.ymlで処理します。
---
- include: add_submodule.yml
vars:
target: apr
version: "{{ APR_VER }}"
prefix: "{{ APR_PREFIX }}"
configopt: ""
- include: add_submodule.yml
vars:
target: apr-util
version: "{{ APRUTL_VER }}"
prefix: "{{ APR_PREFIX }}"
configopt: "--with-apr={{ APR_PREFIX }}"add_submodule.ymlは一種のbuildテンプレートになっていて、呼び出し元から渡されたtarget, version, prefix, configopt変数でbuild対象を切り替えています。
---
- name: expand tarboll
unarchive:
copy=yes
src={{ PRDBASE }}/{{ target }}-{{ version}}.tar.gz
dest={{ WORK }}
creates="{{ WORK }}/{{ target }}-{{ version }}"
- name: configure
shell: "./configure --prefix {{ prefix }} {{ configopt }}"
args:
chdir: "{{ WORK }}/{{ target }}-{{ version }}"
- name: make
shell: make
args:
chdir: "{{ WORK }}/{{ target }}-{{ version }}"
- name: make install
shell: make install
args:
chdir: "{{ WORK }}/{{ target }}-{{ version }}" PRDBASEはtarbollの置き場所、WORKはbuild作業場所のディレクトリです。作業用ディレクトリに展開済みのディレクトリが無い場合はtgzを展開し、展開されたディレクトリに移動してconfigureを実行、その後makeして、make installしているだけです。このadd_submodule.ymlは特定のモジュール向けには作成されていません。良くある汎用のtarboll向けplaybookではないかと思います(調べてない)。
aprとapr-utilのbuild後、main.ymlの後続シーケンスでapache本体のbuildに入ります。
- name: extend tarboll
unarchive:
copy=yes
src={{ PRDBASE }}/httpd-{{ HTTPD_VER }}.tar.gz
dest={{ WORK }}
creates={{ WORK }}/httpd-{{ HTTPD_VER }}
- name: copy httpd makekicker
copy:
src={{ PRDBASE }}/mkhttpd
dest={{ WORK }}
owner=root
group=root
mode=700
- name: configure setup
shell: "{{ WORK }}/mkhttpd {{ HTTPD_VER }} {{ HTTPD_PREFIX }}
{{ APR_PREFIX }} {{ HTTPD_ROOT }}"
args:
chdir: "{{ WORK }}/"
- name: make apache
shell: make
args:
chdir: "{{ WORK }}/httpd-{{ HTTPD_VER }}/"
- name: apache install
shell: make install
args:
chdir: "{{ WORK }}/httpd-{{ HTTPD_VER }}/"
- name: httpd conf reinstall
shell: "cp -rp {{BACKUP}}/httpd_conf/* {{ HTTPD_PREFIX }}/conf"
- name: apache service restart
shell: "{{ HTTPD_PREFIX }}/bin/apachectl restart"
- name: clean work area
shell: "rm -rf {{ WORK }}/*"形式としてはadd_submodule.ymlの類型です。tarbollを展開し、configureを実行します。ただ、こちらの環境ではhttpdのconfigureでは指定オプションが多いのでconfigureの実行はシェルスクリプトに収めています(mkhttpd)。そのため、一旦シェルスクリプトをコピーして、実行する段取りを踏んでいます。configureしたあとmake, make installするのはadd_submodule.ymlと同じですが、httpdなので、そのあとバックアップディレクトリからhttpdのコンフィグディレクトリを丸ごとコピーして、restartしています。このあたりはプロセスの状態を確認して、restartするのか、単純にstartするのか切り替えた方が良いかもしれません。最後に作業ディレクトリをクリンアップしてこのplaybookは終了しています。