[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 #!/bin/bash
readonly YNH_DEFAULT_PHP_VERSION=7.0 readonly YNH_DEFAULT_PHP_VERSION=7.3
# Declare the actual php version to use. # Declare the actual php version to use.
# A packager willing to use another version of php can override the variable into its _common.sh. # 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} 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_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_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_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_running_hooks": "Running backup hooks...",
"backup_system_part_failed": "Could not backup the '{part:s}' system part", "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", "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) _patch_legacy_helpers(extracted_app_folder)
# Apply dirty patch to make php5 apps compatible with php7 # 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 # Start register change on system
related_to = [('app', app_instance_name)] 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) _patch_legacy_helpers(extracted_app_folder)
# Apply dirty patch to make php5 apps compatible with php7 # 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 # Prepare env. var. to pass to script
env_dict = _make_environment_dict(args_odict) 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 # Apply dirty patch to make php5 apps compatible with php7 (e.g. the remove
# script might date back from jessie install) # 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) 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 # Some apps use php-fpm or php5-fpm which is now php7.0-fpm
def replace_alias(service): def replace_alias(service):
if service in ["php-fpm", "php5-fpm"]: if service in ["php-fpm", "php5-fpm", "php7.0-fpm"]:
return "php7.0-fpm" return "php7.3-fpm"
else: else:
return service return service
services = [replace_alias(s) for s in services] 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 # We only check those, mostly to ignore "custom" services
# (added by apps) and because those are the most popular # (added by apps) and because those are the most popular
# services # 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] services = [str(s) for s in services if s in service_filter]
if "nginx" not in services: if "nginx" not in services:
@ -2873,7 +2873,16 @@ def _assert_system_is_sane_for_app(manifest, when):
raise YunohostError("this_action_broke_dpkg") 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 = []
files_to_patch.extend(glob.glob("%s/conf/*" % app_folder)) 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): if not os.path.isfile(filename):
continue continue
c = "sed -i -e 's@/etc/php5@/etc/php/7.0@g' " \ c = "sed -i " \
"-e 's@/var/run/php5-fpm@/var/run/php/php7.0-fpm@g' " \ + "".join("-e 's@{pattern}@{replace}@g' ".format(pattern=p, replace=r) for p, r in LEGACY_PHP_VERSION_REPLACEMENTS) \
"-e 's@php5@php7.0@g' " \ + "%s" % filename
"%s" % filename
os.system(c) os.system(c)
def _patch_legacy_helpers(app_folder): def _patch_legacy_helpers(app_folder):
files_to_patch = [] 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 moulinette.utils.filesystem import read_file, mkdir, write_to_yaml, read_yaml
from yunohost.app import ( 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 ( from yunohost.hook import (
hook_list, hook_info, hook_callback, hook_exec, CUSTOM_HOOK_FOLDER hook_list, hook_info, hook_callback, hook_exec, CUSTOM_HOOK_FOLDER
@ -1141,7 +1141,7 @@ class RestoreManager():
self._postinstall_if_needed() self._postinstall_if_needed()
# Apply dirty patch to redirect php5 file on php7 # 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_system()
self._restore_apps() self._restore_apps()
@ -1150,9 +1150,9 @@ class RestoreManager():
finally: finally:
self.clean() 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') backup_csv = os.path.join(self.work_dir, 'backup.csv')
@ -1160,32 +1160,27 @@ class RestoreManager():
if not os.path.isfile(backup_csv): if not os.path.isfile(backup_csv):
return return
contains_php5 = False replaced_something = False
with open(backup_csv) as csvfile: with open(backup_csv) as csvfile:
reader = csv.DictReader(csvfile, fieldnames=['source', 'dest']) reader = csv.DictReader(csvfile, fieldnames=['source', 'dest'])
newlines = [] newlines = []
for row in reader: for row in reader:
if 'php5' in row['source']: for pattern, replace in LEGACY_PHP_VERSION_REPLACEMENTS:
contains_php5 = True if pattern in row['source']:
row['source'] = row['source'].replace('/etc/php5', '/etc/php/7.0') \ replaced_something = True
.replace('/var/run/php5-fpm', '/var/run/php/php7.0-fpm') \ row['source'] = row['source'].replace(pattern, replace)
.replace('php5', 'php7')
newlines.append(row) newlines.append(row)
if not contains_php5: if not replaced_something:
return return
try: with open(backup_csv, 'w') as csvfile:
with open(backup_csv, 'w') as csvfile: writer = csv.DictWriter(csvfile,
writer = csv.DictWriter(csvfile, fieldnames=['source', 'dest'],
fieldnames=['source', 'dest'], quoting=csv.QUOTE_ALL)
quoting=csv.QUOTE_ALL) for row in newlines:
for row in newlines: writer.writerow(row)
writer.writerow(row)
except (IOError, OSError, csv.Error) as e:
logger.warning(m18n.n('backup_php5_to_php7_migration_may_fail',
error=str(e)))
def _restore_system(self): def _restore_system(self):
""" Restore user and system parts """ """ Restore user and system parts """
@ -1333,7 +1328,7 @@ class RestoreManager():
_patch_legacy_helpers(app_settings_in_archive) _patch_legacy_helpers(app_settings_in_archive)
# Apply dirty patch to make php5 apps compatible with php7 # 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 # Delete _common.sh file in backup
common_file = os.path.join(app_backup_in_archive, '_common.sh') common_file = os.path.join(app_backup_in_archive, '_common.sh')