Yoloattempt to try to cleanup some ugly os.system

This commit is contained in:
Alexandre Aubin 2021-10-01 20:22:59 +02:00
parent 3daac24443
commit 6c03cf2b11
6 changed files with 46 additions and 56 deletions

View file

@ -45,6 +45,10 @@ from moulinette.utils.filesystem import (
read_yaml, read_yaml,
write_to_file, write_to_file,
write_to_json, write_to_json,
cp,
rm,
chown,
chmod,
) )
from yunohost.utils import packages from yunohost.utils import packages
@ -643,15 +647,15 @@ def app_upgrade(app=[], url=None, file=None, force=False, no_safety_backup=False
# Replace scripts and manifest and conf (if exists) # Replace scripts and manifest and conf (if exists)
# Move scripts and manifest to the right place # Move scripts and manifest to the right place
for file_to_copy in APP_FILES_TO_COPY: for file_to_copy in APP_FILES_TO_COPY:
os.system(f"rm -rf '{app_setting_path}/{file_to_copy}'") rm(f'{app_setting_path}/{file_to_copy}', recursive=True, force=True)
if os.path.exists(os.path.join(extracted_app_folder, file_to_copy)): if os.path.exists(os.path.join(extracted_app_folder, file_to_copy)):
os.system(f"cp -R '{extracted_app_folder}/{file_to_copy}' '{app_setting_path}'") cp(f'{extracted_app_folder}/{file_to_copy}', f'{app_setting_path}/{file_to_copy}', recursive=True)
# Clean and set permissions # Clean and set permissions
shutil.rmtree(extracted_app_folder) shutil.rmtree(extracted_app_folder)
os.system("chmod 600 %s" % app_setting_path) chmod(app_setting_path, 0o600)
os.system("chmod 400 %s/settings.yml" % app_setting_path) chmod(f"{app_setting_path}/settings.yml", 0o400)
os.system("chown -R root: %s" % app_setting_path) chown(app_setting_path, "root", recursive=True)
# So much win # So much win
logger.success(m18n.n("app_upgraded", app=app_instance_name)) logger.success(m18n.n("app_upgraded", app=app_instance_name))
@ -816,7 +820,7 @@ def app_install(
# Move scripts and manifest to the right place # Move scripts and manifest to the right place
for file_to_copy in APP_FILES_TO_COPY: for file_to_copy in APP_FILES_TO_COPY:
if os.path.exists(os.path.join(extracted_app_folder, file_to_copy)): if os.path.exists(os.path.join(extracted_app_folder, file_to_copy)):
os.system(f"cp -R '{extracted_app_folder}/{file_to_copy}' '{app_setting_path}'") cp(f'{extracted_app_folder}/{file_to_copy}', f'{app_setting_path}/{file_to_copy}', recursive=True)
# Initialize the main permission for the app # Initialize the main permission for the app
# The permission is initialized with no url associated, and with tile disabled # The permission is initialized with no url associated, and with tile disabled
@ -955,9 +959,9 @@ def app_install(
# Clean and set permissions # Clean and set permissions
shutil.rmtree(extracted_app_folder) shutil.rmtree(extracted_app_folder)
os.system("chmod 600 %s" % app_setting_path) chmod(app_setting_path, 0o600)
os.system("chmod 400 %s/settings.yml" % app_setting_path) chmod(f"{app_setting_path}/settings.yml", 0o400)
os.system("chown -R root: %s" % app_setting_path) chown(app_setting_path, "root", recursive=True)
logger.success(m18n.n("installation_complete")) logger.success(m18n.n("installation_complete"))
@ -1153,7 +1157,7 @@ def app_makedefault(operation_logger, app, domain=None):
write_to_json( write_to_json(
"/etc/ssowat/conf.json.persistent", ssowat_conf, sort_keys=True, indent=4 "/etc/ssowat/conf.json.persistent", ssowat_conf, sort_keys=True, indent=4
) )
os.system("chmod 644 /etc/ssowat/conf.json.persistent") chmod("/etc/ssowat/conf.json.persistent", 0o644)
logger.success(m18n.n("ssowat_conf_updated")) logger.success(m18n.n("ssowat_conf_updated"))
@ -2077,24 +2081,16 @@ def _extract_app_from_folder(path: str) -> Tuple[Dict, str]:
extracted_app_folder = _make_tmp_workdir_for_app() extracted_app_folder = _make_tmp_workdir_for_app()
if ".zip" in path: if os.path.isdir(path):
extract_result = os.system(
f"unzip '{path}' -d {extracted_app_folder} > /dev/null 2>&1"
)
elif ".tar" in path:
extract_result = os.system(
f"tar -xf '{path}' -C {extracted_app_folder} > /dev/null 2>&1"
)
elif os.path.isdir(path):
shutil.rmtree(extracted_app_folder) shutil.rmtree(extracted_app_folder)
if path[-1] != "/": if path[-1] != "/":
path = path + "/" path = path + "/"
extract_result = os.system(f"cp -a '{path}' '{extracted_app_folder}'") cp(path, extracted_app_folder, recursive=True)
else: else:
extract_result = 1 try:
shutil.unpack_archive(path, extracted_app_folder)
if extract_result != 0: except Exception:
raise YunohostError("app_extraction_failed") raise YunohostError("app_extraction_failed")
try: try:
if len(os.listdir(extracted_app_folder)) == 1: if len(os.listdir(extracted_app_folder)) == 1:

View file

@ -32,7 +32,7 @@ from collections import OrderedDict
from moulinette import m18n, Moulinette from moulinette import m18n, Moulinette
from moulinette.utils.log import getActionLogger from moulinette.utils.log import getActionLogger
from moulinette.utils.filesystem import read_file, write_to_file, read_toml from moulinette.utils.filesystem import read_file, write_to_file, read_toml, mkdir
from yunohost.domain import ( from yunohost.domain import (
domain_list, domain_list,
@ -471,7 +471,7 @@ def _get_dns_zone_for_domain(domain):
# Check if there's a NS record for that domain # Check if there's a NS record for that domain
answer = dig(parent, rdtype="NS", full_answers=True, resolvers="force_external") answer = dig(parent, rdtype="NS", full_answers=True, resolvers="force_external")
if answer[0] == "ok": if answer[0] == "ok":
os.system(f"mkdir -p {cache_folder}") mkdir(cache_folder, parents=True)
write_to_file(cache_file, parent) write_to_file(cache_file, parent)
return parent return parent

View file

@ -29,7 +29,7 @@ from typing import Dict, Any
from moulinette import m18n, Moulinette from moulinette import m18n, Moulinette
from moulinette.core import MoulinetteError from moulinette.core import MoulinetteError
from moulinette.utils.log import getActionLogger from moulinette.utils.log import getActionLogger
from moulinette.utils.filesystem import write_to_file, read_yaml, write_to_yaml from moulinette.utils.filesystem import write_to_file, read_yaml, write_to_yaml, rm
from yunohost.app import ( from yunohost.app import (
app_ssowatconf, app_ssowatconf,
@ -328,7 +328,7 @@ def domain_remove(operation_logger, domain, remove_apps=False, force=False):
] ]
for stuff in stuff_to_delete: for stuff in stuff_to_delete:
os.system("rm -rf {stuff}") rm(stuff, force=True, recursive=True)
# Sometime we have weird issues with the regenconf where some files # Sometime we have weird issues with the regenconf where some files
# appears as manually modified even though they weren't touched ... # appears as manually modified even though they weren't touched ...

View file

@ -33,7 +33,7 @@ import subprocess
from moulinette import m18n from moulinette import m18n
from moulinette.core import MoulinetteError from moulinette.core import MoulinetteError
from moulinette.utils.log import getActionLogger from moulinette.utils.log import getActionLogger
from moulinette.utils.filesystem import write_to_file, read_file from moulinette.utils.filesystem import write_to_file, read_file, rm, chown, chmod
from moulinette.utils.network import download_json from moulinette.utils.network import download_json
from yunohost.utils.error import YunohostError, YunohostValidationError from yunohost.utils.error import YunohostError, YunohostValidationError
@ -152,13 +152,12 @@ def dyndns_subscribe(
os.system( os.system(
"cd /etc/yunohost/dyndns && " "cd /etc/yunohost/dyndns && "
"dnssec-keygen -a hmac-sha512 -b 512 -r /dev/urandom -n USER %s" f"dnssec-keygen -a hmac-sha512 -b 512 -r /dev/urandom -n USER {domain}"
% domain
)
os.system(
"chmod 600 /etc/yunohost/dyndns/*.key /etc/yunohost/dyndns/*.private"
) )
chmod("/etc/yunohost/dyndns", 0o600, recursive=True)
chown("/etc/yunohost/dyndns", "root", recursive=True)
private_file = glob.glob("/etc/yunohost/dyndns/*%s*.private" % domain)[0] private_file = glob.glob("/etc/yunohost/dyndns/*%s*.private" % domain)[0]
key_file = glob.glob("/etc/yunohost/dyndns/*%s*.key" % domain)[0] key_file = glob.glob("/etc/yunohost/dyndns/*%s*.key" % domain)[0]
with open(key_file) as f: with open(key_file) as f:
@ -175,12 +174,12 @@ def dyndns_subscribe(
timeout=30, timeout=30,
) )
except Exception as e: except Exception as e:
os.system("rm -f %s" % private_file) rm(private_file, force=True)
os.system("rm -f %s" % key_file) rm(key_file, force=True)
raise YunohostError("dyndns_registration_failed", error=str(e)) raise YunohostError("dyndns_registration_failed", error=str(e))
if r.status_code != 201: if r.status_code != 201:
os.system("rm -f %s" % private_file) rm(private_file, force=True)
os.system("rm -f %s" % key_file) rm(key_file, force=True)
try: try:
error = json.loads(r.text)["error"] error = json.loads(r.text)["error"]
except Exception: except Exception:

View file

@ -34,7 +34,7 @@ from importlib import import_module
from moulinette import m18n, Moulinette from moulinette import m18n, Moulinette
from yunohost.utils.error import YunohostError, YunohostValidationError from yunohost.utils.error import YunohostError, YunohostValidationError
from moulinette.utils import log from moulinette.utils import log
from moulinette.utils.filesystem import read_yaml from moulinette.utils.filesystem import read_yaml, cp
HOOK_FOLDER = "/usr/share/yunohost/hooks/" HOOK_FOLDER = "/usr/share/yunohost/hooks/"
CUSTOM_HOOK_FOLDER = "/etc/yunohost/hooks.d/" CUSTOM_HOOK_FOLDER = "/etc/yunohost/hooks.d/"
@ -60,8 +60,7 @@ def hook_add(app, file):
os.makedirs(CUSTOM_HOOK_FOLDER + action) os.makedirs(CUSTOM_HOOK_FOLDER + action)
finalpath = CUSTOM_HOOK_FOLDER + action + "/" + priority + "-" + app finalpath = CUSTOM_HOOK_FOLDER + action + "/" + priority + "-" + app
os.system("cp %s %s" % (file, finalpath)) cp(file, finalpath)
os.system("chown -hR admin: %s" % HOOK_FOLDER)
return {"hook": finalpath} return {"hook": finalpath}

View file

@ -34,7 +34,7 @@ from typing import List
from moulinette import Moulinette, m18n from moulinette import Moulinette, m18n
from moulinette.utils.log import getActionLogger from moulinette.utils.log import getActionLogger
from moulinette.utils.process import check_output, call_async_output from moulinette.utils.process import check_output, call_async_output
from moulinette.utils.filesystem import read_yaml, write_to_yaml from moulinette.utils.filesystem import read_yaml, write_to_yaml, cp, mkdir, rm
from yunohost.app import ( from yunohost.app import (
app_info, app_info,
@ -1147,13 +1147,11 @@ class Migration(object):
backup_folder = "/home/yunohost.backup/premigration/" + time.strftime( backup_folder = "/home/yunohost.backup/premigration/" + time.strftime(
"%Y%m%d-%H%M%S", time.gmtime() "%Y%m%d-%H%M%S", time.gmtime()
) )
os.makedirs(backup_folder, 0o750) mkdir(backup_folder, 0o750, parents=True)
os.system("systemctl stop slapd") os.system("systemctl stop slapd")
os.system(f"cp -r --preserve /etc/ldap {backup_folder}/ldap_config") cp("/etc/ldap", f"{backup_folder}/ldap_config", recursive=True)
os.system(f"cp -r --preserve /var/lib/ldap {backup_folder}/ldap_db") cp("/var/lib/ldap", f"{backup_folder}/ldap_db", recursive=True)
os.system( cp("/etc/yunohost/apps", f"{backup_folder}/apps_settings", recursive=True)
f"cp -r --preserve /etc/yunohost/apps {backup_folder}/apps_settings"
)
except Exception as e: except Exception as e:
raise YunohostError( raise YunohostError(
"migration_ldap_can_not_backup_before_migration", error=str(e) "migration_ldap_can_not_backup_before_migration", error=str(e)
@ -1169,17 +1167,15 @@ class Migration(object):
) )
os.system("systemctl stop slapd") os.system("systemctl stop slapd")
# To be sure that we don't keep some part of the old config # To be sure that we don't keep some part of the old config
os.system("rm -r /etc/ldap/slapd.d") rm("/etc/ldap/slapd.d", force=True, recursive=True)
os.system(f"cp -r --preserve {backup_folder}/ldap_config/. /etc/ldap/") cp(f"{backup_folder}/ldap_config", "/etc/ldap", recursive=True)
os.system(f"cp -r --preserve {backup_folder}/ldap_db/. /var/lib/ldap/") cp(f"{backup_folder}/ldap_db", "/var/lib/ldap", recursive=True)
os.system( cp(f"{backup_folder}/apps_settings", "/etc/yunohost/apps", recursive=True)
f"cp -r --preserve {backup_folder}/apps_settings/. /etc/yunohost/apps/"
)
os.system("systemctl start slapd") os.system("systemctl start slapd")
os.system(f"rm -r {backup_folder}") rm(backup_folder, force=True, recursive=True)
logger.info(m18n.n("migration_ldap_rollback_success")) logger.info(m18n.n("migration_ldap_rollback_success"))
raise raise
else: else:
os.system(f"rm -r {backup_folder}") rm(backup_folder, force=True, recursive=True)
return func return func