mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
[php] Now use php7.3 instead of php7.0 + autopatch app scripts like we did for php5
This commit is contained in:
parent
57ce323cab
commit
5930b6ddf2
4 changed files with 38 additions and 35 deletions
|
@ -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}
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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 = []
|
||||||
|
|
|
@ -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')
|
||||||
|
|
Loading…
Add table
Reference in a new issue