a1c4892b37
Made-with: Cursor
252 lines
7.4 KiB
YAML
252 lines
7.4 KiB
YAML
- name: Define Debian/Ubuntu prerequisite packages
|
|
set_fact:
|
|
courseware_linux_prereq_packages:
|
|
- build-essential
|
|
- ca-certificates
|
|
- cmake
|
|
- curl
|
|
- git
|
|
- git-lfs
|
|
- libcap2-bin
|
|
- libcurl4-openssl-dev
|
|
- nodejs
|
|
- npm
|
|
- pkg-config
|
|
- python3
|
|
- python3-pip
|
|
- python3-setuptools
|
|
- python3-venv
|
|
- unzip
|
|
- zstd
|
|
|
|
- name: Install Debian/Ubuntu prerequisites
|
|
block:
|
|
- name: Install Debian/Ubuntu prerequisite packages
|
|
become: true
|
|
apt:
|
|
name: "{{ courseware_linux_prereq_packages }}"
|
|
state: present
|
|
update_cache: true
|
|
rescue:
|
|
- name: Repair interrupted dpkg state before retrying prerequisites
|
|
become: true
|
|
command:
|
|
argv:
|
|
- dpkg
|
|
- --configure
|
|
- -a
|
|
register: courseware_dpkg_repair
|
|
changed_when: false
|
|
failed_when: false
|
|
|
|
- name: Repair broken apt dependencies before retrying prerequisites
|
|
become: true
|
|
command:
|
|
argv:
|
|
- apt-get
|
|
- -y
|
|
- --fix-broken
|
|
- install
|
|
environment:
|
|
DEBIAN_FRONTEND: noninteractive
|
|
register: courseware_apt_fix_broken
|
|
changed_when: >-
|
|
'0 upgraded, 0 newly installed, 0 to remove' not in courseware_apt_fix_broken.stdout
|
|
|
|
- name: Retry Debian/Ubuntu prerequisite package install
|
|
become: true
|
|
apt:
|
|
name: "{{ courseware_linux_prereq_packages }}"
|
|
state: present
|
|
update_cache: true
|
|
|
|
- name: Query CUDA toolkit apt candidate
|
|
command: apt-cache policy nvidia-cuda-toolkit
|
|
register: courseware_cuda_toolkit_policy
|
|
changed_when: false
|
|
failed_when: false
|
|
|
|
- name: Check for nvcc
|
|
command: which nvcc
|
|
register: courseware_nvcc_check
|
|
changed_when: false
|
|
failed_when: false
|
|
|
|
- name: Set CUDA toolkit package availability
|
|
set_fact:
|
|
courseware_cuda_toolkit_package_available: >-
|
|
{{
|
|
courseware_cuda_toolkit_policy.rc == 0
|
|
and 'Candidate: (none)' not in courseware_cuda_toolkit_policy.stdout
|
|
}}
|
|
|
|
- name: Install distro CUDA toolkit when available
|
|
block:
|
|
- name: Install nvidia-cuda-toolkit
|
|
become: true
|
|
apt:
|
|
name: nvidia-cuda-toolkit
|
|
state: present
|
|
rescue:
|
|
- name: Fail with CUDA toolkit guidance after apt install error
|
|
fail:
|
|
msg: |
|
|
CUDA Toolkit could not be installed from the distro package manager.
|
|
|
|
This installer needs the Linux-side CUDA toolkit for llama.cpp, not just a working `nvidia-smi`.
|
|
|
|
Try this first:
|
|
sudo apt update
|
|
sudo apt install -y nvidia-cuda-toolkit
|
|
|
|
If that still fails, add NVIDIA's CUDA repository for your Debian/Ubuntu release and install the toolkit from there.
|
|
|
|
Verify with:
|
|
nvcc --version
|
|
ls /usr/local/cuda/include/cuda_runtime.h
|
|
when:
|
|
- courseware_host_profile == "native-debian-ubuntu"
|
|
- courseware_cuda_toolkit_package_available
|
|
- not courseware_cuda_toolkit_ready
|
|
|
|
- name: Fail when native CUDA network repository bootstrap is unsupported
|
|
fail:
|
|
msg: |
|
|
This native {{ ansible_distribution }} {{ ansible_distribution_version }} host does not match the CUDA network-repository variants this installer knows how to bootstrap automatically.
|
|
|
|
Supported native CUDA repo bootstrap targets currently match NVIDIA's documented Debian/Ubuntu paths:
|
|
- Debian 12 and Debian 13 on x86_64
|
|
- Ubuntu 22.04 and Ubuntu 24.04 on x86_64 or arm64
|
|
|
|
Install the Linux-side CUDA toolkit manually for this host, then rerun:
|
|
./labctl up
|
|
|
|
Verify with:
|
|
nvcc --version
|
|
ls /usr/local/cuda/include/cuda_runtime.h
|
|
when:
|
|
- courseware_host_profile == "native-debian-ubuntu"
|
|
- not courseware_cuda_toolkit_package_available
|
|
- not courseware_cuda_toolkit_ready
|
|
- not courseware_native_cuda_repo_supported
|
|
|
|
- name: Bootstrap NVIDIA CUDA network repository for native Debian/Ubuntu
|
|
block:
|
|
- name: Download NVIDIA CUDA keyring package
|
|
get_url:
|
|
url: "{{ courseware_native_cuda_keyring_url }}"
|
|
dest: "{{ courseware_native_cuda_keyring_local_path }}"
|
|
mode: "0644"
|
|
force: false
|
|
|
|
- name: Install NVIDIA CUDA keyring package
|
|
become: true
|
|
apt:
|
|
deb: "{{ courseware_native_cuda_keyring_local_path }}"
|
|
state: present
|
|
|
|
- name: Install CUDA toolkit from NVIDIA network repository
|
|
become: true
|
|
apt:
|
|
name: "{{ courseware_native_cuda_toolkit_package }}"
|
|
state: present
|
|
update_cache: true
|
|
rescue:
|
|
- name: Repair interrupted dpkg state before retrying CUDA repository install
|
|
become: true
|
|
command:
|
|
argv:
|
|
- dpkg
|
|
- --configure
|
|
- -a
|
|
changed_when: false
|
|
failed_when: false
|
|
|
|
- name: Repair broken apt dependencies before retrying CUDA repository install
|
|
become: true
|
|
command:
|
|
argv:
|
|
- apt-get
|
|
- -y
|
|
- --fix-broken
|
|
- install
|
|
environment:
|
|
DEBIAN_FRONTEND: noninteractive
|
|
register: courseware_cuda_repo_fix_broken
|
|
changed_when: >-
|
|
'0 upgraded, 0 newly installed, 0 to remove' not in courseware_cuda_repo_fix_broken.stdout
|
|
|
|
- name: Retry CUDA toolkit install from NVIDIA network repository
|
|
become: true
|
|
apt:
|
|
name: "{{ courseware_native_cuda_toolkit_package }}"
|
|
state: present
|
|
update_cache: true
|
|
when:
|
|
- courseware_host_profile == "native-debian-ubuntu"
|
|
- not courseware_cuda_toolkit_package_available
|
|
- not courseware_cuda_toolkit_ready
|
|
- courseware_native_cuda_repo_supported
|
|
|
|
- name: Check for Ollama binary
|
|
command: which ollama
|
|
register: courseware_ollama_check
|
|
changed_when: false
|
|
failed_when: false
|
|
|
|
- name: Install Ollama
|
|
become: true
|
|
shell: curl -fsSL https://ollama.com/install.sh | sh
|
|
args:
|
|
creates: /usr/local/bin/ollama
|
|
when: courseware_ollama_check.rc != 0
|
|
|
|
- name: Mark Ollama as installed by courseware
|
|
file:
|
|
path: "{{ courseware_ollama_install_marker }}"
|
|
state: touch
|
|
mode: "0644"
|
|
when: courseware_ollama_check.rc != 0
|
|
|
|
- name: Check for courseware-managed Ollama install marker
|
|
stat:
|
|
path: "{{ courseware_ollama_install_marker }}"
|
|
register: courseware_ollama_install_marker_before
|
|
|
|
- name: Adopt existing local Ollama install into courseware management
|
|
file:
|
|
path: "{{ courseware_ollama_install_marker }}"
|
|
state: touch
|
|
mode: "0644"
|
|
when:
|
|
- not courseware_ollama_install_marker_before.stat.exists
|
|
- courseware_ollama_check.rc == 0
|
|
- ansible_system == "Linux"
|
|
- ansible_service_mgr == "systemd"
|
|
- courseware_is_wsl | bool
|
|
- ansible_user_id != "ollama"
|
|
- ansible_env.HOME is search('/home/')
|
|
- ansible_env.HOME != '/usr/share/ollama'
|
|
- ansible_env.HOME != '/var/lib/ollama'
|
|
|
|
- name: Refresh courseware-managed Ollama install marker
|
|
stat:
|
|
path: "{{ courseware_ollama_install_marker }}"
|
|
register: courseware_ollama_install_marker_stat
|
|
|
|
- name: Check for Ollama systemd unit
|
|
stat:
|
|
path: /etc/systemd/system/ollama.service
|
|
register: courseware_ollama_systemd_unit
|
|
|
|
- name: Stop and disable courseware-managed Ollama systemd service
|
|
become: true
|
|
systemd:
|
|
name: ollama
|
|
state: stopped
|
|
enabled: false
|
|
when:
|
|
- ansible_service_mgr == "systemd"
|
|
- courseware_ollama_install_marker_stat.stat.exists
|
|
- courseware_ollama_systemd_unit.stat.exists
|