From 07cc232165d566d78e62dfc9eed9f5d5bb8831be Mon Sep 17 00:00:00 2001 From: Johannes Stoelp <johannes.stoelp@gmail.com> Date: Fri, 4 Apr 2025 02:32:57 +0200 Subject: setup: rename to services --- Makefile | 9 ++--- services.yml | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ setup.yml | 128 ----------------------------------------------------------- 3 files changed, 132 insertions(+), 133 deletions(-) create mode 100644 services.yml delete mode 100644 setup.yml diff --git a/Makefile b/Makefile index a3ab0bc..3d297ca 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,11 @@ BACKUP := backup -setup: - ansible-playbook -i inventory.ini --diff setup.yml - -packages: - ansible-playbook -i inventory.ini --diff packages.yml +services packages: + ansible-playbook -i inventory.ini --diff $@.yml backup: ssh -t ship.lan "test -d $(BACKUP) \ || restic -r $(BACKUP) init \ && restic -r $(BACKUP) backup services" + +.PHONY: services packages backup diff --git a/services.yml b/services.yml new file mode 100644 index 0000000..9dc1926 --- /dev/null +++ b/services.yml @@ -0,0 +1,128 @@ +- name: ship setup + hosts: all + gather_facts: no + vars: + user: "{{ '$USER' | expandvars }}" + data: "{{ '$HOME/services' | expandvars }}" + + # podman-rootless + # + # * using native overflay fs support (no fuse) + # - at least kernel version 5.13 + # - podman info -f '{{.Store.GraphDriverName}}' + # -> "overlay" + # - podman info -f '{{index .Store.GraphStatus "Native Overlay Diff"}}' + # -> true + # - if configured with different storage driver before may need to run + # podman system reset # deletes every image/container/.. with old driver + # - cat .local/share/containers/storage/overlay/.has-mount-program + # -> false + # + # * configure storage driver + # > cat .config/containers/storage.conf + # [storage] + # driver = "overlay" + + tasks: + + # -- LINGER ---------------------------------------------------------------- + + # Enable lingering for user. A user manager is spawned for the user at boot + # and kept around after logouts. This allows users who are not logged in to + # run long-running services. + - name: enable-linger + become: true + command: loginctl enable-linger {{ user }} + args: + # Command is not re-run if following file exits. + # https://docs.ansible.com/ansible/latest/collections/ansible/builtin/command_module.html#parameter-creates + creates: "/var/lib/systemd/linger/{{ user }}" + + # -- COPY FILES ------------------------------------------------------------ + + - name: copy-files + ansible.builtin.copy: + src: "{{ item }}" + dest: "{{ data }}" + mode: preserve + loop: + - ftp + - mosquitto + + # -- FTP SERVER ------------------------------------------------------------ + + - name: build-podman-ftp + containers.podman.podman_image: + name: ftp + path: "{{ data }}/ftp" + force: true + register: ftp_build + + - name: run-podman-ftp + containers.podman.podman_container: + name: ftp + image: ftp + network: host + volumes: + - "{{ data }}/ftp/inbox:/inbox" + command: python3 -m pyftpdlib --write -d /inbox -u pleb -P moose + recreate: "{{ ftp_build.changed }}" + + # -- MOSQUITTO SERVER ------------------------------------------------------ + + # Use `mosquitto_sub -t '#'` to subscribe to all topics. + - name: run-podman-mosquitto + containers.podman.podman_container: + name: mosquitto + image: docker.io/eclipse-mosquitto + ports: + - "1883:1883/tcp" + volumes: + - "{{ data }}/mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.conf" + + # -- HOME ASSISTANT -------------------------------------------------------- + + - name: add-user-to-group + become: true + user: + name: "{{ user }}" + groups: dialout + append: yes + + - name: run-podman-home-assistant + containers.podman.podman_container: + name: homeassistant + image: ghcr.io/home-assistant/home-assistant:stable + network: host + # Keep groups, eg dialout for ttyUSB0. + group_add: keep-groups + volumes: + - "{{ data }}/home-assistant/config:/config" + - "/etc/localtime:/etc/localtime:ro" + device: + - "/dev/ttyUSB0:/dev/ttyUSB0" + + # -- USER SYSTEMD UNITS ---------------------------------------------------- + + - name: generate-user-systemd-units + containers.podman.podman_generate_systemd: + name: "{{ item }}" + dest: ~/.config/systemd/user/ + restart_policy: on-failure + restart_sec: 10 + loop: + - ftp + - mosquitto + - homeassistant + + - name: enable-user-systemd-units + ansible.builtin.systemd: + name: "container-{{ item }}" + scope: user + daemon_reload: true + #state: started + enabled: true + loop: + - ftp + - mosquitto + - homeassistant diff --git a/setup.yml b/setup.yml deleted file mode 100644 index 9dc1926..0000000 --- a/setup.yml +++ /dev/null @@ -1,128 +0,0 @@ -- name: ship setup - hosts: all - gather_facts: no - vars: - user: "{{ '$USER' | expandvars }}" - data: "{{ '$HOME/services' | expandvars }}" - - # podman-rootless - # - # * using native overflay fs support (no fuse) - # - at least kernel version 5.13 - # - podman info -f '{{.Store.GraphDriverName}}' - # -> "overlay" - # - podman info -f '{{index .Store.GraphStatus "Native Overlay Diff"}}' - # -> true - # - if configured with different storage driver before may need to run - # podman system reset # deletes every image/container/.. with old driver - # - cat .local/share/containers/storage/overlay/.has-mount-program - # -> false - # - # * configure storage driver - # > cat .config/containers/storage.conf - # [storage] - # driver = "overlay" - - tasks: - - # -- LINGER ---------------------------------------------------------------- - - # Enable lingering for user. A user manager is spawned for the user at boot - # and kept around after logouts. This allows users who are not logged in to - # run long-running services. - - name: enable-linger - become: true - command: loginctl enable-linger {{ user }} - args: - # Command is not re-run if following file exits. - # https://docs.ansible.com/ansible/latest/collections/ansible/builtin/command_module.html#parameter-creates - creates: "/var/lib/systemd/linger/{{ user }}" - - # -- COPY FILES ------------------------------------------------------------ - - - name: copy-files - ansible.builtin.copy: - src: "{{ item }}" - dest: "{{ data }}" - mode: preserve - loop: - - ftp - - mosquitto - - # -- FTP SERVER ------------------------------------------------------------ - - - name: build-podman-ftp - containers.podman.podman_image: - name: ftp - path: "{{ data }}/ftp" - force: true - register: ftp_build - - - name: run-podman-ftp - containers.podman.podman_container: - name: ftp - image: ftp - network: host - volumes: - - "{{ data }}/ftp/inbox:/inbox" - command: python3 -m pyftpdlib --write -d /inbox -u pleb -P moose - recreate: "{{ ftp_build.changed }}" - - # -- MOSQUITTO SERVER ------------------------------------------------------ - - # Use `mosquitto_sub -t '#'` to subscribe to all topics. - - name: run-podman-mosquitto - containers.podman.podman_container: - name: mosquitto - image: docker.io/eclipse-mosquitto - ports: - - "1883:1883/tcp" - volumes: - - "{{ data }}/mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.conf" - - # -- HOME ASSISTANT -------------------------------------------------------- - - - name: add-user-to-group - become: true - user: - name: "{{ user }}" - groups: dialout - append: yes - - - name: run-podman-home-assistant - containers.podman.podman_container: - name: homeassistant - image: ghcr.io/home-assistant/home-assistant:stable - network: host - # Keep groups, eg dialout for ttyUSB0. - group_add: keep-groups - volumes: - - "{{ data }}/home-assistant/config:/config" - - "/etc/localtime:/etc/localtime:ro" - device: - - "/dev/ttyUSB0:/dev/ttyUSB0" - - # -- USER SYSTEMD UNITS ---------------------------------------------------- - - - name: generate-user-systemd-units - containers.podman.podman_generate_systemd: - name: "{{ item }}" - dest: ~/.config/systemd/user/ - restart_policy: on-failure - restart_sec: 10 - loop: - - ftp - - mosquitto - - homeassistant - - - name: enable-user-systemd-units - ansible.builtin.systemd: - name: "container-{{ item }}" - scope: user - daemon_reload: true - #state: started - enabled: true - loop: - - ftp - - mosquitto - - homeassistant -- cgit v1.2.3