File: //usr/local/CyberCP/plogical/installUtilities.py
import subprocess
import sys
from plogical import CyberCPLogFileWriter as logging
import shutil
import pexpect
import os
import shlex
from plogical.processUtilities import ProcessUtilities
class installUtilities:
Server_root_path = "/usr/local/lsws"
@staticmethod
def enableEPELRepo():
try:
cmd = []
cmd.append("yum")
cmd.append("-y")
cmd.append("install")
cmd.append("epel-release")
res = subprocess.call(cmd)
if res == 1:
print("###############################################")
print(" Could not add EPEL repo " )
print("###############################################")
else:
print("###############################################")
print(" EPEL Repo Added ")
print("###############################################")
except OSError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [enableEPELRepo]")
return 0
except ValueError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [enableEPELRepo]")
return 0
return 1
@staticmethod
def addLiteSpeedRepo():
try:
# Use the official LiteSpeed repository installation script
# This supports all OS versions including CentOS/AlmaLinux/Rocky 7, 8, and 9
cmd = "wget -O - https://repo.litespeed.sh | bash"
res = subprocess.call(cmd, shell=True)
if res == 1:
print("###############################################")
print(" Could not add Litespeed repo " )
print("###############################################")
else:
print("###############################################")
print(" Litespeed Repo Added ")
print("###############################################")
except OSError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [addLiteSpeedRepo]")
return 0
except ValueError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [addLiteSpeedRepo]")
return 0
return 1
@staticmethod
def installLiteSpeed():
try:
cmd = []
cmd.append("yum")
cmd.append("-y")
cmd.append("install")
cmd.append("openlitespeed")
res = subprocess.call(cmd)
if res == 1:
print("###############################################")
print(" Could not install Litespeed " )
print("###############################################")
sys.exit()
else:
print("###############################################")
print(" Litespeed Installed ")
print("###############################################")
except OSError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [installLiteSpeed]")
return 0
except ValueError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [installLiteSpeed]")
return 0
return 1
@staticmethod
def startLiteSpeed():
try:
cmd = []
cmd.append("/usr/local/lsws/bin/lswsctrl")
cmd.append("start")
res = subprocess.call(cmd)
if res == 1:
print("###############################################")
print(" Could not start Litespeed server ")
print("###############################################")
sys.exit()
else:
print("###############################################")
print(" Litespeed Started ")
print("###############################################")
except OSError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [startLiteSpeed]")
return 0
except ValueError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [startLiteSpeed]")
return 0
return 1
@staticmethod
def reStartLiteSpeed():
try:
if ProcessUtilities.decideServer() == ProcessUtilities.OLS:
command = "systemctl restart lsws"
else:
command = "/usr/local/lsws/bin/lswsctrl restart"
ProcessUtilities.normalExecutioner(command)
except OSError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [reStartLiteSpeed]")
return 0
except BaseException as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [reStartLiteSpeed]")
return 0
return 1
@staticmethod
def reStartLiteSpeedSocket():
try:
if ProcessUtilities.decideServer() == ProcessUtilities.OLS:
command = "sudo systemctl restart lsws"
else:
command = "sudo /usr/local/lsws/bin/lswsctrl restart"
return ProcessUtilities.executioner(command)
except OSError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [reStartLiteSpeed]")
return 0
except ValueError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [reStartLiteSpeed]")
return 0
@staticmethod
def stopLiteSpeedSocket():
try:
if ProcessUtilities.decideServer() == ProcessUtilities.OLS:
command = "sudo systemctl stop lsws"
else:
command = "sudo /usr/local/lsws/bin/lswsctrl stop"
return ProcessUtilities.executioner(command)
except OSError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [reStartLiteSpeed]")
return 0
except ValueError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [reStartLiteSpeed]")
return 0
@staticmethod
def reStartOpenLiteSpeed(restart,orestart):
try:
if ProcessUtilities.decideServer() == ProcessUtilities.OLS:
command = "sudo systemctl restart lsws"
else:
command = "sudo /usr/local/lsws/bin/lswsctrl restart"
cmd = shlex.split(command)
res = subprocess.call(cmd)
if res == 1:
print("###############################################")
print(" Could not restart Litespeed serve ")
print("###############################################")
sys.exit()
else:
print("###############################################")
print(" Litespeed Re-Started ")
print("###############################################")
except OSError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [reStartOpenLiteSpeed]")
return 0
except ValueError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [reStartOpenLiteSpeed]")
return 0
return 1
@staticmethod
def changePortTo80():
try:
data = open("/usr/local/lsws/conf/httpd_config.conf").readlines()
writeDataToFile = open("/usr/local/lsws/conf/httpd_config.conf", 'w')
for items in data:
if (items.find("*:8088") > -1):
writeDataToFile.writelines(items.replace("*:8088","*:80"))
else:
writeDataToFile.writelines(items)
writeDataToFile.close()
except IOError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [changePortTo80]")
return 0
return installUtilities.reStartLiteSpeed()
@staticmethod
def installAllPHPVersion():
try:
cmd = []
cmd.append("yum")
cmd.append("groupinstall")
cmd.append("lsphp-all")
res = subprocess.call(cmd)
if res == 1:
print("###############################################")
print(" Could not install PHP Binaries ")
print("###############################################")
sys.exit()
else:
print("###############################################")
print(" PHP Binaries installed ")
print("###############################################")
writeDataToFile = open(installUtilities.Server_root_path + "/conf/httpd_config.conf", "a")
except OSError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [installAllPHPVersion]")
return 0
except ValueError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [installAllPHPVersion]")
return 0
return 1
@staticmethod
def installAllPHPToLitespeed():
try:
path = installUtilities.Server_root_path + "/conf/"
if not os.path.exists(path):
shutil.copytree("phpconfigs",path+"phpconfigs")
php53 = "include phpconfigs/php53.conf\n"
php54 = "include phpconfigs/php54.conf\n"
php55 = "include phpconfigs/php55.conf\n"
php56 = "include phpconfigs/php56.conf\n"
php70 = "include phpconfigs/php70.conf\n"
writeDataToFile = open(path+"httpd_config.conf", 'a')
writeDataToFile.writelines(php53)
writeDataToFile.writelines(php54)
writeDataToFile.writelines(php55)
writeDataToFile.writelines(php56)
writeDataToFile.writelines(php70)
writeDataToFile.close()
except IOError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [installAllPHPToLitespeed]")
return 0
return 1
@staticmethod
def installMainWebServer():
if installUtilities.enableEPELRepo() == 1:
if installUtilities.addLiteSpeedRepo() == 1:
if installUtilities.installLiteSpeed() == 1:
if installUtilities.startLiteSpeed() == 1:
if installUtilities.installAllPHPVersion():
if installUtilities.installAllPHPToLitespeed():
return 1
else:
return 0
else:
return 0
else:
return 0
else:
return 0
else:
return 0
else:
return 0
@staticmethod
def removeWebServer():
try:
cmd = []
cmd.append("yum")
cmd.append("-y")
cmd.append("remove")
cmd.append("openlitespeed")
res = subprocess.call(cmd)
if res == 1:
print("###############################################")
print(" Could not remove Litespeed ")
print("###############################################")
sys.exit()
else:
print("###############################################")
print(" Litespeed Removed ")
print("###############################################")
except OSError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [removeWebServer]")
return 0
except ValueError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [removeWebServer]")
return 0
try:
cmd = []
cmd.append("yum")
cmd.append("-y")
cmd.append("remove")
cmd.append("lsphp*")
res = subprocess.call(cmd)
if res == 1:
print("###############################################")
print(" Could not PHP Binaries ")
print("###############################################")
else:
print("###############################################")
print(" PHP Binaries Removed ")
print("###############################################")
sys.exit()
except OSError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [removeWebServer]")
return 0
except ValueError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [removeWebServer]")
return 0
try:
shutil.rmtree(installUtilities.Server_root_path)
except BaseException as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [removeWebServer]")
return 0
return 1
@staticmethod
def startMariaDB():
############## Start mariadb ######################
try:
cmd = []
cmd.append("systemctl")
cmd.append("start")
cmd.append("mariadb")
res = subprocess.call(cmd)
if res == 1:
print("###############################################")
print(" Could not start MariaDB ")
print("###############################################")
sys.exit()
else:
print("###############################################")
print(" MariaDB Started ")
print("###############################################")
except OSError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [startMariaDB]")
return 0
except ValueError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [startMariaDB]")
return 0
return 1
@staticmethod
def installMySQL(password):
try:
############## Install mariadb ######################
cmd = []
cmd.append("yum")
cmd.append("-y")
cmd.append("install")
cmd.append("mariadb-server")
res = subprocess.call(cmd)
if res == 1:
print("###############################################")
print(" Could not install MariaDB ")
print("###############################################")
sys.exit()
else:
print("###############################################")
print(" MariaDB Installed ")
print("###############################################")
except OSError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [installMySQL]")
return 0
except ValueError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [installMySQL]")
return 0
############## Start mariadb ######################
installUtilities.startMariaDB()
############## Enable mariadb at system startup ######################
try:
cmd = []
cmd.append("systemctl")
cmd.append("enable")
cmd.append("mariadb")
res = subprocess.call(cmd)
if res == 1:
print("###############################################")
print(" Could not add mariadb to startup ")
print("###############################################")
sys.exit()
else:
print("###############################################")
print(" MariaDB Addded to startup ")
print("###############################################")
except OSError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " Could not add mariadb to startup [installMySQL]")
return 0
except ValueError as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " Could not add mariadb to startup [installMySQL]")
return 0
if installUtilities.secureMysqlInstallation(password) == 1:
return 1
return 0
@staticmethod
def secureMysqlInstallation(password):
try:
expectation = "(enter for none):"
securemysql = pexpect.spawn("mysql_secure_installation",maxread=20000)
securemysql.expect(expectation)
securemysql.sendcontrol('j')
expectation = "password? [Y/n]"
securemysql.expect(expectation)
securemysql.sendline("Y")
expectation = "New password:"
securemysql.expect(expectation)
securemysql.sendline("1qaz@9xvps")
expectation = "new password:"
securemysql.expect(expectation)
securemysql.sendline(password)
expectation = "anonymous users? [Y/n]"
securemysql.expect(expectation)
securemysql.sendline("Y")
expectation = "root login remotely? [Y/n]"
securemysql.expect(expectation)
securemysql.sendline("Y")
expectation = "test database and access to it? [Y/n]"
securemysql.expect(expectation)
securemysql.sendline("Y")
expectation = "Reload privilege tables now? [Y/n]"
securemysql.expect(expectation)
securemysql.sendline("Y")
securemysql.wait()
if (securemysql.before.find("Thanks for using MariaDB!") > -1 or securemysql.after.find("Thanks for using MariaDB!")>-1):
return 1
except pexpect.EOF as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " Exception EOF [installMySQL]")
print("###########################Before########################################")
print(securemysql.before)
print("###########################After########################################")
print(securemysql.after)
print("########################################################################")
except BaseException as msg:
print("#############################Before#####################################")
print(securemysql.before)
print("############################After######################################")
print(securemysql.after)
print("########################################################################")
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[installMySQL]")
return 0
#installUtilities.installAllPHPToLitespeed()