[php] Now use php7.3 instead of php7.0 + autopatch app scripts like we did for php5

This commit is contained in:
Alexandre Aubin 2020-02-08 20:11:31 +01:00
parent 57ce323cab
commit 5930b6ddf2
4 changed files with 38 additions and 35 deletions

View file

@ -1,6 +1,6 @@
#!/bin/bash
readonly YNH_DEFAULT_PHP_VERSION=7.0
readonly YNH_DEFAULT_PHP_VERSION=7.3
# Declare the actual php version to use.
# A packager willing to use another version of php can override the variable into its _common.sh.
YNH_PHP_VERSION=${YNH_PHP_VERSION:-$YNH_DEFAULT_PHP_VERSION}

View file

@ -106,7 +106,6 @@
"backup_output_directory_required": "You must provide an output directory for the backup",
"backup_output_symlink_dir_broken": "Your archive directory '{path:s}' is a broken symlink. Maybe you forgot to re/mount or plug in the storage medium it points to.",
"backup_permission": "Backup permission for {app:s}",
"backup_php5_to_php7_migration_may_fail": "Could not convert your archive to support PHP 7, you may be unable to restore your PHP apps (reason: {error:s})",
"backup_running_hooks": "Running backup hooks...",
"backup_system_part_failed": "Could not backup the '{part:s}' system part",
"backup_unable_to_organize_files": "Could not use the quick method to organize files in the archive",

View file

@ -521,7 +521,7 @@ def app_upgrade(app=[], url=None, file=None):
_patch_legacy_helpers(extracted_app_folder)
# Apply dirty patch to make php5 apps compatible with php7
_patch_php5(extracted_app_folder)
_patch_legacy_php_versions(extracted_app_folder)
# Start register change on system
related_to = [('app', app_instance_name)]
@ -736,7 +736,7 @@ def app_install(operation_logger, app, label=None, args=None, no_remove_on_failu
_patch_legacy_helpers(extracted_app_folder)
# Apply dirty patch to make php5 apps compatible with php7
_patch_php5(extracted_app_folder)
_patch_legacy_php_versions(extracted_app_folder)
# Prepare env. var. to pass to script
env_dict = _make_environment_dict(args_odict)
@ -1033,7 +1033,7 @@ def app_remove(operation_logger, app):
# Apply dirty patch to make php5 apps compatible with php7 (e.g. the remove
# script might date back from jessie install)
_patch_php5(app_setting_path)
_patch_legacy_php_versions(app_setting_path)
manifest = _get_manifest_of_app(app_setting_path)
@ -2839,8 +2839,8 @@ def _assert_system_is_sane_for_app(manifest, when):
# Some apps use php-fpm or php5-fpm which is now php7.0-fpm
def replace_alias(service):
if service in ["php-fpm", "php5-fpm"]:
return "php7.0-fpm"
if service in ["php-fpm", "php5-fpm", "php7.0-fpm"]:
return "php7.3-fpm"
else:
return service
services = [replace_alias(s) for s in services]
@ -2848,7 +2848,7 @@ def _assert_system_is_sane_for_app(manifest, when):
# We only check those, mostly to ignore "custom" services
# (added by apps) and because those are the most popular
# services
service_filter = ["nginx", "php7.0-fpm", "mysql", "postfix"]
service_filter = ["nginx", "php7.3-fpm", "mysql", "postfix"]
services = [str(s) for s in services if s in service_filter]
if "nginx" not in services:
@ -2873,7 +2873,16 @@ def _assert_system_is_sane_for_app(manifest, when):
raise YunohostError("this_action_broke_dpkg")
def _patch_php5(app_folder):
LEGACY_PHP_VERSION_REPLACEMENTS = [
("/etc/php5", "/etc/php/7.3"),
("/etc/php/7.0", "/etc/php/7.3"),
("/var/run/php5-fpm", "/var/run/php/php7.3-fpm"),
("/var/run/php/php7.0-fpm", "/var/run/php/php7.3-fpm"),
("php5", "php7.3"),
("php7.0", "php7.3")
]
def _patch_legacy_php_versions(app_folder):
files_to_patch = []
files_to_patch.extend(glob.glob("%s/conf/*" % app_folder))
@ -2888,12 +2897,12 @@ def _patch_php5(app_folder):
if not os.path.isfile(filename):
continue
c = "sed -i -e 's@/etc/php5@/etc/php/7.0@g' " \
"-e 's@/var/run/php5-fpm@/var/run/php/php7.0-fpm@g' " \
"-e 's@php5@php7.0@g' " \
"%s" % filename
c = "sed -i " \
+ "".join("-e 's@{pattern}@{replace}@g' ".format(pattern=p, replace=r) for p, r in LEGACY_PHP_VERSION_REPLACEMENTS) \
+ "%s" % filename
os.system(c)
def _patch_legacy_helpers(app_folder):
files_to_patch = []

View file

@ -43,7 +43,7 @@ from moulinette.utils.log import getActionLogger
from moulinette.utils.filesystem import read_file, mkdir, write_to_yaml, read_yaml
from yunohost.app import (
app_info, _is_installed, _parse_app_instance_name, _patch_php5, dump_app_log_extract_for_debugging, _patch_legacy_helpers
app_info, _is_installed, _parse_app_instance_name, _patch_legacy_php_versions, dump_app_log_extract_for_debugging, _patch_legacy_helpers, LEGACY_PHP_VERSION_REPLACEMENTS
)
from yunohost.hook import (
hook_list, hook_info, hook_callback, hook_exec, CUSTOM_HOOK_FOLDER
@ -1141,7 +1141,7 @@ class RestoreManager():
self._postinstall_if_needed()
# Apply dirty patch to redirect php5 file on php7
self._patch_backup_csv_file()
self._patch_legacy_php_versions_in_csv_file()
self._restore_system()
self._restore_apps()
@ -1150,9 +1150,9 @@ class RestoreManager():
finally:
self.clean()
def _patch_backup_csv_file(self):
def _patch_legacy_php_versions_in_csv_file(self):
"""
Apply dirty patch to redirect php5 file on php7
Apply dirty patch to redirect php5 and php7.0 files to php7.3
"""
backup_csv = os.path.join(self.work_dir, 'backup.csv')
@ -1160,32 +1160,27 @@ class RestoreManager():
if not os.path.isfile(backup_csv):
return
contains_php5 = False
replaced_something = False
with open(backup_csv) as csvfile:
reader = csv.DictReader(csvfile, fieldnames=['source', 'dest'])
newlines = []
for row in reader:
if 'php5' in row['source']:
contains_php5 = True
row['source'] = row['source'].replace('/etc/php5', '/etc/php/7.0') \
.replace('/var/run/php5-fpm', '/var/run/php/php7.0-fpm') \
.replace('php5', 'php7')
for pattern, replace in LEGACY_PHP_VERSION_REPLACEMENTS:
if pattern in row['source']:
replaced_something = True
row['source'] = row['source'].replace(pattern, replace)
newlines.append(row)
if not contains_php5:
if not replaced_something:
return
try:
with open(backup_csv, 'w') as csvfile:
writer = csv.DictWriter(csvfile,
fieldnames=['source', 'dest'],
quoting=csv.QUOTE_ALL)
for row in newlines:
writer.writerow(row)
except (IOError, OSError, csv.Error) as e:
logger.warning(m18n.n('backup_php5_to_php7_migration_may_fail',
error=str(e)))
with open(backup_csv, 'w') as csvfile:
writer = csv.DictWriter(csvfile,
fieldnames=['source', 'dest'],
quoting=csv.QUOTE_ALL)
for row in newlines:
writer.writerow(row)
def _restore_system(self):
""" Restore user and system parts """
@ -1333,7 +1328,7 @@ class RestoreManager():
_patch_legacy_helpers(app_settings_in_archive)
# Apply dirty patch to make php5 apps compatible with php7
_patch_php5(app_settings_in_archive)
_patch_legacy_php_versions(app_settings_in_archive)
# Delete _common.sh file in backup
common_file = os.path.join(app_backup_in_archive, '_common.sh')