From 8e3375b160afac79e563b1e7d33fecf6ff8ef554 Mon Sep 17 00:00:00 2001 From: "Kenneth Benzie (Benie)" Date: Tue, 18 Jun 2024 23:06:40 +0100 Subject: [PATCH] Add fedora support to sunshine role --- roles/sunshine/tasks/Debian.yaml | 43 ++++++++++++++++++++++++ roles/sunshine/tasks/RedHat.yaml | 56 ++++++++++++++++++++++++++++++++ roles/sunshine/tasks/main.yaml | 48 ++++----------------------- 3 files changed, 106 insertions(+), 41 deletions(-) create mode 100644 roles/sunshine/tasks/Debian.yaml create mode 100644 roles/sunshine/tasks/RedHat.yaml diff --git a/roles/sunshine/tasks/Debian.yaml b/roles/sunshine/tasks/Debian.yaml new file mode 100644 index 0000000..1094258 --- /dev/null +++ b/roles/sunshine/tasks/Debian.yaml @@ -0,0 +1,43 @@ +--- +# FIXME: This will only work for Debian or Ubuntu but not Ubuntu derived distros +- set_fact: + assets: '{{latest.json.assets}}' + asset_name: 'sunshine-{{ ansible_distribution | lower }}-{{ ansible_distribution_version }}-amd64.deb' +- set_fact: + asset_query: '[?contains(name, `{{asset_name}}`)] | [0]' +- set_fact: + asset: '{{assets | json_query(asset_query)}}' + +- name: download deb file + get_url: + url: '{{asset.browser_download_url}}' + dest: '/tmp/{{asset_name}}' + environment: '{{proxy_environment}}' + +- name: install package from deb file + become: true + apt: + deb: '/tmp/{{asset_name}}' + +- name: remove deb file + file: + state: absent + path: '/tmp/{{asset_name}}' + +- name: fix systemd unit + become: true + copy: + path: /usr/lib/systemd/user/sunshine.service + content: | + [Unit] + Description=Sunshine is a self-hosted game stream host for Moonlight. + StartLimitIntervalSec=500 + StartLimitBurst=5 + + [Service] + ExecStart=/usr/bin/sunshine + Restart=on-failure + RestartSec=5s + + [Install] + WantedBy=xdg-desktop-autostart.target diff --git a/roles/sunshine/tasks/RedHat.yaml b/roles/sunshine/tasks/RedHat.yaml new file mode 100644 index 0000000..73ff63c --- /dev/null +++ b/roles/sunshine/tasks/RedHat.yaml @@ -0,0 +1,56 @@ +--- +- assert: + that: + - ansible_distribution == "Fedora" + - assets is defined + +- set_fact: + asset_name: 'sunshine-{{ ansible_distribution | lower }}-{{ ansible_distribution_version }}-amd64.rpm' +- set_fact: + asset_query: '[?contains(name, `{{asset_name}}`)] | [0]' +- set_fact: + asset: '{{assets | json_query(asset_query)}}' + +- name: download rpm file + get_url: + url: '{{asset.browser_download_url}}' + dest: '/tmp/{{asset_name}}' + environment: '{{proxy_environment}}' + +- name: install package from rpm file + dnf: + name: '/tmp/{{asset_name}}' + +- name: remove rpm file + file: + state: absent + path: '/tmp/{{asset_name}}' + +- name: create udev rules for uinput + become: true + copy: + content: | + KERNEL=="uinput", SUBSYSTEM=="misc", OPTIONS+="static_node=uinput", TAG+="uaccess" + dest: /etc/udev/rules.d/60-sunshine.rules + +- name: reload udev rules for uinput + become: true + command: udevadm control --reload-rules + +- name: request udev events + become: true + command: udevadm trigger + +- name: add uinput module + become: true + modprobe: + name: uinput + +- name: stat sunshine + stat: + path: /usr/bin/sunshine + register: sunshine + +- name: enable permissions for KMS capture + become: true + command: 'setcap cap_sys_admin+p {{ sunshine.stat.lnk_source }}' diff --git a/roles/sunshine/tasks/main.yaml b/roles/sunshine/tasks/main.yaml index 83151ee..d666501 100644 --- a/roles/sunshine/tasks/main.yaml +++ b/roles/sunshine/tasks/main.yaml @@ -1,8 +1,4 @@ --- -- set_fact: - # TODO: Construct this out of information in ansible_facts - asset_name: sunshine-ubuntu-22.04-amd64.deb - - name: get latest version uri: url: https://api.github.com/repos/LizardByte/Sunshine/releases/latest @@ -11,42 +7,12 @@ - set_fact: assets: '{{latest.json.assets}}' - asset_query: '[?contains(name, `{{asset_name}}`)] | [0]' -- debug: var=assets -- debug: var=asset_query -- set_fact: - asset: '{{assets | json_query(asset_query)}}' -- debug: var=asset -- name: download deb file - get_url: - url: '{{asset.browser_download_url}}' - dest: '/tmp/{{asset_name}}' +- include_tasks: '{{ansible_os_family}}.yaml' -- name: install package from deb file - become: true - apt: - deb: '/tmp/{{asset_name}}' - -- name: remove deb file - file: - state: absent - path: '/tmp/{{asset_name}}' - -- name: fix systemd unit - become: true - copy: - path: /usr/lib/systemd/user/sunshine.service - content: | - [Unit] - Description=Sunshine is a self-hosted game stream host for Moonlight. - StartLimitIntervalSec=500 - StartLimitBurst=5 - - [Service] - ExecStart=/usr/bin/sunshine - Restart=on-failure - RestartSec=5s - - [Install] - WantedBy=xdg-desktop-autostart.target +- name: enable systemd service + ansible.builtin.systemd_service: + name: sunshine + scope: user + enabled: true + state: started