2017-10-24 19:16:36 +05:00
|
|
|
import sys
|
|
|
|
|
import subprocess
|
|
|
|
|
import shutil
|
|
|
|
|
import installLog as logging
|
|
|
|
|
import argparse
|
|
|
|
|
import os
|
|
|
|
|
import shlex
|
|
|
|
|
from firewallUtilities import FirewallUtilities
|
2018-02-04 21:15:30 +05:00
|
|
|
import time
|
2018-06-11 21:04:55 +05:00
|
|
|
import string
|
|
|
|
|
import random
|
2018-11-06 13:03:12 +05:00
|
|
|
import socket
|
2018-10-25 16:47:26 -04:00
|
|
|
from os.path import *
|
|
|
|
|
from stat import *
|
2018-11-07 15:14:54 -05:00
|
|
|
import stat
|
2019-07-16 23:23:16 +05:00
|
|
|
from os import urandom
|
|
|
|
|
from random import choice
|
|
|
|
|
|
|
|
|
|
char_set = {'small': 'abcdefghijklmnopqrstuvwxyz',
|
2019-10-09 12:43:38 +05:00
|
|
|
'nums': '0123456789',
|
|
|
|
|
'big': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
|
2019-07-16 23:23:16 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def generate_pass(length=14):
|
|
|
|
|
"""Function to generate a password"""
|
|
|
|
|
|
|
|
|
|
password = []
|
|
|
|
|
|
|
|
|
|
while len(password) < length:
|
|
|
|
|
key = choice(char_set.keys())
|
|
|
|
|
a_char = urandom(1)
|
|
|
|
|
if a_char in char_set[key]:
|
|
|
|
|
if check_prev_char(password, char_set[key]):
|
|
|
|
|
continue
|
|
|
|
|
else:
|
|
|
|
|
password.append(a_char)
|
|
|
|
|
return ''.join(password)
|
|
|
|
|
|
2019-10-09 12:43:38 +05:00
|
|
|
|
2019-07-16 23:23:16 +05:00
|
|
|
def check_prev_char(password, current_char_set):
|
|
|
|
|
"""Function to ensure that there are no consecutive
|
|
|
|
|
UPPERCASE/lowercase/numbers/special-characters."""
|
|
|
|
|
|
|
|
|
|
index = len(password)
|
|
|
|
|
if index == 0:
|
|
|
|
|
return False
|
|
|
|
|
else:
|
|
|
|
|
prev_char = password[index - 1]
|
|
|
|
|
if prev_char in current_char_set:
|
|
|
|
|
return True
|
|
|
|
|
else:
|
|
|
|
|
return False
|
|
|
|
|
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-05-29 20:20:05 +05:00
|
|
|
# There can not be peace without first a great suffering.
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
# distros
|
2018-11-06 00:19:58 +05:00
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
centos = 0
|
|
|
|
|
ubuntu = 1
|
2018-10-25 16:10:01 -04:00
|
|
|
|
2019-10-09 12:43:38 +05:00
|
|
|
|
2019-03-26 16:19:03 +05:00
|
|
|
def get_distro():
|
|
|
|
|
distro = -1
|
|
|
|
|
distro_file = ""
|
|
|
|
|
if exists("/etc/lsb-release"):
|
|
|
|
|
distro_file = "/etc/lsb-release"
|
|
|
|
|
with open(distro_file) as f:
|
|
|
|
|
for line in f:
|
|
|
|
|
if line == "DISTRIB_ID=Ubuntu\n":
|
|
|
|
|
distro = ubuntu
|
|
|
|
|
|
|
|
|
|
elif exists("/etc/os-release"):
|
|
|
|
|
distro_file = "/etc/os-release"
|
|
|
|
|
distro = centos
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
logging.InstallLog.writeToFile("Can't find linux release file - fatal error")
|
|
|
|
|
preFlightsChecks.stdOut("Can't find linux release file - fatal error")
|
|
|
|
|
os._exit(os.EX_UNAVAILABLE)
|
|
|
|
|
|
|
|
|
|
if distro == -1:
|
|
|
|
|
logging.InstallLog.writeToFile("Can't find distro name in " + distro_file + " - fatal error")
|
|
|
|
|
preFlightsChecks.stdOut("Can't find distro name in " + distro_file + " - fatal error")
|
|
|
|
|
os._exit(os.EX_UNAVAILABLE)
|
|
|
|
|
|
|
|
|
|
return distro
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_Ubuntu_release():
|
|
|
|
|
release = -1
|
|
|
|
|
if exists("/etc/lsb-release"):
|
|
|
|
|
distro_file = "/etc/lsb-release"
|
|
|
|
|
with open(distro_file) as f:
|
|
|
|
|
for line in f:
|
|
|
|
|
if line[:16] == "DISTRIB_RELEASE=":
|
|
|
|
|
release = float(line[16:])
|
|
|
|
|
|
|
|
|
|
if release == -1:
|
|
|
|
|
preFlightsChecks.stdOut("Can't find distro release name in " + distro_file + " - fatal error", 1, 1,
|
|
|
|
|
os.EX_UNAVAILABLE)
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
logging.InstallLog.writeToFile("Can't find linux release file - fatal error")
|
|
|
|
|
preFlightsChecks.stdOut("Can't find linux release file - fatal error")
|
|
|
|
|
os._exit(os.EX_UNAVAILABLE)
|
|
|
|
|
|
|
|
|
|
return release
|
|
|
|
|
|
2018-11-06 00:19:58 +05:00
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
class preFlightsChecks:
|
2018-03-08 22:19:23 +05:00
|
|
|
cyberPanelMirror = "mirror.cyberpanel.net/pip"
|
2018-03-04 13:37:58 +05:00
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
def __init__(self, rootPath, ip, path, cwd, cyberPanelPath, distro):
|
2017-10-24 19:16:36 +05:00
|
|
|
self.ipAddr = ip
|
|
|
|
|
self.path = path
|
|
|
|
|
self.cwd = cwd
|
|
|
|
|
self.server_root_path = rootPath
|
2017-12-09 22:30:10 +05:00
|
|
|
self.cyberPanelPath = cyberPanelPath
|
2018-10-25 16:10:01 -04:00
|
|
|
self.distro = distro
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-03-26 16:19:03 +05:00
|
|
|
@staticmethod
|
|
|
|
|
def stdOut(message, log=0, do_exit=0, code=os.EX_OK):
|
|
|
|
|
print("\n\n")
|
|
|
|
|
print ("[" + time.strftime(
|
2019-10-08 13:17:33 -04:00
|
|
|
"%m.%d.%Y_%H-%M-%S") + "] #########################################################################\n")
|
|
|
|
|
print("[" + time.strftime("%m.%d.%Y_%H-%M-%S") + "] " + message + "\n")
|
2019-03-26 16:19:03 +05:00
|
|
|
print ("[" + time.strftime(
|
2019-10-08 13:17:33 -04:00
|
|
|
"%m.%d.%Y_%H-%M-%S") + "] #########################################################################\n")
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
if log:
|
|
|
|
|
logging.InstallLog.writeToFile(message)
|
|
|
|
|
if do_exit:
|
2019-11-13 19:59:42 +05:00
|
|
|
logging.InstallLog.writeToFile(message)
|
2019-03-26 16:19:03 +05:00
|
|
|
sys.exit(code)
|
|
|
|
|
|
2019-03-21 23:26:42 +05:00
|
|
|
def mountTemp(self):
|
|
|
|
|
try:
|
2019-10-26 19:05:01 +05:30
|
|
|
## On OpenVZ there is an issue using .tempdisk for /tmp as it breaks network on container after reboot.
|
|
|
|
|
|
|
|
|
|
if subprocess.check_output('systemd-detect-virt').find("openvz") > -1:
|
|
|
|
|
|
|
|
|
|
varTmp = "/var/tmp /tmp none bind 0 0\n"
|
|
|
|
|
|
|
|
|
|
fstab = "/etc/fstab"
|
|
|
|
|
writeToFile = open(fstab, "a")
|
|
|
|
|
writeToFile.writelines(varTmp)
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
|
|
command = "dd if=/dev/zero of=/usr/.tempdisk bs=100M count=15"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command,
|
|
|
|
|
command,
|
2019-11-13 13:08:26 +05:00
|
|
|
1, 0, os.EX_OSERR)
|
2019-10-26 19:05:01 +05:30
|
|
|
|
|
|
|
|
command = "mkfs.ext4 -F /usr/.tempdisk"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command,
|
|
|
|
|
command,
|
2019-11-13 13:08:26 +05:00
|
|
|
1, 0, os.EX_OSERR)
|
2019-10-26 19:05:01 +05:30
|
|
|
|
|
|
|
|
command = "mkdir -p /usr/.tmpbak/"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command,
|
|
|
|
|
command,
|
2019-11-13 13:08:26 +05:00
|
|
|
1, 0, os.EX_OSERR)
|
2019-10-26 19:05:01 +05:30
|
|
|
|
|
|
|
|
command = "cp -pr /tmp/* /usr/.tmpbak/"
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
|
|
|
|
|
command = "mount -o loop,rw,nodev,nosuid,noexec,nofail /usr/.tempdisk /tmp"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command,
|
|
|
|
|
command,
|
2019-11-13 13:08:26 +05:00
|
|
|
1, 0, os.EX_OSERR)
|
2019-10-26 19:05:01 +05:30
|
|
|
|
|
|
|
|
command = "chmod 1777 /tmp"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command,
|
|
|
|
|
command,
|
2019-11-13 13:08:26 +05:00
|
|
|
1, 0, os.EX_OSERR)
|
2019-10-26 19:05:01 +05:30
|
|
|
|
|
|
|
|
command = "cp -pr /usr/.tmpbak/* /tmp/"
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
|
|
|
|
|
command = "rm -rf /usr/.tmpbak"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command,
|
|
|
|
|
command,
|
2019-11-13 13:08:26 +05:00
|
|
|
1, 0, os.EX_OSERR)
|
2019-10-26 19:05:01 +05:30
|
|
|
|
|
|
|
|
command = "mount --bind /tmp /var/tmp"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command,
|
|
|
|
|
command,
|
2019-11-13 13:08:26 +05:00
|
|
|
1, 0, os.EX_OSERR)
|
2019-10-26 19:05:01 +05:30
|
|
|
|
|
|
|
|
tmp = "/usr/.tempdisk /tmp ext4 loop,rw,noexec,nosuid,nodev,nofail 0 0\n"
|
|
|
|
|
varTmp = "/tmp /var/tmp none bind 0 0\n"
|
|
|
|
|
|
|
|
|
|
fstab = "/etc/fstab"
|
|
|
|
|
writeToFile = open(fstab, "a")
|
|
|
|
|
writeToFile.writelines(tmp)
|
|
|
|
|
writeToFile.writelines(varTmp)
|
|
|
|
|
writeToFile.close()
|
2019-03-21 23:26:42 +05:00
|
|
|
|
|
|
|
|
except BaseException, msg:
|
2019-11-13 18:51:57 +05:00
|
|
|
preFlightsChecks.stdOut('[ERROR] ' + str(msg))
|
2019-03-21 23:26:42 +05:00
|
|
|
return 0
|
|
|
|
|
|
2018-11-07 09:20:05 -05:00
|
|
|
@staticmethod
|
2018-11-07 09:28:09 -05:00
|
|
|
def pureFTPDServiceName(distro):
|
2018-11-07 09:20:05 -05:00
|
|
|
if distro == ubuntu:
|
2018-11-07 09:56:45 -05:00
|
|
|
return 'pure-ftpd'
|
2018-11-07 09:20:05 -05:00
|
|
|
return 'pure-ftpd'
|
|
|
|
|
|
2018-11-14 11:37:17 -05:00
|
|
|
@staticmethod
|
|
|
|
|
def resFailed(distro, res):
|
|
|
|
|
if distro == ubuntu and res != 0:
|
|
|
|
|
return True
|
2018-12-06 15:03:43 +05:00
|
|
|
elif distro == centos and res != 0:
|
2018-11-14 11:37:17 -05:00
|
|
|
return True
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
2018-11-16 14:41:40 +05:00
|
|
|
def call(command, distro, bracket, message, log=0, do_exit=0, code=os.EX_OK):
|
2019-11-13 18:08:14 +05:00
|
|
|
finalMessage = 'Running: %s' % (message)
|
|
|
|
|
preFlightsChecks.stdOut(finalMessage, log)
|
2018-11-14 11:37:17 -05:00
|
|
|
count = 0
|
|
|
|
|
while True:
|
2019-03-26 16:19:03 +05:00
|
|
|
res = subprocess.call(shlex.split(command))
|
2018-11-14 11:37:17 -05:00
|
|
|
|
|
|
|
|
if preFlightsChecks.resFailed(distro, res):
|
|
|
|
|
count = count + 1
|
2019-11-13 18:08:14 +05:00
|
|
|
finalMessage = 'Running %s failed. Running again, try number %s' % (message, str(count))
|
|
|
|
|
preFlightsChecks.stdOut(finalMessage)
|
2018-11-14 11:37:17 -05:00
|
|
|
if count == 3:
|
|
|
|
|
fatal_message = ''
|
|
|
|
|
if do_exit:
|
|
|
|
|
fatal_message = '. Fatal error, see /var/log/installLogs.txt for full details'
|
|
|
|
|
|
2019-11-13 18:08:14 +05:00
|
|
|
preFlightsChecks.stdOut("[ERROR] We are not able to run " + message + ' return code: ' + str(res) +
|
|
|
|
|
fatal_message + ".", 1, do_exit, code)
|
2018-11-14 11:37:17 -05:00
|
|
|
return False
|
|
|
|
|
else:
|
2019-11-13 18:51:57 +05:00
|
|
|
preFlightsChecks.stdOut('Successfully ran: %s.' % (message), log)
|
2018-11-14 11:37:17 -05:00
|
|
|
break
|
2019-11-13 18:08:14 +05:00
|
|
|
|
2018-11-14 11:37:17 -05:00
|
|
|
return True
|
|
|
|
|
|
2018-11-06 00:19:58 +05:00
|
|
|
def checkIfSeLinuxDisabled(self):
|
|
|
|
|
try:
|
|
|
|
|
command = "sestatus"
|
2019-03-26 16:19:03 +05:00
|
|
|
output = subprocess.check_output(shlex.split(command))
|
2018-11-06 00:19:58 +05:00
|
|
|
|
|
|
|
|
if output.find("disabled") > -1 or output.find("permissive") > -1:
|
|
|
|
|
logging.InstallLog.writeToFile("SELinux Check OK. [checkIfSeLinuxDisabled]")
|
|
|
|
|
preFlightsChecks.stdOut("SELinux Check OK.")
|
|
|
|
|
return 1
|
|
|
|
|
else:
|
2018-11-16 14:41:40 +05:00
|
|
|
logging.InstallLog.writeToFile(
|
|
|
|
|
"SELinux is enabled, please disable SELinux and restart the installation!")
|
2018-11-06 00:19:58 +05:00
|
|
|
preFlightsChecks.stdOut("Installation failed, consult: /var/log/installLogs.txt")
|
|
|
|
|
os._exit(0)
|
|
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
except BaseException, msg:
|
2019-11-13 18:51:57 +05:00
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + "[checkIfSeLinuxDisabled]")
|
|
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + "SELinux Check OK. [checkIfSeLinuxDisabled]")
|
|
|
|
|
preFlightsChecks.stdOut('[ERROR] ' + "SELinux Check OK.")
|
2018-11-06 00:19:58 +05:00
|
|
|
return 1
|
|
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
def checkPythonVersion(self):
|
|
|
|
|
if sys.version_info[0] == 2 and sys.version_info[1] == 7:
|
|
|
|
|
return 1
|
|
|
|
|
else:
|
|
|
|
|
preFlightsChecks.stdOut("You are running Unsupported python version, please install python 2.7")
|
2018-07-05 15:22:48 +05:00
|
|
|
os._exit(0)
|
2017-12-09 22:30:10 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
def setup_account_cyberpanel(self):
|
|
|
|
|
try:
|
2017-12-09 22:30:10 +05:00
|
|
|
|
2018-10-26 09:56:12 -04:00
|
|
|
if self.distro == centos:
|
2018-12-13 04:23:08 +05:00
|
|
|
command = "yum install sudo -y"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command,
|
|
|
|
|
command,
|
2018-12-17 18:46:34 +05:00
|
|
|
1, 0, os.EX_OSERR)
|
2017-12-09 22:30:10 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
##
|
2017-12-09 22:30:10 +05:00
|
|
|
|
2018-10-26 09:56:12 -04:00
|
|
|
if self.distro == ubuntu:
|
2019-03-30 14:21:52 +05:00
|
|
|
# self.stdOut("Fix sudoers")
|
|
|
|
|
# try:
|
|
|
|
|
# fileName = '/etc/sudoers'
|
|
|
|
|
# data = open(fileName, 'r').readlines()
|
|
|
|
|
#
|
|
|
|
|
# writeDataToFile = open(fileName, 'w')
|
|
|
|
|
# for line in data:
|
|
|
|
|
# if line[:5] == '%sudo':
|
|
|
|
|
# writeDataToFile.write('%sudo ALL=(ALL:ALL) NOPASSWD: ALL\n')
|
|
|
|
|
# else:
|
|
|
|
|
# writeDataToFile.write(line)
|
|
|
|
|
# writeDataToFile.close()
|
|
|
|
|
# except IOError as err:
|
|
|
|
|
# self.stdOut("Error in fixing sudoers file: " + str(err), 1, 1, os.EX_OSERR)
|
2018-11-01 09:43:04 -04:00
|
|
|
|
2018-10-26 09:52:07 -04:00
|
|
|
self.stdOut("Add Cyberpanel user")
|
2019-04-15 15:54:23 +05:00
|
|
|
command = 'adduser --disabled-login --gecos "" cyberpanel'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command,command,1, 1, os.EX_OSERR)
|
2017-11-05 03:02:51 +05:00
|
|
|
|
2018-10-25 16:10:01 -04:00
|
|
|
else:
|
2019-03-30 14:21:52 +05:00
|
|
|
command = "useradd -s /bin/false cyberpanel"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command,command,1, 1, os.EX_OSERR)
|
2017-11-05 03:02:51 +05:00
|
|
|
|
2019-03-30 14:21:52 +05:00
|
|
|
# ##
|
|
|
|
|
#
|
|
|
|
|
# command = "usermod -aG wheel cyberpanel"
|
|
|
|
|
# preFlightsChecks.call(command, self.distro, '[setup_account_cyberpanel]',
|
|
|
|
|
# 'add user cyberpanel',
|
|
|
|
|
# 1, 0, os.EX_OSERR)
|
2017-11-05 03:02:51 +05:00
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
###############################
|
2017-11-05 03:02:51 +05:00
|
|
|
|
2019-03-30 14:21:52 +05:00
|
|
|
# path = "/etc/sudoers"
|
|
|
|
|
#
|
|
|
|
|
# data = open(path, 'r').readlines()
|
|
|
|
|
#
|
|
|
|
|
# writeToFile = open(path, 'w')
|
|
|
|
|
#
|
|
|
|
|
# for items in data:
|
|
|
|
|
# if items.find("wheel ALL=(ALL) NOPASSWD: ALL") > -1:
|
|
|
|
|
# writeToFile.writelines("%wheel ALL=(ALL) NOPASSWD: ALL")
|
|
|
|
|
# else:
|
|
|
|
|
# writeToFile.writelines(items)
|
|
|
|
|
#
|
|
|
|
|
# writeToFile.close()
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2018-11-06 00:19:58 +05:00
|
|
|
###############################
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2019-04-15 15:54:23 +05:00
|
|
|
### Docker User/group
|
|
|
|
|
|
|
|
|
|
if self.distro == ubuntu:
|
|
|
|
|
command = 'adduser --disabled-login --gecos "" docker'
|
|
|
|
|
else:
|
|
|
|
|
command = "adduser docker"
|
|
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command,command,1, 0, os.EX_OSERR)
|
2019-04-15 15:54:23 +05:00
|
|
|
|
|
|
|
|
command = 'groupadd docker'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command,command,1, 0, os.EX_OSERR)
|
2019-04-15 15:54:23 +05:00
|
|
|
|
|
|
|
|
command = 'usermod -aG docker docker'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command,command,1, 0, os.EX_OSERR)
|
2019-04-15 15:54:23 +05:00
|
|
|
|
|
|
|
|
command = 'usermod -aG docker cyberpanel'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command,command,1, 0, os.EX_OSERR)
|
2019-04-15 15:54:23 +05:00
|
|
|
|
|
|
|
|
###
|
|
|
|
|
|
2018-12-13 04:23:08 +05:00
|
|
|
command = "mkdir -p /etc/letsencrypt/live/"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command,command,1, 0, os.EX_OSERR)
|
2018-11-06 00:19:58 +05:00
|
|
|
|
2018-12-13 04:23:08 +05:00
|
|
|
except BaseException, msg:
|
|
|
|
|
logging.InstallLog.writeToFile("[ERROR] setup_account_cyberpanel. " + str(msg))
|
2017-11-05 03:02:51 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
def yum_update(self):
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'yum update -y'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
def installCyberPanelRepo(self):
|
2018-10-26 09:11:17 -04:00
|
|
|
self.stdOut("Install Cyberpanel repo")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-10-26 09:56:12 -04:00
|
|
|
if self.distro == ubuntu:
|
2018-10-25 16:10:01 -04:00
|
|
|
try:
|
|
|
|
|
filename = "enable_lst_debain_repo.sh"
|
|
|
|
|
command = "wget http://rpms.litespeedtech.com/debian/" + filename
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2018-10-25 16:10:01 -04:00
|
|
|
|
2018-10-25 16:47:26 -04:00
|
|
|
os.chmod(filename, S_IRWXU | S_IRWXG)
|
2018-10-25 16:10:01 -04:00
|
|
|
|
|
|
|
|
command = "./" + filename
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2018-10-25 16:10:01 -04:00
|
|
|
except:
|
2019-11-13 18:51:57 +05:00
|
|
|
logging.InstallLog.writeToFile("[ERROR] Exception during CyberPanel install")
|
|
|
|
|
preFlightsChecks.stdOut("[ERROR] Exception during CyberPanel install")
|
2018-10-25 16:10:01 -04:00
|
|
|
os._exit(os.EX_SOFTWARE)
|
|
|
|
|
|
2018-11-09 22:01:28 +05:00
|
|
|
else:
|
2019-11-13 13:08:26 +05:00
|
|
|
command = 'rpm -ivh http://rpms.litespeedtech.com/centos/litespeed-repo-1.1-1.el7.noarch.rpm'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2017-12-09 22:30:10 +05:00
|
|
|
def enableEPELRepo(self):
|
2019-11-13 13:08:26 +05:00
|
|
|
command = 'yum -y install epel-release'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
def install_pip(self):
|
2018-10-26 09:11:17 -04:00
|
|
|
self.stdOut("Install pip")
|
2019-11-13 13:08:26 +05:00
|
|
|
if self.distro == ubuntu:
|
|
|
|
|
command = "apt-get -y install python-pip"
|
|
|
|
|
else:
|
|
|
|
|
command = "yum -y install python-pip"
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
def install_python_dev(self):
|
2018-10-26 09:11:17 -04:00
|
|
|
self.stdOut("Install python development environment")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
if self.distro == centos:
|
|
|
|
|
command = "yum -y install python-devel"
|
|
|
|
|
else:
|
|
|
|
|
command = "apt-get -y install python-dev"
|
2018-03-08 22:19:23 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
def install_gcc(self):
|
|
|
|
|
self.stdOut("Install gcc")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
if self.distro == centos:
|
|
|
|
|
command = "yum -y install gcc"
|
|
|
|
|
else:
|
|
|
|
|
command = "apt-get -y install gcc"
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
def install_python_setup_tools(self):
|
|
|
|
|
command = "yum -y install python-setuptools"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
def install_python_mysql_library(self):
|
2018-10-26 09:11:17 -04:00
|
|
|
self.stdOut("Install MySQL python library")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
if self.distro == centos:
|
|
|
|
|
command = "yum -y install MySQL-python"
|
|
|
|
|
else:
|
|
|
|
|
command = "apt-get -y install libmysqlclient-dev"
|
2018-03-08 22:19:23 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
if self.distro == ubuntu:
|
|
|
|
|
command = "pip install MySQL-python"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
def fix_selinux_issue(self):
|
2017-11-05 03:02:51 +05:00
|
|
|
try:
|
|
|
|
|
cmd = []
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2017-11-05 03:02:51 +05:00
|
|
|
cmd.append("setsebool")
|
|
|
|
|
cmd.append("-P")
|
|
|
|
|
cmd.append("httpd_can_network_connect")
|
|
|
|
|
cmd.append("1")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-03-26 16:19:03 +05:00
|
|
|
res = subprocess.call(cmd)
|
2017-11-05 03:02:51 +05:00
|
|
|
|
2018-11-14 11:37:17 -05:00
|
|
|
if preFlightsChecks.resFailed(self.distro, res):
|
2017-11-05 03:02:51 +05:00
|
|
|
logging.InstallLog.writeToFile("fix_selinux_issue problem")
|
|
|
|
|
else:
|
|
|
|
|
pass
|
2017-12-09 22:30:10 +05:00
|
|
|
except:
|
2019-11-13 18:51:57 +05:00
|
|
|
logging.InstallLog.writeToFile("[ERROR] fix_selinux_issue problem")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
def install_psmisc(self):
|
2018-10-26 09:11:17 -04:00
|
|
|
self.stdOut("Install psmisc")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
if self.distro == centos:
|
|
|
|
|
command = "yum -y install psmisc"
|
|
|
|
|
else:
|
|
|
|
|
command = "apt-get -y install psmisc"
|
2019-11-07 14:47:02 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-11-07 14:47:02 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
def installGit(self):
|
|
|
|
|
if os.path.exists("/etc/lsb-release"):
|
|
|
|
|
command = 'apt -y install git'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2019-11-13 13:08:26 +05:00
|
|
|
else:
|
|
|
|
|
command = 'yum -y install http://repo.iotti.biz/CentOS/7/noarch/lux-release-7-1.noarch.rpm'
|
2019-11-13 19:37:55 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
command = 'yum install git -y'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
def download_install_CyberPanel(self, mysqlPassword, mysql):
|
2018-02-04 21:15:30 +05:00
|
|
|
##
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
os.chdir(self.path)
|
|
|
|
|
|
2019-11-07 14:47:02 +05:00
|
|
|
self.installGit()
|
|
|
|
|
|
|
|
|
|
os.chdir('/usr/local')
|
|
|
|
|
|
|
|
|
|
command = "git clone https://github.com/usmannasir/cyberpanel"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-07 14:47:02 +05:00
|
|
|
shutil.move('cyberpanel', 'CyberCP')
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-07 14:47:02 +05:00
|
|
|
##
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
### update password:
|
|
|
|
|
|
|
|
|
|
passFile = "/etc/cyberpanel/mysqlPassword"
|
|
|
|
|
|
|
|
|
|
f = open(passFile)
|
|
|
|
|
data = f.read()
|
|
|
|
|
password = data.split('\n', 1)[0]
|
|
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
### Put correct mysql passwords in settings file!
|
|
|
|
|
|
|
|
|
|
logging.InstallLog.writeToFile("Updating settings.py!")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
path = self.cyberPanelPath + "/CyberCP/settings.py"
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
data = open(path, "r").readlines()
|
|
|
|
|
|
|
|
|
|
writeDataToFile = open(path, "w")
|
|
|
|
|
|
|
|
|
|
counter = 0
|
|
|
|
|
|
|
|
|
|
for items in data:
|
2019-07-16 23:23:16 +05:00
|
|
|
if items.find('SECRET_KEY') > -1:
|
|
|
|
|
SK = "SECRET_KEY = '%s'\n" % (generate_pass(50))
|
|
|
|
|
writeDataToFile.writelines(SK)
|
|
|
|
|
continue
|
2018-05-29 20:20:05 +05:00
|
|
|
if mysql == 'Two':
|
|
|
|
|
if items.find("'PASSWORD':") > -1:
|
|
|
|
|
if counter == 0:
|
|
|
|
|
writeDataToFile.writelines(" 'PASSWORD': '" + mysqlPassword + "'," + "\n")
|
|
|
|
|
counter = counter + 1
|
|
|
|
|
else:
|
|
|
|
|
writeDataToFile.writelines(" 'PASSWORD': '" + password + "'," + "\n")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-05-29 20:20:05 +05:00
|
|
|
else:
|
|
|
|
|
writeDataToFile.writelines(items)
|
2017-10-24 19:16:36 +05:00
|
|
|
else:
|
2018-05-29 20:20:05 +05:00
|
|
|
if items.find("'PASSWORD':") > -1:
|
|
|
|
|
if counter == 0:
|
|
|
|
|
writeDataToFile.writelines(" 'PASSWORD': '" + mysqlPassword + "'," + "\n")
|
|
|
|
|
counter = counter + 1
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
writeDataToFile.writelines(" 'PASSWORD': '" + password + "'," + "\n")
|
|
|
|
|
elif items.find('127.0.0.1') > -1:
|
|
|
|
|
writeDataToFile.writelines(" 'HOST': 'localhost',\n")
|
|
|
|
|
elif items.find("'PORT':'3307'") > -1:
|
|
|
|
|
writeDataToFile.writelines(" 'PORT': '',\n")
|
|
|
|
|
else:
|
|
|
|
|
writeDataToFile.writelines(items)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-12 18:39:04 +05:00
|
|
|
if self.distro == ubuntu:
|
|
|
|
|
os.fchmod(writeDataToFile.fileno(), stat.S_IRUSR | stat.S_IWUSR)
|
2018-11-07 15:14:54 -05:00
|
|
|
|
2017-10-24 19:16:36 +05:00
|
|
|
writeDataToFile.close()
|
|
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
logging.InstallLog.writeToFile("settings.py updated!")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-09-18 15:06:58 +05:00
|
|
|
self.setupVirtualEnv(self.distro)
|
|
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
### Applying migrations
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 00:19:58 +05:00
|
|
|
os.chdir("CyberCP")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-09-18 15:06:58 +05:00
|
|
|
command = "/usr/local/CyberCP/bin/python2 manage.py makemigrations"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
##
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-09-18 15:06:58 +05:00
|
|
|
command = "/usr/local/CyberCP/bin/python2 manage.py migrate"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-03-30 14:21:52 +05:00
|
|
|
if not os.path.exists("/usr/local/CyberCP/public"):
|
|
|
|
|
os.mkdir("/usr/local/CyberCP/public")
|
|
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
## Moving static content to lscpd location
|
2019-03-30 14:21:52 +05:00
|
|
|
command = 'mv static /usr/local/CyberCP/public/'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-04-15 15:54:23 +05:00
|
|
|
try:
|
2019-11-07 15:21:19 +05:00
|
|
|
import requests
|
|
|
|
|
getVersion = requests.get('https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/version.txt')
|
|
|
|
|
latest = getVersion.json()
|
2019-04-15 15:54:23 +05:00
|
|
|
path = "/usr/local/CyberCP/version.txt"
|
|
|
|
|
writeToFile = open(path, 'w')
|
2019-11-07 15:21:19 +05:00
|
|
|
writeToFile.writelines('%s\n' % (str(latest['version'])))
|
|
|
|
|
writeToFile.writelines(str(latest['build']))
|
2019-04-15 15:54:23 +05:00
|
|
|
writeToFile.close()
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
2019-03-26 16:19:03 +05:00
|
|
|
def fixCyberPanelPermissions(self):
|
2019-04-15 15:54:23 +05:00
|
|
|
|
2019-03-26 16:19:03 +05:00
|
|
|
###### fix Core CyberPanel permissions
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-04-15 15:54:23 +05:00
|
|
|
command = "usermod -G lscpd,lsadm,nobody lscpd"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-04-15 15:54:23 +05:00
|
|
|
|
|
|
|
|
command = "usermod -G lscpd,lsadm,nogroup lscpd"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-04-15 15:54:23 +05:00
|
|
|
|
2019-03-26 16:19:03 +05:00
|
|
|
command = "find /usr/local/CyberCP -type d -exec chmod 0755 {} \;"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-01-18 22:37:12 +05:00
|
|
|
|
2019-03-26 16:19:03 +05:00
|
|
|
command = "find /usr/local/CyberCP -type f -exec chmod 0644 {} \;"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
command = "chmod -R 755 /usr/local/CyberCP/bin"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-01-23 20:37:44 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
## change owner
|
2018-01-23 20:37:44 +05:00
|
|
|
|
2019-03-26 16:19:03 +05:00
|
|
|
command = "chown -R root:root /usr/local/CyberCP"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
########### Fix LSCPD
|
|
|
|
|
|
|
|
|
|
command = "find /usr/local/lscp -type d -exec chmod 0755 {} \;"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
command = "find /usr/local/lscp -type f -exec chmod 0644 {} \;"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
command = "chmod -R 755 /usr/local/lscp/bin"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-30 14:21:52 +05:00
|
|
|
|
|
|
|
|
command = "chmod -R 755 /usr/local/lscp/fcgi-bin"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-30 14:21:52 +05:00
|
|
|
|
2019-04-15 15:54:23 +05:00
|
|
|
command = "chown -R lscpd:lscpd /usr/local/CyberCP/public/phpmyadmin/tmp"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
## change owner
|
|
|
|
|
|
|
|
|
|
command = "chown -R root:root /usr/local/lscp"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-01-23 20:37:44 +05:00
|
|
|
|
2019-04-15 15:54:23 +05:00
|
|
|
command = "chown -R lscpd:lscpd /usr/local/lscp/cyberpanel/rainloop/data"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-04-15 15:54:23 +05:00
|
|
|
|
|
|
|
|
command = "chmod 700 /usr/local/CyberCP/cli/cyberPanel.py"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-04-15 15:54:23 +05:00
|
|
|
|
|
|
|
|
command = "chmod 700 /usr/local/CyberCP/plogical/upgradeCritical.py"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-04-15 15:54:23 +05:00
|
|
|
|
2019-12-02 16:40:00 +05:00
|
|
|
command = "chmod 755 /usr/local/CyberCP/postfixSenderPolicy/client.py"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-04-15 15:54:23 +05:00
|
|
|
|
2019-04-22 03:38:40 +05:00
|
|
|
command = "chmod 640 /usr/local/CyberCP/CyberCP/settings.py"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-04-22 03:38:40 +05:00
|
|
|
|
|
|
|
|
command = "chown root:cyberpanel /usr/local/CyberCP/CyberCP/settings.py"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2019-07-16 23:23:16 +05:00
|
|
|
files = ['/etc/yum.repos.d/MariaDB.repo', '/etc/pdns/pdns.conf', '/etc/systemd/system/lscpd.service',
|
2019-10-09 12:43:38 +05:00
|
|
|
'/etc/pure-ftpd/pure-ftpd.conf', '/etc/pure-ftpd/pureftpd-pgsql.conf',
|
|
|
|
|
'/etc/pure-ftpd/pureftpd-mysql.conf', '/etc/pure-ftpd/pureftpd-ldap.conf',
|
|
|
|
|
'/etc/dovecot/dovecot.conf', '/usr/local/lsws/conf/httpd_config.xml',
|
|
|
|
|
'/usr/local/lsws/conf/modsec.conf', '/usr/local/lsws/conf/httpd.conf']
|
2019-07-16 23:23:16 +05:00
|
|
|
|
|
|
|
|
for items in files:
|
|
|
|
|
command = 'chmod 644 %s' % (items)
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-07-16 23:23:16 +05:00
|
|
|
|
2019-10-09 12:43:38 +05:00
|
|
|
impFile = ['/etc/pure-ftpd/pure-ftpd.conf', '/etc/pure-ftpd/pureftpd-pgsql.conf',
|
|
|
|
|
'/etc/pure-ftpd/pureftpd-mysql.conf', '/etc/pure-ftpd/pureftpd-ldap.conf',
|
|
|
|
|
'/etc/dovecot/dovecot.conf', '/etc/pdns/pdns.conf', '/etc/pure-ftpd/db/mysql.conf',
|
|
|
|
|
'/etc/powerdns/pdns.conf']
|
2019-07-16 23:23:16 +05:00
|
|
|
|
|
|
|
|
for items in impFile:
|
|
|
|
|
command = 'chmod 600 %s' % (items)
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-07-16 23:23:16 +05:00
|
|
|
|
|
|
|
|
command = 'chmod 640 /etc/postfix/*.cf'
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
|
|
|
|
|
command = 'chmod 644 /etc/postfix/main.cf'
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
|
|
|
|
|
command = 'chmod 640 /etc/dovecot/*.conf'
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
|
|
|
|
|
command = 'chmod 644 /etc/dovecot/dovecot.conf'
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
|
|
|
|
|
command = 'chmod 640 /etc/dovecot/dovecot-sql.conf.ext'
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
|
2019-08-28 02:25:39 +05:00
|
|
|
command = 'chmod 644 /etc/postfix/dynamicmaps.cf'
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
|
2019-07-16 23:23:16 +05:00
|
|
|
fileM = ['/usr/local/lsws/FileManager/', '/usr/local/CyberCP/install/FileManager',
|
|
|
|
|
'/usr/local/CyberCP/serverStatus/litespeed/FileManager', '/usr/local/lsws/Example/html/FileManager']
|
|
|
|
|
|
|
|
|
|
for items in fileM:
|
|
|
|
|
try:
|
|
|
|
|
shutil.rmtree(items)
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
command = 'chmod 755 /etc/pure-ftpd/'
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
|
2019-12-04 14:40:59 +05:00
|
|
|
command = 'chmod +x /usr/local/CyberCP/plogical/renew.py'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
|
|
|
|
|
2017-12-09 22:30:10 +05:00
|
|
|
def install_unzip(self):
|
2018-12-17 18:46:34 +05:00
|
|
|
self.stdOut("Install unzip")
|
2017-10-24 19:16:36 +05:00
|
|
|
try:
|
2018-12-17 18:46:34 +05:00
|
|
|
if self.distro == centos:
|
|
|
|
|
command = 'yum -y install unzip'
|
|
|
|
|
else:
|
|
|
|
|
command = 'apt-get -y install unzip'
|
2017-12-09 22:30:10 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-12-17 18:46:34 +05:00
|
|
|
except BaseException, msg:
|
2019-11-13 18:51:57 +05:00
|
|
|
logging.InstallLog.writeToFile('[ERROR] '+ str(msg) + " [install_unzip]")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2017-12-09 22:30:10 +05:00
|
|
|
def install_zip(self):
|
2018-10-26 09:11:17 -04:00
|
|
|
self.stdOut("Install zip")
|
2017-10-24 19:16:36 +05:00
|
|
|
try:
|
2018-12-17 18:46:34 +05:00
|
|
|
if self.distro == centos:
|
|
|
|
|
command = 'yum -y install zip'
|
|
|
|
|
else:
|
|
|
|
|
command = 'apt-get -y install zip'
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-12-17 18:46:34 +05:00
|
|
|
except BaseException, msg:
|
2019-11-13 18:51:57 +05:00
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [install_zip]")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
def download_install_phpmyadmin(self):
|
|
|
|
|
try:
|
2019-03-21 23:26:42 +05:00
|
|
|
|
2019-03-30 14:21:52 +05:00
|
|
|
if not os.path.exists("/usr/local/CyberCP/public"):
|
|
|
|
|
os.mkdir("/usr/local/CyberCP/public")
|
|
|
|
|
|
|
|
|
|
os.chdir("/usr/local/CyberCP/public")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-03-21 23:26:42 +05:00
|
|
|
command = 'composer create-project phpmyadmin/phpmyadmin'
|
2018-12-20 16:18:16 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, '[download_install_phpmyadmin]',
|
2019-10-09 12:43:38 +05:00
|
|
|
'Download PHPMYAdmin', 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-06-11 21:04:55 +05:00
|
|
|
## Write secret phrase
|
|
|
|
|
|
|
|
|
|
rString = ''.join([random.choice(string.ascii_letters + string.digits) for n in xrange(32)])
|
|
|
|
|
|
|
|
|
|
data = open('phpmyadmin/config.sample.inc.php', 'r').readlines()
|
|
|
|
|
|
|
|
|
|
writeToFile = open('phpmyadmin/config.inc.php', 'w')
|
|
|
|
|
|
|
|
|
|
for items in data:
|
|
|
|
|
if items.find('blowfish_secret') > -1:
|
2018-11-16 14:41:40 +05:00
|
|
|
writeToFile.writelines(
|
|
|
|
|
"$cfg['blowfish_secret'] = '" + rString + "'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */\n")
|
2018-06-11 21:04:55 +05:00
|
|
|
else:
|
|
|
|
|
writeToFile.writelines(items)
|
|
|
|
|
|
2019-03-30 14:21:52 +05:00
|
|
|
writeToFile.writelines("$cfg['TempDir'] = '/usr/local/CyberCP/public/phpmyadmin/tmp';\n")
|
2018-06-11 21:04:55 +05:00
|
|
|
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
2019-03-30 14:21:52 +05:00
|
|
|
os.mkdir('/usr/local/CyberCP/public/phpmyadmin/tmp')
|
2018-06-11 21:04:55 +05:00
|
|
|
|
2019-03-30 14:21:52 +05:00
|
|
|
command = 'chown -R lscpd:lscpd /usr/local/CyberCP/public/phpmyadmin'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, '[chown -R lscpd:lscpd /usr/local/CyberCP/public/phpmyadmin]',
|
|
|
|
|
'chown -R lscpd:lscpd /usr/local/CyberCP/public/phpmyadmin', 1, 0, os.EX_OSERR)
|
2018-06-11 21:04:55 +05:00
|
|
|
|
2018-12-17 18:46:34 +05:00
|
|
|
except BaseException, msg:
|
2019-11-13 18:51:57 +05:00
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [download_install_phpmyadmin]")
|
2017-10-24 19:16:36 +05:00
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
###################################################### Email setup
|
|
|
|
|
|
|
|
|
|
def install_postfix_davecot(self):
|
2018-10-30 09:51:30 -04:00
|
|
|
self.stdOut("Install dovecot - first remove postfix")
|
2019-07-03 13:15:26 +05:00
|
|
|
|
|
|
|
|
if self.distro == centos:
|
|
|
|
|
path = '/etc/yum.repos.d/dovecot.repo'
|
|
|
|
|
content = """[dovecot-2.3-latest]
|
|
|
|
|
name=Dovecot 2.3 CentOS $releasever - $basearch
|
|
|
|
|
baseurl=http://repo.dovecot.org/ce-2.3-latest/centos/$releasever/RPMS/$basearch
|
|
|
|
|
gpgkey=https://repo.dovecot.org/DOVECOT-REPO-GPG
|
|
|
|
|
gpgcheck=1
|
|
|
|
|
enabled=1"""
|
|
|
|
|
writeToFile = open(path, 'w')
|
|
|
|
|
writeToFile.write(content)
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
2017-10-24 19:16:36 +05:00
|
|
|
try:
|
2018-10-26 09:56:12 -04:00
|
|
|
if self.distro == centos:
|
2019-08-30 20:15:09 +05:00
|
|
|
|
|
|
|
|
command = 'yum -y install http://cyberpanel.sh/gf-release-latest.gf.el7.noarch.rpm'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-08-30 20:15:09 +05:00
|
|
|
|
2018-10-25 16:10:01 -04:00
|
|
|
command = 'yum remove postfix -y'
|
2018-10-25 16:58:15 -04:00
|
|
|
else:
|
2018-10-25 16:10:01 -04:00
|
|
|
command = 'apt-get -y remove postfix'
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-10-30 09:51:30 -04:00
|
|
|
self.stdOut("Install dovecot - do the install")
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
if self.distro == centos:
|
|
|
|
|
command = 'yum install --enablerepo=gf-plus -y postfix3 postfix3-ldap postfix3-mysql postfix3-pcre'
|
|
|
|
|
else:
|
|
|
|
|
command = 'apt-get -y debconf-utils'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-11-13 13:08:26 +05:00
|
|
|
file_name = self.cwd + '/pf.unattend.text'
|
|
|
|
|
pf = open(file_name, 'w')
|
|
|
|
|
pf.write('postfix postfix/mailname string ' + str(socket.getfqdn() + '\n'))
|
|
|
|
|
pf.write('postfix postfix/main_mailer_type string "Internet Site"\n')
|
|
|
|
|
pf.close()
|
|
|
|
|
command = 'debconf-set-selections ' + file_name
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
|
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
command = 'apt-get -y install postfix'
|
|
|
|
|
# os.remove(file_name)
|
2018-10-13 18:31:47 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2018-10-13 18:31:47 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
if self.distro == centos:
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
command = 'apt-get -y install dovecot-imapd dovecot-pop3d postfix-mysql'
|
2018-10-13 18:31:47 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2018-10-13 18:31:47 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
##
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
if self.distro == centos:
|
|
|
|
|
command = 'yum -y install dovecot dovecot-mysql'
|
|
|
|
|
else:
|
|
|
|
|
command = 'apt-get -y install dovecot-mysql'
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-08-13 16:27:56 +05:00
|
|
|
if self.distro != centos:
|
|
|
|
|
command = 'curl https://repo.dovecot.org/DOVECOT-REPO-GPG | gpg --import'
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
|
|
|
|
|
command = 'gpg --export ED409DA1 > /etc/apt/trusted.gpg.d/dovecot.gpg'
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
|
|
|
|
|
debPath = '/etc/apt/sources.list.d/dovecot.list'
|
|
|
|
|
writeToFile = open(debPath, 'w')
|
|
|
|
|
writeToFile.write('deb https://repo.dovecot.org/ce-2.3-latest/ubuntu/bionic bionic main\n')
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
command = 'apt update -y'
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
command = 'DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical sudo apt-get -q -y -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" --only-upgrade install dovecot-mysql -y'
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
|
|
|
|
|
command = 'dpkg --configure -a'
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
|
|
|
|
|
command = 'apt --fix-broken install -y'
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
|
|
|
|
|
command = 'DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical sudo apt-get -q -y -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" --only-upgrade install dovecot-mysql -y'
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
2019-11-13 18:51:57 +05:00
|
|
|
except BaseException, msg:
|
|
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [install_postfix_davecot]")
|
2017-10-24 19:16:36 +05:00
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
return 1
|
|
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
def setup_email_Passwords(self, mysqlPassword, mysql):
|
2017-10-24 19:16:36 +05:00
|
|
|
try:
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
logging.InstallLog.writeToFile("Setting up authentication for Postfix and Dovecot...")
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
os.chdir(self.cwd)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
if mysql == 'Two':
|
|
|
|
|
mysql_virtual_domains = "email-configs/mysql-virtual_domains.cf"
|
|
|
|
|
mysql_virtual_forwardings = "email-configs/mysql-virtual_forwardings.cf"
|
|
|
|
|
mysql_virtual_mailboxes = "email-configs/mysql-virtual_mailboxes.cf"
|
|
|
|
|
mysql_virtual_email2email = "email-configs/mysql-virtual_email2email.cf"
|
|
|
|
|
davecotmysql = "email-configs/dovecot-sql.conf.ext"
|
|
|
|
|
else:
|
|
|
|
|
mysql_virtual_domains = "email-configs-one/mysql-virtual_domains.cf"
|
|
|
|
|
mysql_virtual_forwardings = "email-configs-one/mysql-virtual_forwardings.cf"
|
|
|
|
|
mysql_virtual_mailboxes = "email-configs-one/mysql-virtual_mailboxes.cf"
|
|
|
|
|
mysql_virtual_email2email = "email-configs-one/mysql-virtual_email2email.cf"
|
|
|
|
|
davecotmysql = "email-configs-one/dovecot-sql.conf.ext"
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
### update password:
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
data = open(davecotmysql, "r").readlines()
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
writeDataToFile = open(davecotmysql, "w")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
if mysql == 'Two':
|
2018-11-16 14:41:40 +05:00
|
|
|
dataWritten = "connect = host=127.0.0.1 dbname=cyberpanel user=cyberpanel password=" + mysqlPassword + " port=3307\n"
|
2018-11-07 15:14:54 -05:00
|
|
|
else:
|
|
|
|
|
dataWritten = "connect = host=localhost dbname=cyberpanel user=cyberpanel password=" + mysqlPassword + " port=3306\n"
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
for items in data:
|
|
|
|
|
if items.find("connect") > -1:
|
|
|
|
|
writeDataToFile.writelines(dataWritten)
|
|
|
|
|
else:
|
|
|
|
|
writeDataToFile.writelines(items)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
# if self.distro == ubuntu:
|
2018-11-12 14:53:10 -05:00
|
|
|
# os.fchmod(writeDataToFile.fileno(), stat.S_IRUSR | stat.S_IWUSR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
writeDataToFile.close()
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
### update password:
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
data = open(mysql_virtual_domains, "r").readlines()
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
writeDataToFile = open(mysql_virtual_domains, "w")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
dataWritten = "password = " + mysqlPassword + "\n"
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
for items in data:
|
|
|
|
|
if items.find("password") > -1:
|
|
|
|
|
writeDataToFile.writelines(dataWritten)
|
|
|
|
|
else:
|
|
|
|
|
writeDataToFile.writelines(items)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
# if self.distro == ubuntu:
|
2018-11-12 14:53:10 -05:00
|
|
|
# os.fchmod(writeDataToFile.fileno(), stat.S_IRUSR | stat.S_IWUSR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
writeDataToFile.close()
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
### update password:
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
data = open(mysql_virtual_forwardings, "r").readlines()
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
writeDataToFile = open(mysql_virtual_forwardings, "w")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
dataWritten = "password = " + mysqlPassword + "\n"
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
for items in data:
|
|
|
|
|
if items.find("password") > -1:
|
|
|
|
|
writeDataToFile.writelines(dataWritten)
|
|
|
|
|
else:
|
|
|
|
|
writeDataToFile.writelines(items)
|
2018-11-14 13:36:34 +05:00
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
# if self.distro == ubuntu:
|
2018-11-12 14:53:10 -05:00
|
|
|
# os.fchmod(writeDataToFile.fileno(), stat.S_IRUSR | stat.S_IWUSR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
writeDataToFile.close()
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
### update password:
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
data = open(mysql_virtual_mailboxes, "r").readlines()
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
writeDataToFile = open(mysql_virtual_mailboxes, "w")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
dataWritten = "password = " + mysqlPassword + "\n"
|
|
|
|
|
|
|
|
|
|
for items in data:
|
|
|
|
|
if items.find("password") > -1:
|
|
|
|
|
writeDataToFile.writelines(dataWritten)
|
|
|
|
|
else:
|
|
|
|
|
writeDataToFile.writelines(items)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
# if self.distro == ubuntu:
|
2018-11-12 14:53:10 -05:00
|
|
|
# os.fchmod(writeDataToFile.fileno(), stat.S_IRUSR | stat.S_IWUSR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
writeDataToFile.close()
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
### update password:
|
|
|
|
|
|
|
|
|
|
data = open(mysql_virtual_email2email, "r").readlines()
|
|
|
|
|
|
|
|
|
|
writeDataToFile = open(mysql_virtual_email2email, "w")
|
|
|
|
|
|
|
|
|
|
dataWritten = "password = " + mysqlPassword + "\n"
|
|
|
|
|
|
|
|
|
|
for items in data:
|
|
|
|
|
if items.find("password") > -1:
|
|
|
|
|
writeDataToFile.writelines(dataWritten)
|
|
|
|
|
else:
|
|
|
|
|
writeDataToFile.writelines(items)
|
2018-11-14 13:36:34 +05:00
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
# if self.distro == ubuntu:
|
2018-11-12 14:53:10 -05:00
|
|
|
# os.fchmod(writeDataToFile.fileno(), stat.S_IRUSR | stat.S_IWUSR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
writeDataToFile.close()
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-07 15:14:54 -05:00
|
|
|
logging.InstallLog.writeToFile("Authentication for Postfix and Dovecot set.")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 18:51:57 +05:00
|
|
|
except BaseException, msg:
|
|
|
|
|
logging.InstallLog.writeToFile('[ERROR]' + str(msg) + " [setup_email_Passwords]")
|
2017-10-24 19:16:36 +05:00
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
return 1
|
|
|
|
|
|
2018-11-06 12:18:24 -05:00
|
|
|
def centos_lib_dir_to_ubuntu(self, filename, old, new):
|
2018-11-06 11:16:50 -05:00
|
|
|
try:
|
|
|
|
|
fd = open(filename, 'r')
|
|
|
|
|
lines = fd.readlines()
|
2018-11-06 11:50:48 -05:00
|
|
|
fd.close()
|
2018-11-06 11:16:50 -05:00
|
|
|
fd = open(filename, 'w')
|
2018-11-06 12:18:24 -05:00
|
|
|
centos_prefix = old
|
|
|
|
|
ubuntu_prefix = new
|
2018-11-06 11:16:50 -05:00
|
|
|
for line in lines:
|
|
|
|
|
index = line.find(centos_prefix)
|
|
|
|
|
if index != -1:
|
|
|
|
|
line = line[:index] + ubuntu_prefix + line[index + len(centos_prefix):]
|
|
|
|
|
fd.write(line)
|
|
|
|
|
fd.close()
|
|
|
|
|
except IOError as err:
|
2019-11-13 18:51:57 +05:00
|
|
|
self.stdOut("[ERROR] Error converting: " + filename + " from centos defaults to ubuntu defaults: " + str(err), 1,
|
2018-11-07 08:54:16 -05:00
|
|
|
1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:16:50 -05:00
|
|
|
def setup_postfix_davecot_config(self, mysql):
|
|
|
|
|
try:
|
|
|
|
|
logging.InstallLog.writeToFile("Configuring postfix and dovecot...")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:16:50 -05:00
|
|
|
os.chdir(self.cwd)
|
2018-11-06 00:19:58 +05:00
|
|
|
|
2018-11-06 11:16:50 -05:00
|
|
|
mysql_virtual_domains = "/etc/postfix/mysql-virtual_domains.cf"
|
|
|
|
|
mysql_virtual_forwardings = "/etc/postfix/mysql-virtual_forwardings.cf"
|
|
|
|
|
mysql_virtual_mailboxes = "/etc/postfix/mysql-virtual_mailboxes.cf"
|
|
|
|
|
mysql_virtual_email2email = "/etc/postfix/mysql-virtual_email2email.cf"
|
|
|
|
|
main = "/etc/postfix/main.cf"
|
|
|
|
|
master = "/etc/postfix/master.cf"
|
|
|
|
|
davecot = "/etc/dovecot/dovecot.conf"
|
|
|
|
|
davecotmysql = "/etc/dovecot/dovecot-sql.conf.ext"
|
2018-11-06 00:19:58 +05:00
|
|
|
|
2018-11-06 11:16:50 -05:00
|
|
|
if os.path.exists(mysql_virtual_domains):
|
|
|
|
|
os.remove(mysql_virtual_domains)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:16:50 -05:00
|
|
|
if os.path.exists(mysql_virtual_forwardings):
|
|
|
|
|
os.remove(mysql_virtual_forwardings)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:16:50 -05:00
|
|
|
if os.path.exists(mysql_virtual_mailboxes):
|
|
|
|
|
os.remove(mysql_virtual_mailboxes)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:16:50 -05:00
|
|
|
if os.path.exists(mysql_virtual_email2email):
|
|
|
|
|
os.remove(mysql_virtual_email2email)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:16:50 -05:00
|
|
|
if os.path.exists(main):
|
|
|
|
|
os.remove(main)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:16:50 -05:00
|
|
|
if os.path.exists(master):
|
|
|
|
|
os.remove(master)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:16:50 -05:00
|
|
|
if os.path.exists(davecot):
|
|
|
|
|
os.remove(davecot)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:16:50 -05:00
|
|
|
if os.path.exists(davecotmysql):
|
|
|
|
|
os.remove(davecotmysql)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
###############Getting SSL
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'openssl req -newkey rsa:1024 -new -nodes -x509 -days 3650 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /etc/postfix/key.pem -out /etc/postfix/cert.pem'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
##
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'openssl req -newkey rsa:1024 -new -nodes -x509 -days 3650 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /etc/dovecot/key.pem -out /etc/dovecot/cert.pem'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:16:50 -05:00
|
|
|
# Cleanup config files for ubuntu
|
|
|
|
|
if self.distro == ubuntu:
|
|
|
|
|
preFlightsChecks.stdOut("Cleanup postfix/dovecot config files", 1)
|
|
|
|
|
if mysql == 'Two':
|
2018-11-06 12:18:24 -05:00
|
|
|
self.centos_lib_dir_to_ubuntu("email-configs/master.cf", "/usr/libexec/", "/usr/lib/")
|
|
|
|
|
self.centos_lib_dir_to_ubuntu("email-configs/main.cf", "/usr/libexec/postfix",
|
|
|
|
|
"/usr/lib/postfix/sbin")
|
2018-11-06 11:16:50 -05:00
|
|
|
else:
|
2018-11-06 12:18:24 -05:00
|
|
|
self.centos_lib_dir_to_ubuntu("email-configs-one/master.cf", "/usr/libexec/", "/usr/lib/")
|
|
|
|
|
self.centos_lib_dir_to_ubuntu("email-configs-one/main.cf", "/usr/libexec/postfix",
|
|
|
|
|
"/usr/lib/postfix/sbin")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:16:50 -05:00
|
|
|
########### Copy config files
|
|
|
|
|
|
|
|
|
|
if mysql == 'Two':
|
2018-11-16 14:41:40 +05:00
|
|
|
shutil.copy("email-configs/mysql-virtual_domains.cf", "/etc/postfix/mysql-virtual_domains.cf")
|
2018-11-06 11:16:50 -05:00
|
|
|
shutil.copy("email-configs/mysql-virtual_forwardings.cf", "/etc/postfix/mysql-virtual_forwardings.cf")
|
|
|
|
|
shutil.copy("email-configs/mysql-virtual_mailboxes.cf", "/etc/postfix/mysql-virtual_mailboxes.cf")
|
|
|
|
|
shutil.copy("email-configs/mysql-virtual_email2email.cf", "/etc/postfix/mysql-virtual_email2email.cf")
|
|
|
|
|
shutil.copy("email-configs/main.cf", main)
|
2018-11-16 14:41:40 +05:00
|
|
|
shutil.copy("email-configs/master.cf", master)
|
|
|
|
|
shutil.copy("email-configs/dovecot.conf", davecot)
|
|
|
|
|
shutil.copy("email-configs/dovecot-sql.conf.ext", davecotmysql)
|
2018-11-06 11:16:50 -05:00
|
|
|
else:
|
|
|
|
|
shutil.copy("email-configs-one/mysql-virtual_domains.cf", "/etc/postfix/mysql-virtual_domains.cf")
|
2018-11-16 14:41:40 +05:00
|
|
|
shutil.copy("email-configs-one/mysql-virtual_forwardings.cf",
|
|
|
|
|
"/etc/postfix/mysql-virtual_forwardings.cf")
|
2018-11-06 11:16:50 -05:00
|
|
|
shutil.copy("email-configs-one/mysql-virtual_mailboxes.cf", "/etc/postfix/mysql-virtual_mailboxes.cf")
|
2018-11-16 14:41:40 +05:00
|
|
|
shutil.copy("email-configs-one/mysql-virtual_email2email.cf",
|
|
|
|
|
"/etc/postfix/mysql-virtual_email2email.cf")
|
2018-11-06 11:16:50 -05:00
|
|
|
shutil.copy("email-configs-one/main.cf", main)
|
|
|
|
|
shutil.copy("email-configs-one/master.cf", master)
|
|
|
|
|
shutil.copy("email-configs-one/dovecot.conf", davecot)
|
|
|
|
|
shutil.copy("email-configs-one/dovecot-sql.conf.ext", davecotmysql)
|
|
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
######################################## Permissions
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'chmod o= /etc/postfix/mysql-virtual_domains.cf'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
##
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'chmod o= /etc/postfix/mysql-virtual_forwardings.cf'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
##
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'chmod o= /etc/postfix/mysql-virtual_mailboxes.cf'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
##
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'chmod o= /etc/postfix/mysql-virtual_email2email.cf'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
##
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'chmod o= ' + main
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-11-06 11:31:20 -05:00
|
|
|
|
|
|
|
|
##
|
|
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'chmod o= ' + master
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
#######################################
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'chgrp postfix /etc/postfix/mysql-virtual_domains.cf'
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
##
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'chgrp postfix /etc/postfix/mysql-virtual_forwardings.cf'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-11-06 11:31:20 -05:00
|
|
|
##
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'chgrp postfix /etc/postfix/mysql-virtual_mailboxes.cf'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
##
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'chgrp postfix /etc/postfix/mysql-virtual_email2email.cf'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
##
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'chgrp postfix ' + main
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
##
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'chgrp postfix ' + master
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
######################################## users and groups
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'groupadd -g 5000 vmail'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
##
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'useradd -g vmail -u 5000 vmail -d /home/vmail -m'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
######################################## Further configurations
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
# hostname = socket.gethostname()
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
################################### Restart postix
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'systemctl enable postfix.service'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-02-04 21:15:30 +05:00
|
|
|
|
|
|
|
|
##
|
|
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'systemctl start postfix.service'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
######################################## Permissions
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
##
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'chmod o= /etc/dovecot/dovecot-sql.conf.ext'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
################################### Restart davecot
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'systemctl enable dovecot.service'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
##
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'systemctl start dovecot.service'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
##
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'systemctl restart postfix.service'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
## chaging permissions for main.cf
|
2017-12-09 22:30:10 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = "chmod 755 " + main
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-12-09 22:30:10 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
if self.distro == ubuntu:
|
|
|
|
|
command = "mkdir -p /etc/pki/dovecot/private/"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-11-06 13:03:12 +05:00
|
|
|
|
2018-11-07 12:14:38 +05:00
|
|
|
command = "mkdir -p /etc/pki/dovecot/certs/"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-11-07 12:14:38 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
command = "mkdir -p /etc/opendkim/keys/"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-11-06 13:03:12 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
command = "sed -i 's/auth_mechanisms = plain/#auth_mechanisms = plain/g' /etc/dovecot/conf.d/10-auth.conf"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-11-06 13:03:12 +05:00
|
|
|
|
2018-11-14 18:36:56 +05:00
|
|
|
## Ubuntu 18.10 ssl_dh for dovecot 2.3.2.1
|
|
|
|
|
|
|
|
|
|
if get_Ubuntu_release() == 18.10:
|
|
|
|
|
dovecotConf = '/etc/dovecot/dovecot.conf'
|
|
|
|
|
|
|
|
|
|
data = open(dovecotConf, 'r').readlines()
|
|
|
|
|
writeToFile = open(dovecotConf, 'w')
|
|
|
|
|
for items in data:
|
|
|
|
|
if items.find('ssl_key = <key.pem') > -1:
|
|
|
|
|
writeToFile.writelines(items)
|
|
|
|
|
writeToFile.writelines('ssl_dh = </usr/share/dovecot/dh.pem\n')
|
|
|
|
|
else:
|
|
|
|
|
writeToFile.writelines(items)
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
2018-11-07 12:14:38 +05:00
|
|
|
command = "systemctl restart dovecot"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-11-07 12:14:38 +05:00
|
|
|
|
2018-11-06 11:31:20 -05:00
|
|
|
logging.InstallLog.writeToFile("Postfix and Dovecot configured")
|
2019-11-13 18:51:57 +05:00
|
|
|
except BaseException, msg:
|
|
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [setup_postfix_davecot_config]")
|
2017-10-24 19:16:36 +05:00
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
def downoad_and_install_raindloop(self):
|
|
|
|
|
try:
|
2018-02-04 21:15:30 +05:00
|
|
|
#######
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-03-30 14:21:52 +05:00
|
|
|
if not os.path.exists("/usr/local/CyberCP/public"):
|
|
|
|
|
os.mkdir("/usr/local/CyberCP/public")
|
|
|
|
|
|
2019-04-15 15:54:23 +05:00
|
|
|
if os.path.exists("/usr/local/CyberCP/public/rainloop"):
|
|
|
|
|
return 0
|
|
|
|
|
|
2019-03-30 14:21:52 +05:00
|
|
|
os.chdir("/usr/local/CyberCP/public")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
command = 'wget https://www.rainloop.net/repository/webmail/rainloop-community-latest.zip'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
#############
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
command = 'unzip rainloop-community-latest.zip -d /usr/local/CyberCP/public/rainloop'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
os.remove("rainloop-community-latest.zip")
|
|
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
#######
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-03-30 14:21:52 +05:00
|
|
|
os.chdir("/usr/local/CyberCP/public/rainloop")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
command = 'find . -type d -exec chmod 755 {} \;'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
#############
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 13:08:26 +05:00
|
|
|
command = 'find . -type f -exec chmod 644 {} \;'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
######
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-04-15 15:54:23 +05:00
|
|
|
command = "mkdir -p /usr/local/lscp/cyberpanel/rainloop/data"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-04-15 15:54:23 +05:00
|
|
|
|
2019-08-24 13:17:00 +05:00
|
|
|
### Enable sub-folders
|
|
|
|
|
|
|
|
|
|
command = "mkdir -p /usr/local/lscp/cyberpanel/rainloop/data/_data_/_default_/configs/"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-08-24 13:17:00 +05:00
|
|
|
|
|
|
|
|
labsPath = '/usr/local/lscp/cyberpanel/rainloop/data/_data_/_default_/configs/application.ini'
|
|
|
|
|
|
|
|
|
|
labsData = """[labs]
|
|
|
|
|
imap_folder_list_limit = 0
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
writeToFile = open(labsPath, 'w')
|
|
|
|
|
writeToFile.write(labsData)
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
2019-07-16 23:23:16 +05:00
|
|
|
iPath = os.listdir('/usr/local/CyberCP/public/rainloop/rainloop/v/')
|
|
|
|
|
|
|
|
|
|
path = "/usr/local/CyberCP/public/rainloop/rainloop/v/%s/include.php" % (iPath[0])
|
2019-04-15 15:54:23 +05:00
|
|
|
|
|
|
|
|
data = open(path, 'r').readlines()
|
|
|
|
|
writeToFile = open(path, 'w')
|
|
|
|
|
|
|
|
|
|
for items in data:
|
|
|
|
|
if items.find("$sCustomDataPath = '';") > -1:
|
|
|
|
|
writeToFile.writelines(
|
|
|
|
|
" $sCustomDataPath = '/usr/local/lscp/cyberpanel/rainloop/data';\n")
|
|
|
|
|
else:
|
|
|
|
|
writeToFile.writelines(items)
|
|
|
|
|
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
2019-11-13 18:51:57 +05:00
|
|
|
except BaseException, msg:
|
|
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [downoad_and_install_rainloop]")
|
2017-10-24 19:16:36 +05:00
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
return 1
|
|
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
###################################################### Email setup ends!
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
def reStartLiteSpeed(self):
|
2019-11-13 16:13:52 +05:00
|
|
|
command = '%sbin/lswsctrl restart' % (self.server_root_path)
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-14 11:37:17 -05:00
|
|
|
def removeUfw(self):
|
|
|
|
|
try:
|
|
|
|
|
preFlightsChecks.stdOut("Checking to see if ufw firewall is installed (will be removed)", 1)
|
2019-03-26 16:19:03 +05:00
|
|
|
status = subprocess.check_output(shlex.split('ufw status'))
|
2018-11-14 11:37:17 -05:00
|
|
|
preFlightsChecks.stdOut("ufw current status: " + status + "...will be removed")
|
2018-11-21 14:50:27 +05:00
|
|
|
except BaseException, msg:
|
2019-11-13 18:51:57 +05:00
|
|
|
preFlightsChecks.stdOut("[ERROR] Expected access to ufw not available, do not need to remove it", 1)
|
2018-11-14 11:37:17 -05:00
|
|
|
return True
|
2018-11-21 14:50:27 +05:00
|
|
|
try:
|
|
|
|
|
preFlightsChecks.call('apt-get -y remove ufw', self.distro, '[remove_ufw]', 'Remove ufw firewall ' +
|
|
|
|
|
'(using firewalld)', 1, 0, os.EX_OSERR)
|
|
|
|
|
except:
|
|
|
|
|
pass
|
2018-11-14 11:37:17 -05:00
|
|
|
return True
|
|
|
|
|
|
2017-10-24 19:16:36 +05:00
|
|
|
def installFirewalld(self):
|
2018-11-14 11:37:17 -05:00
|
|
|
if self.distro == ubuntu:
|
|
|
|
|
self.removeUfw()
|
|
|
|
|
|
2017-10-24 19:16:36 +05:00
|
|
|
try:
|
2018-02-04 21:15:30 +05:00
|
|
|
preFlightsChecks.stdOut("Enabling Firewall!")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-12-20 16:18:16 +05:00
|
|
|
if self.distro == ubuntu:
|
|
|
|
|
command = 'apt-get -y install firewalld'
|
|
|
|
|
else:
|
|
|
|
|
command = 'yum -y install firewalld'
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
######
|
2018-11-14 11:37:17 -05:00
|
|
|
if self.distro == centos:
|
2018-11-16 14:41:40 +05:00
|
|
|
# Not available in ubuntu
|
2018-11-14 11:37:17 -05:00
|
|
|
command = 'systemctl restart dbus'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-07-19 22:38:37 +05:00
|
|
|
|
2018-07-28 01:25:51 +05:00
|
|
|
command = 'systemctl restart systemd-logind'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-12-20 16:18:16 +05:00
|
|
|
command = 'systemctl start firewalld'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
##########
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-12-20 16:18:16 +05:00
|
|
|
command = 'systemctl enable firewalld'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
FirewallUtilities.addRule("tcp", "8090")
|
2017-10-24 19:16:36 +05:00
|
|
|
FirewallUtilities.addRule("tcp", "80")
|
|
|
|
|
FirewallUtilities.addRule("tcp", "443")
|
|
|
|
|
FirewallUtilities.addRule("tcp", "21")
|
2019-03-26 16:19:03 +05:00
|
|
|
FirewallUtilities.addRule("tcp", "25")
|
|
|
|
|
FirewallUtilities.addRule("tcp", "587")
|
|
|
|
|
FirewallUtilities.addRule("tcp", "465")
|
|
|
|
|
FirewallUtilities.addRule("tcp", "110")
|
|
|
|
|
FirewallUtilities.addRule("tcp", "143")
|
|
|
|
|
FirewallUtilities.addRule("tcp", "993")
|
|
|
|
|
FirewallUtilities.addRule("udp", "53")
|
|
|
|
|
FirewallUtilities.addRule("tcp", "53")
|
2019-07-24 22:37:37 +05:00
|
|
|
FirewallUtilities.addRule("udp", "443")
|
2017-12-09 22:30:10 +05:00
|
|
|
FirewallUtilities.addRule("tcp", "40110-40210")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
logging.InstallLog.writeToFile("FirewallD installed and configured!")
|
|
|
|
|
preFlightsChecks.stdOut("FirewallD installed and configured!")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
except OSError, msg:
|
2019-11-13 18:51:57 +05:00
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [installFirewalld]")
|
2017-10-24 19:16:36 +05:00
|
|
|
return 0
|
|
|
|
|
except ValueError, msg:
|
2019-11-13 18:51:57 +05:00
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [installFirewalld]")
|
2017-10-24 19:16:36 +05:00
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
return 1
|
|
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
## from here
|
|
|
|
|
|
2019-03-26 16:19:03 +05:00
|
|
|
def installLSCPD(self):
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
|
|
logging.InstallLog.writeToFile("Starting LSCPD installation..")
|
|
|
|
|
|
|
|
|
|
os.chdir(self.cwd)
|
|
|
|
|
|
|
|
|
|
if self.distro == ubuntu:
|
|
|
|
|
command = "apt-get -y install gcc g++ make autoconf rcs"
|
|
|
|
|
else:
|
|
|
|
|
command = 'yum -y install gcc gcc-c++ make autoconf glibc rcs'
|
|
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
if self.distro == ubuntu:
|
|
|
|
|
command = "apt-get -y install libpcre3 libpcre3-dev openssl libexpat1 libexpat1-dev libgeoip-dev" \
|
|
|
|
|
" zlib1g zlib1g-dev libudns-dev whichman curl"
|
|
|
|
|
else:
|
|
|
|
|
command = 'yum -y install pcre-devel openssl-devel expat-devel geoip-devel zlib-devel udns-devel' \
|
|
|
|
|
' which curl'
|
|
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
command = 'tar zxf lscp.tar.gz -C /usr/local/'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
2019-04-15 15:54:23 +05:00
|
|
|
command = 'openssl req -newkey rsa:1024 -new -nodes -x509 -days 3650 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /usr/local/lscp/conf/key.pem -out /usr/local/lscp/conf/cert.pem'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
os.remove("/usr/local/lscp/fcgi-bin/lsphp")
|
2019-10-09 12:43:38 +05:00
|
|
|
shutil.copy("/usr/local/lsws/lsphp70/bin/lsphp", "/usr/local/lscp/fcgi-bin/lsphp")
|
2019-03-26 16:19:03 +05:00
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
if self.distro == centos:
|
|
|
|
|
command = 'adduser lscpd -M -d /usr/local/lscp'
|
|
|
|
|
else:
|
|
|
|
|
command = 'useradd lscpd -M -d /usr/local/lscp'
|
|
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
if self.distro == centos:
|
|
|
|
|
command = 'groupadd lscpd'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-26 16:19:03 +05:00
|
|
|
# Added group in useradd for Ubuntu
|
|
|
|
|
|
|
|
|
|
command = 'usermod -a -G lscpd lscpd'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
command = 'usermod -a -G lsadm lscpd'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-04-15 15:54:23 +05:00
|
|
|
try:
|
|
|
|
|
os.mkdir('/usr/local/lscp/cyberpanel')
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
try:
|
|
|
|
|
os.mkdir('/usr/local/lscp/cyberpanel/logs')
|
|
|
|
|
except:
|
|
|
|
|
pass
|
2019-03-26 16:19:03 +05:00
|
|
|
|
2019-10-09 12:43:38 +05:00
|
|
|
# self.setupComodoRules()
|
2019-03-26 16:19:03 +05:00
|
|
|
self.setupPort()
|
2019-03-30 14:21:52 +05:00
|
|
|
self.setupPythonWSGI()
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
logging.InstallLog.writeToFile("LSCPD successfully installed!")
|
|
|
|
|
|
|
|
|
|
except BaseException, msg:
|
2019-11-13 18:51:57 +05:00
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [installLSCPD]")
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
def setupComodoRules(self):
|
|
|
|
|
try:
|
|
|
|
|
os.chdir(self.cwd)
|
|
|
|
|
|
|
|
|
|
extractLocation = "/usr/local/lscp/modsec"
|
|
|
|
|
|
|
|
|
|
command = "mkdir -p /usr/local/lscp/modsec"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
if os.path.exists('comodo.tar.gz'):
|
|
|
|
|
os.remove('comodo.tar.gz')
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
command = "wget https://cyberpanel.net/modsec/comodo.tar.gz"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
command = "tar -zxf comodo.tar.gz -C /usr/local/lscp/modsec"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
###
|
|
|
|
|
|
|
|
|
|
modsecConfPath = "/usr/local/lscp/conf/modsec.conf"
|
|
|
|
|
|
|
|
|
|
modsecConfig = """
|
|
|
|
|
module mod_security {
|
2019-04-15 15:54:23 +05:00
|
|
|
ls_enabled 0
|
2019-03-26 16:19:03 +05:00
|
|
|
modsecurity on
|
|
|
|
|
modsecurity_rules `
|
|
|
|
|
SecDebugLogLevel 0
|
|
|
|
|
SecDebugLog /usr/local/lscp/logs/modsec.log
|
|
|
|
|
SecAuditEngine on
|
|
|
|
|
SecAuditLogRelevantStatus "^(?:5|4(?!04))"
|
|
|
|
|
SecAuditLogParts AFH
|
|
|
|
|
SecAuditLogType Serial
|
|
|
|
|
SecAuditLog /usr/local/lscp/logs/auditmodsec.log
|
2019-03-30 14:21:52 +05:00
|
|
|
SecRuleEngine Off
|
2019-03-26 16:19:03 +05:00
|
|
|
`
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/modsecurity.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/00_Init_Initialization.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/01_Init_AppsInitialization.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/02_Global_Generic.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/03_Global_Agents.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/04_Global_Domains.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/05_Global_Backdoor.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/06_XSS_XSS.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/07_Global_Other.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/08_Bruteforce_Bruteforce.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/09_HTTP_HTTP.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/10_HTTP_HTTPDoS.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/11_HTTP_Protocol.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/12_HTTP_Request.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/13_Outgoing_FilterGen.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/14_Outgoing_FilterASP.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/15_Outgoing_FilterPHP.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/16_Outgoing_FilterSQL.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/17_Outgoing_FilterOther.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/18_Outgoing_FilterInFrame.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/19_Outgoing_FiltersEnd.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/20_PHP_PHPGen.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/21_SQL_SQLi.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/22_Apps_Joomla.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/23_Apps_JComponent.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/24_Apps_WordPress.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/25_Apps_WPPlugin.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/26_Apps_WHMCS.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/27_Apps_Drupal.conf
|
|
|
|
|
modsecurity_rules_file /usr/local/lscp/modsec/comodo/28_Apps_OtherApps.conf
|
|
|
|
|
}
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
writeToFile = open(modsecConfPath, 'w')
|
|
|
|
|
writeToFile.write(modsecConfig)
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
|
|
|
|
###
|
|
|
|
|
|
|
|
|
|
command = "chown -R lscpd:lscpd /usr/local/lscp/modsec"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
except BaseException, msg:
|
2019-11-13 18:51:57 +05:00
|
|
|
logging.InstallLog.writeToFile("[ERROR]" + str(msg))
|
2019-03-26 16:19:03 +05:00
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
def setupPort(self):
|
|
|
|
|
try:
|
|
|
|
|
###
|
|
|
|
|
bindConfPath = "/usr/local/lscp/conf/bind.conf"
|
|
|
|
|
|
|
|
|
|
writeToFile = open(bindConfPath, 'w')
|
|
|
|
|
writeToFile.write("*:" + self.port)
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
|
|
|
|
except:
|
|
|
|
|
return 0
|
|
|
|
|
|
2019-03-30 14:21:52 +05:00
|
|
|
def setupPythonWSGI(self):
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
|
|
command = "wget http://www.litespeedtech.com/packages/lsapi/wsgi-lsapi-1.4.tgz"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-30 14:21:52 +05:00
|
|
|
|
|
|
|
|
command = "tar xf wsgi-lsapi-1.4.tgz"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-30 14:21:52 +05:00
|
|
|
|
|
|
|
|
os.chdir("wsgi-lsapi-1.4")
|
|
|
|
|
|
|
|
|
|
command = "python ./configure.py"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-30 14:21:52 +05:00
|
|
|
|
|
|
|
|
command = "make"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-30 14:21:52 +05:00
|
|
|
|
|
|
|
|
command = "cp lswsgi /usr/local/CyberCP/bin/"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-30 14:21:52 +05:00
|
|
|
|
|
|
|
|
os.chdir(self.cwd)
|
|
|
|
|
|
|
|
|
|
except:
|
|
|
|
|
return 0
|
|
|
|
|
|
2017-10-24 19:16:36 +05:00
|
|
|
def setupLSCPDDaemon(self):
|
|
|
|
|
try:
|
|
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
preFlightsChecks.stdOut("Trying to setup LSCPD Daemon!")
|
|
|
|
|
logging.InstallLog.writeToFile("Trying to setup LSCPD Daemon!")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
os.chdir(self.cwd)
|
|
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
shutil.copy("lscpd/lscpd.service", "/etc/systemd/system/lscpd.service")
|
|
|
|
|
shutil.copy("lscpd/lscpdctrl", "/usr/local/lscp/bin/lscpdctrl")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
##
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'chmod +x /usr/local/lscp/bin/lscpdctrl'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
##
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-03-30 14:21:52 +05:00
|
|
|
path = "/usr/local/lscpd/admin/"
|
|
|
|
|
|
|
|
|
|
command = "mkdir -p " + path
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-30 14:21:52 +05:00
|
|
|
|
|
|
|
|
path = "/usr/local/CyberCP/conf/"
|
|
|
|
|
command = "mkdir -p " + path
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-30 14:21:52 +05:00
|
|
|
|
|
|
|
|
path = "/usr/local/CyberCP/conf/token_env"
|
|
|
|
|
writeToFile = open(path, "w")
|
|
|
|
|
writeToFile.write("abc\n")
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
|
|
|
|
command = "chmod 600 " + path
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
##
|
|
|
|
|
command = 'systemctl enable lscpd.service'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-11-06 13:03:12 +05:00
|
|
|
##
|
|
|
|
|
count = 0
|
|
|
|
|
|
|
|
|
|
# In Ubuntu, the library that lscpd looks for is libpcre.so.1, but the one it installs is libpcre.so.3...
|
|
|
|
|
if self.distro == ubuntu:
|
|
|
|
|
command = 'ln -s /lib/x86_64-linux-gnu/libpcre.so.3 /lib/x86_64-linux-gnu/libpcre.so.1'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
##
|
|
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'systemctl start lscpd'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
preFlightsChecks.stdOut("LSCPD Daemon Set!")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
logging.InstallLog.writeToFile("LSCPD Daemon Set!")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
|
2019-11-13 18:51:57 +05:00
|
|
|
except BaseException, msg:
|
|
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [setupLSCPDDaemon]")
|
2017-10-24 19:16:36 +05:00
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
def setup_cron(self):
|
|
|
|
|
|
|
|
|
|
try:
|
2017-11-05 21:07:12 +05:00
|
|
|
## first install crontab
|
|
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
if self.distro == centos:
|
|
|
|
|
command = 'yum install cronie -y'
|
|
|
|
|
else:
|
|
|
|
|
command = 'apt-get -y install cron'
|
2017-11-05 21:07:12 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-11-05 21:07:12 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
if self.distro == centos:
|
|
|
|
|
command = 'systemctl enable crond'
|
|
|
|
|
else:
|
|
|
|
|
command = 'systemctl enable cron'
|
2018-11-06 00:19:58 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
if self.distro == centos:
|
|
|
|
|
command = 'systemctl start crond'
|
|
|
|
|
else:
|
|
|
|
|
command = 'systemctl start cron'
|
2018-02-04 21:15:30 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-11-05 21:07:12 +05:00
|
|
|
|
|
|
|
|
##
|
|
|
|
|
|
2017-12-09 22:30:10 +05:00
|
|
|
cronFile = open("/etc/crontab", "a")
|
|
|
|
|
cronFile.writelines("0 * * * * root python /usr/local/CyberCP/plogical/findBWUsage.py" + "\n")
|
2018-06-30 15:29:56 +05:00
|
|
|
cronFile.writelines("0 * * * * root /usr/local/CyberCP/postfixSenderPolicy/client.py hourlyCleanup" + "\n")
|
|
|
|
|
cronFile.writelines("0 0 1 * * root /usr/local/CyberCP/postfixSenderPolicy/client.py monthlyCleanup" + "\n")
|
2019-03-21 23:26:42 +05:00
|
|
|
cronFile.writelines("0 2 * * * root /usr/local/CyberCP/plogical/upgradeCritical.py" + "\n")
|
2019-12-04 14:40:59 +05:00
|
|
|
cronFile.writelines("/usr/local/CyberCP/bin/python2 /usr/local/CyberCP/plogical/renew.py\n")
|
2017-10-24 19:16:36 +05:00
|
|
|
cronFile.close()
|
|
|
|
|
|
|
|
|
|
command = 'chmod +x /usr/local/CyberCP/plogical/findBWUsage.py'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-03-21 23:26:42 +05:00
|
|
|
|
|
|
|
|
command = 'chmod +x /usr/local/CyberCP/plogical/upgradeCritical.py'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-06-30 15:29:56 +05:00
|
|
|
command = 'chmod +x /usr/local/CyberCP/postfixSenderPolicy/client.py'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
if self.distro == centos:
|
|
|
|
|
command = 'systemctl restart crond.service'
|
2017-10-24 19:16:36 +05:00
|
|
|
else:
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'systemctl restart cron.service'
|
2018-11-06 00:19:58 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 18:51:57 +05:00
|
|
|
except BaseException, msg:
|
|
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [setup_cron]")
|
2017-10-24 19:16:36 +05:00
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
def install_default_keys(self):
|
|
|
|
|
try:
|
|
|
|
|
path = "/root/.ssh"
|
|
|
|
|
|
|
|
|
|
if not os.path.exists(path):
|
|
|
|
|
os.mkdir(path)
|
|
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = "ssh-keygen -f /root/.ssh/cyberpanel -t rsa -N ''"
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-11-13 18:51:57 +05:00
|
|
|
|
|
|
|
|
except BaseException, msg:
|
|
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [install_default_keys]")
|
2017-10-24 19:16:36 +05:00
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
def install_rsync(self):
|
|
|
|
|
try:
|
2019-11-13 16:13:52 +05:00
|
|
|
if self.distro == centos:
|
|
|
|
|
command = 'yum -y install rsync'
|
|
|
|
|
else:
|
|
|
|
|
command = 'apt-get -y install rsync'
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-11-13 18:51:57 +05:00
|
|
|
|
|
|
|
|
except BaseException, msg:
|
|
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [install_rsync]")
|
2017-10-24 19:16:36 +05:00
|
|
|
return 0
|
|
|
|
|
|
2017-12-16 11:59:47 +05:00
|
|
|
def test_Requests(self):
|
|
|
|
|
try:
|
|
|
|
|
import requests
|
|
|
|
|
getVersion = requests.get('https://cyberpanel.net/version.txt')
|
|
|
|
|
latest = getVersion.json()
|
2018-11-16 14:41:40 +05:00
|
|
|
except BaseException, msg:
|
2017-12-16 11:59:47 +05:00
|
|
|
|
2018-03-08 22:19:23 +05:00
|
|
|
command = "pip uninstall --yes urllib3"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-03-08 22:19:23 +05:00
|
|
|
|
2017-12-16 11:59:47 +05:00
|
|
|
command = "pip uninstall --yes requests"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-03-08 22:19:23 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = "pip install http://mirror.cyberpanel.net/urllib3-1.22.tar.gz"
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-03-08 22:19:23 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = "pip install http://mirror.cyberpanel.net/requests-2.18.4.tar.gz"
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2017-12-16 11:59:47 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
def installation_successfull(self):
|
|
|
|
|
print("###################################################################")
|
|
|
|
|
print(" CyberPanel Successfully Installed ")
|
|
|
|
|
print(" ")
|
|
|
|
|
|
|
|
|
|
print(" ")
|
|
|
|
|
print(" ")
|
|
|
|
|
|
|
|
|
|
print(" Visit: https://" + self.ipAddr + ":8090 ")
|
|
|
|
|
print(" Username: admin ")
|
|
|
|
|
print(" Password: 1234567 ")
|
2018-11-06 00:19:58 +05:00
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
print("###################################################################")
|
|
|
|
|
|
2018-03-26 20:39:56 +05:00
|
|
|
def modSecPreReqs(self):
|
|
|
|
|
try:
|
|
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
pathToRemoveGarbageFile = os.path.join(self.server_root_path, "modules/mod_security.so")
|
2018-03-26 20:39:56 +05:00
|
|
|
os.remove(pathToRemoveGarbageFile)
|
|
|
|
|
|
|
|
|
|
except OSError, msg:
|
2019-11-13 18:51:57 +05:00
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [modSecPreReqs]")
|
2018-03-26 20:39:56 +05:00
|
|
|
return 0
|
|
|
|
|
|
2018-05-01 00:49:47 +05:00
|
|
|
def installOpenDKIM(self):
|
|
|
|
|
try:
|
2019-11-13 16:13:52 +05:00
|
|
|
if self.distro == centos:
|
|
|
|
|
command = 'yum -y install opendkim'
|
|
|
|
|
else:
|
|
|
|
|
command = 'apt-get -y install opendkim'
|
2018-11-06 00:19:58 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-05-01 00:49:47 +05:00
|
|
|
|
2018-11-07 12:14:38 +05:00
|
|
|
if self.distro == ubuntu:
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'apt install opendkim-tools'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-11-06 13:03:12 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = 'mkdir -p /etc/opendkim/keys/'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-11-06 13:03:12 +05:00
|
|
|
|
2019-11-13 18:51:57 +05:00
|
|
|
except BaseException, msg:
|
|
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [installOpenDKIM]")
|
2018-05-01 00:49:47 +05:00
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
def configureOpenDKIM(self):
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
|
|
## Configure OpenDKIM specific settings
|
|
|
|
|
|
|
|
|
|
openDKIMConfigurePath = "/etc/opendkim.conf"
|
|
|
|
|
|
|
|
|
|
configData = """
|
|
|
|
|
Mode sv
|
|
|
|
|
Canonicalization relaxed/simple
|
|
|
|
|
KeyTable refile:/etc/opendkim/KeyTable
|
|
|
|
|
SigningTable refile:/etc/opendkim/SigningTable
|
|
|
|
|
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
|
|
|
|
|
InternalHosts refile:/etc/opendkim/TrustedHosts
|
|
|
|
|
"""
|
|
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
writeToFile = open(openDKIMConfigurePath, 'a')
|
2018-05-01 00:49:47 +05:00
|
|
|
writeToFile.write(configData)
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
|
|
|
|
## Configure postfix specific settings
|
|
|
|
|
|
|
|
|
|
postfixFilePath = "/etc/postfix/main.cf"
|
|
|
|
|
|
|
|
|
|
configData = """
|
|
|
|
|
smtpd_milters = inet:127.0.0.1:8891
|
|
|
|
|
non_smtpd_milters = $smtpd_milters
|
|
|
|
|
milter_default_action = accept
|
|
|
|
|
"""
|
|
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
writeToFile = open(postfixFilePath, 'a')
|
2018-05-01 00:49:47 +05:00
|
|
|
writeToFile.write(configData)
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
2018-11-14 18:36:56 +05:00
|
|
|
if self.distro == ubuntu:
|
|
|
|
|
data = open(openDKIMConfigurePath, 'r').readlines()
|
|
|
|
|
writeToFile = open(openDKIMConfigurePath, 'w')
|
|
|
|
|
for items in data:
|
|
|
|
|
if items.find('Socket') > -1 and items.find('local:') and items[0] != '#':
|
|
|
|
|
writeToFile.writelines('Socket inet:8891@localhost\n')
|
|
|
|
|
else:
|
|
|
|
|
writeToFile.writelines(items)
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
2018-05-01 00:49:47 +05:00
|
|
|
#### Restarting Postfix and OpenDKIM
|
|
|
|
|
|
|
|
|
|
command = "systemctl start opendkim"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-05-01 00:49:47 +05:00
|
|
|
|
|
|
|
|
command = "systemctl enable opendkim"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-05-01 00:49:47 +05:00
|
|
|
|
|
|
|
|
##
|
|
|
|
|
|
|
|
|
|
command = "systemctl start postfix"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-05-01 00:49:47 +05:00
|
|
|
|
2019-11-13 18:51:57 +05:00
|
|
|
|
|
|
|
|
except BaseException, msg:
|
|
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [configureOpenDKIM]")
|
2018-05-01 00:49:47 +05:00
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
return 1
|
|
|
|
|
|
2018-06-05 00:53:45 +05:00
|
|
|
def setupCLI(self):
|
2019-11-13 16:13:52 +05:00
|
|
|
command = "ln -s /usr/local/CyberCP/cli/cyberPanel.py /usr/bin/cyberpanel"
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-06-05 00:53:45 +05:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = "chmod +x /usr/local/CyberCP/cli/cyberPanel.py"
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-06-05 00:53:45 +05:00
|
|
|
|
2018-07-13 21:45:40 +05:00
|
|
|
def setupPHPAndComposer(self):
|
|
|
|
|
try:
|
2018-11-06 00:19:58 +05:00
|
|
|
|
2018-10-31 14:42:42 -04:00
|
|
|
if self.distro == ubuntu:
|
2018-10-31 14:57:51 -04:00
|
|
|
if not os.access('/usr/local/lsws/lsphp70/bin/php', os.R_OK):
|
|
|
|
|
if os.access('/usr/local/lsws/lsphp70/bin/php7.0', os.R_OK):
|
2018-10-31 14:42:42 -04:00
|
|
|
os.symlink('/usr/local/lsws/lsphp70/bin/php7.0', '/usr/local/lsws/lsphp70/bin/php')
|
2018-10-31 14:57:51 -04:00
|
|
|
if not os.access('/usr/local/lsws/lsphp71/bin/php', os.R_OK):
|
|
|
|
|
if os.access('/usr/local/lsws/lsphp71/bin/php7.1', os.R_OK):
|
2018-10-31 14:42:42 -04:00
|
|
|
os.symlink('/usr/local/lsws/lsphp71/bin/php7.1', '/usr/local/lsws/lsphp71/bin/php')
|
2018-10-31 14:57:51 -04:00
|
|
|
if not os.access('/usr/local/lsws/lsphp72/bin/php', os.R_OK):
|
|
|
|
|
if os.access('/usr/local/lsws/lsphp72/bin/php7.2', os.R_OK):
|
2018-10-31 14:42:42 -04:00
|
|
|
os.symlink('/usr/local/lsws/lsphp72/bin/php7.2', '/usr/local/lsws/lsphp72/bin/php')
|
|
|
|
|
|
2018-07-13 21:45:40 +05:00
|
|
|
command = "cp /usr/local/lsws/lsphp71/bin/php /usr/bin/"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-07-13 21:45:40 +05:00
|
|
|
|
|
|
|
|
os.chdir(self.cwd)
|
|
|
|
|
|
2019-03-21 23:26:42 +05:00
|
|
|
command = "chmod +x composer.sh"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-07-13 21:45:40 +05:00
|
|
|
|
2019-03-21 23:26:42 +05:00
|
|
|
command = "./composer.sh"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2018-07-13 21:45:40 +05:00
|
|
|
|
|
|
|
|
except OSError, msg:
|
2019-11-13 18:51:57 +05:00
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [setupPHPAndComposer]")
|
2018-07-13 21:45:40 +05:00
|
|
|
return 0
|
|
|
|
|
|
2018-06-27 00:16:50 +05:00
|
|
|
@staticmethod
|
2018-11-02 09:17:16 -04:00
|
|
|
def installOne(package):
|
2019-03-26 16:19:03 +05:00
|
|
|
res = subprocess.call(shlex.split('apt-get -y install ' + package))
|
2018-11-02 09:17:16 -04:00
|
|
|
if res != 0:
|
|
|
|
|
preFlightsChecks.stdOut("Error #" + str(res) + ' installing:' + package + '. This may not be an issue ' \
|
2018-11-06 00:19:58 +05:00
|
|
|
'but may affect installation of something later',
|
|
|
|
|
1)
|
2018-11-02 09:17:16 -04:00
|
|
|
|
2018-11-06 00:19:58 +05:00
|
|
|
return res # Though probably not used
|
2018-11-02 09:17:16 -04:00
|
|
|
|
2018-06-27 00:16:50 +05:00
|
|
|
@staticmethod
|
2018-10-31 11:53:03 -04:00
|
|
|
def setupVirtualEnv(distro):
|
2018-06-27 00:16:50 +05:00
|
|
|
try:
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
|
|
|
|
|
count = 0
|
2018-11-02 09:17:16 -04:00
|
|
|
if distro == ubuntu:
|
|
|
|
|
# You can't install all at once! So install one at a time.
|
|
|
|
|
preFlightsChecks.stdOut("Installing python prerequisites", 1)
|
|
|
|
|
preFlightsChecks.installOne('libcurl4-gnutls-dev')
|
|
|
|
|
preFlightsChecks.installOne('libgnutls-dev')
|
|
|
|
|
preFlightsChecks.installOne('libgcrypt20-dev')
|
|
|
|
|
preFlightsChecks.installOne('libattr1')
|
|
|
|
|
preFlightsChecks.installOne('libattr1-dev')
|
|
|
|
|
preFlightsChecks.installOne('liblzma-dev')
|
|
|
|
|
preFlightsChecks.installOne('libgpgme-dev')
|
|
|
|
|
preFlightsChecks.installOne('libmariadbclient-dev')
|
|
|
|
|
preFlightsChecks.installOne('libcurl4-gnutls-dev')
|
|
|
|
|
preFlightsChecks.installOne('libssl-dev')
|
|
|
|
|
preFlightsChecks.installOne('nghttp2')
|
|
|
|
|
preFlightsChecks.installOne('libnghttp2-dev')
|
|
|
|
|
preFlightsChecks.installOne('idn2')
|
|
|
|
|
preFlightsChecks.installOne('libidn2-dev')
|
|
|
|
|
preFlightsChecks.installOne('libidn2-0-dev')
|
|
|
|
|
preFlightsChecks.installOne('librtmp-dev')
|
|
|
|
|
preFlightsChecks.installOne('libpsl-dev')
|
|
|
|
|
preFlightsChecks.installOne('nettle-dev')
|
|
|
|
|
preFlightsChecks.installOne('libgnutls28-dev')
|
|
|
|
|
preFlightsChecks.installOne('libldap2-dev')
|
|
|
|
|
preFlightsChecks.installOne('libgssapi-krb5-2')
|
|
|
|
|
preFlightsChecks.installOne('libk5crypto3')
|
|
|
|
|
preFlightsChecks.installOne('libkrb5-dev')
|
|
|
|
|
preFlightsChecks.installOne('libcomerr2')
|
|
|
|
|
preFlightsChecks.installOne('libldap2-dev')
|
|
|
|
|
preFlightsChecks.installOne('python-gpg')
|
|
|
|
|
preFlightsChecks.installOne('python-gpgme')
|
|
|
|
|
else:
|
2019-11-13 16:13:52 +05:00
|
|
|
command = "yum install -y libattr-devel xz-devel gpgme-devel mariadb-devel curl-devel"
|
|
|
|
|
preFlightsChecks.call(command, distro, command, command, 1, 1, os.EX_OSERR)
|
2018-06-27 00:16:50 +05:00
|
|
|
|
|
|
|
|
##
|
|
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = "pip install virtualenv"
|
|
|
|
|
preFlightsChecks.call(command, distro, command, command, 1, 1, os.EX_OSERR)
|
2018-06-27 00:16:50 +05:00
|
|
|
|
|
|
|
|
####
|
|
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = "virtualenv --system-site-packages /usr/local/CyberCP"
|
|
|
|
|
preFlightsChecks.call(command, distro, command, command, 1, 1, os.EX_OSERR)
|
2018-06-27 00:16:50 +05:00
|
|
|
|
|
|
|
|
##
|
|
|
|
|
|
|
|
|
|
env_path = '/usr/local/CyberCP'
|
2019-03-26 16:19:03 +05:00
|
|
|
subprocess.call(['virtualenv', env_path])
|
2018-06-27 00:16:50 +05:00
|
|
|
activate_this = os.path.join(env_path, 'bin', 'activate_this.py')
|
|
|
|
|
execfile(activate_this, dict(__file__=activate_this))
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
|
2018-11-01 16:10:29 -04:00
|
|
|
install_file = '/usr/local/CyberCP/requirments.txt'
|
2018-11-02 11:53:08 -04:00
|
|
|
if distro == ubuntu and get_Ubuntu_release() < 18.04:
|
|
|
|
|
install_file_new = '/usr/local/CyberCP/requirements.txt'
|
2018-11-06 00:19:58 +05:00
|
|
|
fd = open(install_file, 'r')
|
|
|
|
|
fd_new = open(install_file_new, 'w')
|
2018-11-02 11:53:08 -04:00
|
|
|
lines = fd.readlines()
|
|
|
|
|
for line in lines:
|
2018-11-02 12:09:30 -04:00
|
|
|
if line[:6] != 'pycurl' and line[:7] != 'pygpgme':
|
2018-11-02 11:53:08 -04:00
|
|
|
fd_new.write(line)
|
|
|
|
|
fd.close()
|
|
|
|
|
fd_new.close()
|
|
|
|
|
preFlightsChecks.stdOut("Install updated " + install_file_new, 1)
|
|
|
|
|
install_file = install_file_new
|
2018-11-01 16:10:29 -04:00
|
|
|
|
2019-11-13 16:13:52 +05:00
|
|
|
command = "pip install --ignore-installed -r " + install_file
|
|
|
|
|
preFlightsChecks.call(command, distro, command, command, 1, 1, os.EX_OSERR)
|
2018-06-27 00:16:50 +05:00
|
|
|
|
2018-07-05 15:22:48 +05:00
|
|
|
command = "virtualenv --system-site-packages /usr/local/CyberCP"
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, distro, command, command, 1, 0, os.EX_OSERR)
|
2018-07-05 15:22:48 +05:00
|
|
|
|
2018-06-27 00:16:50 +05:00
|
|
|
except OSError, msg:
|
2019-11-13 18:51:57 +05:00
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [setupVirtualEnv]")
|
2018-06-27 00:16:50 +05:00
|
|
|
return 0
|
|
|
|
|
|
2018-07-23 22:11:42 +05:00
|
|
|
@staticmethod
|
|
|
|
|
def enableDisableDNS(state):
|
|
|
|
|
try:
|
|
|
|
|
servicePath = '/home/cyberpanel/powerdns'
|
|
|
|
|
|
|
|
|
|
if state == 'Off':
|
|
|
|
|
|
|
|
|
|
command = 'sudo systemctl stop pdns'
|
2019-03-26 16:19:03 +05:00
|
|
|
subprocess.call(shlex.split(command))
|
2018-07-23 22:11:42 +05:00
|
|
|
|
|
|
|
|
command = 'sudo systemctl disable pdns'
|
2019-03-26 16:19:03 +05:00
|
|
|
subprocess.call(shlex.split(command))
|
2018-07-23 22:11:42 +05:00
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
os.remove(servicePath)
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
writeToFile = open(servicePath, 'w+')
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
|
|
|
|
except OSError, msg:
|
2019-11-13 18:51:57 +05:00
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [enableDisableDNS]")
|
2018-07-23 22:11:42 +05:00
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def enableDisableEmail(state):
|
|
|
|
|
try:
|
|
|
|
|
servicePath = '/home/cyberpanel/postfix'
|
|
|
|
|
|
|
|
|
|
if state == 'Off':
|
|
|
|
|
|
|
|
|
|
command = 'sudo systemctl stop postfix'
|
2019-03-26 16:19:03 +05:00
|
|
|
subprocess.call(shlex.split(command))
|
2018-07-23 22:11:42 +05:00
|
|
|
|
|
|
|
|
command = 'sudo systemctl disable postfix'
|
2019-03-26 16:19:03 +05:00
|
|
|
subprocess.call(shlex.split(command))
|
2018-07-23 22:11:42 +05:00
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
os.remove(servicePath)
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
writeToFile = open(servicePath, 'w+')
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
|
|
|
|
except OSError, msg:
|
2019-11-13 18:51:57 +05:00
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [enableDisableEmail]")
|
2018-07-23 22:11:42 +05:00
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
2018-11-07 08:54:16 -05:00
|
|
|
def enableDisableFTP(state, distro):
|
2018-07-23 22:11:42 +05:00
|
|
|
try:
|
|
|
|
|
servicePath = '/home/cyberpanel/pureftpd'
|
|
|
|
|
|
|
|
|
|
if state == 'Off':
|
|
|
|
|
|
2018-11-07 09:20:05 -05:00
|
|
|
command = 'sudo systemctl stop ' + preFlightsChecks.pureFTPDServiceName(distro)
|
2019-03-26 16:19:03 +05:00
|
|
|
subprocess.call(shlex.split(command))
|
2018-07-23 22:11:42 +05:00
|
|
|
|
2018-11-07 09:20:05 -05:00
|
|
|
command = 'sudo systemctl disable ' + preFlightsChecks.pureFTPDServiceName(distro)
|
2019-03-26 16:19:03 +05:00
|
|
|
subprocess.call(shlex.split(command))
|
2018-07-23 22:11:42 +05:00
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
os.remove(servicePath)
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
writeToFile = open(servicePath, 'w+')
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
|
|
|
|
except OSError, msg:
|
2019-11-13 18:51:57 +05:00
|
|
|
logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [enableDisableEmail]")
|
2018-07-23 22:11:42 +05:00
|
|
|
return 0
|
|
|
|
|
|
2018-11-14 13:36:34 +05:00
|
|
|
@staticmethod
|
|
|
|
|
def setUpFirstAccount():
|
|
|
|
|
try:
|
|
|
|
|
command = 'python /usr/local/CyberCP/plogical/adminPass.py --password 1234567'
|
2019-03-26 16:19:03 +05:00
|
|
|
subprocess.call(shlex.split(command))
|
2018-11-14 13:36:34 +05:00
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
2019-11-04 23:05:13 +05:00
|
|
|
@staticmethod
|
|
|
|
|
def p3(distro):
|
|
|
|
|
### Virtual Env 3
|
|
|
|
|
|
|
|
|
|
if distro == centos:
|
|
|
|
|
command = 'yum -y install python36 -y'
|
|
|
|
|
preFlightsChecks.call(command, distro, '[install python36]',
|
|
|
|
|
'install python36',
|
|
|
|
|
1, 0, os.EX_OSERR)
|
|
|
|
|
|
|
|
|
|
command = 'virtualenv -p python3 /usr/local/CyberPanel/p3'
|
|
|
|
|
preFlightsChecks.call(command, distro, '[install python36]',
|
|
|
|
|
'install python36',
|
|
|
|
|
1, 0, os.EX_OSERR)
|
|
|
|
|
|
|
|
|
|
env_path = '/usr/local/CyberPanel/p3'
|
|
|
|
|
subprocess.call(['virtualenv', env_path])
|
|
|
|
|
activate_this = os.path.join(env_path, 'bin', 'activate_this.py')
|
|
|
|
|
execfile(activate_this, dict(__file__=activate_this))
|
|
|
|
|
|
|
|
|
|
command = "pip3 install --ignore-installed -r %s" % ('/usr/local/CyberCP/WebTerminal/requirments.txt')
|
|
|
|
|
preFlightsChecks.call(command, distro, '[install python36]',
|
|
|
|
|
'install python36',
|
|
|
|
|
1, 0, os.EX_OSERR)
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
command = 'apt install -y python3-pip'
|
|
|
|
|
preFlightsChecks.call(command, distro, '[install python36]',
|
|
|
|
|
'install python36',
|
|
|
|
|
1, 0, os.EX_OSERR)
|
|
|
|
|
|
|
|
|
|
command = 'apt install build-essential libssl-dev libffi-dev python3-dev -y'
|
|
|
|
|
preFlightsChecks.call(command, distro, '[install python36]',
|
|
|
|
|
'install python36',
|
|
|
|
|
1, 0, os.EX_OSERR)
|
|
|
|
|
|
|
|
|
|
command = 'apt install -y python3-venv'
|
|
|
|
|
preFlightsChecks.call(command, distro, '[install python36]',
|
|
|
|
|
'install python36',
|
|
|
|
|
1, 0, os.EX_OSERR)
|
|
|
|
|
|
|
|
|
|
command = 'virtualenv -p python3 /usr/local/CyberPanel/p3'
|
|
|
|
|
preFlightsChecks.call(command, distro, '[install python36]',
|
|
|
|
|
'install python36',
|
|
|
|
|
1, 0, os.EX_OSERR)
|
|
|
|
|
|
|
|
|
|
env_path = '/usr/local/CyberPanel/p3'
|
|
|
|
|
subprocess.call(['virtualenv', env_path])
|
|
|
|
|
activate_this = os.path.join(env_path, 'bin', 'activate_this.py')
|
|
|
|
|
execfile(activate_this, dict(__file__=activate_this))
|
|
|
|
|
|
|
|
|
|
command = "pip3 install --ignore-installed -r %s" % ('/usr/local/CyberCP/WebTerminal/requirments.txt')
|
|
|
|
|
preFlightsChecks.call(command, distro, '[install python36]',
|
|
|
|
|
'install python36',
|
|
|
|
|
1, 0, os.EX_OSERR)
|
|
|
|
|
|
2019-10-15 22:59:22 +05:00
|
|
|
def installRestic(self):
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
|
|
CentOSPath = '/etc/redhat-release'
|
|
|
|
|
|
|
|
|
|
if os.path.exists(CentOSPath):
|
2019-11-08 11:08:33 +05:00
|
|
|
|
|
|
|
|
command = 'yum install yum-utils -y'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-11-08 11:08:33 +05:00
|
|
|
|
2019-10-15 22:59:22 +05:00
|
|
|
command = 'yum-config-manager --add-repo https://copr.fedorainfracloud.org/coprs/copart/restic/repo/epel-7/copart-restic-epel-7.repo'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-10-15 22:59:22 +05:00
|
|
|
|
|
|
|
|
command = 'yum install restic -y'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-10-15 22:59:22 +05:00
|
|
|
else:
|
|
|
|
|
command = 'apt-get update -y'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-10-15 22:59:22 +05:00
|
|
|
|
|
|
|
|
command = 'apt-get install restic -y'
|
2019-11-13 16:13:52 +05:00
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
2019-10-15 22:59:22 +05:00
|
|
|
|
|
|
|
|
cronTab = '/etc/crontab'
|
|
|
|
|
|
|
|
|
|
data = open(cronTab, 'r').read()
|
|
|
|
|
|
|
|
|
|
if data.find('IncScheduler') == -1:
|
2019-10-19 13:03:00 +05:00
|
|
|
cronJob = '0 12 * * * root /usr/local/CyberCP/bin/python2 /usr/local/CyberCP/IncBackups/IncScheduler.py Daily\n'
|
2019-10-15 22:59:22 +05:00
|
|
|
|
|
|
|
|
writeToFile = open(cronTab, 'a')
|
|
|
|
|
writeToFile.writelines(cronJob)
|
|
|
|
|
|
2019-10-19 13:03:00 +05:00
|
|
|
cronJob = '0 0 * * 0 root /usr/local/CyberCP/bin/python2 /usr/local/CyberCP/IncBackups/IncScheduler.py Daily\n'
|
2019-10-15 22:59:22 +05:00
|
|
|
writeToFile.writelines(cronJob)
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
2019-11-13 19:23:14 +05:00
|
|
|
def installAcme(self):
|
|
|
|
|
command = 'wget -O - https://get.acme.sh | sh'
|
|
|
|
|
subprocess.call(command, shell=True)
|
|
|
|
|
|
2019-12-04 14:40:59 +05:00
|
|
|
command = '/root/.acme.sh/acme.sh --upgrade --auto-upgrade'
|
|
|
|
|
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
|
|
|
|
|
|
|
|
|
|
|
2018-11-16 14:41:40 +05:00
|
|
|
|
|
|
|
|
def main():
|
2017-10-24 19:16:36 +05:00
|
|
|
parser = argparse.ArgumentParser(description='CyberPanel Installer')
|
|
|
|
|
parser.add_argument('publicip', help='Please enter public IP for your VPS or dedicated server.')
|
2018-06-01 02:08:21 +05:00
|
|
|
parser.add_argument('--mysql', help='Specify number of MySQL instances to be used.')
|
2018-07-23 22:11:42 +05:00
|
|
|
parser.add_argument('--postfix', help='Enable or disable Email Service.')
|
|
|
|
|
parser.add_argument('--powerdns', help='Enable or disable DNS Service.')
|
|
|
|
|
parser.add_argument('--ftp', help='Enable or disable ftp Service.')
|
2018-11-10 16:05:40 +05:00
|
|
|
parser.add_argument('--ent', help='Install LS Ent or OpenLiteSpeed')
|
|
|
|
|
parser.add_argument('--serial', help='Install LS Ent or OpenLiteSpeed')
|
2019-03-26 16:19:03 +05:00
|
|
|
parser.add_argument('--port', help='LSCPD Port')
|
2017-10-24 19:16:36 +05:00
|
|
|
args = parser.parse_args()
|
|
|
|
|
|
2018-02-04 21:15:30 +05:00
|
|
|
logging.InstallLog.writeToFile("Starting CyberPanel installation..")
|
|
|
|
|
preFlightsChecks.stdOut("Starting CyberPanel installation..")
|
|
|
|
|
|
2018-11-21 14:50:27 +05:00
|
|
|
if args.ent == None:
|
|
|
|
|
ent = 0
|
|
|
|
|
preFlightsChecks.stdOut("OpenLiteSpeed web server will be installed.")
|
|
|
|
|
else:
|
|
|
|
|
if args.ent == 'ols':
|
|
|
|
|
ent = 0
|
|
|
|
|
preFlightsChecks.stdOut("OpenLiteSpeed web server will be installed.")
|
|
|
|
|
else:
|
|
|
|
|
preFlightsChecks.stdOut("LiteSpeed Enterprise web server will be installed.")
|
|
|
|
|
ent = 1
|
|
|
|
|
if args.serial != None:
|
|
|
|
|
serial = args.serial
|
|
|
|
|
preFlightsChecks.stdOut("LiteSpeed Enterprise Serial detected: " + serial)
|
|
|
|
|
else:
|
|
|
|
|
preFlightsChecks.stdOut("Installation failed, please specify LiteSpeed Enterprise key using --serial")
|
|
|
|
|
os._exit(0)
|
|
|
|
|
|
2018-02-13 11:45:44 +05:00
|
|
|
## Writing public IP
|
|
|
|
|
|
2018-11-21 14:50:27 +05:00
|
|
|
try:
|
|
|
|
|
os.mkdir("/etc/cyberpanel")
|
|
|
|
|
except:
|
|
|
|
|
pass
|
2018-02-13 11:45:44 +05:00
|
|
|
|
|
|
|
|
machineIP = open("/etc/cyberpanel/machineIP", "w")
|
|
|
|
|
machineIP.writelines(args.publicip)
|
|
|
|
|
machineIP.close()
|
|
|
|
|
|
2017-10-24 19:16:36 +05:00
|
|
|
cwd = os.getcwd()
|
|
|
|
|
|
2018-10-25 16:47:26 -04:00
|
|
|
distro = get_distro()
|
2018-10-26 16:25:13 -04:00
|
|
|
checks = preFlightsChecks("/usr/local/lsws/", args.publicip, "/usr/local", cwd, "/usr/local/CyberCP", distro)
|
2019-03-21 23:26:42 +05:00
|
|
|
checks.mountTemp()
|
2018-10-25 16:10:01 -04:00
|
|
|
|
|
|
|
|
if distro == ubuntu:
|
|
|
|
|
os.chdir("/etc/cyberpanel")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-03-26 16:19:03 +05:00
|
|
|
if args.port == None:
|
|
|
|
|
port = "8090"
|
|
|
|
|
else:
|
|
|
|
|
port = args.port
|
|
|
|
|
|
2018-08-12 14:53:05 +05:00
|
|
|
if args.mysql == None:
|
2018-06-01 02:08:21 +05:00
|
|
|
mysql = 'One'
|
2018-08-12 14:53:05 +05:00
|
|
|
preFlightsChecks.stdOut("Single MySQL instance version will be installed.")
|
|
|
|
|
else:
|
|
|
|
|
mysql = args.mysql
|
2018-11-06 00:19:58 +05:00
|
|
|
preFlightsChecks.stdOut("Dobule MySQL instance version will be installed.")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
checks.checkPythonVersion()
|
2017-12-09 22:30:10 +05:00
|
|
|
checks.setup_account_cyberpanel()
|
2018-10-25 16:10:01 -04:00
|
|
|
if distro == centos:
|
|
|
|
|
checks.yum_update()
|
2017-10-24 19:16:36 +05:00
|
|
|
checks.installCyberPanelRepo()
|
2018-10-25 16:10:01 -04:00
|
|
|
if distro == centos:
|
|
|
|
|
checks.enableEPELRepo()
|
2017-10-24 19:16:36 +05:00
|
|
|
checks.install_pip()
|
|
|
|
|
checks.install_python_dev()
|
|
|
|
|
checks.install_gcc()
|
2018-10-25 16:10:01 -04:00
|
|
|
if distro == centos:
|
|
|
|
|
checks.install_python_setup_tools()
|
2017-10-24 19:16:36 +05:00
|
|
|
checks.install_python_mysql_library()
|
|
|
|
|
|
2018-11-07 09:20:05 -05:00
|
|
|
import installCyberPanel
|
2019-10-09 12:43:38 +05:00
|
|
|
|
2018-11-10 16:05:40 +05:00
|
|
|
if ent == 0:
|
2019-06-26 03:57:16 +05:00
|
|
|
installCyberPanel.Main(cwd, mysql, distro, ent, None, port, args.ftp, args.powerdns)
|
2018-11-10 16:05:40 +05:00
|
|
|
else:
|
2019-06-26 03:57:16 +05:00
|
|
|
installCyberPanel.Main(cwd, mysql, distro, ent, serial, port, args.ftp, args.powerdns)
|
2018-11-07 09:20:05 -05:00
|
|
|
|
2019-03-21 23:26:42 +05:00
|
|
|
checks.setupPHPAndComposer()
|
2017-10-24 19:16:36 +05:00
|
|
|
checks.fix_selinux_issue()
|
|
|
|
|
checks.install_psmisc()
|
2019-06-26 03:57:16 +05:00
|
|
|
|
2019-07-03 13:15:26 +05:00
|
|
|
if args.postfix == None:
|
2019-06-26 03:57:16 +05:00
|
|
|
checks.install_postfix_davecot()
|
|
|
|
|
checks.setup_email_Passwords(installCyberPanel.InstallCyberPanel.mysqlPassword, mysql)
|
|
|
|
|
checks.setup_postfix_davecot_config(mysql)
|
|
|
|
|
else:
|
|
|
|
|
if args.postfix == 'On':
|
|
|
|
|
checks.install_postfix_davecot()
|
|
|
|
|
checks.setup_email_Passwords(installCyberPanel.InstallCyberPanel.mysqlPassword, mysql)
|
|
|
|
|
checks.setup_postfix_davecot_config(mysql)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
checks.install_unzip()
|
2017-12-09 22:30:10 +05:00
|
|
|
checks.install_zip()
|
2017-10-24 19:16:36 +05:00
|
|
|
checks.install_rsync()
|
|
|
|
|
|
|
|
|
|
checks.installFirewalld()
|
|
|
|
|
|
|
|
|
|
checks.install_default_keys()
|
|
|
|
|
|
2017-12-16 11:59:47 +05:00
|
|
|
checks.test_Requests()
|
2018-06-01 02:08:21 +05:00
|
|
|
checks.download_install_CyberPanel(installCyberPanel.InstallCyberPanel.mysqlPassword, mysql)
|
2019-03-30 14:21:52 +05:00
|
|
|
checks.downoad_and_install_raindloop()
|
|
|
|
|
checks.download_install_phpmyadmin()
|
2018-06-05 00:53:45 +05:00
|
|
|
checks.setupCLI()
|
2017-11-02 02:09:47 +05:00
|
|
|
checks.setup_cron()
|
2019-10-15 22:59:22 +05:00
|
|
|
checks.installRestic()
|
2019-11-13 19:23:14 +05:00
|
|
|
checks.installAcme()
|
2018-11-16 14:41:40 +05:00
|
|
|
# checks.installdnsPython()
|
2018-05-01 00:49:47 +05:00
|
|
|
|
|
|
|
|
## Install and Configure OpenDKIM.
|
|
|
|
|
|
2019-07-16 23:23:16 +05:00
|
|
|
if args.postfix == None:
|
|
|
|
|
checks.installOpenDKIM()
|
|
|
|
|
checks.configureOpenDKIM()
|
|
|
|
|
else:
|
|
|
|
|
if args.postfix == 'On':
|
|
|
|
|
checks.installOpenDKIM()
|
|
|
|
|
checks.configureOpenDKIM()
|
2018-05-01 00:49:47 +05:00
|
|
|
|
2018-03-26 20:39:56 +05:00
|
|
|
checks.modSecPreReqs()
|
2019-03-30 14:21:52 +05:00
|
|
|
checks.installLSCPD()
|
|
|
|
|
checks.setupLSCPDDaemon()
|
2019-03-26 16:19:03 +05:00
|
|
|
checks.fixCyberPanelPermissions()
|
2019-03-21 23:26:42 +05:00
|
|
|
|
2018-08-12 14:53:05 +05:00
|
|
|
if args.postfix != None:
|
|
|
|
|
checks.enableDisableEmail(args.postfix)
|
|
|
|
|
else:
|
|
|
|
|
preFlightsChecks.stdOut("Postfix will be installed and enabled.")
|
2018-07-23 22:11:42 +05:00
|
|
|
checks.enableDisableEmail('On')
|
|
|
|
|
|
2018-08-12 14:53:05 +05:00
|
|
|
if args.powerdns != None:
|
|
|
|
|
checks.enableDisableDNS(args.powerdns)
|
|
|
|
|
else:
|
|
|
|
|
preFlightsChecks.stdOut("PowerDNS will be installed and enabled.")
|
2018-07-23 22:11:42 +05:00
|
|
|
checks.enableDisableDNS('On')
|
|
|
|
|
|
2018-08-12 14:53:05 +05:00
|
|
|
if args.ftp != None:
|
2018-11-07 08:54:16 -05:00
|
|
|
checks.enableDisableFTP(args.ftp, distro)
|
2018-08-12 14:53:05 +05:00
|
|
|
else:
|
|
|
|
|
preFlightsChecks.stdOut("Pure-FTPD will be installed and enabled.")
|
2018-11-07 08:54:16 -05:00
|
|
|
checks.enableDisableFTP('On', distro)
|
2019-03-21 23:26:42 +05:00
|
|
|
|
2018-11-14 13:36:34 +05:00
|
|
|
checks.setUpFirstAccount()
|
2019-11-13 13:08:26 +05:00
|
|
|
# checks.p3(distro)
|
2018-02-04 21:15:30 +05:00
|
|
|
logging.InstallLog.writeToFile("CyberPanel installation successfully completed!")
|
2019-11-14 13:18:01 +05:00
|
|
|
#checks.installation_successfull()
|
2018-11-06 00:19:58 +05:00
|
|
|
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2017-12-09 22:30:10 +05:00
|
|
|
if __name__ == "__main__":
|
2019-11-13 16:13:52 +05:00
|
|
|
main()
|