From 0dab7fd26ea485ff62e47386feebdbe49a8b6b76 Mon Sep 17 00:00:00 2001 From: A Holt Date: Thu, 4 Jul 2019 20:43:15 -0400 Subject: [PATCH] Create install.yml --- roles/nextcloud/tasks/install.yml | 217 ++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 roles/nextcloud/tasks/install.yml diff --git a/roles/nextcloud/tasks/install.yml b/roles/nextcloud/tasks/install.yml new file mode 100644 index 000000000..2c20f2dfe --- /dev/null +++ b/roles/nextcloud/tasks/install.yml @@ -0,0 +1,217 @@ +# CHECK FOR PHP VERSION AUTOMATICALLY, TO DETERMINE WHICH NEXTCLOUD TO INSTALL. +# INSPIRED BY: github.com/iiab/iiab/blob/master/roles/nodejs/tasks/main.yml#L10-L54 + +# NOTE: php installation is mandatory due to 0-init/tasks/main.yml, which forces +# this in roles/mysql/tasks/main.yml, as invoked by 3-base-server/tasks/main.yml + +# NOTE: the 3 stanzas below would still work even if php was not installed, +# correctly setting variable 'php_new' to False. + +- name: Try to run 'php -v' to get PHP version + # e.g. converts multi-line "PHP 7.0.33-0ubuntu0.16.04.5 (cli) ( NTS ) ..." to "7.0.33" + shell: php -v | head -1 | sed 's/^[^0-9.]*//' | sed 's/[^0-9.].*//' + register: php_version_installed + #ignore_errors: yes # NOT NEC: if php is not installed, php_version_installed.stdout will get set to "" + +#- debug: +# var: php_version_installed + +- name: Initialize var 'php_new' to False + set_fact: + php_new: False + #when: php_version_installed.stdout == "" # WORKS, BUT NOT NEC + +- name: Set var 'php_new' indicating if installed version of PHP ({{ php_version_installed.stdout }}) >= 7.1, as required by Nextcloud 16 + set_fact: + php_new: "{{ php_version_installed.stdout is version('7.1', '>=') }}" + # Ansible's Version Comparison routine: + # https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html#version-comparison + when: php_version_installed.stdout != "" # i.e. IF ABOVE 'php -v' WORKED + +#- debug: +# var: php_new + + +- name: Download {{ nextcloud_dl_url }}/{{ nextcloud_orig_src_file_old }} to {{ downloads_dir }}/{{ nextcloud_src_file_old }} on older OS's lacking PHP 7.1+ + get_url: + url: "{{ nextcloud_dl_url }}/{{ nextcloud_orig_src_file_old }}" + dest: "{{ downloads_dir }}/{{ nextcloud_src_file_old }}" + timeout: "{{ download_timeout }}" + force: yes + #validate_certs: False # TEMPORARY ON/AFTER 2018-07-22 AS download.nextcloud.com CERT EXPIRED: https://github.com/iiab/iiab/issues/954 + #async: 1800 + #poll: 10 + tags: + - download + when: internet_available and nextcloud_force_install and not php_new + #when: internet_available and nextcloud_force_install and (is_debian_9 or is_raspbian_9 or is_ubuntu_16) + +- name: Download {{ nextcloud_dl_url }}/{{ nextcloud_orig_src_file }} to {{ downloads_dir }}/{{ nextcloud_src_file }} on newer OS's that have PHP 7.1+ + get_url: + url: "{{ nextcloud_dl_url }}/{{ nextcloud_orig_src_file }}" + dest: "{{ downloads_dir }}/{{ nextcloud_src_file }}" + timeout: "{{ download_timeout }}" + force: yes + #validate_certs: False # TEMPORARY ON/AFTER 2018-07-22 AS download.nextcloud.com CERT EXPIRED: https://github.com/iiab/iiab/issues/954 + #async: 1800 + #poll: 10 + tags: + - download + when: internet_available and nextcloud_force_install and php_new + #when: internet_available and nextcloud_force_install and not (is_debian_9 or is_raspbian_9 or is_ubuntu_16) + +# Ubuntu and Debian treat names differently +- name: Install 3 php packages (debian) + package: + name: + - "libapache2-mod-php{{ php_version }}" + - "php{{ php_version }}-mbstring" + - "php{{ php_version }}-zip" + state: present + when: is_debian | bool + +# Ubuntu and Debian treat names differently +- name: Install 4 php packages (ubuntu) + package: + name: + - libapache2-mod-php + - php-imagick + - php-zip + - php-mbstring + state: present + when: is_ubuntu | bool + +- name: Install 5 more php packages (debuntu) + package: + name: + - "php{{ php_version }}-gd" + - "php{{ php_version }}-json" + - "php{{ php_version }}-mysql" + - "php{{ php_version }}-curl" + - "php{{ php_version }}-intl" + state: present + when: is_debuntu | bool + +- name: 'Install php{{ php_version }}-mcrypt IF this is a "pre-2018" distro in the debuntu family. NOTE: PHP 7.1 deprecated mcrypt 1-Dec-2016 and PHP 7.2 dropped it completely 30-Nov-2017, as it should no longer be nec.' + package: + name: "php{{ php_version }}-mcrypt" + state: present + when: is_debian_8 or is_debian_9 or is_ubuntu_16 or is_ubuntu_17 + # NOT NEC TO TEST FOR is_raspbian_8 OR is_raspbian_9 AS /opt/iiab/iiab/vars/.yml + # DEFINES THESE AS SUBSETS OF is_debian_8 OR is_debian_9 (FOR NOW!) + +# we need to install the rpm in order to get the dependencies +# but we only need to do this the first time + +- name: Install 7 php packages (redhat) + package: + name: + - php + - php-gd + - php-json + - php-mysql + - php-curl + - php-intl + - php-mcrypt + # CentOS does not have a package for php-imagick + #- php-imagick + state: present + when: is_redhat | bool + +- name: Unarchive {{ nextcloud_src_file_old }} to permanent location {{ nextcloud_prefix }}/nextcloud on older OS's lacking PHP 7.1+ # i.e. unpack nextcloud_latest-15.tar.bz2 to /opt/nextcloud + unarchive: + src: "{{ downloads_dir }}/{{ nextcloud_src_file_old }}" + dest: "{{ nextcloud_prefix }}" + #creates: "{{ nextcloud_prefix }}/nextcloud/version.php" + when: nextcloud_force_install and not php_new + #when: nextcloud_force_install and (is_debian_9 or is_raspbian_9 or is_ubuntu_16) + +- name: Unarchive {{ nextcloud_src_file }} to permanent location {{ nextcloud_prefix }}/nextcloud on newer OS's that have PHP 7.1+ # i.e. unpack nextcloud_latest-16.tar.bz2 to /opt/nextcloud + unarchive: + src: "{{ downloads_dir }}/{{ nextcloud_src_file }}" + dest: "{{ nextcloud_prefix }}" + #creates: "{{ nextcloud_prefix }}/nextcloud/version.php" + when: nextcloud_force_install and php_new + #when: nextcloud_force_install and not (is_debian_9 or is_raspbian_9 or is_ubuntu_16) + +- name: Create dir /etc/nextcloud (centos) for a subsequent config dir that's symlinked to /etc/nextcloud ? + file: + path: /etc/nextcloud + state: directory + when: is_centos | bool + +- name: Install {{ nextcloud_prefix }}/nextcloud/config/autoconfig.php from template (centos) + template: + src: autoconfig.php.j2 + dest: "{{ nextcloud_prefix }}/nextcloud/config/autoconfig.php" + owner: "{{ apache_user }}" + group: "{{ apache_user }}" + mode: 0640 + when: is_centos | bool + +- name: chown -R {{ apache_user }}:{{ apache_user }} {{ nextcloud_prefix }}/nextcloud + file: + path: "{{ nextcloud_prefix }}/nextcloud" + owner: "{{ apache_user }}" + group: "{{ apache_user }}" + recurse: yes + state: directory + +- name: Create data directory {{ nextcloud_data_dir }} # /opt/nextcloud/data + file: + path: "{{ nextcloud_data_dir }}" + owner: "{{ apache_user }}" + group: "{{ apache_user }}" + mode: 0750 + state: directory + +- name: 'Create MySQL database with name: {{ nextcloud_dbname }}' + mysql_db: + name: "{{ nextcloud_dbname }}" + when: mysql_enabled and nextcloud_enabled + +- name: Add username/password to the MySQL database (associated with trusted IP's like localhost) + mysql_user: + name: "{{ nextcloud_dbuser }}" + host: "{{ item }}" + password: "{{ nextcloud_dbpassword }}" + priv: "{{ nextcloud_dbname }}.*:ALL,GRANT" + with_items: + - "{{ nextcloud_dbhost }}" + - 127.0.0.1 + - ::1 + - localhost + when: mysql_enabled and nextcloud_enabled + +# Appears unnec as nextcloud_enabled.yml (just below) does the same +#- name: Restart Apache +# service: +# name: "{{ apache_service }}" +# state: restarted +## when: nextcloud_enabled | bool # taken care of by nextcloud_enabled.yml below +# when: not nextcloud_enabled + +# Enables or disable Nextcloud! +- include_tasks: nextcloud_enabled.yml + +- name: Add 'nextcloud' variable values to {{ iiab_ini_file }} + ini_file: + path: "{{ iiab_ini_file }}" + section: Nextcloud + option: "{{ item.option }}" + value: "{{ item.value }}" + with_items: + - option: name + value: Nextcloud + - option: description + value: '"NextCloud is a local server-based facility for sharing files, photos, contacts, calendars, etc."' + - option: path + value: "{{ nextcloud_prefix }}/nextcloud" + - option: nextcloud_force_install + value: "{{ nextcloud_force_install }}" + - option: nextcloud_orig_src_file + value: "{{ nextcloud_orig_src_file }}" + - option: nextcloud_src_file + value: "{{ nextcloud_src_file }}" + - option: nextcloud_enabled + value: "{{ nextcloud_enabled }}"