mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Replace the nginx.conf thing with a function called at the beginning of the migration that restore the original file if it was modified
This commit is contained in:
parent
d769f539ab
commit
8186f044dc
2 changed files with 59 additions and 5 deletions
|
@ -230,7 +230,7 @@
|
||||||
"migration_0003_patching_sources_list": "Patching the sources.lists ...",
|
"migration_0003_patching_sources_list": "Patching the sources.lists ...",
|
||||||
"migration_0003_main_upgrade": "Starting main upgrade ...",
|
"migration_0003_main_upgrade": "Starting main upgrade ...",
|
||||||
"migration_0003_fail2ban_upgrade": "Starting the fail2ban upgrade ...",
|
"migration_0003_fail2ban_upgrade": "Starting the fail2ban upgrade ...",
|
||||||
"migration_0003_nginx_upgrade": "Starting the nginx-common upgrade ...",
|
"migration_0003_restoring_origin_nginx_conf": "Your file /etc/nginx/nginx.conf was edited somehow. The migration is going to reset back to its original state first... The previous file will be available as {backup_dest}.",
|
||||||
"migration_0003_yunohost_upgrade": "Starting the yunohost package upgrade ... The migration will end, but the actual upgrade will happen right after. After the operation is complete, you might have to re-log on the webadmin.",
|
"migration_0003_yunohost_upgrade": "Starting the yunohost package upgrade ... The migration will end, but the actual upgrade will happen right after. After the operation is complete, you might have to re-log on the webadmin.",
|
||||||
"migration_0003_not_jessie": "The current debian distribution is not Jessie !",
|
"migration_0003_not_jessie": "The current debian distribution is not Jessie !",
|
||||||
"migration_0003_system_not_fully_up_to_date": "Your system is not fully up to date. Please perform a regular upgrade before running the migration to stretch.",
|
"migration_0003_system_not_fully_up_to_date": "Your system is not fully up to date. Please perform a regular upgrade before running the migration to stretch.",
|
||||||
|
|
|
@ -39,6 +39,8 @@ class MyMigration(Migration):
|
||||||
logger.warning(m18n.n("migration_0003_start", logfile=self.logfile))
|
logger.warning(m18n.n("migration_0003_start", logfile=self.logfile))
|
||||||
|
|
||||||
# Preparing the upgrade
|
# Preparing the upgrade
|
||||||
|
self.restore_original_nginx_conf_if_needed()
|
||||||
|
|
||||||
logger.warning(m18n.n("migration_0003_patching_sources_list"))
|
logger.warning(m18n.n("migration_0003_patching_sources_list"))
|
||||||
self.patch_apt_sources_list()
|
self.patch_apt_sources_list()
|
||||||
self.backup_files_to_keep()
|
self.backup_files_to_keep()
|
||||||
|
@ -46,10 +48,6 @@ class MyMigration(Migration):
|
||||||
apps_packages = self.get_apps_equivs_packages()
|
apps_packages = self.get_apps_equivs_packages()
|
||||||
self.unhold(["metronome"])
|
self.unhold(["metronome"])
|
||||||
self.hold(YUNOHOST_PACKAGES + apps_packages + ["fail2ban"])
|
self.hold(YUNOHOST_PACKAGES + apps_packages + ["fail2ban"])
|
||||||
if "/etc/nginx/nginx.conf" in manually_modified_files_compared_to_debian_default() \
|
|
||||||
and os.path.exists("/etc/nginx/nginx.conf"):
|
|
||||||
os.system("mv /etc/nginx/nginx.conf \
|
|
||||||
/home/yunohost.conf/backup/nginx.conf.bkp_before_stretch")
|
|
||||||
|
|
||||||
# Main dist-upgrade
|
# Main dist-upgrade
|
||||||
logger.warning(m18n.n("migration_0003_main_upgrade"))
|
logger.warning(m18n.n("migration_0003_main_upgrade"))
|
||||||
|
@ -296,3 +294,59 @@ class MyMigration(Migration):
|
||||||
for f in self.files_to_keep:
|
for f in self.files_to_keep:
|
||||||
dest_file = f.strip('/').replace("/", "_")
|
dest_file = f.strip('/').replace("/", "_")
|
||||||
copy2(os.path.join(tmp_dir, dest_file), f)
|
copy2(os.path.join(tmp_dir, dest_file), f)
|
||||||
|
|
||||||
|
# On some setups, /etc/nginx/nginx.conf got edited. But this file needs
|
||||||
|
# to be upgraded because of the way the new module system works for nginx.
|
||||||
|
# (in particular, having the line that include the modules at the top)
|
||||||
|
#
|
||||||
|
# So here, if it got edited, we force the restore of the original conf
|
||||||
|
# *before* starting the actual upgrade...
|
||||||
|
#
|
||||||
|
# An alternative strategy that was attempted was to hold the nginx-common
|
||||||
|
# package and have a specific upgrade for it like for fail2ban, but that
|
||||||
|
# leads to apt complaining about not being able to upgrade for shitty
|
||||||
|
# reasons >.>
|
||||||
|
def restore_original_nginx_conf_if_needed(self):
|
||||||
|
if "/etc/nginx/nginx.conf" not in manually_modified_files_compared_to_debian_default():
|
||||||
|
return
|
||||||
|
|
||||||
|
if not os.path.exists("/etc/nginx/nginx.conf"):
|
||||||
|
return
|
||||||
|
|
||||||
|
# If stretch is in the sources.list, we already started migrating on
|
||||||
|
# stretch so we don't re-do this
|
||||||
|
if " stretch " in read_file("/etc/apt/sources.list"):
|
||||||
|
return
|
||||||
|
|
||||||
|
backup_dest = "/home/yunohost.conf/backup/nginx.conf.bkp_before_stretch"
|
||||||
|
|
||||||
|
logger.warning(m18n.n("migration_0003_restoring_origin_nginx_conf",
|
||||||
|
backup_dest=backup_dest))
|
||||||
|
|
||||||
|
os.system("mv /etc/nginx/nginx.conf %s" % backup_dest)
|
||||||
|
|
||||||
|
command = ""
|
||||||
|
command += " DEBIAN_FRONTEND=noninteractive"
|
||||||
|
command += " APT_LISTCHANGES_FRONTEND=none"
|
||||||
|
command += " apt-get"
|
||||||
|
command += " --fix-broken --show-upgraded --assume-yes"
|
||||||
|
command += ' -o Dpkg::Options::="--force-confmiss"'
|
||||||
|
command += " install --reinstall"
|
||||||
|
command += " nginx-common"
|
||||||
|
|
||||||
|
logger.debug("Running apt command :\n{}".format(command))
|
||||||
|
|
||||||
|
command += " 2>&1 | tee -a {}".format(self.logfile)
|
||||||
|
|
||||||
|
is_api = msettings.get('interface') == 'api'
|
||||||
|
if is_api:
|
||||||
|
callbacks = (
|
||||||
|
lambda l: logger.info(l.rstrip()),
|
||||||
|
lambda l: logger.warning(l.rstrip()),
|
||||||
|
)
|
||||||
|
call_async_output(command, callbacks, shell=True)
|
||||||
|
else:
|
||||||
|
# We do this when running from the cli to have the output of the
|
||||||
|
# command showing in the terminal, since 'info' channel is only
|
||||||
|
# enabled if the user explicitly add --verbose ...
|
||||||
|
os.system(command)
|
||||||
|
|
Loading…
Add table
Reference in a new issue