diff --git a/.ansible-lint b/.ansible-lint index a1c3634..1e98d71 100644 --- a/.ansible-lint +++ b/.ansible-lint @@ -1,6 +1,6 @@ --- warn_list: - role-name + - name[play] - name[casing] - - '204' - - '306' + - risky-shell-pipe diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 292e437..1f7278a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,9 @@ jobs: python-version: '3.x' - name: Install test dependencies - run: pip install ansible-lint[community,yamllint] + run: | + pip install ansible-lint + ansible-galaxy install -r requirements.yml - name: Lint code run: | @@ -43,11 +45,8 @@ jobs: matrix: include: - distro: debian8 - ansible-version: '<2.10' - distro: debian9 - distro: debian10 - - distro: ubuntu1604 - ansible-version: '>=2.9, <2.10' - distro: ubuntu1604 ansible-version: '>=2.10, <2.11' - distro: ubuntu1604 diff --git a/Dockerfile b/Dockerfile index b179278..6ebe0c4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,20 @@ -FROM ubuntu:16.04 +FROM ubuntu:18.04 MAINTAINER Mischa ter Smitten +ENV LANG C.UTF-8 +ENV LC_ALL C.UTF-8 + # python RUN apt-get update && \ - DEBIAN_FRONTEND=noninteractive apt-get install -y python-minimal python-dev curl && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y python3-minimal python3-dev curl && \ apt-get clean -RUN curl -sL https://bootstrap.pypa.io/pip/2.7/get-pip.py | python - +RUN curl -sL https://bootstrap.pypa.io/pip/3.6/get-pip.py | python3 - RUN rm -rf $HOME/.cache # ansible -RUN DEBIAN_FRONTEND=noninteractive apt-get install -y gcc libffi-dev libssl-dev && \ +RUN DEBIAN_FRONTEND=noninteractive apt-get install -y python3-apt && \ apt-get clean -RUN pip install ansible==2.9.15 +RUN pip3 install ansible==2.10.7 RUN rm -rf $HOME/.cache # provision diff --git a/README.md b/README.md index 2defd1b..10c4c98 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ Set up a [percona-server](https://www.percona.com/software/mysql-database/percon * `percona_server_user_root_cnf_manage`: [default: `true`]: Whether or not to manage `~root/.my.cnf` * `percona_server_user_root_cnf`: [default: `percona_server_user_root_cnf_preset`, see `defaults/main.yml`]: Root user configuration declarations +* `percona_server_use_legacy_auth_method`: [default: `false`]: Use legacy authentication method **_(only Percona Server 8.0)_** ##### SSL diff --git a/defaults/main.yml b/defaults/main.yml index 5779046..c4a4884 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -4,6 +4,8 @@ percona_server_version: 5.7 percona_server_root_password: '+eswuw9uthUteFreyAqu' +percona_server_use_legacy_auth_method: false + percona_server_etc_my_cnf: [] percona_server_user_root_cnf_manage: true @@ -21,6 +23,8 @@ percona_server_user_root_cnf: "{{ percona_server_user_root_cnf_preset }}" percona_server_install: - "percona-xtrabackup{{ '-80' if percona_server_version is version('8', '>=') else '-24' if percona_server_version is version('5.7', '>=') else '' }}" +percona_server_restart_handler_state: restarted + percona_server_ssl_map: {} percona_server_plugins_present: [] diff --git a/handlers/main.yml b/handlers/main.yml index 9499c68..f6a7f90 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,7 +1,7 @@ # handlers file --- - name: restart percona-server - service: + ansible.builtin.service: name: mysql - state: restarted + state: "{{ percona_server_restart_handler_state }}" when: service_default_state | default('started') == 'started' diff --git a/meta/main.yml b/meta/main.yml index fd70883..1c48933 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -7,7 +7,7 @@ galaxy_info: company: Oefenweb.nl B.V. description: Set up percona-server server in Debian-like systems license: MIT - min_ansible_version: 2.9.0 + min_ansible_version: 2.10.0 platforms: - name: Ubuntu versions: diff --git a/molecule/default/collections.yml b/molecule/default/collections.yml new file mode 100644 index 0000000..c3d7e2a --- /dev/null +++ b/molecule/default/collections.yml @@ -0,0 +1,6 @@ +--- +collections: + - name: community.docker + version: '>=1.2.0,<2' + - name: community.general + version: '>=2,<3' diff --git a/molecule/default/converge.yml b/molecule/default/converge.yml index 73043c4..8596f09 100644 --- a/molecule/default/converge.yml +++ b/molecule/default/converge.yml @@ -4,6 +4,6 @@ become: true pre_tasks: - name: include vars - include_vars: "{{ playbook_dir }}/../../tests/vars/main.yml" + ansible.builtin.include_vars: "{{ playbook_dir }}/../../tests/vars/main.yml" roles: - ../../../ diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml index fbb7120..8841165 100644 --- a/molecule/default/molecule.yml +++ b/molecule/default/molecule.yml @@ -8,7 +8,9 @@ platforms: image: "geerlingguy/docker-${MOLECULE_DISTRO:-ubuntu1604}-ansible:latest" command: ${MOLECULE_DOCKER_COMMAND:-""} volumes: - - /sys/fs/cgroup:/sys/fs/cgroup:ro + - /sys/fs/cgroup:/sys/fs/cgroup:rw + - /var/lib/containerd + cgroupns_mode: host privileged: true pre_build_image: true provisioner: diff --git a/requirements.yml b/requirements.yml new file mode 100644 index 0000000..05072c4 --- /dev/null +++ b/requirements.yml @@ -0,0 +1,4 @@ +# requirements file +--- +collections: + - name: community.mysql diff --git a/tasks/configure.yml b/tasks/configure.yml index c4ad418..1b635c6 100644 --- a/tasks/configure.yml +++ b/tasks/configure.yml @@ -1,7 +1,7 @@ # tasks file --- - name: configure | copy certificate files - copy: + ansible.builtin.copy: src: "{{ item.value.src }}" dest: "{{ item.value.dest }}" owner: "{{ item.value.owner | default('root') }}" @@ -12,16 +12,20 @@ tags: - percona-server-configure-copy-certificate-files -- block: +- name: configure | service + when: _mysqld_installed.rc != 0 + tags: + - percona-server-configure-first-run + block: - name: configure | service | stop - service: + ansible.builtin.service: name: mysql state: stopped tags: - percona-server-configure-first-run-service-stop - name: configure | remove (excessive) configuration files - file: + ansible.builtin.file: path: "{{ item }}" state: absent with_items: @@ -29,12 +33,9 @@ - /etc/mysql/percona-server.conf.d tags: - percona-server-configure-first-run-cleanup - when: _mysqld_installed.rc != 0 - tags: - - percona-server-configure-first-run - name: configure | update (global) configuration file - template: + ansible.builtin.template: src: "{{ percona_server_etc_mysql_my_cnf.lstrip('/') }}.j2" dest: "{{ percona_server_etc_mysql_my_cnf }}" owner: root @@ -44,19 +45,20 @@ tags: - percona-server-configure-global-my-cnf -- block: +- name: configure | service + when: _mysqld_installed.rc != 0 + tags: + - percona-server-configure-first-run + block: - name: configure | service | start - service: + ansible.builtin.service: name: mysql state: started tags: - percona-server-configure-first-run-service-start - when: _mysqld_installed.rc != 0 - tags: - - percona-server-configure-first-run - name: configure | update (root) configuration file - template: + ansible.builtin.template: src: root/.my.cnf.j2 dest: '~root/.my.cnf' owner: root diff --git a/tasks/databases.yml b/tasks/databases.yml index cbc4db1..6739cf5 100644 --- a/tasks/databases.yml +++ b/tasks/databases.yml @@ -1,7 +1,7 @@ # tasks file --- - name: databases | create - mysql_db: + community.mysql.mysql_db: name: "{{ item.name }}" collation: "{{ item.collation | default('utf8_general_ci') }}" encoding: "{{ item.encoding | default('utf8') }}" @@ -11,7 +11,7 @@ - percona-server-databases-create - name: databases | drop - mysql_db: + community.mysql.mysql_db: name: "{{ item.name }}" state: absent with_items: "{{ percona_server_databases_absent }}" diff --git a/tasks/first-run.yml b/tasks/first-run.yml index fd80920..fb131ff 100644 --- a/tasks/first-run.yml +++ b/tasks/first-run.yml @@ -1,8 +1,8 @@ # tasks file --- - name: first-run | check - shell: > - dpkg-query -W -f='${Status}' percona-server-server-{{ percona_server_version }} | grep -q 'install ok installed' + ansible.builtin.shell: > + dpkg-query -W -f='${Status}' percona-server-server{{ percona_server_version_deb }} | grep -q 'install ok installed' register: _mysqld_installed check_mode: no changed_when: false diff --git a/tasks/ib-logfile.yml b/tasks/ib-logfile.yml index c1a88ba..85603af 100644 --- a/tasks/ib-logfile.yml +++ b/tasks/ib-logfile.yml @@ -1,7 +1,7 @@ # tasks file --- - name: ib logfile | get datadir - mysql_variables: + community.mysql.mysql_variables: variable: datadir register: _datadir_value tags: @@ -9,16 +9,18 @@ - percona-server-store-datadir-retrieve - name: ib logfile | store datadir - set_fact: + ansible.builtin.set_fact: percona_server_datadir: "{{ _datadir_value.msg }}" tags: - percona-server-store-datadir - percona-server-store-datadir-set-fact # Instead of doing this in main.yml we do it here because of a bug in 2.2.0.0 -- block: +- name: ib logfile | first run + when: _mysqld_installed.rc != 0 + block: - name: ib logfile | set InnoDB shutdown mode - mysql_variables: + community.mysql.mysql_variables: variable: innodb_fast_shutdown value: "1" tags: @@ -26,14 +28,14 @@ - percona-server-ib-logfile-innodb-fast-shutdown-set - name: ib logfile | stop service - service: + ansible.builtin.service: name: mysql state: stopped tags: - percona-server-ib-logfile-stop-service - name: ib logfile | remove ib_logfile(s) - file: + ansible.builtin.file: path: "{{ item }}" state: absent with_items: @@ -43,9 +45,8 @@ - percona-server-ib-logfile-remove - name: ib logfile | start service - service: + ansible.builtin.service: name: mysql state: started tags: - percona-server-ib-logfile-start-service - when: _mysqld_installed.rc != 0 diff --git a/tasks/install.yml b/tasks/install.yml index d8934e9..70752b6 100644 --- a/tasks/install.yml +++ b/tasks/install.yml @@ -1,7 +1,7 @@ # tasks file --- - name: install | configure debconf - debconf: + ansible.builtin.debconf: name: "{{ item.name }}" question: "{{ item.question }}" value: "{{ item.value }}" @@ -11,15 +11,28 @@ tags: - percona-server-install-configure-debconf +- name: install | configure debconf for version 8.0 (Use Legacy Authentication Method) + ansible.builtin.debconf: + name: 'percona-server-server' + question: 'percona-server-server/default-auth-override' + value: 'Use Legacy Authentication Method (Retain MySQL 5.x Compatibility)' + vtype: select + changed_when: false + when: + - percona_server_version is version('8.0', '==') + - percona_server_use_legacy_auth_method | bool + tags: + - percona-server-install-configure-debconf + - name: install | dependencies - apt: + ansible.builtin.apt: name: "{{ percona_server_dependencies }}" state: "{{ apt_install_state | default('latest') }}" tags: - percona-server-install-dependencies - name: install | additional - apt: + ansible.builtin.apt: name: "{{ percona_server_install }}" state: "{{ apt_install_state | default('latest') }}" tags: diff --git a/tasks/main.yml b/tasks/main.yml index 0c96aa2..18c4c05 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,81 +1,93 @@ # tasks file --- -- include: version-support.yml +- name: version support + ansible.builtin.import_tasks: version-support.yml tags: - configuration - percona-server - percona-server-version-support -- include: first-run.yml +- name: first run + ansible.builtin.import_tasks: first-run.yml tags: - configuration - percona-server - percona-server-first-run -- include: repository.yml +- name: repository + ansible.builtin.import_tasks: repository.yml tags: - configuration - percona-server - percona-server-repository -- include: install.yml +- name: install + ansible.builtin.import_tasks: install.yml tags: - configuration - percona-server - percona-server-install -- include: configure.yml +- name: configure + ansible.builtin.import_tasks: configure.yml tags: - configuration - percona-server - percona-server-configure -- include: toolkit-udfs.yml +- name: toolkit udfs + ansible.builtin.import_tasks: toolkit-udfs.yml tags: - configuration - percona-server - percona-server-toolkit-udfs when: percona_server_toolkit_udfs_manage | bool -- include: zoneinfo.yml +- name: zoneinfo + ansible.builtin.import_tasks: zoneinfo.yml tags: - configuration - percona-server - percona-server-zoneinfo when: percona_server_zoneinfo_manage | bool -- include: databases.yml +- name: databases + ansible.builtin.import_tasks: databases.yml tags: - configuration - percona-server - percona-server-databases -- include: users.yml +- name: users + ansible.builtin.import_tasks: users.yml tags: - configuration - percona-server - percona-server-users -- include: plugins.yml +- name: plugins + ansible.builtin.import_tasks: plugins.yml tags: - configuration - percona-server - percona-server-plugins -- include: queries.yml +- name: queries + ansible.builtin.import_tasks: queries.yml tags: - configuration - percona-server - percona-server-queries -- include: ib-logfile.yml +- name: ib logfile + ansible.builtin.import_tasks: ib-logfile.yml tags: - configuration - percona-server - percona-server-ib-logfile - name: start and enable service - service: + ansible.builtin.service: name: mysql state: "{{ service_default_state | default('started') }}" enabled: "{{ service_default_enabled | default(true) | bool }}" diff --git a/tasks/plugins.yml b/tasks/plugins.yml index a978087..71e2240 100644 --- a/tasks/plugins.yml +++ b/tasks/plugins.yml @@ -1,7 +1,7 @@ # tasks file --- - name: plugins | create (lock) directory - file: + ansible.builtin.file: path: "{{ percona_server_lock_path }}" state: directory owner: root @@ -11,7 +11,7 @@ - percona-server-plugins-lock-directory - name: plugins | uninstall - shell: > + ansible.builtin.shell: > mysql -e "UNINSTALL PLUGIN {{ item.name }};" && rm {{ percona_server_lock_path }}/{{ item.name | lower }} args: removes: "{{ percona_server_lock_path }}/{{ item.name | lower }}" @@ -20,7 +20,7 @@ - percona-server-plugins-uninstall - name: plugins | install - shell: > + ansible.builtin.shell: > mysql -e "INSTALL PLUGIN {{ item.name }} SONAME '{{ item.soname }}';" && touch {{ percona_server_lock_path }}/{{ item.name | lower }} args: creates: "{{ percona_server_lock_path }}/{{ item.name | lower }}" diff --git a/tasks/queries.yml b/tasks/queries.yml index fc7cdd9..6711a89 100644 --- a/tasks/queries.yml +++ b/tasks/queries.yml @@ -1,7 +1,7 @@ # tasks file --- - name: queries | execute sql - command: > + ansible.builtin.command: > mysql --database="{{ item.0.database }}" -e "{{ item.1 }}; SELECT ROW_COUNT();" --skip-column-names register: _rows_affected changed_when: "_rows_affected.stdout | int > 0" diff --git a/tasks/repository.yml b/tasks/repository.yml index 54dbbde..b4febd6 100644 --- a/tasks/repository.yml +++ b/tasks/repository.yml @@ -1,7 +1,7 @@ # tasks file --- - name: repository | install | dependencies (pre) - apt: + ansible.builtin.apt: name: "{{ percona_server_dependencies_pre }}" state: "{{ apt_install_state | default('latest') }}" update_cache: true @@ -11,7 +11,7 @@ - percona-server-repository-install-dependencies - name: repository | add public key - apt_key: + ansible.builtin.apt_key: id: 9334A25F8507EFA5 keyserver: keyserver.ubuntu.com state: present @@ -19,7 +19,7 @@ - percona-server-repository-public-key - name: repository | add - apt_repository: + ansible.builtin.apt_repository: repo: "{{ item.type }} {{ item.url }} {{ item.component }}" state: present update_cache: true @@ -28,7 +28,7 @@ - percona-server-repository-add - name: repository | apt-pin packages - copy: + ansible.builtin.copy: src: etc/apt/preferences.d/00percona.pref dest: /etc/apt/preferences.d/00percona.pref owner: root diff --git a/tasks/toolkit-udfs.yml b/tasks/toolkit-udfs.yml index d3cf884..d95d41f 100644 --- a/tasks/toolkit-udfs.yml +++ b/tasks/toolkit-udfs.yml @@ -1,7 +1,7 @@ # tasks file --- - name: toolkit udfs | create (lock) directory - file: + ansible.builtin.file: path: "{{ percona_server_lock_path }}" state: directory owner: root @@ -11,7 +11,7 @@ - percona-server-toolkit-udfs-lock-directory - name: toolkit udfs | install - shell: > + ansible.builtin.shell: > mysql -e "DROP FUNCTION IF EXISTS {{ item.function }}; CREATE FUNCTION {{ item.function }} RETURNS INTEGER SONAME '{{ item.soname }}'" && touch {{ percona_server_lock_path }}/{{ item.soname }} args: creates: "{{ percona_server_lock_path }}/{{ item.soname }}" diff --git a/tasks/users.yml b/tasks/users.yml index 1fbb0c0..b4afb4d 100644 --- a/tasks/users.yml +++ b/tasks/users.yml @@ -1,7 +1,7 @@ # tasks file --- - name: users | create (default hosts) - mysql_user: + community.mysql.mysql_user: name: "{{ item[0].name }}" password: "{{ item[0].password }}" priv: "{{ item[0].privs | join('/') }}" @@ -15,7 +15,7 @@ - percona-server-users-create-default-hosts - name: users | create (custom hosts) - mysql_user: + community.mysql.mysql_user: name: "{{ item[0].name }}" password: "{{ item[0].password }}" priv: "{{ item[0].privs | join('/') }}" @@ -29,7 +29,7 @@ - percona-server-users-create-custom-hosts - name: users | drop (default hosts) - mysql_user: + community.mysql.mysql_user: name: "{{ item[0].name }}" host: "{{ item[1] }}" state: absent @@ -41,7 +41,7 @@ - percona-server-users-drop-default-hosts - name: users | drop (custom hosts) - mysql_user: + community.mysql.mysql_user: name: "{{ item[0].name }}" host: "{{ item[1] }}" state: absent diff --git a/tasks/version-support.yml b/tasks/version-support.yml index a9bfc09..d2de552 100644 --- a/tasks/version-support.yml +++ b/tasks/version-support.yml @@ -1,7 +1,7 @@ # tasks file --- - name: version support | check - fail: + ansible.builtin.fail: msg: "Percona Server version {{ percona_server_version }} is not supported" when: percona_server_version | string not in percona_server_versions_supported tags: diff --git a/tasks/zoneinfo.yml b/tasks/zoneinfo.yml index 90f2a12..07ba099 100644 --- a/tasks/zoneinfo.yml +++ b/tasks/zoneinfo.yml @@ -1,7 +1,7 @@ # tasks file --- - name: timezone info | create (lock) directory - file: + ansible.builtin.file: path: "{{ percona_server_lock_path }}" state: directory owner: root @@ -11,7 +11,7 @@ - percona-server-zoneinfo-lock-directory - name: timezone info | install - shell: > + ansible.builtin.shell: > {{ percona_server_zoneinfo_command }} | tee {{ percona_server_lock_path }}/zoneinfo.sql | mysql --database=mysql args: creates: "{{ percona_server_lock_path }}/zoneinfo.sql" diff --git a/templates/etc/mysql/my.cnf.j2 b/templates/etc/mysql/my.cnf.j2 index 2198c6a..ef34b0c 100644 --- a/templates/etc/mysql/my.cnf.j2 +++ b/templates/etc/mysql/my.cnf.j2 @@ -19,3 +19,8 @@ {% if percona_server_etc_my_cnf_includedir is defined %} !includedir {{ percona_server_etc_my_cnf_includedir }} {% endif %} + +{% if percona_server_version is version('8.0', '==') and percona_server_use_legacy_auth_method | bool %} +[mysqld] +default-authentication-plugin = mysql_native_password +{% endif %} diff --git a/tests/test.yml b/tests/test.yml index c2fbb9f..8d7cd5f 100644 --- a/tests/test.yml +++ b/tests/test.yml @@ -5,6 +5,6 @@ become: true pre_tasks: - name: include vars - include_vars: "{{ playbook_dir }}/vars/main.yml" + ansible.builtin.include_vars: "{{ playbook_dir }}/vars/main.yml" roles: - ../../ diff --git a/tests/vagrant.yml b/tests/vagrant.yml index 3808922..851ce22 100644 --- a/tests/vagrant.yml +++ b/tests/vagrant.yml @@ -5,6 +5,6 @@ become: true pre_tasks: - name: include vars - include_vars: "{{ playbook_dir }}/vars/main.yml" + ansible.builtin.include_vars: "{{ playbook_dir }}/vars/main.yml" roles: - ../../ diff --git a/vars/main.yml b/vars/main.yml index 0cc0d0b..985c64c 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -4,8 +4,12 @@ percona_server_versions_supported: - '5.5' - '5.6' - '5.7' + - '8.0' -percona_server_repositories: +percona_server_version_deb_prefix: "-{{ percona_server_version }}" +percona_server_version_deb: "{{ '' if percona_server_version is version('8.0', '==') else percona_server_version_deb_prefix }}" + +percona_server_repositories_5: - type: deb url: "http://repo.percona.com/apt {{ ansible_distribution_release }}" component: main @@ -13,22 +17,38 @@ percona_server_repositories: url: "http://repo.percona.com/apt {{ ansible_distribution_release }}" component: main +percona_server_repositories_8: + - type: deb + url: "http://repo.percona.com/ps-80/apt {{ ansible_distribution_release }}" + component: main + - type: deb-src + url: "http://repo.percona.com/ps-80/apt {{ ansible_distribution_release }}" + component: main + - type: deb + url: "http://repo.percona.com/tools/apt {{ ansible_distribution_release }}" + component: main + - type: deb-src + url: "http://repo.percona.com/tools/apt {{ ansible_distribution_release }}" + component: main + +percona_server_repositories: "{{ percona_server_repositories_8 if percona_server_version is version('8.0', '==') else percona_server_repositories_5 }}" + percona_server_debconf_selections: - - name: "percona-server-server-{{ percona_server_version }}" + - name: "percona-server-server{{ percona_server_version_deb }}" question: percona-server-server/root_password value: "{{ percona_server_root_password }}" vtype: password - - name: "percona-server-server-{{ percona_server_version }}" + - name: "percona-server-server{{ percona_server_version_deb }}" question: percona-server-server/root_password_again value: "{{ percona_server_root_password }}" vtype: password # 5.7 - - name: "percona-server-server-{{ percona_server_version }}" - question: "percona-server-server-{{ percona_server_version }}/root-pass" + - name: "percona-server-server{{ percona_server_version_deb }}" + question: "percona-server-server{{ percona_server_version_deb }}/root-pass" value: "{{ percona_server_root_password }}" vtype: password - - name: "percona-server-server-{{ percona_server_version }}" - question: "percona-server-server-{{ percona_server_version }}/re-root-pass" + - name: "percona-server-server{{ percona_server_version_deb }}" + question: "percona-server-server{{ percona_server_version_deb }}/re-root-pass" value: "{{ percona_server_root_password }}" vtype: password @@ -37,8 +57,8 @@ percona_server_dependencies_pre: - dirmngr percona_server_dependencies: - - "percona-server-client-{{ percona_server_version }}" - - "percona-server-server-{{ percona_server_version }}" + - "percona-server-client{{ percona_server_version_deb }}" + - "percona-server-server{{ percona_server_version_deb }}" - "{{ percona_server_libmysqlclient_map[percona_server_version] }}" - "python{{ ansible_python_version is version('3', '>=') | ternary('3', '') }}-mysqldb" @@ -70,3 +90,4 @@ percona_server_libmysqlclient_map: 5.5: libperconaserverclient18 5.6: libperconaserverclient18.1 5.7: libperconaserverclient20 + 8.0: libperconaserverclient21