diff --git a/playbooks/alpine/install-zerotier.yml b/playbooks/alpine/install-zerotier.yml index 457c23d..31ae470 100644 --- a/playbooks/alpine/install-zerotier.yml +++ b/playbooks/alpine/install-zerotier.yml @@ -1,58 +1,112 @@ --- -- name: Install ZeroTier on Alpine hosts using Docker +- name: Install ZeroTier binary on Alpine hosts: alpine become: true gather_facts: true - tasks: - - name: Verify Alpine Linux - ansible.builtin.assert: - that: - - ansible_facts["distribution"] == "Alpine" - - ansible_facts["architecture"] == "x86_64" + vars: + zerotier_version: "1.16.2" + zerotier_dir: /var/lib/zerotier-one + zerotier_binary_url: "https://download.zerotier.com/RELEASES/1.4.2/dist/static-binaries/zerotier-one.x86_64.gz" - - name: Ensure persistent ZeroTier directory exists + tasks: + - name: Install required packages + community.general.apk: + name: + - ca-certificates + - curl + - gzip + - iproute2 + state: present + update_cache: true + + - name: Create ZeroTier directories ansible.builtin.file: - path: /opt/zerotier-one + path: "{{ item }}" state: directory owner: root group: root - mode: "0700" + mode: "0755" + loop: + - /usr/local/bin + - "{{ zerotier_dir }}" - - name: Ensure TUN device exists + - name: Download ZeroTier static binary + ansible.builtin.get_url: + url: "{{ zerotier_binary_url }}" + dest: /tmp/zerotier-one.gz + mode: "0644" + force: true + + - name: Extract ZeroTier binary + ansible.builtin.command: + cmd: gzip -dc /tmp/zerotier-one.gz + register: zerotier_binary + changed_when: true + no_log: true + + - name: Install ZeroTier binary + ansible.builtin.copy: + content: "{{ zerotier_binary.stdout }}" + dest: /usr/local/bin/zerotier-one + owner: root + group: root + mode: "0755" + no_log: true + + - name: Create ZeroTier CLI symlink + ansible.builtin.file: + src: /usr/local/bin/zerotier-one + dest: /usr/local/bin/zerotier-cli + state: link + + - name: Create OpenRC service + ansible.builtin.copy: + dest: /etc/init.d/zerotier-one + owner: root + group: root + mode: "0755" + content: | + #!/sbin/openrc-run + + name="ZeroTier One" + command="/usr/local/bin/zerotier-one" + command_args="-d" + command_background="yes" + pidfile="/run/zerotier-one.pid" + directory="{{ zerotier_dir }}" + output_log="/var/log/zerotier-one.log" + error_log="/var/log/zerotier-one.log" + + - name: Check TUN device ansible.builtin.stat: path: /dev/net/tun register: zerotier_tun - - name: Fail if TUN device is unavailable + - name: Stop if TUN device is missing ansible.builtin.fail: - msg: "Enable /dev/net/tun on this host or its Proxmox LXC configuration first." + msg: "ZeroTier binary is installed, but /dev/net/tun is missing. Enable TUN access in the Proxmox LXC configuration before starting the service." when: not zerotier_tun.stat.exists - - - name: Install Python dependencies for Docker modules - community.general.apk: - name: - - py3-requests - state: present - update_cache: true - - name: Pull ZeroTier container image - community.docker.docker_image: - name: zyclonite/zerotier:1.14.2 - source: pull + - name: Enable ZeroTier at boot + ansible.builtin.command: + cmd: rc-update add zerotier-one default + register: zerotier_rc_update + changed_when: zerotier_rc_update.rc == 0 + failed_when: false - - name: Run ZeroTier container - community.docker.docker_container: - name: zerotier - image: zyclonite/zerotier:1.14.2 - state: started - restart_policy: unless-stopped - network_mode: host - capabilities: - - NET_ADMIN - - SYS_ADMIN - devices: - - /dev/net/tun:/dev/net/tun - volumes: - - /opt/zerotier-one:/var/lib/zerotier-one + - name: Start ZeroTier + ansible.builtin.command: + cmd: rc-service zerotier-one restart + register: zerotier_start + changed_when: zerotier_start.rc == 0 + - name: Verify ZeroTier binary + ansible.builtin.command: + cmd: /usr/local/bin/zerotier-one -v + register: zerotier_version_check + changed_when: false + + - name: Display installed version + ansible.builtin.debug: + var: zerotier_version_check.stdout \ No newline at end of file