From 65aeea9a9327a5e1d19e8becb5f0fdda95b6c78c Mon Sep 17 00:00:00 2001 From: Hyperling Date: Sat, 24 Oct 2026 17:32:49 -0700 Subject: [PATCH] llm, switch open-terminal over to compose so that build dependencies are persistent. --- tasks/workstation/linux/software/llm.yml | 176 ++++++++++++++--------- 1 file changed, 111 insertions(+), 65 deletions(-) diff --git a/tasks/workstation/linux/software/llm.yml b/tasks/workstation/linux/software/llm.yml index c33bd90..c871a9a 100644 --- a/tasks/workstation/linux/software/llm.yml +++ b/tasks/workstation/linux/software/llm.yml @@ -228,10 +228,11 @@ - "{{ qwen_code }}" state: present - - name: Workstation | Linux | Software | LLMs | Docker + - name: Workstation | Linux | Software | LLMs | Docker | Install ansible.builtin.package: name: - docker + - docker-compose state: present - name: Workstation | Linux | Software | LLMs | Docker | runit @@ -521,7 +522,14 @@ ansible.builtin.file: name: "/var/log/open-terminal" state: directory - owner: "{{ user }}" + owner: root + mode: "0755" + + - name: Workstation | Linux | Software | LLMs | runit | open-terminal | Dir | /usr/local/etc + ansible.builtin.file: + name: "/usr/local/etc/open-terminal" + state: directory + owner: root mode: "0755" - name: Workstation | Linux | Software | LLMs | runit | open-terminal | AI-Sandbox | Dir @@ -543,7 +551,6 @@ export ANDROID_HOME="{{ user_user.home }}/SDKs/Android/Sdk" export GRADLE_USER_HOME={{ user_user.home }}/.gradle - export GRADLE_HOME={{ user_user.home }}/.gradle export PATH="$ANDROID_HOME/platform-tools:$PATH" export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$PATH" @@ -643,83 +650,127 @@ group: "{{ user }}" mode: "0755" + - name: Workstation | Linux | Software | LLMs | runit | open-terminal | Script | Compose YAML + ansible.builtin.copy: + dest: /usr/local/etc/open-terminal/docker-compose.yml + content: | + #exec docker run \ + # --name open-terminal \ + # --network=host \ + # -v {{ user_user.home }}/AI-Sandbox:/home/user \ + # -v {{ user_user.home }}/Code:{{ user_user.home }}/Code \ + # -v {{ user_user.home }}/SDKs:{{ user_user.home }}/SDKs \ + # -v {{ jdk_jvm }}:{{ jdk_jvm }}:ro \ + # -v {{ jdk_etc }}:{{ jdk_etc }}:ro \ + # -v {{ jdk_etc17 }}:{{ jdk_etc17 }}:ro \ + # -v {{ jdk_etc21 }}:{{ jdk_etc21 }}:ro \ + # -v {{ jdk_etc25 }}:{{ jdk_etc25 }}:ro \ + # -v /etc/hosts:/etc/hosts:ro \ + # -v {{ user_user.home }}/.gradle:{{ user_user.home }}/.gradle \ + # -v {{ user_user.home }}/.pub-cache:{{ user_user.home }}/.pub-cache \ + # -e OPEN_TERMINAL_FILE_BROWSER_ROOT="/home/user" \ + # -e OPEN_TERMINAL_API_KEY="{{ open_terminal_key }}" \ + # -e OPEN_TERMINAL_PACKAGES="$packages" \ + # -e GOT_EM="$GOT_EM" \ + # $image run --port {{ open_terminal_port }} + + services: + open-terminal: + build: + context: ./ + network: host + container_name: open-terminal + network_mode: host + command: run --port {{ open_terminal_port }} + environment: + - OPEN_TERMINAL_FILE_BROWSER_ROOT=/home/user + - OPEN_TERMINAL_API_KEY={{ open_terminal_key }} + - OPEN_TERMINAL_PACKAGES= + - GOT_EM=true + volumes: + - {{ user_user.home }}/AI-Sandbox:/home/user + - {{ user_user.home }}/Code:{{ user_user.home }}/Code + - {{ user_user.home }}/SDKs:{{ user_user.home }}/SDKs + - {{ jdk_jvm }}:{{ jdk_jvm }}:ro + - {{ jdk_etc }}:{{ jdk_etc }}:ro + - {{ jdk_etc17 }}:{{ jdk_etc17 }}:ro + - {{ jdk_etc21 }}:{{ jdk_etc21 }}:ro + - {{ jdk_etc25 }}:{{ jdk_etc25 }}:ro + - /etc/hosts:/etc/hosts:ro + - {{ user_user.home }}/.gradle:{{ user_user.home }}/.gradle + - {{ user_user.home }}/.pub-cache:{{ user_user.home }}/.pub-cache + owner: root + mode: "0755" + + - name: Workstation | Linux | Software | LLMs | runit | open-terminal | Script | Dockerfile + ansible.builtin.copy: + dest: /usr/local/etc/open-terminal/Dockerfile + content: | + FROM ghcr.io/open-webui/open-terminal:latest + + USER root + + RUN echo "Android" + RUN apt-get update && apt-get install -y \ + libc6:amd64 libncurses-dev \ + libstdc++6 lib32z1 libbz2-1.0 android-udev-rules + # Debian removed JDK 17, continue serving from the host. + # default-jdk openjdk-17-jdk + + RUN echo "Flutter (Main)" + RUN apt-get update && apt-get install -y \ + curl git unzip xz-utils zip libglu1-mesa libglu1-mesa + + RUN echo "Flutter (Linux)" + RUN apt-get update && apt-get install -y \ + clang cmake git ninja-build pkg-config libgtk-3-dev \ + liblzma-dev libstdc++-12-dev + + RUN echo "Flutter (Android)" + RUN apt-get update && apt-get install -y \ + libc6:amd64 libstdc++6 lib32z1 libbz2-1.0 + + USER user + owner: root + mode: "0755" + + - name: Workstation | Linux | Software | LLMs | runit | open-terminal | Script | env + ansible.builtin.copy: + dest: /usr/local/etc/open-terminal/.env + content: | + COMPOSE_BAKE=true + owner: root + mode: "0755" + - name: Workstation | Linux | Software | LLMs | runit | open-terminal | Script | Run ansible.builtin.copy: dest: /etc/sv/open-terminal/run content: | #!/bin/sh exec 2>&1 - image=ghcr.io/open-webui/open-terminal:latest - packages="" # Wait for Docker to start up. while [ ! -S /var/run/docker.sock ]; do sleep 1; done - # Ensure the old container is gone. + # Ensure the old container is stopped. echo "RUN: Stopping..." - docker stop open-terminal && + docker compose -f /usr/local/etc/open-terminal/docker-compose.yml down && echo "RUN: Container stopped" || echo "RUN: Container already stopped." - echo "RUN: Deleting..." - docker rm -f open-terminal && - echo "RUN: Container deleted" || - echo "RUN: Container already deleted." # Check for any new updates in background. echo "RUN: Updating..." - docker pull $image & + sleep 60 && + docker compose -f /usr/local/etc/open-terminal/docker-compose.yml \ + build --pull & - GOT_EM=false - if curl -sf --max-time 5 -o /dev/null https://hyperling.com; then - # Internet is available, pull extra packages. - GOT_EM=true - - # Android, sans default-jdk - packages="$packages \ - libc6:amd64 libncurses-dev libstdc++6 lib32z1 libbz2-1.0 \ - android-udev-rules \ - " - - # Flutter (Main) - packages="$packages \ - curl git unzip xz-utils zip libglu1-mesa libglu1-mesa \ - " - - # Flutter (Linux) - packages="$packages \ - clang cmake git ninja-build pkg-config libgtk-3-dev \ - liblzma-dev libstdc++-12-dev \ - " - - # Flutter (Android) - packages="$packages \ - libc6:amd64 libstdc++6 lib32z1 libbz2-1.0 \ - " - fi + export GOT_EM=true # Start the open-terminal program. # https://github.com/open-webui/open-terminal#configuration set -e - exec docker run \ - --name open-terminal \ - --network=host \ - -v {{ user_user.home }}/AI-Sandbox:/home/user \ - -v {{ user_user.home }}/Code:{{ user_user.home }}/Code \ - -v {{ user_user.home }}/SDKs:{{ user_user.home }}/SDKs \ - -v {{ jdk_jvm }}:{{ jdk_jvm }}:ro \ - -v {{ jdk_etc }}:{{ jdk_etc }}:ro \ - -v {{ jdk_etc17 }}:{{ jdk_etc17 }}:ro \ - -v {{ jdk_etc21 }}:{{ jdk_etc21 }}:ro \ - -v {{ jdk_etc25 }}:{{ jdk_etc25 }}:ro \ - -v {{ user_user.home }}/.gradle:{{ user_user.home }}/.gradle \ - -v {{ user_user.home }}/.pub-cache:{{ user_user.home }}/.pub-cache \ - -e OPEN_TERMINAL_FILE_BROWSER_ROOT="/home/user" \ - -e OPEN_TERMINAL_API_KEY="{{ open_terminal_key }}" \ - -e OPEN_TERMINAL_PACKAGES="$packages" \ - -e GOT_EM="$GOT_EM" \ - $image run --port {{ open_terminal_port }} - - # -p {{ open_terminal_port }}:8000 + exec docker compose -f /usr/local/etc/open-terminal/docker-compose.yml up + owner: root mode: "0755" - name: Workstation | Linux | Software | LLMs | runit | open-terminal | Script | Finish @@ -729,15 +780,10 @@ {{ runit_finish_sleep }} echo "FINISH: Stopping..." - docker stop open-terminal && + docker compose -f /usr/local/etc/open-terminal/docker-compose.yml down && echo "FINISH: Container stopped" || echo "FINISH: Container already stopped." - echo "FINISH: Deleting..." - docker rm -f open-terminal && - echo "FINISH: Container deleted" || - echo "FINISH: Container already deleted." - echo "FINISH: Done!" mode: "0755"