ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2024 All Rights Reserved # # Licensed under CLOUD LINUX LICENSE AGREEMENT # https://cloudlinux.com/docs/LICENCE.TXT # import functools import logging import os from clcommon.const import Feature from clcommon.cpapi import is_panel_feature_supported from clconfigure import run, task from clconfigure.packages import install_package CAGEFSCTL = "/usr/sbin/cagefsctl" def _skip_without_cagefs(func): @functools.wraps(func) def decorator(*args, **kwargs): if not is_panel_feature_supported(Feature.CAGEFS): logging.debug("Feature 'CageFS' is not supported. Skipping...") return if not os.path.exists(CAGEFSCTL): logging.debug("CageFS is not installed. Skipping...") return return func(*args, **kwargs) return decorator @_skip_without_cagefs @task("Cleaning CageFS environment") def clean_cagefs_without_lve_environment(): if is_panel_feature_supported(Feature.LVE): logging.debug("LVE feature is supported. Skipping...") return result = run([CAGEFSCTL, "--clean-without-lve-environment"]) if result.exitcode != 0: logging.warning("Unable to clean non-LVE CageFS enviroment. stdout: %s, stderr: %s", result.stdout, result.stderr) @_skip_without_cagefs @task("Reconfiguring CageFS") def reconfigure_cagefs(): install_package("cagefs", reinstall=True) _rebuild_apache_directadmin() def _rebuild_apache_directadmin(): da_bin = "/usr/local/directadmin/directadmin" if not os.path.exists(da_bin): return result = run([da_bin, "build", "apache"]) if result.exitcode != 0: logging.warning("Error during rebuilding Apache. stdout: %s, stderr: %s", result.stdout, result.stderr)