Files
LLM-Labs-Local/ansible/roles/packages/tasks/linux.yml
T
2026-04-25 18:05:56 +00:00

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