AnsibleでClamAVをインストール

オープンソースのアンチウイルスソフトClamAVをAnsibleでインストールする。

```yml:main.yml
- name: (1)epel-releaseインストール
  become: True
  yum:
    name: epel-release

- name: (2)clamavインストール
  become: True
  yum:
    name: "{{ item }}"
  with_items:
    - clamav
    - clamav-scanner-systemd
    - clamav-update
  register: clamav_packages_install

- name: (3)scan.conf置き換え
  become: True
  template:
    src: templates/scan.conf.j2
    dest: /etc/clamd.d/scan.conf

- name: (4)シンボリックリンク設定
  become: True
  file:
    src: /etc/clamd.d/scan.conf
    dest: /etc/clamd.conf
    state: link

- name: (5)freshclam.conf置き換え
  become: True
  template:
    src: templates/freshclam.conf.j2
    dest: /etc/freshclam.conf

- name: (6)freshclam
  become: True
  command: freshclam
  when: clamav_packages_install.changed

- name: (7)clamd@scan再起動
  become: True
  service:
    name: clamd@scan
    state: restarted
    enabled: yes

```
### (1)epelリポジトリをyumでインストール
```yml:
- name: (1)epel-releaseインストール
  become: True
  yum:
    name: epel-release
```
### (2)clamavをインストールする

```yml:
- name: (2)clamavインストール
  become: True
  yum:
    name: "{{ item }}"
  with_items:
    - clamav
    - clamav-scanner-systemd
    - clamav-update
  register: clamav_packages_install
```
`freshclam`を実行する際に、使うため変数を準備しておく。

### (3)scan.confを書き換え

デーモンで動作するように、scan.confを書き換えておく。
templateモジュールで、置き換える。
scan.confの内容は、省略。

```yml:
 - name: (3)scan.conf置き換え
  become: True
  template:
    src: templates/scan.conf.j2
    dest: /etc/clamd.d/scan.conf
```

### (4)シンボリックリンク設定
clamdscanは、設定ファイルを`/etc/clamd.conf`に参照にいくため、シンボリックリンクを設定する必要がある。

```yml:
- name: (4)シンボリックリンク設定
  become: True
  file:
    src: /etc/clamd.d/scan.conf
    dest: /etc/clamd.conf
    state: link
```

### (5)freshclam.conf置き換え
freshclamを利用して、自動でウイルスのデータベースを更新するように設定。
freshclam.confの内容は、省略。

```yml:
- name: (5)freshclam.conf置き換え
  become: True
  template:
    src: templates/freshclam.conf.j2
    dest: /etc/freshclam.conf
```
### (6)freshclam
これをやらずに、Ansibleを実行したところ(7)の処理で失敗した。
sshして、(7)のコマンドを実際に叩くと、ここで処理が失敗していた。

```
[vagrant@localhost ~]$ sudo systemctl start clamd@scan
Job for clamd@scan.service failed because the control process exited with error code. See "systemctl status clamd@scan.service" and "journalctl -xe" for details.
```

`freshclam`を実行していないため、cvdファイルがないことが原因のよう。

```
 [vagrant@localhost clamav]$ sudo freshclam
ClamAV update process started at Mon Nov 12 10:29:52 2018
Downloading main.cvd [100%]
main.cvd updated (version: 58, sigs: 4566249, f-level: 60, builder: sigmgr)
Downloading daily.cvd [100%]
daily.cvd updated (version: 25113, sigs: 2148970, f-level: 63, builder: neo)
Downloading bytecode.cvd [100%]
bytecode.cvd updated (version: 327, sigs: 91, f-level: 63, builder: neo)
Database updated (6715310 signatures) from database.clamav.net (IP: 104.16.189.138)
WARNING: Clamd was NOT notified: Can't connect to clamd through /var/run/clamd.scan/clamd.sock: No such file or directory
 ```
chengedがtrueの時(1番最初)のみ、`freshclam`を実行する。

```yml:
- name: (6)freshclam
  become: True
  command: freshclam
  when: clamav_packages_install.changed
```

### (7)clamd@scan再起動
自動起動するように設定して、再起動。

```yml:
- name: (7)clamd@scan再起動
  become: True
  service:
    name: clamd@scan
    state: restarted
    enabled: yes
```