mirror of
https://github.com/fscotto/infra.git
synced 2026-05-30 15:39:58 +00:00
Add Ollama with binary tool pattern and turnstile service
This commit is contained in:
@@ -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
|
||||
|
||||
67
ansible/roles/profile_desktop_common/tasks/binary_tool.yml
Normal file
67
ansible/roles/profile_desktop_common/tasks/binary_tool.yml
Normal 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
|
||||
@@ -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:
|
||||
|
||||
9
dotfiles/desktop/.config/service/ollama/run
Executable file
9
dotfiles/desktop/.config/service/ollama/run
Executable 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
|
||||
Reference in New Issue
Block a user