From 5be82a2130dd80cd5e6bc4454a96567b451a7c11 Mon Sep 17 00:00:00 2001 From: StEn Date: Tue, 1 Aug 2023 21:20:22 +0200 Subject: [PATCH] feat: add support for debian 12 --- .github/workflows/code_testing.yml | 1 + .github/workflows/constraints.txt | 3 +- README.md | 2 +- defaults/main.yml | 2 +- meta/main.yml | 1 + tasks/base_dependencies/jbig2enc.yml | 2 +- tasks/base_dependencies/main.yml | 7 ++ tasks/base_dependencies/python.yml | 89 +++++++++++++++++++++++ tasks/base_dependencies/repo_packages.yml | 15 ---- tasks/paperless_ngx/venv.yml | 18 ++++- vars/main.yml | 3 + 11 files changed, 121 insertions(+), 22 deletions(-) create mode 100644 tasks/base_dependencies/python.yml diff --git a/.github/workflows/code_testing.yml b/.github/workflows/code_testing.yml index cbc54f7..88bfdff 100644 --- a/.github/workflows/code_testing.yml +++ b/.github/workflows/code_testing.yml @@ -25,6 +25,7 @@ jobs: matrix: distro: - debian11 + - debian12 # https://github.com/geerlingguy/docker-ubuntu2204-ansible/issues/6 # - ubuntu2204 - ubuntu2004 diff --git a/.github/workflows/constraints.txt b/.github/workflows/constraints.txt index 3f8a050..0c8ecc3 100644 --- a/.github/workflows/constraints.txt +++ b/.github/workflows/constraints.txt @@ -1,4 +1,5 @@ -ansible==7.5.0 +ansible==8.2.0 ansible-lint==6.15.0 pip==23.1.2 +requests==2.28.1 yamllint==1.32.0 \ No newline at end of file diff --git a/README.md b/README.md index bd61979..0710b16 100644 --- a/README.md +++ b/README.md @@ -63,13 +63,13 @@ The following sections are devided into: | Name | Default Value | Description | | -------------- | ------------- | -----------------------------------| | `paperless_ngx_db_type` | sqlite | Available db types are sqlite and postgresql. If postrgresql is chosen then the other db_ vars must be configured too. | +| `paperless_ngx_dependency_install_tmp_dir` | /tmp/ | Directory for temporary dependency installation files | | `paperless_ngx_dir_force_permission_exclude` | [] | Which directories should be skipped from permission check/setting. See [docs](docs/DIRECTORY_PERMISSION_CHECK.md). | | `paperless_ngx_dir_installation` | /opt/paperless-ngx | The directory where paperless-ngx static installation files are written to. | | `paperless_ngx_dir_runtime_data` | /var/lib/paperless-ngx | The directory where the runtime data will be stored. | | `paperless_ngx_dir_virtualenv` | "{{ paperless_ngx_dir_installation }}/.venv" | The directory for the needed python venv. | | `paperless_ngx_jbig2enc_enabled` | true | Whether to install and use jbig2enc for OCRmyPDF. | | `paperless_ngx_jbig2enc_lossy` | false | Run jbig2enc in lossy mode or not. | -| `paperless_ngx_jbig2enc_tmp_dir` | /tmp/ | Directory for temporary jbig2enc files | | `paperless_ngx_jbig2enc_version` | 0.29 | Which version to install. | | `paperless_ngx_redis_host` | localhost | Redis host | | `paperless_ngx_redis_port` | 6379 | Redis port | diff --git a/defaults/main.yml b/defaults/main.yml index 88ab67c..77a2bdb 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -10,7 +10,7 @@ paperless_ngx_dir_virtualenv: "{{ paperless_ngx_dir_installation }}/.venv" ## jbig2encode paperless_ngx_jbig2enc_enabled: true paperless_ngx_jbig2enc_lossy: false -paperless_ngx_jbig2enc_tmp_dir: "/tmp/" +paperless_ngx_dependency_install_tmp_dir: "/tmp/" paperless_ngx_jbig2enc_version: 0.29 ## Redis db paperless_ngx_redis_host: localhost diff --git a/meta/main.yml b/meta/main.yml index fb5ce1d..242f48d 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -17,6 +17,7 @@ galaxy_info: - name: Debian versions: - bullseye + - bookworm - name: Ubuntu versions: diff --git a/tasks/base_dependencies/jbig2enc.yml b/tasks/base_dependencies/jbig2enc.yml index 198cc87..a709962 100644 --- a/tasks/base_dependencies/jbig2enc.yml +++ b/tasks/base_dependencies/jbig2enc.yml @@ -41,7 +41,7 @@ - name: Create temporary git directory ansible.builtin.tempfile: state: directory - path: "{{ paperless_ngx_jbig2enc_tmp_dir }}" + path: "{{ paperless_ngx_dependency_install_tmp_dir }}" register: _jbig2enc_gitdir - name: Pull jbig2enc diff --git a/tasks/base_dependencies/main.yml b/tasks/base_dependencies/main.yml index 8f6f78e..c9bf6a2 100644 --- a/tasks/base_dependencies/main.yml +++ b/tasks/base_dependencies/main.yml @@ -6,6 +6,13 @@ tags: repo_packages tags: repo_packages +- name: Setup python version used in paperless-ngx venv + ansible.builtin.include_tasks: + file: python.yml + apply: + tags: python + tags: python + - name: Setup jbig2enc ansible.builtin.include_tasks: file: jbig2enc.yml diff --git a/tasks/base_dependencies/python.yml b/tasks/base_dependencies/python.yml new file mode 100644 index 0000000..e826e9d --- /dev/null +++ b/tasks/base_dependencies/python.yml @@ -0,0 +1,89 @@ +--- +- name: Check if python is already installed with correct version (unspecific) + ansible.builtin.command: + cmd: python3 --version + register: python_unspecific_version_installed_response + changed_when: false + failed_when: false + ignore_errors: true + +- name: Check if python is already installed with correct version (specific) + ansible.builtin.command: + cmd: python{{ paperless_ngx_python_version_short }} --version + register: python_specific_version_installed_response + changed_when: false + failed_when: false + ignore_errors: true + +- name: Setting python version (unspecific) # noqa jinja[spacing] + ansible.builtin.set_fact: + _python_wanted_version_unspecific_installed: >- + {%- if python_unspecific_version_installed_response.rc != 0 or + (python_unspecific_version_installed_response.stdout.split(' ')[-1] != paperless_ngx_python_version_full | string) -%} + false + {%- else -%} + true + {%- endif -%} + +- name: Setting python version (specific) # noqa jinja[spacing] + ansible.builtin.set_fact: + _python_wanted_version_specific_installed: >- + {%- if python_specific_version_installed_response.rc != 0 or + (python_specific_version_installed_response.stdout.split(' ')[-1] != paperless_ngx_python_version_full | string) -%} + false + {%- else -%} + true + {%- endif -%} + +- name: Install python if not already installed in the proper version + become: true + when: not _python_wanted_version_unspecific_installed and not _python_wanted_version_specific_installed + block: + - name: Install dev dependencies + ansible.builtin.package: + name: "{{ item }}" + update_cache: true + with_items: + - build-essential + - libreadline-dev + - libncursesw5-dev + - libssl-dev + - libsqlite3-dev + - libgdbm-dev + - libc6-dev + - libbz2-dev + - libffi-dev + - tk-dev + - zlib1g-dev + + - name: Create temporary directory + ansible.builtin.tempfile: + state: directory + path: "{{ paperless_ngx_dependency_install_tmp_dir }}" + register: _python_archive_dir + + - name: Download and extract python sources + become: true + ansible.builtin.unarchive: + src: "{{ paperless_ngx_python_release_url }}" + remote_src: true + dest: "{{ _python_archive_dir.path }}" + extra_opts: [--strip-components=1] + register: _download_and_unarchive_python + until: + - "not 'urlopen error' in _download_and_unarchive_python.msg | default('')" + - "not 'The read operation timed out' in _download_and_unarchive_python.msg | default('')" + retries: 3 + delay: 60 + + - name: Run configure for python + ansible.builtin.command: ./configure --prefix=/usr --enable-optimizations --with-ensurepip=install + args: + chdir: "{{ _python_archive_dir.path }}" + changed_when: true + + - name: Run 'make and make altinstall' target + become: true + community.general.make: + chdir: "{{ _python_archive_dir.path }}" + target: altinstall diff --git a/tasks/base_dependencies/repo_packages.yml b/tasks/base_dependencies/repo_packages.yml index 949906c..e542c06 100644 --- a/tasks/base_dependencies/repo_packages.yml +++ b/tasks/base_dependencies/repo_packages.yml @@ -13,8 +13,6 @@ update_cache: true pkg: # paperless-ngx - - python3-pip - - python3-dev - default-libmysqlclient-dev - fonts-liberation - imagemagick @@ -37,12 +35,7 @@ - zlib1g - tesseract-ocr # Dev - - build-essential - git - - python3-setuptools - - python3-wheel - - python3-venv - - python3-jmespath - sudo register: _install_base_deps_result until: @@ -70,11 +63,3 @@ masked: false state: started when: paperless_ngx_redis_host == 'localhost' or paperless_ngx_redis_host == '127.0.0.1' - -# upstream virtualenv in Ubuntu 20.04 is broken -# https://github.com/pypa/virtualenv/issues/1873 -- name: Install python virtualenv - become: true - ansible.builtin.pip: - name: virtualenv - extra_args: --upgrade diff --git a/tasks/paperless_ngx/venv.yml b/tasks/paperless_ngx/venv.yml index 3c87c45..3a6b1ad 100644 --- a/tasks/paperless_ngx/venv.yml +++ b/tasks/paperless_ngx/venv.yml @@ -1,11 +1,22 @@ --- +# upstream virtualenv in Ubuntu 20.04 is broken +# https://github.com/pypa/virtualenv/issues/1873 +- name: Install python virtualenv + become: true + become_user: "{{ paperless_ngx_system_user }}" + ansible.builtin.pip: + name: virtualenv + extra_args: --upgrade --user + executable: /usr/bin/pip{{ paperless_ngx_python_version_short }} + - name: Install latest pip become: true become_user: "{{ paperless_ngx_system_user }}" ansible.builtin.pip: name: pip virtualenv: "{{ paperless_ngx_dir_virtualenv }}" - virtualenv_python: python3 + virtualenv_python: /usr/bin/python{{ paperless_ngx_python_version_short }} + virtualenv_command: python{{ paperless_ngx_python_version_short }} -m virtualenv extra_args: --upgrade - name: Install paperless-ngx python requirements @@ -14,7 +25,7 @@ ansible.builtin.pip: requirements: "{{ paperless_ngx_dir_installation }}/requirements.txt" virtualenv: "{{ paperless_ngx_dir_virtualenv }}" - virtualenv_python: python3 + virtualenv_python: /usr/bin/python{{ paperless_ngx_python_version_short }} extra_args: --upgrade register: _install_python_requirements until: 'not "ReadTimeoutError" in _install_python_requirements.msg | default("")' @@ -26,7 +37,8 @@ ansible.builtin.file: path: "{{ paperless_ngx_dir_virtualenv }}" state: directory - recurse: true + # recurse: true + # follow: false owner: "{{ paperless_ngx_system_user }}" group: "{{ paperless_ngx_system_group }}" mode: g-w,o-rwx diff --git a/vars/main.yml b/vars/main.yml index beb3531..5ee9c82 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -32,6 +32,9 @@ paperless_ngx_services_list: - name: paperless-flower.service enabled: "{{ paperless_ngx_conf_enable_flower }}" +paperless_ngx_python_release_url: 'https://www.python.org/ftp/python/{{ paperless_ngx_python_version_full }}/Python-{{ paperless_ngx_python_version_full }}.tgz' +paperless_ngx_python_version_full: '{{ paperless_ngx_python_version_short }}.17' +paperless_ngx_python_version_short: '3.9' paperless_ngx_version_minimum: '1.10.0' ## Vars with reference to the paperless-ngx docs