blob: 633117c1dced7c751c8661b99825ed43ba7a5659 (
plain)
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
172
173
174
175
176
177
|
#!/bin/bash
source _common.sh
source ynh_add_swap
source /usr/share/yunohost/helpers
config="$install_dir/live/.env.production"
if ynh_app_upgrading_from_version_before 4.2.8~ynh2; then
ynh_die "Your installation is to old to update to this version. \
\nPlease first manually update with 4.4.3~ynh1 with the following command: \
\n's\0u\0d\0o yunohost app upgrade $app -u https://github.com/YunoHost-Apps/mastodon_ynh/commit/8fb1c6c7818430e8ac49f3ae589c6575614f5e4b' \
\nOnce done you can upgrade to the latest version."
fi
#=================================================
# STOP SYSTEMD SERVICE
#=================================================
ynh_script_progression "Stopping $app's systemd service..."
ynh_systemctl --service=${app}-web --action="stop" --log_path=/var/log/$app/$app-web.log --wait_until="Goodbye"
ynh_systemctl --service=${app}-sidekiq --action="stop" --log_path=/var/log/$app/$app-sidekiq.log --wait_until="Bye"
ynh_systemctl --service=${app}-streaming --action="stop" --log_path=/var/log/$app/$app-streaming.log
#=================================================
# ENSURE DOWNWARD COMPATIBILITY
#=================================================
ynh_script_progression "Ensuring downward compatibility..."
# Set `service` settings to support `yunohost app shell` command
ynh_app_setting_set_default --key=service --value="$app-web.service"
#=================================================
# ADD SWAP IF NEEDED
#=================================================
ynh_script_progression "Adding swap if needed..."
total_memory=$(ynh_get_ram --total)
swap_needed=0
if [ $total_memory -lt $memory_needed ]; then
# Need a minimum of 8Go of memory
swap_needed=$(($memory_needed - $total_memory))
fi
ynh_script_progression "Adding $swap_needed Mo to swap..."
ynh_add_swap --size=$swap_needed
#=================================================
# UPGRADE DEPENDENCIES
#=================================================
ynh_script_progression "Upgrading Ruby and NodeJS..."
ynh_ruby_install
ynh_nodejs_install
#=================================================
# "REBUILD" THE APP (DEPLOY NEW SOURCES, RERUN NPM BUILD...)
#=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE
#=================================================
ynh_script_progression "Upgrading source files..."
# Download, check integrity, uncompress and patch the source from manifest.toml
ynh_setup_source --dest_dir="$install_dir/live" --full_replace --keep="public/system .env.production"
# Download redis migration script
ynh_setup_source --source_id=redis_migration --dest_dir="$install_dir/live"
chmod -R 775 "$install_dir"
chmod o-rwx "$install_dir"
chown -R $app:www-data "$install_dir"
#=================================================
# BUILD ASSETS
#=================================================
ynh_script_progression "Building assets..."
pushd "$install_dir/live"
gem update --system
gem install bundler --no-document
ynh_exec_as_app LD_PRELOAD=libjemalloc.so bin/bundle config deployment 'true'
ynh_exec_as_app LD_PRELOAD=libjemalloc.so bin/bundle config without 'development test'
ynh_exec_as_app LD_PRELOAD=libjemalloc.so bin/bundle config set force_ruby_platform true --quiet
ynh_exec_as_app LD_PRELOAD=libjemalloc.so bin/bundle install -j$(getconf _NPROCESSORS_ONLN)
env corepack enable
echo Y | ynh_exec_as_app yarn workspaces focus --production
ynh_exec_as_app yarn install --immutable
popd
chown -R "$app:www-data" "$install_dir/live/public"
#=================================================
# REAPPLY SYSTEM CONFIGURATIONS
#=================================================
ynh_script_progression "Upgrading system configurations related to $app..."
ynh_config_add_nginx
# Create a dedicated systemd config
ynh_config_add_systemd --service="$app-web" --template="mastodon-web.service"
yunohost service add "$app-web" --description="$app web service"
ynh_config_add_systemd --service="$app-sidekiq" --template="mastodon-sidekiq.service"
yunohost service add "$app-sidekiq" --description="$app sidekiq service"
ynh_config_add_systemd --service="$app-streaming" --template="mastodon-streaming.service"
yunohost service add "$app-streaming" --description="$app streaming service"
ynh_config_add --template="cron" --destination="/etc/cron.d/$app"
# Use logrotate to manage app-specific logfile(s)
mkdir -p /var/log/$app
ynh_config_add_logrotate
#=================================================
# RECONFIGURE THE APP (UPDATE CONF, APPLY MIGRATIONS...)
#=================================================
# UPDATE A CONFIG FILE
#=================================================
ynh_script_progression "Updating a config file..."
if ynh_app_upgrading_from_version_before 4.3.2~ynh1; then
pushd "$install_dir/live"
# Generate active record encryption
ynh_exec_as_app RAILS_ENV=production LD_PRELOAD=libjemalloc.so bin/bundle exec rails db:encryption:init > active_record_encryption.txt
active_record_encryption_deterministic_key=$(grep -oP "ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=\K.+" "$install_dir/live/active_record_encryption.txt")
ynh_app_setting_set --key=active_record_encryption_deterministic_key --value="$active_record_encryption_deterministic_key"
active_record_encryption_key_derivation_salt=$(grep -oP "ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=\K.+" "$install_dir/live/active_record_encryption.txt")
ynh_app_setting_set --key=active_record_encryption_key_derivation_salt --value="$active_record_encryption_key_derivation_salt"
active_record_encryption_primary_key=$(grep -oP "ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=\K.+" "$install_dir/live/active_record_encryption.txt")
ynh_app_setting_set --key=active_record_encryption_primary_key --value="$active_record_encryption_primary_key"
ynh_safe_rm "$install_dir/live/active_record_encryption.txt"
popd
fi
language="$(echo $language | head -c 2)"
ynh_config_add --template=".env.production.sample" --destination="$config"
#=================================================
# APPLY MIGRATIONS
#=================================================
ynh_script_progression "Applying migrations..."
pushd "$install_dir/live"
ynh_exec_as_app RAILS_ENV=production LD_PRELOAD=libjemalloc.so bin/bundle exec rails db:migrate --quiet
ynh_exec_as_app RAILS_ENV=production LD_PRELOAD=libjemalloc.so bin/bundle exec rails assets:precompile --quiet
# Apply redis namespace migration (https://github.com/mastodon/redis_namespace_migration)
ynh_exec_as_app RAILS_ENV=production COREPACK_ENABLE_DOWNLOAD_PROMPT=0 LD_PRELOAD=libjemalloc.so bin/rails runner rename.rb
redis_namespace="$(ynh_app_setting_get --key=redis_namespace)"
if [ $redis_namespace ]; then
if [ ynh_app_setting_get --key=es_enabled == "true" ] && [ ynh_app_setting_get --key=es_prefix == "" ]; then
ynh_app_setting_set --key=es_prefix --value=$redis_namespace
else
ynh_app_setting_delete --key=redis_namespace
fi
fi
popd
#=================================================
# START SYSTEMD SERVICE
#=================================================
ynh_script_progression "Starting $app's systemd service..."
ynh_systemctl --service=${app}-web --action="restart" --log_path=/var/log/$app/$app-web.log --wait_until="Listening on"
ynh_systemctl --service=${app}-sidekiq --action="start" --log_path=/var/log/$app/$app-sidekiq.log --wait_until="Schedules Loaded"
ynh_systemctl --service=${app}-streaming --action="start" --log_path=/var/log/$app/$app-streaming.log --wait_until="Streaming API now listening"
#=================================================
# END OF SCRIPT
#=================================================
ynh_script_progression "Upgrade of $app completed"
|