mirror of https://github.com/midoks/mdserver-web
parent
919c61df3a
commit
26549be4c4
@ -1,700 +0,0 @@ |
||||
# coding: utf-8 |
||||
|
||||
import psutil |
||||
import time |
||||
import os |
||||
import public |
||||
import re |
||||
|
||||
|
||||
class system: |
||||
setupPath = None |
||||
pids = None |
||||
|
||||
def __init__(self): |
||||
self.setupPath = '/www/server' |
||||
|
||||
def GetConcifInfo(self, get=None): |
||||
# 取环境配置信息 |
||||
if not hasattr(web.ctx.session, 'config'): |
||||
web.ctx.session.config = public.M('config').where("id=?", ('1',)).field( |
||||
'webserver,sites_path,backup_path,status,mysql_root').find() |
||||
if not hasattr(web.ctx.session.config, 'email'): |
||||
web.ctx.session.config['email'] = public.M( |
||||
'users').where("id=?", ('1',)).getField('email') |
||||
data = {} |
||||
data = web.ctx.session.config |
||||
data['webserver'] = web.ctx.session.config['webserver'] |
||||
# PHP版本 |
||||
phpVersions = ('52', '53', '54', '55', '56', |
||||
'70', '71', '72', '73', '74') |
||||
|
||||
data['php'] = [] |
||||
|
||||
for version in phpVersions: |
||||
tmp = {} |
||||
tmp['setup'] = os.path.exists( |
||||
self.setupPath + '/php/' + version + '/bin/php') |
||||
if tmp['setup']: |
||||
phpConfig = self.GetPHPConfig(version) |
||||
tmp['version'] = version |
||||
tmp['max'] = phpConfig['max'] |
||||
tmp['maxTime'] = phpConfig['maxTime'] |
||||
tmp['pathinfo'] = phpConfig['pathinfo'] |
||||
tmp['status'] = os.path.exists( |
||||
'/tmp/php-cgi-' + version + '.sock') |
||||
data['php'].append(tmp) |
||||
|
||||
tmp = {} |
||||
data['webserver'] = '' |
||||
serviceName = 'nginx' |
||||
tmp['setup'] = False |
||||
phpversion = "54" |
||||
phpport = '888' |
||||
pstatus = False |
||||
pauth = False |
||||
if os.path.exists(self.setupPath + '/nginx'): |
||||
data['webserver'] = 'nginx' |
||||
serviceName = 'nginx' |
||||
tmp['setup'] = os.path.exists(self.setupPath + '/nginx/sbin/nginx') |
||||
configFile = self.setupPath + '/nginx/conf/nginx.conf' |
||||
try: |
||||
if os.path.exists(configFile): |
||||
conf = public.readFile(configFile) |
||||
rep = "listen\s+([0-9]+)\s*;" |
||||
rtmp = re.search(rep, conf) |
||||
if rtmp: |
||||
phpport = rtmp.groups()[0] |
||||
|
||||
if conf.find('AUTH_START') != -1: |
||||
pauth = True |
||||
if conf.find(self.setupPath + '/stop') == -1: |
||||
pstatus = True |
||||
configFile = self.setupPath + '/nginx/conf/enable-php.conf' |
||||
conf = public.readFile(configFile) |
||||
rep = "php-cgi-([0-9]+)\.sock" |
||||
rtmp = re.search(rep, conf) |
||||
if rtmp: |
||||
phpversion = rtmp.groups()[0] |
||||
except: |
||||
pass |
||||
|
||||
elif os.path.exists(self.setupPath + '/apache'): |
||||
data['webserver'] = 'apache' |
||||
serviceName = 'httpd' |
||||
tmp['setup'] = os.path.exists(self.setupPath + '/apache/bin/httpd') |
||||
configFile = self.setupPath + '/apache/conf/extra/httpd-vhosts.conf' |
||||
try: |
||||
if os.path.exists(configFile): |
||||
conf = public.readFile(configFile) |
||||
rep = "php-cgi-([0-9]+)\.sock" |
||||
rtmp = re.search(rep, conf) |
||||
if rtmp: |
||||
phpversion = rtmp.groups()[0] |
||||
rep = "Listen\s+([0-9]+)\s*\n" |
||||
rtmp = re.search(rep, conf) |
||||
if rtmp: |
||||
phpport = rtmp.groups()[0] |
||||
if conf.find('AUTH_START') != -1: |
||||
pauth = True |
||||
if conf.find(self.setupPath + '/stop') == -1: |
||||
pstatus = True |
||||
except: |
||||
pass |
||||
|
||||
tmp['type'] = data['webserver'] |
||||
tmp['version'] = public.readFile( |
||||
self.setupPath + '/' + data['webserver'] + '/version.pl') |
||||
tmp['status'] = False |
||||
result = public.ExecShell('/etc/init.d/' + serviceName + ' status') |
||||
if result[0].find('running') != -1: |
||||
tmp['status'] = True |
||||
data['web'] = tmp |
||||
|
||||
tmp = {} |
||||
vfile = self.setupPath + '/phpmyadmin/version.pl' |
||||
tmp['version'] = public.readFile(vfile) |
||||
tmp['setup'] = os.path.exists(vfile) |
||||
tmp['status'] = pstatus |
||||
tmp['phpversion'] = phpversion |
||||
tmp['port'] = phpport |
||||
tmp['auth'] = pauth |
||||
data['phpmyadmin'] = tmp |
||||
|
||||
tmp = {} |
||||
tmp['setup'] = os.path.exists('/etc/init.d/tomcat') |
||||
tmp['status'] = False |
||||
if tmp['setup']: |
||||
if os.path.exists('/www/server/tomcat/logs/catalina-daemon.pid'): |
||||
tmp['status'] = self.getPid('jsvc') |
||||
if not tmp['status']: |
||||
tmp['status'] = self.getPid('java') |
||||
tmp['version'] = public.readFile(self.setupPath + '/tomcat/version.pl') |
||||
data['tomcat'] = tmp |
||||
|
||||
tmp = {} |
||||
tmp['setup'] = os.path.exists(self.setupPath + '/mysql/bin/mysql') |
||||
tmp['version'] = public.readFile(self.setupPath + '/mysql/version.pl') |
||||
tmp['status'] = os.path.exists('/tmp/mysql.sock') |
||||
data['mysql'] = tmp |
||||
|
||||
tmp = {} |
||||
tmp['setup'] = os.path.exists(self.setupPath + '/redis/runtest') |
||||
tmp['status'] = os.path.exists('/var/run/redis_6379.pid') |
||||
data['redis'] = tmp |
||||
|
||||
tmp = {} |
||||
tmp['setup'] = os.path.exists('/usr/local/memcached/bin/memcached') |
||||
tmp['status'] = os.path.exists('/var/run/memcached.pid') |
||||
data['memcached'] = tmp |
||||
|
||||
tmp = {} |
||||
tmp['setup'] = os.path.exists( |
||||
self.setupPath + '/pure-ftpd/bin/pure-pw') |
||||
tmp['version'] = public.readFile( |
||||
self.setupPath + '/pure-ftpd/version.pl') |
||||
tmp['status'] = os.path.exists('/var/run/pure-ftpd.pid') |
||||
data['pure-ftpd'] = tmp |
||||
data['panel'] = self.GetPanelInfo() |
||||
data['systemdate'] = public.ExecShell( |
||||
'date +"%Y-%m-%d %H:%M:%S %Z %z"')[0].strip() |
||||
|
||||
return data |
||||
|
||||
# 名取PID |
||||
def getPid(self, pname): |
||||
try: |
||||
if not self.pids: |
||||
self.pids = psutil.pids() |
||||
for pid in self.pids: |
||||
if psutil.Process(pid).name() == pname: |
||||
return True |
||||
return False |
||||
except: |
||||
return False |
||||
|
||||
# 检测指定进程是否存活 |
||||
def checkProcess(self, pid): |
||||
try: |
||||
if not self.pids: |
||||
self.pids = psutil.pids() |
||||
if int(pid) in self.pids: |
||||
return True |
||||
return False |
||||
except: |
||||
return False |
||||
|
||||
def GetPanelInfo(self, get=None): |
||||
# 取面板配置 |
||||
address = public.GetLocalIp() |
||||
try: |
||||
try: |
||||
port = web.ctx.host.split(':')[1] |
||||
except: |
||||
port = public.readFile('data/port.pl') |
||||
except: |
||||
port = '8888' |
||||
domain = '' |
||||
if os.path.exists('data/domain.conf'): |
||||
domain = public.readFile('data/domain.conf') |
||||
|
||||
autoUpdate = '' |
||||
if os.path.exists('data/autoUpdate.pl'): |
||||
autoUpdate = 'checked' |
||||
limitip = '' |
||||
if os.path.exists('data/limitip.conf'): |
||||
limitip = public.readFile('data/limitip.conf') |
||||
|
||||
templates = [] |
||||
for template in os.listdir('templates/'): |
||||
if os.path.isdir('templates/' + template): |
||||
templates.append(template) |
||||
template = public.readFile('data/templates.pl') |
||||
|
||||
check502 = '' |
||||
if os.path.exists('data/502Task.pl'): |
||||
check502 = 'checked' |
||||
return {'port': port, 'address': address, 'domain': domain, 'auto': autoUpdate, '502': check502, 'limitip': limitip, 'templates': templates, 'template': template} |
||||
|
||||
def GetPHPConfig(self, version): |
||||
# 取PHP配置 |
||||
file = self.setupPath + "/php/" + version + "/etc/php.ini" |
||||
phpini = public.readFile(file) |
||||
file = self.setupPath + "/php/" + version + "/etc/php-fpm.conf" |
||||
phpfpm = public.readFile(file) |
||||
data = {} |
||||
try: |
||||
rep = "upload_max_filesize\s*=\s*([0-9]+)M" |
||||
tmp = re.search(rep, phpini).groups() |
||||
data['max'] = tmp[0] |
||||
except: |
||||
data['max'] = '50' |
||||
try: |
||||
rep = "request_terminate_timeout\s*=\s*([0-9]+)\n" |
||||
tmp = re.search(rep, phpfpm).groups() |
||||
data['maxTime'] = tmp[0] |
||||
except: |
||||
data['maxTime'] = 0 |
||||
|
||||
try: |
||||
rep = ur"\n;*\s*cgi\.fix_pathinfo\s*=\s*([0-9]+)\s*\n" |
||||
tmp = re.search(rep, phpini).groups() |
||||
|
||||
if tmp[0] == '1': |
||||
data['pathinfo'] = True |
||||
else: |
||||
data['pathinfo'] = False |
||||
except: |
||||
data['pathinfo'] = False |
||||
|
||||
return data |
||||
|
||||
def GetSystemTotal(self, get, interval=1): |
||||
# 取系统统计信息 |
||||
data = self.GetMemInfo() |
||||
cpu = self.GetCpuInfo(interval) |
||||
data['cpuNum'] = cpu[1] |
||||
data['cpuRealUsed'] = cpu[0] |
||||
data['time'] = self.GetBootTime() |
||||
data['system'] = self.GetSystemVersion() |
||||
data['isuser'] = public.M('users').where( |
||||
'username=?', ('admin',)).count() |
||||
data['version'] = web.ctx.session.version |
||||
return data |
||||
|
||||
def GetLoadAverage(self, get): |
||||
c = os.getloadavg() |
||||
data = {} |
||||
data['one'] = float(c[0]) |
||||
data['five'] = float(c[1]) |
||||
data['fifteen'] = float(c[2]) |
||||
data['max'] = psutil.cpu_count() * 2 |
||||
data['limit'] = data['max'] |
||||
data['safe'] = data['max'] * 0.75 |
||||
return data |
||||
|
||||
def GetAllInfo(self, get): |
||||
data = {} |
||||
data['load_average'] = self.GetLoadAverage(get) |
||||
data['title'] = self.GetTitle() |
||||
data['network'] = self.GetNetWorkApi(get) |
||||
data['panel_status'] = not os.path.exists( |
||||
'/www/server/panel/data/close.pl') |
||||
import firewalls |
||||
ssh_info = firewalls.firewalls().GetSshInfo(None) |
||||
data['enable_ssh_status'] = ssh_info['status'] |
||||
data['disable_ping_status'] = not ssh_info['ping'] |
||||
data['time'] = self.GetBootTime() |
||||
#data['system'] = self.GetSystemVersion(); |
||||
#data['mem'] = self.GetMemInfo(); |
||||
data['version'] = web.ctx.session.version |
||||
return data |
||||
|
||||
def GetTitle(self): |
||||
titlePl = 'data/title.pl' |
||||
title = '宝塔Linux面板' |
||||
if os.path.exists(titlePl): |
||||
title = public.readFile(titlePl).strip() |
||||
return title |
||||
|
||||
def GetSystemVersion(self): |
||||
# 取操作系统版本 |
||||
import public |
||||
version = public.readFile('/etc/redhat-release') |
||||
if not version: |
||||
version = public.readFile( |
||||
'/etc/issue').strip().split("\n")[0].replace('\\n', '').replace('\l', '').strip() |
||||
else: |
||||
version = version.replace('release ', '').strip() |
||||
return version |
||||
|
||||
def GetBootTime(self): |
||||
# 取系统启动时间 |
||||
import public |
||||
import math |
||||
conf = public.readFile('/proc/uptime').split() |
||||
tStr = float(conf[0]) |
||||
min = tStr / 60 |
||||
hours = min / 60 |
||||
days = math.floor(hours / 24) |
||||
hours = math.floor(hours - (days * 24)) |
||||
min = math.floor(min - (days * 60 * 24) - (hours * 60)) |
||||
return public.getMsg('SYS_BOOT_TIME', (str(int(days)), str(int(hours)), str(int(min)))) |
||||
|
||||
def GetCpuInfo(self, interval=1): |
||||
# 取CPU信息 |
||||
cpuCount = psutil.cpu_count() |
||||
used = psutil.cpu_percent(interval=interval) |
||||
return used, cpuCount |
||||
|
||||
def GetMemInfo(self, get=None): |
||||
# 取内存信息 |
||||
mem = psutil.virtual_memory() |
||||
memInfo = {'memTotal': mem.total / 1024 / 1024, 'memFree': mem.free / 1024 / 1024, |
||||
'memBuffers': mem.buffers / 1024 / 1024, 'memCached': mem.cached / 1024 / 1024} |
||||
memInfo['memRealUsed'] = memInfo['memTotal'] - \ |
||||
memInfo['memFree'] - memInfo['memBuffers'] - memInfo['memCached'] |
||||
return memInfo |
||||
|
||||
def GetDiskInfo(self, get=None): |
||||
return self.GetDiskInfo2() |
||||
# 取磁盘分区信息 |
||||
diskIo = psutil.disk_partitions() |
||||
diskInfo = [] |
||||
|
||||
for disk in diskIo: |
||||
if disk[1] == '/mnt/cdrom': |
||||
continue |
||||
if disk[1] == '/boot': |
||||
continue |
||||
tmp = {} |
||||
tmp['path'] = disk[1] |
||||
tmp['size'] = psutil.disk_usage(disk[1]) |
||||
diskInfo.append(tmp) |
||||
return diskInfo |
||||
|
||||
def GetDiskInfo2(self): |
||||
# 取磁盘分区信息 |
||||
temp = public.ExecShell("df -h -P|grep '/'|grep -v tmpfs")[0] |
||||
tempInodes = public.ExecShell("df -i -P|grep '/'|grep -v tmpfs")[0] |
||||
temp1 = temp.split('\n') |
||||
tempInodes1 = tempInodes.split('\n') |
||||
diskInfo = [] |
||||
n = 0 |
||||
cuts = ['/mnt/cdrom', '/boot', '/boot/efi', '/dev', |
||||
'/dev/shm', '/run/lock', '/run', '/run/shm', '/run/user'] |
||||
for tmp in temp1: |
||||
n += 1 |
||||
inodes = tempInodes1[n - 1].split() |
||||
disk = tmp.split() |
||||
if len(disk) < 5: |
||||
continue |
||||
if disk[1].find('M') != -1: |
||||
continue |
||||
if disk[1].find('K') != -1: |
||||
continue |
||||
if len(disk[5].split('/')) > 4: |
||||
continue |
||||
if disk[5] in cuts: |
||||
continue |
||||
arr = {} |
||||
arr['path'] = disk[5] |
||||
tmp1 = [disk[1], disk[2], disk[3], disk[4]] |
||||
arr['size'] = tmp1 |
||||
arr['inodes'] = [inodes[1], inodes[2], inodes[3], inodes[4]] |
||||
if disk[5] == '/': |
||||
bootLog = '/tmp/panelBoot.pl' |
||||
if disk[2].find('M') != -1: |
||||
if os.path.exists(bootLog): |
||||
os.system('rm -f ' + bootLog) |
||||
else: |
||||
if not os.path.exists(bootLog): |
||||
os.system('sleep 1 && /etc/init.d/bt reload &') |
||||
diskInfo.append(arr) |
||||
return diskInfo |
||||
|
||||
# 清理系统垃圾 |
||||
def ClearSystem(self, get): |
||||
count = total = 0 |
||||
tmp_total, tmp_count = self.ClearMail() |
||||
count += tmp_count |
||||
total += tmp_total |
||||
tmp_total, tmp_count = self.ClearOther() |
||||
count += tmp_count |
||||
total += tmp_total |
||||
return count, total |
||||
|
||||
# 清理邮件日志 |
||||
def ClearMail(self): |
||||
rpath = '/var/spool' |
||||
total = count = 0 |
||||
import shutil |
||||
con = ['cron', 'anacron', 'mail'] |
||||
for d in os.listdir(rpath): |
||||
if d in con: |
||||
continue |
||||
dpath = rpath + '/' + d |
||||
time.sleep(0.2) |
||||
num = size = 0 |
||||
for n in os.listdir(dpath): |
||||
filename = dpath + '/' + n |
||||
fsize = os.path.getsize(filename) |
||||
size += fsize |
||||
if os.path.isdir(filename): |
||||
shutil.rmtree(filename) |
||||
else: |
||||
os.remove(filename) |
||||
print '\t\033[1;32m[OK]\033[0m' |
||||
num += 1 |
||||
total += size |
||||
count += num |
||||
return total, count |
||||
|
||||
# 清理其它 |
||||
def ClearOther(self): |
||||
clearPath = [ |
||||
{'path': '/www/server/panel', 'find': 'testDisk_'}, |
||||
{'path': '/www/wwwlogs', 'find': 'log'}, |
||||
{'path': '/tmp', 'find': 'panelBoot.pl'}, |
||||
{'path': '/www/server/panel/install', 'find': '.rpm'} |
||||
] |
||||
|
||||
total = count = 0 |
||||
for c in clearPath: |
||||
for d in os.listdir(c['path']): |
||||
if d.find(c['find']) == -1: |
||||
continue |
||||
filename = c['path'] + '/' + d |
||||
fsize = os.path.getsize(filename) |
||||
total += fsize |
||||
if os.path.isdir(filename): |
||||
shutil.rmtree(filename) |
||||
else: |
||||
os.remove(filename) |
||||
count += 1 |
||||
public.serviceReload() |
||||
os.system('echo > /tmp/panelBoot.pl') |
||||
return total, count |
||||
|
||||
def GetNetWork(self, get=None): |
||||
# return self.GetNetWorkApi(get); |
||||
# 取网络流量信息 |
||||
try: |
||||
networkIo = psutil.net_io_counters()[:4] |
||||
if not hasattr(web.ctx.session, 'otime'): |
||||
web.ctx.session.up = networkIo[0] |
||||
web.ctx.session.down = networkIo[1] |
||||
web.ctx.session.otime = time.time() |
||||
|
||||
ntime = time.time() |
||||
networkInfo = {} |
||||
networkInfo['upTotal'] = networkIo[0] |
||||
networkInfo['downTotal'] = networkIo[1] |
||||
networkInfo['up'] = round(float( |
||||
networkIo[0] - web.ctx.session.up) / 1024 / (ntime - web.ctx.session.otime), 2) |
||||
networkInfo['down'] = round(float( |
||||
networkIo[1] - web.ctx.session.down) / 1024 / (ntime - web.ctx.session.otime), 2) |
||||
networkInfo['downPackets'] = networkIo[3] |
||||
networkInfo['upPackets'] = networkIo[2] |
||||
|
||||
web.ctx.session.up = networkIo[0] |
||||
web.ctx.session.down = networkIo[1] |
||||
web.ctx.session.otime = ntime |
||||
|
||||
networkInfo['cpu'] = self.GetCpuInfo() |
||||
networkInfo['load'] = self.GetLoadAverage(get) |
||||
return networkInfo |
||||
except: |
||||
return None |
||||
|
||||
def GetNetWorkApi(self, get=None): |
||||
# 取网络流量信息 |
||||
try: |
||||
tmpfile = 'data/network.temp' |
||||
networkIo = psutil.net_io_counters()[:4] |
||||
|
||||
if not os.path.exists(tmpfile): |
||||
public.writeFile(tmpfile, str( |
||||
networkIo[0]) + '|' + str(networkIo[1]) + '|' + str(int(time.time()))) |
||||
|
||||
lastValue = public.readFile(tmpfile).split('|') |
||||
|
||||
ntime = time.time() |
||||
networkInfo = {} |
||||
networkInfo['upTotal'] = networkIo[0] |
||||
networkInfo['downTotal'] = networkIo[1] |
||||
networkInfo['up'] = round( |
||||
float(networkIo[0] - int(lastValue[0])) / 1024 / (ntime - int(lastValue[2])), 2) |
||||
networkInfo['down'] = round( |
||||
float(networkIo[1] - int(lastValue[1])) / 1024 / (ntime - int(lastValue[2])), 2) |
||||
networkInfo['downPackets'] = networkIo[3] |
||||
networkInfo['upPackets'] = networkIo[2] |
||||
|
||||
public.writeFile(tmpfile, str( |
||||
networkIo[0]) + '|' + str(networkIo[1]) + '|' + str(int(time.time()))) |
||||
|
||||
#networkInfo['cpu'] = self.GetCpuInfo(0.1) |
||||
return networkInfo |
||||
except: |
||||
return None |
||||
|
||||
def GetNetWorkOld(self): |
||||
# 取网络流量信息 |
||||
import time |
||||
pnet = public.readFile('/proc/net/dev') |
||||
rep = '([^\s]+):[\s]{0,}(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)' |
||||
pnetall = re.findall(rep, pnet) |
||||
networkInfo = {} |
||||
networkInfo['upTotal'] = networkInfo['downTotal'] = networkInfo['up'] = networkInfo[ |
||||
'down'] = networkInfo['downPackets'] = networkInfo['upPackets'] = 0 |
||||
for pnetInfo in pnetall: |
||||
if pnetInfo[0] == 'io': |
||||
continue |
||||
networkInfo['downTotal'] += int(pnetInfo[1]) |
||||
networkInfo['downPackets'] += int(pnetInfo[2]) |
||||
networkInfo['upTotal'] += int(pnetInfo[9]) |
||||
networkInfo['upPackets'] += int(pnetInfo[10]) |
||||
|
||||
if not hasattr(web.ctx.session, 'otime'): |
||||
web.ctx.session.up = networkInfo['upTotal'] |
||||
web.ctx.session.down = networkInfo['downTotal'] |
||||
web.ctx.session.otime = time.time() |
||||
ntime = time.time() |
||||
tmpDown = networkInfo['downTotal'] - web.ctx.session.down |
||||
tmpUp = networkInfo['upTotal'] - web.ctx.session.up |
||||
networkInfo['down'] = str( |
||||
round(float(tmpDown) / 1024 / (ntime - web.ctx.session.otime), 2)) |
||||
networkInfo['up'] = str( |
||||
round(float(tmpUp) / 1024 / (ntime - web.ctx.session.otime), 2)) |
||||
if networkInfo['down'] < 0: |
||||
networkInfo['down'] = 0 |
||||
if networkInfo['up'] < 0: |
||||
networkInfo['up'] = 0 |
||||
|
||||
web.ctx.session.up = networkInfo['upTotal'] |
||||
web.ctx.session.down = networkInfo['downTotal'] |
||||
web.ctx.session.otime = ntime |
||||
networkInfo['cpu'] = self.GetCpuInfo() |
||||
return networkInfo |
||||
|
||||
def ServiceAdmin(self, get=None): |
||||
# 服务管理 |
||||
|
||||
if get.name == 'mysqld': |
||||
public.CheckMyCnf() |
||||
|
||||
if get.name == 'phpmyadmin': |
||||
import ajax |
||||
get.status = 'True' |
||||
ajax.ajax().setPHPMyAdmin(get) |
||||
return public.returnMsg(True, 'SYS_EXEC_SUCCESS') |
||||
|
||||
# 检查httpd配置文件 |
||||
if get.name == 'apache' or get.name == 'httpd': |
||||
get.name = 'httpd' |
||||
if not os.path.exists(self.setupPath + '/apache/bin/apachectl'): |
||||
return public.returnMsg(True, 'SYS_NOT_INSTALL_APACHE') |
||||
vhostPath = self.setupPath + '/panel/vhost/apache' |
||||
if not os.path.exists(vhostPath): |
||||
public.ExecShell('mkdir ' + vhostPath) |
||||
public.ExecShell('/etc/init.d/httpd start') |
||||
|
||||
if get.type == 'start': |
||||
public.ExecShell('/etc/init.d/httpd stop') |
||||
public.ExecShell('pkill -9 httpd') |
||||
|
||||
result = public.ExecShell( |
||||
'ulimit -n 10240 && ' + self.setupPath + '/apache/bin/apachectl -t') |
||||
if result[1].find('Syntax OK') == -1: |
||||
public.WriteLog("TYPE_SOFT", 'SYS_EXEC_ERR', (str(result),)) |
||||
return public.returnMsg(False, 'SYS_CONF_APACHE_ERR', (result[1].replace("\n", '<br>'),)) |
||||
|
||||
if get.type == 'restart': |
||||
public.ExecShell('pkill -9 httpd') |
||||
public.ExecShell('/etc/init.d/httpd start') |
||||
|
||||
# 检查nginx配置文件 |
||||
elif get.name == 'nginx': |
||||
vhostPath = self.setupPath + '/panel/vhost/rewrite' |
||||
if not os.path.exists(vhostPath): |
||||
public.ExecShell('mkdir ' + vhostPath) |
||||
vhostPath = self.setupPath + '/panel/vhost/nginx' |
||||
if not os.path.exists(vhostPath): |
||||
public.ExecShell('mkdir ' + vhostPath) |
||||
public.ExecShell('/etc/init.d/nginx start') |
||||
|
||||
result = public.ExecShell( |
||||
'ulimit -n 10240 && nginx -t -c ' + self.setupPath + '/nginx/conf/nginx.conf') |
||||
if result[1].find('perserver') != -1: |
||||
limit = self.setupPath + '/nginx/conf/nginx.conf' |
||||
nginxConf = public.readFile(limit) |
||||
limitConf = "limit_conn_zone $binary_remote_addr zone=perip:10m;\n\t\tlimit_conn_zone $server_name zone=perserver:10m;" |
||||
nginxConf = nginxConf.replace( |
||||
"#limit_conn_zone $binary_remote_addr zone=perip:10m;", limitConf) |
||||
public.writeFile(limit, nginxConf) |
||||
public.ExecShell('/etc/init.d/nginx start') |
||||
return public.returnMsg(True, 'SYS_CONF_NGINX_REP') |
||||
|
||||
if result[1].find('proxy') != -1: |
||||
import panelSite |
||||
panelSite.panelSite().CheckProxy(get) |
||||
public.ExecShell('/etc/init.d/nginx start') |
||||
return public.returnMsg(True, 'SYS_CONF_NGINX_REP') |
||||
|
||||
# return result |
||||
if result[1].find('successful') == -1: |
||||
public.WriteLog("TYPE_SOFT", 'SYS_EXEC_ERR', (str(result),)) |
||||
return public.returnMsg(False, 'SYS_CONF_NGINX_ERR', (result[1].replace("\n", '<br>'),)) |
||||
|
||||
# 执行 |
||||
execStr = "/etc/init.d/" + get.name + " " + get.type |
||||
if execStr == '/etc/init.d/pure-ftpd reload': |
||||
execStr = self.setupPath + '/pure-ftpd/bin/pure-pw mkdb ' + \ |
||||
self.setupPath + '/pure-ftpd/etc/pureftpd.pdb' |
||||
if execStr == '/etc/init.d/pure-ftpd start': |
||||
os.system('pkill -9 pure-ftpd') |
||||
if execStr == '/etc/init.d/tomcat reload': |
||||
execStr = '/etc/init.d/tomcat stop && /etc/init.d/tomcat start' |
||||
if execStr == '/etc/init.d/tomcat restart': |
||||
execStr = '/etc/init.d/tomcat stop && /etc/init.d/tomcat start' |
||||
|
||||
if get.name != 'mysqld': |
||||
result = public.ExecShell(execStr) |
||||
else: |
||||
os.system(execStr) |
||||
result = [] |
||||
result.append('') |
||||
result.append('') |
||||
|
||||
if result[1].find('nginx.pid') != -1: |
||||
public.ExecShell('pkill -9 nginx && sleep 1') |
||||
public.ExecShell('/etc/init.d/nginx start') |
||||
if get.type != 'test': |
||||
public.WriteLog("TYPE_SOFT", 'SYS_EXEC_SUCCESS', (execStr,)) |
||||
|
||||
if len(result[1]) > 1 and get.name != 'pure-ftpd': |
||||
return public.returnMsg(False, '<p>警告消息: <p>' + result[1].replace('\n', '<br>')) |
||||
return public.returnMsg(True, 'SYS_EXEC_SUCCESS') |
||||
|
||||
def RestartServer(self, get): |
||||
if not public.IsRestart(): |
||||
return public.returnMsg(False, 'EXEC_ERR_TASK') |
||||
public.ExecShell("sync && /etc/init.d/bt stop && init 6 &") |
||||
return public.returnMsg(True, 'SYS_REBOOT') |
||||
|
||||
# 释放内存 |
||||
def ReMemory(self, get): |
||||
os.system('sync') |
||||
scriptFile = 'script/rememory.sh' |
||||
if not os.path.exists(scriptFile): |
||||
public.downloadFile(web.ctx.session.home + |
||||
'/script/rememory.sh', scriptFile) |
||||
public.ExecShell("/bin/bash " + self.setupPath + |
||||
'/panel/' + scriptFile) |
||||
return self.GetMemInfo() |
||||
|
||||
# 重启面板 |
||||
def ReWeb(self, get): |
||||
# if not public.IsRestart(): return |
||||
# public.returnMsg(False,'EXEC_ERR_TASK'); |
||||
public.ExecShell('/etc/init.d/bt restart &') |
||||
return True |
||||
|
||||
# 修复面板 |
||||
def RepPanel(self, get): |
||||
vp = '' |
||||
if public.readFile('/www/server/panel/class/common.py').find('checkSafe') != -1: |
||||
vp = '_pro' |
||||
public.ExecShell("wget -O update.sh " + public.get_url() + |
||||
"/install/update" + vp + ".sh && bash update.sh") |
||||
if hasattr(web.ctx.session, 'getCloudPlugin'): |
||||
del(web.ctx.session['getCloudPlugin']) |
||||
return True |
||||
|
||||
# 升级到专业版 |
||||
def UpdatePro(self, get): |
||||
public.ExecShell("wget -O update.sh " + public.get_url() + |
||||
"/install/update_pro.sh && bash update.sh pro") |
||||
if hasattr(web.ctx.session, 'getCloudPlugin'): |
||||
del(web.ctx.session['getCloudPlugin']) |
||||
return True |
@ -0,0 +1,408 @@ |
||||
# coding: utf-8 |
||||
|
||||
import psutil |
||||
import time |
||||
import os |
||||
import re |
||||
import math |
||||
|
||||
|
||||
import public |
||||
from flask import Flask, session |
||||
|
||||
|
||||
class system_api: |
||||
setupPath = None |
||||
pids = None |
||||
|
||||
def __init__(self): |
||||
self.setupPath = '/www/server' |
||||
|
||||
# 名取PID |
||||
def getPid(self, pname): |
||||
try: |
||||
if not self.pids: |
||||
self.pids = psutil.pids() |
||||
for pid in self.pids: |
||||
if psutil.Process(pid).name() == pname: |
||||
return True |
||||
return False |
||||
except: |
||||
return False |
||||
|
||||
# 检测指定进程是否存活 |
||||
def checkProcess(self, pid): |
||||
try: |
||||
if not self.pids: |
||||
self.pids = psutil.pids() |
||||
if int(pid) in self.pids: |
||||
return True |
||||
return False |
||||
except: |
||||
return False |
||||
|
||||
def getPanelInfo(self, get=None): |
||||
# 取面板配置 |
||||
address = public.GetLocalIp() |
||||
try: |
||||
try: |
||||
port = web.ctx.host.split(':')[1] |
||||
except: |
||||
port = public.readFile('data/port.pl') |
||||
except: |
||||
port = '8888' |
||||
domain = '' |
||||
if os.path.exists('data/domain.conf'): |
||||
domain = public.readFile('data/domain.conf') |
||||
|
||||
autoUpdate = '' |
||||
if os.path.exists('data/autoUpdate.pl'): |
||||
autoUpdate = 'checked' |
||||
limitip = '' |
||||
if os.path.exists('data/limitip.conf'): |
||||
limitip = public.readFile('data/limitip.conf') |
||||
|
||||
templates = [] |
||||
for template in os.listdir('templates/'): |
||||
if os.path.isdir('templates/' + template): |
||||
templates.append(template) |
||||
template = public.readFile('data/templates.pl') |
||||
|
||||
check502 = '' |
||||
if os.path.exists('data/502Task.pl'): |
||||
check502 = 'checked' |
||||
return {'port': port, 'address': address, 'domain': domain, 'auto': autoUpdate, '502': check502, 'limitip': limitip, 'templates': templates, 'template': template} |
||||
|
||||
def getSystemTotal(self, interval=1): |
||||
# 取系统统计信息 |
||||
data = self.getMemInfo() |
||||
cpu = self.getCpuInfo(interval) |
||||
data['cpuNum'] = cpu[1] |
||||
data['cpuRealUsed'] = cpu[0] |
||||
data['time'] = self.getBootTime() |
||||
data['system'] = self.getSystemVersion() |
||||
data['isuser'] = public.M('users').where( |
||||
'username=?', ('admin',)).count() |
||||
data['version'] = '0.0.1' |
||||
return data |
||||
|
||||
def getLoadAverage(self, get=None): |
||||
c = os.getloadavg() |
||||
data = {} |
||||
data['one'] = float(c[0]) |
||||
data['five'] = float(c[1]) |
||||
data['fifteen'] = float(c[2]) |
||||
data['max'] = psutil.cpu_count() * 2 |
||||
data['limit'] = data['max'] |
||||
data['safe'] = data['max'] * 0.75 |
||||
return data |
||||
|
||||
def getAllInfo(self, get): |
||||
data = {} |
||||
data['load_average'] = self.GetLoadAverage(get) |
||||
data['title'] = self.GetTitle() |
||||
data['network'] = self.GetNetWorkApi(get) |
||||
data['panel_status'] = not os.path.exists( |
||||
'/www/server/panel/data/close.pl') |
||||
import firewalls |
||||
ssh_info = firewalls.firewalls().GetSshInfo(None) |
||||
data['enable_ssh_status'] = ssh_info['status'] |
||||
data['disable_ping_status'] = not ssh_info['ping'] |
||||
data['time'] = self.GetBootTime() |
||||
# data['system'] = self.GetSystemVersion(); |
||||
# data['mem'] = self.GetMemInfo(); |
||||
data['version'] = web.ctx.session.version |
||||
return data |
||||
|
||||
def getTitle(self): |
||||
titlePl = 'data/title.pl' |
||||
title = '宝塔Linux面板' |
||||
if os.path.exists(titlePl): |
||||
title = public.readFile(titlePl).strip() |
||||
return title |
||||
|
||||
def getSystemVersion(self): |
||||
# 取操作系统版本 |
||||
os = public.getOs() |
||||
if os == 'darwin': |
||||
return os |
||||
|
||||
version = public.readFile('/etc/redhat-release') |
||||
if not version: |
||||
version = public.readFile( |
||||
'/etc/issue').strip().split("\n")[0].replace('\\n', '').replace('\l', '').strip() |
||||
else: |
||||
version = version.replace('release ', '').strip() |
||||
return version |
||||
|
||||
def getBootTime(self): |
||||
# 取系统启动时间 |
||||
start_time = psutil.boot_time() |
||||
run_time = time.time() - start_time |
||||
# conf = public.readFile('/proc/uptime').split() |
||||
tStr = float(run_time) |
||||
min = tStr / 60 |
||||
hours = min / 60 |
||||
days = math.floor(hours / 24) |
||||
hours = math.floor(hours - (days * 24)) |
||||
min = math.floor(min - (days * 60 * 24) - (hours * 60)) |
||||
return public.getMsg('SYS_BOOT_TIME', (str(int(days)), str(int(hours)), str(int(min)))) |
||||
|
||||
def getCpuInfo(self, interval=1): |
||||
# 取CPU信息 |
||||
cpuCount = psutil.cpu_count() |
||||
used = psutil.cpu_percent(interval=interval) |
||||
return used, cpuCount |
||||
|
||||
def getMemInfo(self, get=None): |
||||
# 取内存信息 |
||||
mem = psutil.virtual_memory() |
||||
if public.getOs() == 'darwin': |
||||
memInfo = { |
||||
'memTotal': mem.total / 1024 / 1024 |
||||
} |
||||
memInfo['memRealUsed'] = memInfo['memTotal'] * (mem.percent / 100) |
||||
else: |
||||
memInfo = { |
||||
'memTotal': mem.total / 1024 / 1024, |
||||
'memFree': mem.free / 1024 / 1024, |
||||
'memBuffers': mem.buffers / 1024 / 1024, |
||||
'memCached': mem.cached / 1024 / 1024 |
||||
} |
||||
|
||||
memInfo['memRealUsed'] = memInfo['memTotal'] - \ |
||||
memInfo['memFree'] - memInfo['memBuffers'] - \ |
||||
memInfo['memCached'] |
||||
return memInfo |
||||
|
||||
def getDiskInfo(self, get=None): |
||||
return self.getDiskInfo2() |
||||
# 取磁盘分区信息 |
||||
diskIo = psutil.disk_partitions() |
||||
diskInfo = [] |
||||
|
||||
for disk in diskIo: |
||||
if disk[1] == '/mnt/cdrom': |
||||
continue |
||||
if disk[1] == '/boot': |
||||
continue |
||||
tmp = {} |
||||
tmp['path'] = disk[1] |
||||
tmp['size'] = psutil.disk_usage(disk[1]) |
||||
diskInfo.append(tmp) |
||||
return diskInfo |
||||
|
||||
def getDiskInfo2(self): |
||||
# 取磁盘分区信息 |
||||
temp = public.execShell( |
||||
"df -h -P|grep '/'|grep -v tmpfs | grep -v devfs")[0] |
||||
tempInodes = public.execShell( |
||||
"df -i -P|grep '/'|grep -v tmpfs | grep -v devfs")[0] |
||||
temp1 = temp.split('\n') |
||||
tempInodes1 = tempInodes.split('\n') |
||||
diskInfo = [] |
||||
n = 0 |
||||
cuts = ['/mnt/cdrom', '/boot', '/boot/efi', '/dev', |
||||
'/dev/shm', '/run/lock', '/run', '/run/shm', '/run/user'] |
||||
for tmp in temp1: |
||||
n += 1 |
||||
inodes = tempInodes1[n - 1].split() |
||||
disk = tmp.split() |
||||
if len(disk) < 5: |
||||
continue |
||||
if disk[1].find('M') != -1: |
||||
continue |
||||
if disk[1].find('K') != -1: |
||||
continue |
||||
if len(disk[5].split('/')) > 4: |
||||
continue |
||||
if disk[5] in cuts: |
||||
continue |
||||
arr = {} |
||||
arr['path'] = disk[5] |
||||
tmp1 = [disk[1], disk[2], disk[3], disk[4]] |
||||
arr['size'] = tmp1 |
||||
arr['inodes'] = [inodes[1], inodes[2], inodes[3], inodes[4]] |
||||
if disk[5] == '/': |
||||
bootLog = os.getcwd() + '/tmp/panelBoot.pl' |
||||
if disk[2].find('M') != -1: |
||||
if os.path.exists(bootLog): |
||||
os.system('rm -f ' + bootLog) |
||||
else: |
||||
if not os.path.exists(bootLog): |
||||
pass |
||||
if inodes[2] != '0': |
||||
diskInfo.append(arr) |
||||
return diskInfo |
||||
|
||||
# 清理系统垃圾 |
||||
def clearSystem(self, get): |
||||
count = total = 0 |
||||
tmp_total, tmp_count = self.ClearMail() |
||||
count += tmp_count |
||||
total += tmp_total |
||||
tmp_total, tmp_count = self.ClearOther() |
||||
count += tmp_count |
||||
total += tmp_total |
||||
return count, total |
||||
|
||||
# 清理邮件日志 |
||||
def clearMail(self): |
||||
rpath = '/var/spool' |
||||
total = count = 0 |
||||
import shutil |
||||
con = ['cron', 'anacron', 'mail'] |
||||
for d in os.listdir(rpath): |
||||
if d in con: |
||||
continue |
||||
dpath = rpath + '/' + d |
||||
time.sleep(0.2) |
||||
num = size = 0 |
||||
for n in os.listdir(dpath): |
||||
filename = dpath + '/' + n |
||||
fsize = os.path.getsize(filename) |
||||
size += fsize |
||||
if os.path.isdir(filename): |
||||
shutil.rmtree(filename) |
||||
else: |
||||
os.remove(filename) |
||||
print '\t\033[1;32m[OK]\033[0m' |
||||
num += 1 |
||||
total += size |
||||
count += num |
||||
return total, count |
||||
|
||||
# 清理其它 |
||||
def clearOther(self): |
||||
clearPath = [ |
||||
{'path': '/www/server/panel', 'find': 'testDisk_'}, |
||||
{'path': '/www/wwwlogs', 'find': 'log'}, |
||||
{'path': '/tmp', 'find': 'panelBoot.pl'}, |
||||
{'path': '/www/server/panel/install', 'find': '.rpm'} |
||||
] |
||||
|
||||
total = count = 0 |
||||
for c in clearPath: |
||||
for d in os.listdir(c['path']): |
||||
if d.find(c['find']) == -1: |
||||
continue |
||||
filename = c['path'] + '/' + d |
||||
fsize = os.path.getsize(filename) |
||||
total += fsize |
||||
if os.path.isdir(filename): |
||||
shutil.rmtree(filename) |
||||
else: |
||||
os.remove(filename) |
||||
count += 1 |
||||
public.serviceReload() |
||||
os.system('echo > /tmp/panelBoot.pl') |
||||
return total, count |
||||
|
||||
def getNetWork(self, get=None): |
||||
# return self.GetNetWorkApi(get); |
||||
# 取网络流量信息 |
||||
try: |
||||
# 取网络流量信息 |
||||
networkIo = psutil.net_io_counters()[:4] |
||||
if not "otime" in session: |
||||
session['up'] = networkIo[0] |
||||
session['down'] = networkIo[1] |
||||
session['otime'] = time.time() |
||||
|
||||
ntime = time.time() |
||||
networkInfo = {} |
||||
networkInfo['upTotal'] = networkIo[0] |
||||
networkInfo['downTotal'] = networkIo[1] |
||||
networkInfo['up'] = round(float( |
||||
networkIo[0] - session['up']) / 1024 / (ntime - session['otime']), 2) |
||||
networkInfo['down'] = round( |
||||
float(networkIo[1] - session['down']) / 1024 / (ntime - session['otime']), 2) |
||||
networkInfo['downPackets'] = networkIo[3] |
||||
networkInfo['upPackets'] = networkIo[2] |
||||
|
||||
# print networkIo[1], session['down'], ntime, session['otime'] |
||||
session['up'] = networkIo[0] |
||||
session['down'] = networkIo[1] |
||||
session['otime'] = time.time() |
||||
|
||||
networkInfo['cpu'] = self.getCpuInfo() |
||||
networkInfo['load'] = self.getLoadAverage(get) |
||||
networkInfo['mem'] = self.getMemInfo(get) |
||||
|
||||
return networkInfo |
||||
except Exception, e: |
||||
return None |
||||
|
||||
def getNetWorkApi(self, get=None): |
||||
# 取网络流量信息 |
||||
try: |
||||
tmpfile = 'data/network.temp' |
||||
networkIo = psutil.net_io_counters()[:4] |
||||
|
||||
if not os.path.exists(tmpfile): |
||||
public.writeFile(tmpfile, str( |
||||
networkIo[0]) + '|' + str(networkIo[1]) + '|' + str(int(time.time()))) |
||||
|
||||
lastValue = public.readFile(tmpfile).split('|') |
||||
|
||||
ntime = time.time() |
||||
networkInfo = {} |
||||
networkInfo['upTotal'] = networkIo[0] |
||||
networkInfo['downTotal'] = networkIo[1] |
||||
networkInfo['up'] = round( |
||||
float(networkIo[0] - int(lastValue[0])) / 1024 / (ntime - int(lastValue[2])), 2) |
||||
networkInfo['down'] = round( |
||||
float(networkIo[1] - int(lastValue[1])) / 1024 / (ntime - int(lastValue[2])), 2) |
||||
networkInfo['downPackets'] = networkIo[3] |
||||
networkInfo['upPackets'] = networkIo[2] |
||||
|
||||
public.writeFile(tmpfile, str( |
||||
networkIo[0]) + '|' + str(networkIo[1]) + '|' + str(int(time.time()))) |
||||
|
||||
# networkInfo['cpu'] = self.GetCpuInfo(0.1) |
||||
return networkInfo |
||||
except: |
||||
return None |
||||
|
||||
def restartServer(self, get): |
||||
if not public.IsRestart(): |
||||
return public.returnMsg(False, 'EXEC_ERR_TASK') |
||||
public.ExecShell("sync && /etc/init.d/bt stop && init 6 &") |
||||
return public.returnMsg(True, 'SYS_REBOOT') |
||||
|
||||
# 释放内存 |
||||
def reMemory(self, get): |
||||
os.system('sync') |
||||
scriptFile = 'script/rememory.sh' |
||||
if not os.path.exists(scriptFile): |
||||
public.downloadFile(web.ctx.session.home + |
||||
'/script/rememory.sh', scriptFile) |
||||
public.ExecShell("/bin/bash " + self.setupPath + |
||||
'/panel/' + scriptFile) |
||||
return self.GetMemInfo() |
||||
|
||||
# 重启面板 |
||||
def reWeb(self, get): |
||||
# if not public.IsRestart(): return |
||||
# public.returnMsg(False,'EXEC_ERR_TASK'); |
||||
public.ExecShell('/etc/init.d/bt restart &') |
||||
return True |
||||
|
||||
# 修复面板 |
||||
def repPanel(self, get): |
||||
vp = '' |
||||
if public.readFile('/www/server/panel/class/common.py').find('checkSafe') != -1: |
||||
vp = '_pro' |
||||
public.ExecShell("wget -O update.sh " + public.get_url() + |
||||
"/install/update" + vp + ".sh && bash update.sh") |
||||
if hasattr(web.ctx.session, 'getCloudPlugin'): |
||||
del(web.ctx.session['getCloudPlugin']) |
||||
return True |
||||
|
||||
# 升级到专业版 |
||||
def updatePro(self, get): |
||||
public.ExecShell("wget -O update.sh " + public.get_url() + |
||||
"/install/update_pro.sh && bash update.sh pro") |
||||
if hasattr(web.ctx.session, 'getCloudPlugin'): |
||||
del(web.ctx.session['getCloudPlugin']) |
||||
return True |
@ -0,0 +1,244 @@ |
||||
#!/bin/bash |
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin |
||||
export PATH |
||||
public_file=/www/server/panel/install/public.sh |
||||
if [ ! -f $public_file ];then |
||||
wget -O $public_file http://download.bt.cn/install/public.sh -T 5; |
||||
fi |
||||
. $public_file |
||||
download_Url=$NODE_URL |
||||
mkdir -p /www/server |
||||
run_path="/root" |
||||
Is_64bit=`getconf LONG_BIT` |
||||
|
||||
centos_version=`cat /etc/redhat-release | grep ' 7.' | grep -i centos` |
||||
if [ "${centos_version}" != '' ]; then |
||||
rpm_path="centos7" |
||||
else |
||||
rpm_path="centos6" |
||||
fi |
||||
|
||||
Install_SendMail() |
||||
{ |
||||
yum install postfix mysql-libs -y |
||||
if [ "${centos_version}" != '' ];then |
||||
systemctl start postfix |
||||
systemctl enable postfix |
||||
else |
||||
service postfix start |
||||
chkconfig --level 2345 postfix on |
||||
fi |
||||
} |
||||
|
||||
Install_Curl() |
||||
{ |
||||
if [ -f "/usr/local/curl/newcurl.pl" ];then |
||||
return; |
||||
fi |
||||
cd ${run_path} |
||||
curl_version="7.54.1" |
||||
if [ ! -f "curl-$curl_version.tar.gz" ];then |
||||
wget -O curl-$curl_version.tar.gz ${download_Url}/src/curl-$curl_version.tar.gz -T 5 |
||||
fi |
||||
tar zxf curl-$curl_version.tar.gz |
||||
cd curl-$curl_version |
||||
./configure --prefix=/usr/local/curl --enable-ares --without-nss --with-ssl=/usr/local/openssl |
||||
make && make install |
||||
cd .. |
||||
rm -rf curl-$curl_version |
||||
rm -rf curl-$curl_version.tar.gz |
||||
echo -e "Install_Curl" >> /www/server/lib.pl |
||||
echo -e "Ture" >> /usr/local/curl/newcurl.pl |
||||
} |
||||
|
||||
Install_Libiconv() |
||||
{ |
||||
if [ -d '/usr/local/libiconv' ];then |
||||
return |
||||
fi |
||||
cd ${run_path} |
||||
if [ ! -f "libiconv-1.14.tar.gz" ];then |
||||
wget -O libiconv-1.14.tar.gz ${download_Url}/src/libiconv-1.14.tar.gz -T 5 |
||||
fi |
||||
mkdir /patch |
||||
wget -O /patch/libiconv-glibc-2.16.patch ${download_Url}/src/patch/libiconv-glibc-2.16.patch -T 5 |
||||
tar zxf libiconv-1.14.tar.gz |
||||
cd libiconv-1.14 |
||||
patch -p0 < /patch/libiconv-glibc-2.16.patch |
||||
./configure --prefix=/usr/local/libiconv --enable-static |
||||
make && make install |
||||
cd ${run_path} |
||||
rm -rf libiconv-1.14 |
||||
rm -f libiconv-1.14.tar.gz |
||||
echo -e "Install_Libiconv" >> /www/server/lib.pl |
||||
} |
||||
|
||||
Install_Libmcrypt() |
||||
{ |
||||
if [ -f '/usr/local/lib/libmcrypt.so' ];then |
||||
return; |
||||
fi |
||||
cd ${run_path} |
||||
if [ ! -f "libmcrypt-2.5.8.tar.gz" ];then |
||||
wget -O libmcrypt-2.5.8.tar.gz ${download_Url}/src/libmcrypt-2.5.8.tar.gz -T 5 |
||||
fi |
||||
tar zxf libmcrypt-2.5.8.tar.gz |
||||
cd libmcrypt-2.5.8 |
||||
|
||||
./configure |
||||
make && make install |
||||
/sbin/ldconfig |
||||
cd libltdl/ |
||||
./configure --enable-ltdl-install |
||||
make && make install |
||||
ln -sf /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la |
||||
ln -sf /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so |
||||
ln -sf /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4 |
||||
ln -sf /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8 |
||||
ldconfig |
||||
cd ${run_path} |
||||
rm -rf libmcrypt-2.5.8 |
||||
rm -f libmcrypt-2.5.8.tar.gz |
||||
echo -e "Install_Libmcrypt" >> /www/server/lib.pl |
||||
} |
||||
|
||||
Install_Mcrypt() |
||||
{ |
||||
if [ -f '/usr/bin/mcrypt' ] || [ -f '/usr/local/bin/mcrypt' ];then |
||||
return; |
||||
fi |
||||
cd ${run_path} |
||||
if [ ! -f "mcrypt-2.6.8.tar.gz" ];then |
||||
wget -O mcrypt-2.6.8.tar.gz ${download_Url}/src/mcrypt-2.6.8.tar.gz -T 5 |
||||
fi |
||||
tar zxf mcrypt-2.6.8.tar.gz |
||||
cd mcrypt-2.6.8 |
||||
./configure |
||||
make && make install |
||||
cd ${run_path} |
||||
rm -rf mcrypt-2.6.8 |
||||
rm -f mcrypt-2.6.8.tar.gz |
||||
echo -e "Install_Mcrypt" >> /www/server/lib.pl |
||||
} |
||||
|
||||
Install_Mhash() |
||||
{ |
||||
if [ -f '/usr/local/lib/libmhash.so' ];then |
||||
return; |
||||
fi |
||||
cd ${run_path} |
||||
if [ ! -f "mhash-0.9.9.9.tar.gz" ];then |
||||
wget -O mhash-0.9.9.9.tar.gz ${download_Url}/src/mhash-0.9.9.9.tar.gz -T 5 |
||||
fi |
||||
tar zxf mhash-0.9.9.9.tar.gz |
||||
cd mhash-0.9.9.9 |
||||
./configure |
||||
make && make install |
||||
ln -sf /usr/local/lib/libmhash.a /usr/lib/libmhash.a |
||||
ln -sf /usr/local/lib/libmhash.la /usr/lib/libmhash.la |
||||
ln -sf /usr/local/lib/libmhash.so /usr/lib/libmhash.so |
||||
ln -sf /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2 |
||||
ln -sf /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1 |
||||
ldconfig |
||||
cd ${run_path} |
||||
rm -rf mhash-0.9.9.9* |
||||
echo -e "Install_Mhash" >> /www/server/lib.pl |
||||
} |
||||
|
||||
|
||||
Install_Freetype() |
||||
{ |
||||
if [ -d /usr/local/freetype ];then |
||||
return; |
||||
fi |
||||
cd ${run_path} |
||||
if [ ! -f "freetype-2.4.12.tar.gz" ];then |
||||
wget -O freetype-2.4.12.tar.gz ${download_Url}/src/freetype-2.4.12.tar.gz -T 5 |
||||
fi |
||||
tar zxf freetype-2.4.12.tar.gz |
||||
cd freetype-2.4.12 |
||||
./configure --prefix=/usr/local/freetype |
||||
make && make install |
||||
|
||||
cat > /etc/ld.so.conf.d/freetype.conf<<EOF |
||||
/usr/local/freetype/lib |
||||
EOF |
||||
ldconfig |
||||
ln -sf /usr/local/freetype/include/freetype2 /usr/local/include |
||||
ln -sf /usr/local/freetype/include/ft2build.h /usr/local/include |
||||
cd ${run_path} |
||||
rm -rf freetype-2.4.12 |
||||
rm -f freetype-2.4.12.tar.gz |
||||
echo -e "Install_Freetype" >> /www/server/lib.pl |
||||
} |
||||
|
||||
Install_Pcre() |
||||
{ |
||||
Cur_Pcre_Ver=`pcre-config --version|grep '^8.' 2>&1` |
||||
if [ "$Cur_Pcre_Ver" == "" ];then |
||||
pcre_version=8.40 |
||||
wget -O pcre-$pcre_version.tar.gz ${download_Url}/src/pcre-$pcre_version.tar.gz -T 5 |
||||
tar zxf pcre-$pcre_version.tar.gz |
||||
cd pcre-$pcre_version |
||||
if [ "$Is_64bit" == "64" ];then |
||||
./configure --prefix=/usr --docdir=/usr/share/doc/pcre-$pcre_version --libdir=/usr/lib64 --enable-unicode-properties --enable-pcre16 --enable-pcre32 --enable-pcregrep-libz --enable-pcregrep-libbz2 --enable-pcretest-libreadline --disable-static --enable-utf8 |
||||
else |
||||
./configure --prefix=/usr --docdir=/usr/share/doc/pcre-$pcre_version --enable-unicode-properties --enable-pcre16 --enable-pcre32 --enable-pcregrep-libz --enable-pcregrep-libbz2 --enable-pcretest-libreadline --disable-static --enable-utf8 |
||||
fi |
||||
make && make install |
||||
cd .. |
||||
rm -rf pcre-$pcre_version |
||||
rm -f pcre-$pcre_version.tar.gz |
||||
fi |
||||
} |
||||
|
||||
Install_OpenSSL() |
||||
{ |
||||
if [ ! -d "/usr/local/openssl" ];then |
||||
cd ${run_path} |
||||
wget ${download_Url}/src/openssl-1.0.2l.tar.gz -T 20 |
||||
tar -zxf openssl-1.0.2l.tar.gz |
||||
rm -f openssl-1.0.2l.tar.gz |
||||
cd openssl-1.0.2l |
||||
./config --openssldir=/usr/local/openssl zlib-dynamic shared |
||||
make && make install |
||||
echo '1.0.2l_shared' > /usr/local/openssl/version.pl |
||||
cd .. |
||||
rm -rf openssl-1.0.2l |
||||
cat > /etc/ld.so.conf.d/openssl.conf <<EOF |
||||
/usr/local/openssl/lib |
||||
EOF |
||||
ldconfig |
||||
fi |
||||
} |
||||
Install_Lib() |
||||
{ |
||||
if [ -f "/www/server/nginx/sbin/nginx" ] || [ -f "/www/server/apache/bin/httpd" ] || [ -f "/www/server/mysql/bin/mysql" ]; then |
||||
return |
||||
fi |
||||
lockFile='/www/server/panel/data/bt_lib.lock' |
||||
if [ ! -f "${lockFile}" ];then |
||||
sed -i "s#SELINUX=enforcing#SELINUX=disabled#" /etc/selinux/config |
||||
rpm -e --nodeps mariadb-libs-* |
||||
|
||||
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup |
||||
rm -f /var/run/yum.pid |
||||
for yumPack in make cmake gcc gcc-c++ gcc-g77 flex bison file libtool libtool-libs autoconf kernel-devel patch wget libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel tar bzip2 bzip2-devel libevent libevent-devel ncurses ncurses-devel curl curl-devel libcurl libcurl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel vim-minimal gettext gettext-devel ncurses-devel gmp-devel pspell-devel libcap diffutils ca-certificates net-tools libc-client-devel psmisc libXpm-devel git-core c-ares-devel libicu-devel libxslt libxslt-devel zip unzip glibc.i686 libstdc++.so.6 cairo-devel bison-devel ncurses-devel libaio-devel perl perl-devel perl-Data-Dumper lsof pcre pcre-devel vixie-cron crontabs expat-devel readline-devel; |
||||
do yum -y install $yumPack;done |
||||
|
||||
Install_SendMail |
||||
mv /etc/yum.repos.d/epel.repo.backup /etc/yum.repos.d/epel.repo |
||||
groupadd www |
||||
useradd -s /sbin/nologin -M -g www www |
||||
echo 'true' > $lockFile |
||||
fi |
||||
} |
||||
|
||||
Install_Lib |
||||
Install_OpenSSL |
||||
Install_Pcre |
||||
Install_Curl |
||||
Install_Mhash |
||||
Install_Libmcrypt |
||||
Install_Mcrypt |
||||
Install_Libiconv |
Loading…
Reference in new issue