From ec4f5cc447f113e506e073c2b14bbe3a1cf6ba6a Mon Sep 17 00:00:00 2001 From: Robert Kaussow Date: Sun, 18 Apr 2021 17:48:02 +0200 Subject: [PATCH] rework portable installation --- defaults/main.yml | 12 +---- molecule/centos7/converge.yml | 2 + tasks/install.yml | 47 ++++++++++++++----- tasks/main.yml | 1 - tasks/post_tasks.yml | 9 ---- templates/etc/sysconfig/jellyfin.j2 | 6 +++ .../etc/systemd/system/jellyfin.service.j2 | 26 ++++++---- templates/opt/jellyfin/config/logging.json.j2 | 19 ++++++-- vars/main.yml | 10 ++-- 9 files changed, 81 insertions(+), 51 deletions(-) delete mode 100644 tasks/post_tasks.yml create mode 100644 templates/etc/sysconfig/jellyfin.j2 diff --git a/defaults/main.yml b/defaults/main.yml index 6581328..5e1ea76 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,11 +1,12 @@ --- -jellyfin_version: 10.6.0 +jellyfin_version: 10.7.2 jellyfin_user: jellyfin jellyfin_user_home: "/home/{{ jellyfin_user }}" jellyfin_group: "{{ jellyfin_user }}" jellyfin_extra_groups: [] jellyfin_base_dir: "/opt/jellyfin" +jellyfin_src_dir: "{{ jellyfin_base_dir }}/src" jellyfin_conf_dir: "{{ jellyfin_base_dir }}/config" jellyfin_data_dir: "{{ jellyfin_base_dir }}/data" jellyfin_log_dir: "{{ jellyfin_base_dir }}/log" @@ -25,12 +26,3 @@ jellyfin_selinux_fcontext: setype: var_log_t jellyfin_selinux_restorecon: - "-ir {{ jellyfin_log_dir }}" - -# @var jellyfin_http_bind_port:description: > -# DONT change it! Changing the bind ports is currently not supported. -# @end -jellyfin_http_bind_port: 8096 -# @var jellyfin_https_bind_port:description: > -# DONT change it! Changing the bind ports is currently not supported. -# @end -jellyfin_https_bind_port: 8920 diff --git a/molecule/centos7/converge.yml b/molecule/centos7/converge.yml index d7680ff..a10e13f 100644 --- a/molecule/centos7/converge.yml +++ b/molecule/centos7/converge.yml @@ -4,6 +4,8 @@ vars: jellyfin_packages_extra: - epel-release + - https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm + - https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm roles: - role: xoxys.jellyfin diff --git a/tasks/install.yml b/tasks/install.yml index 71de824..8d93c73 100644 --- a/tasks/install.yml +++ b/tasks/install.yml @@ -8,7 +8,7 @@ mode: 0750 loop: - "{{ jellyfin_base_dir }}" - - "{{ jellyfin_base_dir }}/{{ jellyfin_version }}" + - "{{ jellyfin_src_dir }}" - "{{ jellyfin_conf_dir }}" - "{{ jellyfin_data_dir }}" - "{{ jellyfin_log_dir }}" @@ -17,20 +17,29 @@ become_user: root - block: - - name: Install portable binary + - name: Ensure service is stopped before upgrade + systemd: + state: stopped + daemon_reload: yes + enabled: yes + name: jellyfin + + - name: Delete current version + file: + path: "{{ jellyfin_src_dir }}" + state: absent + become: True + become_user: root + when: jellyfin_version is version(jellyfin_current_version, ">") or jellyfin_current_version is version('0.0.0', "=") + +- block: + - name: Install Jellyfin server unarchive: src: https://repo.jellyfin.org/releases/server/portable/versions/stable/combined/{{ jellyfin_version }}/jellyfin_{{ jellyfin_version }}.tar.gz - dest: "{{ jellyfin_base_dir }}/{{ jellyfin_version }}" + dest: "{{ jellyfin_src_dir }}" extra_opts: - - --strip-components=1 + - --strip-components=2 remote_src: yes - - - name: Link 'v{{ jellyfin_version }}' to latest - file: - src: "{{ jellyfin_base_dir }}/{{ jellyfin_version }}/jellyfin" - dest: "{{ jellyfin_base_dir }}/jellyfin-latest" - state: link - notify: __jellyfin_restart become: True become_user: "{{ jellyfin_user }}" when: jellyfin_version is version(jellyfin_current_version, ">") or jellyfin_current_version is version('0.0.0', "=") @@ -47,17 +56,31 @@ become_user: "{{ jellyfin_user }}" - block: - - name: Write current version to custom fact + - name: Write Jellyfin version to custom fact template: src: etc/ansible/facts.d/jellyfin.fact.j2 dest: /etc/ansible/facts.d/jellyfin.fact mode: 0644 + - name: Copy sysconfig file + template: + src: "etc/sysconfig/jellyfin.j2" + dest: "{{ __jellyfin_sysconfig }}" + mode: 0600 + notify: __jellyfin_restart + - name: Copy systemd unit file template: src: "etc/systemd/system/jellyfin.service.j2" dest: "/etc/systemd/system/jellyfin.service" mode: 0644 notify: __jellyfin_restart + + - name: Ensure jellyfin service is up and running + systemd: + state: started + daemon_reload: yes + enabled: yes + name: jellyfin become: True become_user: root diff --git a/tasks/main.yml b/tasks/main.yml index 2f0990f..280bb1b 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -3,4 +3,3 @@ - include_tasks: install.yml - include_tasks: selinux.yml when: ansible_selinux.status == "enabled" -- include_tasks: post_tasks.yml diff --git a/tasks/post_tasks.yml b/tasks/post_tasks.yml deleted file mode 100644 index 12a6bbf..0000000 --- a/tasks/post_tasks.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -- name: Ensure jellyfin service is up and running - systemd: - state: started - daemon_reload: yes - enabled: yes - name: jellyfin - become: True - become_user: root diff --git a/templates/etc/sysconfig/jellyfin.j2 b/templates/etc/sysconfig/jellyfin.j2 new file mode 100644 index 0000000..243df7f --- /dev/null +++ b/templates/etc/sysconfig/jellyfin.j2 @@ -0,0 +1,6 @@ +#jinja2: lstrip_blocks: True +{{ ansible_managed | comment }} +JELLYFIN_DATA_DIR={{ jellyfin_data_dir }} +JELLYFIN_CONFIG_DIR={{ jellyfin_conf_dir }} +JELLYFIN_LOG_DIR={{ jellyfin_log_dir }} +JELLYFIN_CACHE_DIR={{ jellyfin_cache_dir }} diff --git a/templates/etc/systemd/system/jellyfin.service.j2 b/templates/etc/systemd/system/jellyfin.service.j2 index 3b8bd5a..4b5c0f7 100644 --- a/templates/etc/systemd/system/jellyfin.service.j2 +++ b/templates/etc/systemd/system/jellyfin.service.j2 @@ -2,20 +2,28 @@ {{ ansible_managed | comment }} [Unit] Description=Jellyfin Media Server -After=network.target + +Wants=network-online.target +After=network-online.target +After=syslog.target [Service] Type=simple -Environment=JELLYFIN_DATA_DIR={{ jellyfin_data_dir }} -Environment=JELLYFIN_CONFIG_DIR={{ jellyfin_conf_dir }} -Environment=JELLYFIN_LOG_DIR={{ jellyfin_log_dir }} -Environment=JELLYFIN_CACHE_DIR={{ jellyfin_cache_dir }} -Restart=on-failure -TimeoutSec=15 + +WorkingDirectory={{ jellyfin_src_dir }} + User={{ jellyfin_user }} Group={{ jellyfin_group }} -WorkingDirectory={{ jellyfin_base_dir }} -ExecStart={{ jellyfin_base_dir }}/jellyfin-latest --service --noautorunwebapp + +PermissionsStartOnly=true +EnvironmentFile={{ __jellyfin_sysconfig }} +ExecStart={{ jellyfin_src_dir }}/jellyfin --service + +Restart=on-failure +TimeoutSec=15 +# Avoid noisy crashloops +StartLimitInterval=60 +StartLimitBurst=5 [Install] WantedBy=multi-user.target diff --git a/templates/opt/jellyfin/config/logging.json.j2 b/templates/opt/jellyfin/config/logging.json.j2 index b96bbea..ecae2d4 100644 --- a/templates/opt/jellyfin/config/logging.json.j2 +++ b/templates/opt/jellyfin/config/logging.json.j2 @@ -1,11 +1,17 @@ { "Serilog": { - "MinimumLevel": "Information", + "MinimumLevel": { + "Default": "Information", + "Override": { + "Microsoft": "Warning", + "System": "Warning" + } + }, "WriteTo": [ { "Name": "Console", "Args": { - "outputTemplate": "[{Timestamp:HH:mm:ss}] [{Level:u3}] {Message:lj}{NewLine}{Exception}", + "outputTemplate": "[{Timestamp:HH:mm:ss}] [{Level:u3}] [{ThreadId}] {SourceContext}: {Message:lj}{NewLine}{Exception}", "restrictedToMinimumLevel": "{{ jellyfin_log_level_console }}" } }, @@ -18,12 +24,17 @@ "Args": { "path": "{{ jellyfin_log_dir }}/jellyfin.log", "outputTemplate": "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz}] [{Level:u3}] {Message}{NewLine}{Exception}", - "restrictedToMinimumLevel": "{{ jellyfin_log_level_file }}" + "restrictedToMinimumLevel": "{{ jellyfin_log_level_file }}", + "rollingInterval": "Day", + "retainedFileCountLimit": 3, + "rollOnFileSizeLimit": true, + "fileSizeLimitBytes": 100000000, } } ] } } - ] + ], + "Enrich": [ "FromLogContext", "WithThreadId" ] } } diff --git a/vars/main.yml b/vars/main.yml index 9280b11..f195c7d 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -1,8 +1,6 @@ --- __jellyfin_packages: - - lttng-ust - - libcurl - - openssl-libs - - krb5-libs - - libicu - - zlib + - aspnetcore-runtime-5.0 + - ffmpeg + +__jellyfin_sysconfig: /etc/sysconfig/minio