mirror of
https://github.com/fscotto/infra.git
synced 2026-05-30 23:49:56 +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
|
install_name: bookokrat
|
||||||
build_output_path: target/release/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:
|
desktop_npm_packages:
|
||||||
- name: "opencode-ai"
|
- name: "opencode-ai"
|
||||||
state: latest
|
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
|
loop_var: source_tool
|
||||||
label: "{{ source_tool.name }}"
|
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
|
- name: Install desktop npm packages
|
||||||
tags: [packages]
|
tags: [packages]
|
||||||
community.general.npm:
|
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