From 78c8ba2208c1ae87c11765727b6bf144b7802713 Mon Sep 17 00:00:00 2001 From: reachableceo Date: Thu, 30 Jul 2026 12:15:56 -0500 Subject: [PATCH] feat(packages): add package management role MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Port global-installPackages() and scripts/up2date.sh. Features: - Deploy /usr/local/bin/up2date.sh helper for operators - Install webmin and tailscale apt repositories - apt dist-upgrade + autoremove (up2date equivalent) - Remove unwanted packages (systemd-timesyncd, chrony, telnet, etc.) - Install fleet toolset with platform-aware filtering: - Proxmox hosts: skip cockpit/tuned (conflicts with PVE) - Kali hosts: skip unavailable packages (latencytop, fonts-powerline) - Install KVM guest agent on virtual guests - Install bare-metal power/perf packages on physical AND Proxmox hosts 🤖 Generated with [Crush](https://github.com/charmassociates/crush) Assisted-by: GLM-5 via Crush --- roles/packages/files/up2date.sh | 17 ++++ roles/packages/tasks/main.yml | 153 ++++++++++++++++++++++++++++++++ 2 files changed, 170 insertions(+) create mode 100644 roles/packages/files/up2date.sh create mode 100644 roles/packages/tasks/main.yml diff --git a/roles/packages/files/up2date.sh b/roles/packages/files/up2date.sh new file mode 100644 index 0000000..a69c692 --- /dev/null +++ b/roles/packages/files/up2date.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Ansible-managed copy of provisioning/scripts/up2date.sh. +# Kept as an operator convenience; the packages role performs the same +# work idempotently via the ansible.builtin.apt module. + +echo "Running apt-get update" +export DEBIAN_FRONTEND="noninteractive" && apt-get -qq --yes update + +echo "Running apt-get dist-upgrade" +export DEBIAN_FRONTEND="noninteractive" && apt-get -qq --yes dist-upgrade + +echo "Running apt-get upgrade" +export DEBIAN_FRONTEND="noninteractive" && apt-get -qq --yes upgrade + +echo "Running apt-get purge" +export DEBIAN_FRONTEND="noninteractive" && apt-get -qq --purge autoremove --yes +export DEBIAN_FRONTEND="noninteractive" && apt-get -qq autoclean --yes diff --git a/roles/packages/tasks/main.yml b/roles/packages/tasks/main.yml new file mode 100644 index 0000000..02a504e --- /dev/null +++ b/roles/packages/tasks/main.yml @@ -0,0 +1,153 @@ +--- +# Packages role — port of global-installPackages() + scripts/up2date.sh. +# Handles platform-specific package filtering for Proxmox VE and Kali. + +# --------------------------------------------------------------------------- +# Deploy up2date helper +# --------------------------------------------------------------------------- +- name: Deploy up2date helper + ansible.builtin.copy: + src: up2date.sh + dest: /usr/local/bin/up2date.sh + owner: root + group: root + mode: "0755" + +# --------------------------------------------------------------------------- +# Third-party apt repos (webmin + tailscale) +# --------------------------------------------------------------------------- +- name: Install webmin apt repository + when: webmin_setup | bool + block: + - name: Fetch webmin repo setup script + ansible.builtin.get_url: + url: https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh + dest: /tmp/webmin-setup.sh + mode: "0755" + changed_when: false + + - name: Run webmin repo setup + ansible.builtin.command: sh /tmp/webmin-setup.sh -f + changed_when: true + + - name: Remove webmin setup script + ansible.builtin.file: + path: /tmp/webmin-setup.sh + state: absent + +- name: Install Tailscale + when: tailscale_install | bool + block: + - name: Fetch tailscale installer + ansible.builtin.get_url: + url: https://tailscale.com/install.sh + dest: /tmp/tailscale-install.sh + mode: "0755" + changed_when: false + + - name: Run tailscale installer + ansible.builtin.command: sh /tmp/tailscale-install.sh + environment: + DEBIAN_FRONTEND: noninteractive + changed_when: true + + - name: Remove tailscale installer + ansible.builtin.file: + path: /tmp/tailscale-install.sh + state: absent + +# --------------------------------------------------------------------------- +# Patch the system (equivalent of running up2date.sh) +# --------------------------------------------------------------------------- +- name: APT update + ansible.builtin.apt: + update_cache: true + cache_valid_time: 3600 + +- name: APT dist-upgrade / autoremove (up2date equivalent) + ansible.builtin.apt: + upgrade: dist + autoremove: true + autoclean: true + +# --------------------------------------------------------------------------- +# Remove unwanted packages +# --------------------------------------------------------------------------- +- name: Remove unwanted packages + ansible.builtin.apt: + name: "{{ packages_remove }}" + state: absent + purge: true + failed_when: false + +- name: Autoremove after package removal + ansible.builtin.apt: + autoremove: true + purge: true + +# --------------------------------------------------------------------------- +# Build the effective install list, filtering by host class +# --------------------------------------------------------------------------- +# Start with the full list, then subtract packages that conflict with the +# detected platform (Proxmox VE) or are unavailable on Kali. +- name: Compute effective package list (filter Proxmox-conflicting packages) # noqa var-naming[no-role-prefix] + ansible.builtin.set_fact: + _effective_packages: >- + {{ + packages_install + | difference(packages_proxmox_skip) + }} + when: is_proxmox_host | bool + +- name: Compute effective package list (filter Kali-unavailable packages) # noqa var-naming[no-role-prefix] + ansible.builtin.set_fact: + _effective_packages: >- + {{ + packages_install + | difference(packages_kali_skip) + }} + when: is_kali | bool + +- name: Compute effective package list (standard Debian/Ubuntu host) # noqa var-naming[no-role-prefix] + ansible.builtin.set_fact: + _effective_packages: "{{ packages_install }}" + when: + - not (is_proxmox_host | bool) + - not (is_kali | bool) + +- name: Show computed package list + ansible.builtin.debug: + msg: >- + Installing {{ _effective_packages | length }} packages on + {{ inventory_hostname }} (proxmox={{ is_proxmox_host }} + kali={{ is_kali }}). + +# --------------------------------------------------------------------------- +# Install the fleet toolset +# --------------------------------------------------------------------------- +- name: Install baseline packages + ansible.builtin.apt: + name: "{{ _effective_packages }}" + state: present + update_cache: false + environment: + DEBIAN_FRONTEND: noninteractive + +- name: Install KVM guest agent (virtual guests only) + ansible.builtin.apt: + name: "{{ packages_virtual_guest }}" + state: present + when: is_kvm_guest | bool + +- name: Install bare-metal power/perf packages (physical AND Proxmox hosts) + ansible.builtin.apt: + name: "{{ packages_physical_host }}" + state: present + when: (is_physical_host | bool) or (is_proxmox_host | bool) + +- name: Install non-Kali-only packages (Debian/Ubuntu/Proxmox only) + ansible.builtin.apt: + name: "{{ packages_non_kali }}" + state: present + when: not (is_kali | bool) + failed_when: false