#!/opt/cloudlinux/venv/bin/python3 -sbb # # Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2021 All Rights Reserved # # Licensed under CLOUD LINUX LICENSE AGREEMENT # http://cloudlinux.com/docs/LICENCE.TXT # import getopt import os import sys import textwrap import cldetectlib as detect import cllicenselib as cllicense import clsetuplib as clsetup from clcommon.lib.cledition import get_cl_edition_readable, skip_without_lve from clcommon.utils import get_os_version, is_ea4, is_nginx_running # Check for root def check_root(): if os.geteuid() != 0: print("Error: root privileges required. Abort.") sys.exit(-1) # Show help def print_usage() -> None: help_message = """ -h | --help show this message --detect-cp print control panel and its version (CP_NAME, CP_VERSION) --detect-cp-full print control panel, version and panel specific data (CP_NAME, CP_VERSION, ...) Specific data: for ISP Manager5 - Master/Node --detect-cp-nameonly print control panel name (CP_NAME) --get-admin-email print control panel admin email (CP_ADMIN_EMAIL) --cxs-installed check if CXS is installed. Returns 0 if installed, 1 otherwise --cpanel-suphp-enabled check if suPHP is enabled in cPanel. Returns 0 if enabled, 1 otherwise --detect-litespeed check if LiteSpeed is installed. Returns 0 if installed, 1 otherwise --detect-postgresql check if PostGreSQL is installed. Returns 0 if installed, 1 otherwise --detect-ea4 check if EA4 is installed. Only for cPanel --detect-nginx check if nginx is running --print-apache-gid print current apache gid --print-da-admin print DirectAdmin admin user --set-securelinks-gid change sysctl conf if apache gid != 48 (default) --set-nagios do some adjustments to make nagios work correctly if it's installed --setup-supergids do some adjustments to make some software work correctly if it's installed --cl-setup check if CloudLinux is installing. Returns 0 if installing, 1 otherwise --update-license update license --update-new-key update license with new key --check-license check license. Return OK if license is not older than 3 days, error message otherwise --check-license --quiet check license. Exit with code 0 if license is not older than 3 days, 1 otherwise --no-valid-license-screen return 'no valid license found' screen --license-out-of-date-email return the 'license out of date' email --check-openvz return environment ID --detect-edition return edition of CloudLinux --detect-os print OS name and version (OS_NAME,OS_VERSION) --detect-os-nameonly print OS name only (OS_NAME) """ # noqa: E501 # Strip newlines from the start and end # Keep in mind that multi-line indentation is preserved print(help_message.strip("\n")) def update_new_key(key): cllicense.update_license_with_key(key) def check_license(quiet): is_license_valid = cllicense.check_license() if quiet: if is_license_valid: sys.exit(0) else: sys.exit(1) else: print(cllicense.last_license_check(is_license_valid)) sys.exit(0) def main(): try: opts, args = getopt.getopt( sys.argv[1:], "hq", [ "help", "quiet", "detect-cp", "detect-cp-full", "detect-cp-nameonly", "cxs-installed", "cpanel-suphp-enabled", "get-admin-email", "print-apache-gid", "detect-litespeed", "detect-postgresql", "set-securelinks-gid", "print-da-admin", "cl-setup", "set-nagios", "update-license", "update-new-key", "check-license", "no-valid-license-screen", "license-out-of-date-email", "check-openvz", "detect-ea4", "detect-nginx", "setup-supergids", "detect-edition", "detect-os", "detect-os-nameonly", ], ) except getopt.GetoptError: print("error: unknown command") print_usage() sys.exit(1) executed = False quiet = False for option, _argument in opts: if option in ("--quiet", "-q"): quiet = True break skipped_without_lve_checks = ("--set-securelinks-gid", "--set-nagios", "--setup-supergids") for option, _argument in opts: if option in skipped_without_lve_checks: skip_without_lve() if option in ("--help", "-h"): executed = True check_root() print_usage() elif option in ("--cxs-installed",): executed = True check_root() if detect.CXS_check(): sys.exit(0) else: sys.exit(1) elif option in ("--detect-cp",): executed = True check_root() detect.getCP() print(str(detect.CP_NAME) + "," + str(detect.CP_VERSION)) elif option in ("--detect-cp-full",): executed = True check_root() detect.getCP() cp_name = str(detect.CP_NAME) cp_version = str(detect.CP_VERSION) if detect.CP_ISP_TYPE: # Panel additional info present print(f"{cp_name},{cp_version},{detect.CP_ISP_TYPE}") else: # No panel additional info present print(f"{cp_name},{cp_version}") elif option in ("--detect-cp-nameonly",): executed = True check_root() detect.getCPName() print(str(detect.CP_NAME)) elif option in ("--get-admin-email",): executed = True check_root() print(detect.getCPAdminEmail()) elif option in ("--cpanel-suphp-enabled",): executed = True check_root() if detect.mod_suPHP_check(): sys.exit(0) else: sys.exit(1) elif option in ("--detect-litespeed",): executed = True check_root() if detect.detect_litespeed(): sys.exit(0) else: sys.exit(1) elif option in ("--detect-postgresql",): executed = True check_root() if detect.detect_postgresql(): sys.exit(0) else: sys.exit(1) elif option in ("--print-apache-gid",): executed = True check_root() if detect.get_apache_gid(): print(detect.APACHE_GID) else: print("error: unknown control panel") elif option in ("--set-securelinks-gid",): executed = True check_root() if detect.get_apache_gid(): clsetup.set_securelinks_gid(detect.APACHE_GID) # Actually, this command could be removed because it's a sub-set of # --setup-supergids, but I left it here only for backward compatibility elif option in ("--set-nagios",): executed = True check_root() clsetup.setup_nagios() elif option in ("--setup-supergids",): executed = True check_root() clsetup.setup_supergids() elif option in ("--print-da-admin",): executed = True check_root() admin = detect.detect_DA_admin() if admin: print(admin) else: print("Error: can not find admin user for DirectAdmin") elif option in ("--cl-setup",): executed = True check_root() if detect.check_CL_installing(): sys.exit(0) else: sys.exit(1) elif option in ("--update-license",): executed = True check_root() cllicense.update_license_timestamp_file() elif option in ("--update-new-key",): executed = True check_root() try: update_new_key(args[0].strip()) except: print("Error: key required.") sys.exit(1) elif option in ("--check-license",): executed = True check_license(quiet) elif option in ("--no-valid-license-screen",): executed = True check_root() print(cllicense.get_novalid_template()) elif option in ("--license-out-of-date-email",): executed = True check_root() print(cllicense.get_email_template()) elif option in ("--check-openvz",): executed = True result = detect.is_openvz() sys.stdout.write(str(result)) elif option in ("--detect-ea4",): executed = True if is_ea4(): print("EA4 detected") else: print("No EA4 detected") elif option in ("--detect-nginx",): executed = True if is_nginx_running(): print("Nginx is running") else: print("Nginx is not running") elif option in ("--detect-edition",): executed = True print(get_cl_edition_readable()) elif option in ("--detect-os",): executed = True os_name, os_ver = get_os_version() print(os_name, os_ver) elif option in ("--detect-os-nameonly",): executed = True os_name, _ = get_os_version() print(os_name) if not executed: print("error: argument required") print_usage() sys.exit(1) if __name__ == "__main__": main()