Add Ollama with binary tool pattern and turnstile service

This commit is contained in:
Fabio Scotto di Santolo
2026-04-18 16:12:18 +02:00
parent c5f787f438
commit cc8c07a309
4 changed files with 151 additions and 0 deletions

View File

@@ -139,6 +139,13 @@ desktop_source_tools:
install_name: bookokrat
build_output_path: target/release/bookokrat
desktop_binary_tools:
- name: ollama
install_name: ollama
repo: https://github.com/ollama/ollama
asset_arch: amd64
install_mode: tree
desktop_npm_packages:
- name: "opencode-ai"
state: latest

View File

@@ -0,0 +1,67 @@
---
- name: Check installed {{ binary_tool.name }} binary
ansible.builtin.stat:
path: "/usr/local/bin/{{ binary_tool.install_name | default(binary_tool.name) }}"
register: binary_installed
- name: Get current {{ binary_tool.name }} version
ansible.builtin.command:
cmd: "/usr/local/bin/{{ binary_tool.install_name | default(binary_tool.name) }} --version"
register: binary_current_version
changed_when: false
failed_when: false
- name: Set effective version for {{ binary_tool.name }}
ansible.builtin.set_fact:
binary_tool_version: >-
{{
ollama_version
if binary_tool.name == 'ollama'
else binary_tool.version | default('')
}}
binary_tool_asset_name: >-
{{
ollama_asset_name.name
if binary_tool.name == 'ollama'
else binary_tool.asset_name
}}
- name: Ensure extraction directory exists for {{ binary_tool.name }}
ansible.builtin.file:
path: "{{ desktop_tools_tmp_dir }}/{{ binary_tool.name }}"
state: directory
mode: "0755"
when: binary_tool.install_mode | default('binary') != 'tree'
- name: Extract {{ binary_tool.name }} archive
ansible.builtin.unarchive:
src: "{{ desktop_tools_tmp_dir }}/{{ binary_tool_asset_name }}"
dest: "{{ desktop_tools_tmp_dir }}/{{ binary_tool.name }}"
remote_src: true
creates: "{{ desktop_tools_tmp_dir }}/{{ binary_tool.name }}/{{ binary_tool.install_name | default(binary_tool.name) }}"
when:
- binary_tool.install_mode | default('binary') != 'tree'
- binary_current_version.rc != 0 or binary_current_version.stdout_lines[0] != binary_tool_version
- name: Install {{ binary_tool.name }} archive tree
ansible.builtin.unarchive:
src: "{{ desktop_tools_tmp_dir }}/{{ binary_tool_asset_name }}"
dest: /usr/local
remote_src: true
become: true
when:
- binary_tool.install_mode | default('binary') == 'tree'
- binary_current_version.rc != 0 or binary_current_version.stdout_lines[0] != binary_tool_version
- name: Install {{ binary_tool.name }} binary
ansible.builtin.copy:
src: "{{ desktop_tools_tmp_dir }}/{{ binary_tool.name }}/{{ binary_tool.install_name | default(binary_tool.name) }}"
dest: "/usr/local/bin/{{ binary_tool.install_name | default(binary_tool.name) }}"
remote_src: true
owner: root
group: root
mode: "0755"
become: true
when:
- binary_tool.install_mode | default('binary') != 'tree'
- binary_current_version.rc != 0 or binary_current_version.stdout_lines[0] != binary_tool_version

View File

@@ -444,6 +444,74 @@
loop_var: source_tool
label: "{{ source_tool.name }}"
- name: Set desktop tools tmp directory
tags: [packages]
ansible.builtin.set_fact:
desktop_tools_tmp_dir: /tmp/desktop-tools
- name: Set ollama tool config from list
tags: [packages]
ansible.builtin.set_fact:
desktop_ollama_tool: >-
{{
desktop_binary_tools
| selectattr('name', 'equalto', 'ollama')
| first
| default({})
}}
when: "'ollama' in (desktop_binary_tools | map(attribute='name') | list)"
- name: Fetch latest ollama release metadata
tags: [packages]
ansible.builtin.uri:
url: https://api.github.com/repos/ollama/ollama/releases/latest
headers:
Accept: application/vnd.github+json
return_content: true
register: ollama_latest_release
changed_when: false
when: "'ollama' in (desktop_binary_tools | map(attribute='name') | list)"
- name: Set ollama release metadata
tags: [packages]
ansible.builtin.set_fact:
ollama_version: "{{ ollama_latest_release.json.tag_name | regex_replace('^v') }}"
ollama_asset_name: >-
{{
ollama_latest_release.json.assets
| selectattr('name', 'equalto', 'ollama-linux-' ~ desktop_ollama_tool.asset_arch ~ '.tar.zst')
| first
| default({})
}}
when: "'ollama' in (desktop_binary_tools | map(attribute='name') | list)"
- name: Ensure temporary directory exists for desktop binary tools
tags: [packages]
ansible.builtin.file:
path: "{{ desktop_tools_tmp_dir }}"
state: directory
mode: "0755"
- name: Fetch latest ollama release archive
tags: [packages]
ansible.builtin.get_url:
url: "https://github.com/ollama/ollama/releases/download/v{{ ollama_version }}/{{ ollama_asset_name.name }}"
dest: "{{ desktop_tools_tmp_dir }}/{{ ollama_asset_name.name }}"
mode: "0644"
when: "'ollama' in (desktop_binary_tools | map(attribute='name') | list)"
- name: Install desktop binary tools
tags: [packages]
ansible.builtin.include_tasks:
file: binary_tool.yml
apply:
tags: [packages]
loop: "{{ desktop_binary_tools }}"
when: desktop_binary_tools | length > 0
loop_control:
loop_var: binary_tool
label: "{{ binary_tool.name }}"
- name: Install desktop npm packages
tags: [packages]
community.general.npm:

View File

@@ -0,0 +1,9 @@
#!/bin/sh
set -eu
if [ -n "${TURNSTILE_ENV_DIR:-}" ]; then
exec chpst -e "$TURNSTILE_ENV_DIR" /usr/local/bin/ollama serve
fi
exec /usr/local/bin/ollama serve