■先日の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は終了しています。