-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathupgrade
171 lines (132 loc) · 6.09 KB
/
upgrade
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#!/bin/bash
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
source _common.sh
source /usr/share/yunohost/helpers
#=================================================
# STOP SYSTEMD SERVICE
#=================================================
ynh_script_progression --message="Stopping $app's systemd service..." --weight=1
ynh_systemd_action --service_name="$app" --action="stop" --log_path="systemd" --timeout=15
#=================================================
# ENSURE DOWNWARD COMPATIBILITY
#=================================================
ynh_script_progression --message="Ensuring downward compatibility..." --weight=1
# If render group exists, and system user doesn't belong to it, add it
if getent group render && ! id -Gn "$app" | grep -qw "\brender\b" >/dev/null; then
adduser "$app" render
fi
# If path keys do not exist, create them
# If config_path is mixed up with install_dir, fix them
if [ -z "$config_path" ] || [[ $config_path = "/var/lib/jellyfin" ]]; then
config_path=/etc/jellyfin
ynh_app_setting_set --app="$app" --key=config_path --value=$config_path
fi
ynh_app_setting_delete --app="$app" --key=is_public
# If discovery key does not exist, create it
if [ -z "${discovery:-}" ]; then
discovery=0
ynh_app_setting_set --app="$app" --key=discovery --value=$discovery
fi
if [ ! -f "/etc/logrotate.d/$app" ]; then
# Fix possibly missing file due to buggy restore:
ynh_use_logrotate
fi
#=================================================
# OPEN PORTS
#=================================================
ynh_script_progression --message="Checking whether to open ports..." --weight=1
configure_jellyfin_discovery_ports install
ports_args=()
if [[ "${opened_ports:-__NOTHING__}" != "__NOTHING__" ]]; then
ports_args=( "--needs_exposed_ports" "${opened_ports[@]}" )
fi
#=================================================
# UPGRADE PACKAGES
#=================================================
ynh_script_progression --message="Upgrading packages..." --weight=3
# Backup the configuration files to prevent yunohost to see a manual edit
bakdir=$(mktemp -d)
for name in system.xml network.xml logging.json; do
cp "$config_path/$name" "$bakdir/$name"
done
install_jellyfin_packages
#=================================================
# UPDATE A CONFIG FILE
#=================================================
ynh_script_progression --message="Updating a configuration file..." --weight=2
# Restore the files we just backed up before installing the debs...
for name in system.xml network.xml logging.json; do
mv -f "$bakdir/$name" "$config_path/$name"
done
ynh_secure_remove "$bakdir"
ynh_add_config --template="network.xml" --destination="$config_path/network.xml"
ynh_add_config --template="logging.json" --destination="$config_path/logging.json"
#=================================================
# ENSURE NO OLD/INCOMPATIBLE PLUGINS ARE LEFT
#=================================================
shopt -s nullglob
mkdir -p /var/lib/jellyfin/plugins-backup
if [ -d /var/lib/jellyfin/plugins ]; then
for directory in /var/lib/jellyfin/plugins/*; do
name="$(basename "$directory")"
if [[ "$name" = "configurations" ]]; then
# Keep plugin config
continue
fi
if [ ! -f "$directory"/meta.json ]; then
ynh_print_warn --message="Jellyfin plugin '$name' looks legacy (missing meta.json). Moving to /var/lib/jellyfin/plugins-backup."
mv "$directory" /var/lib/jellyfin/plugins-backup/
fi
# Jellyfin doesn't refuse to start with old plugins. It just does weird
# things such as https://github.com/jellyfin/jellyfin-plugin-ldapauth/issues/161
# As a precaution, move older ABI plugins to another folder so things don't break
abi="$(jq -r '.targetAbi' "$directory/meta.json")"
if dpkg --compare-versions "$abi" lt "$plugin_abi"; then
ynh_print_warn --message="Jellyfin plugin '$name' ABI $abi is lower than expected $plugin_abi. Moving to /var/lib/jellyfin/plugins-backup."
mv "$directory" /var/lib/jellyfin/plugins-backup/
fi
done
fi
#=================================================
# INSTALL LDAP PLUGIN
#=================================================
ynh_script_progression --message="Installing LDAP plugin..." --weight=2
ynh_setup_source --full_replace=1 --dest_dir="/var/lib/jellyfin/plugins/LDAP Authentication" --source_id=plugin_ldap
mkdir -p /var/lib/jellyfin/plugins/configurations/
ynh_add_config --template="LDAP-Auth.xml" --destination="/var/lib/jellyfin/plugins/configurations/LDAP-Auth.xml"
#=================================================
# SECURE FILES AND DIRECTORIES
#=================================================
# Set permissions on app files
chown -R "$app:" "$data_path"
chown -R "$app:" "$config_path"
#=================================================
# YUNOHOST MULTIMEDIA INTEGRATION
#=================================================
ynh_script_progression --message="Adding multimedia directories..." --weight=2
# Build YunoHost multimedia directories
ynh_multimedia_build_main_dir
# Allow Jellyfin to write into these directories
ynh_multimedia_addaccess "$app"
#=================================================
# REAPPLY SYSTEM CONFIGURATIONS
#=================================================
ynh_script_progression --message="Upgrading system configurations related to $app..." --weight=1
# Create a dedicated NGINX config
ynh_add_nginx_config
ynh_add_config --template="systemd.service" --destination="/etc/systemd/system/jellyfin.service.d/baseurl.service.conf"
systemctl daemon-reload
# Use logrotate to manage app-specific logfile(s)
ynh_use_logrotate
yunohost service add "$app" --description="Jellyfin media center" "${ports_args[@]}"
#=================================================
# START SYSTEMD SERVICE
#=================================================
ynh_script_progression --message="Starting $app's systemd service..." --weight=1
ynh_systemd_action --service_name="$app" --action="restart" --log_path="systemd" --timeout=15
#=================================================
# END OF SCRIPT
#=================================================
ynh_script_progression --message="Upgrade of $app completed" --last