> /etc/opendkim/SigningTable
+echo -e '$MAINDOMAIN $MAINDOMAIN:default:/etc/opendkim/keys/$MAINDOMAIN/default.private' >> /etc/opendkim/KeyTable
+echo "127.0.0.1" > /etc/opendkim/TrustedHosts
+echo "localhost" >> /etc/opendkim/TrustedHosts
+echo -e '*.$MAINDOMAIN' >> /etc/opendkim/TrustedHosts
+chown opendkim:opendkim /etc/opendkim/keys/ -R
+
+systemctl start opendkim
+systemctl enable opendkim
+
+## POSTFIX WITH Opendkim
+cat >> /etc/postfix/main.cf <<'EOF'
+#smtpd_milters setting
+smtpd_milters = inet:127.0.0.1:8891
+non_smtpd_milters = $smtpd_milters
+milter_protocol = 2
+milter_default_action = accept
+EOF
+
+systemctl restart postfix
+
+echo "Success : ADD TXT Record $MAINDOMAIN \n " >> $BUILD
+
+cat /etc/opendkim/keys/$MAINDOMAIN/default.txt >> $BUILD
+
+postmap -q domain.com mysql:/etc/postfix/mysql-virtual_domains.cf
+postmap -q amol@domain.com mysql:/etc/postfix/mysql-virtual_mailboxes.cf
+service postfix reload
+echo "+++++++++++++++++ opendkim ended +++++++++\n ";
+echo "Success : opendkim\n " >> $BUILD
diff --git a/inc/openlitespeed/OpenLite-master.zip b/inc/openlitespeed/OpenLite-master.zip
new file mode 100644
index 0000000..8691951
Binary files /dev/null and b/inc/openlitespeed/OpenLite-master.zip differ
diff --git a/inc/openlitespeed/README.md b/inc/openlitespeed/README.md
new file mode 100644
index 0000000..1841092
--- /dev/null
+++ b/inc/openlitespeed/README.md
@@ -0,0 +1,12 @@
+# OpenLite
+
+
+
+
+
+
+yum -y install wget unzip;wget --no-check-certificate -O installer.zip https://github.com/djamol/OpenLite/archive/master.zip; unzip installer.zip; cd OpenLite-master;chmod +x hostadd;;chmod +x shell/*.sh;chmod +x lsws.sh;./lsws.sh
+
+
+
+./lsws.sh &
+
+
+
+ LLNMP一键安装包 by djamol.com
+
+
+
+
+ 
+
+
+
+ -
+
LLNMP = Linux+Litespeed+Nginx+MySQL+PHP
+
+
+
+
+
+
+
diff --git a/inc/openlitespeed/conf/llnmp.jpg b/inc/openlitespeed/conf/llnmp.jpg
new file mode 100644
index 0000000..0688ea7
Binary files /dev/null and b/inc/openlitespeed/conf/llnmp.jpg differ
diff --git a/inc/openlitespeed/conf/memcached-centos b/inc/openlitespeed/conf/memcached-centos
new file mode 100644
index 0000000..1b7a0d3
--- /dev/null
+++ b/inc/openlitespeed/conf/memcached-centos
@@ -0,0 +1,107 @@
+#!/bin/sh
+#
+# chkconfig: - 55 45
+# description: The memcached daemon is a network memory cache service.
+# processname: memcached
+# config: /etc/sysconfig/memcached
+# pidfile: /var/run/memcached/memcached.*.pid
+
+# Source function library.
+. /etc/init.d/functions
+
+PORT=11211
+USER=memcached
+MAXCONN=1024
+OPTIONS=""
+
+if [ -f /etc/sysconfig/memcached ];then
+ . /etc/sysconfig/memcached
+fi
+
+# Check that networking is up.
+. /etc/sysconfig/network
+
+if [ "$NETWORKING" = "no" ]
+then
+ exit 0
+fi
+
+RETVAL=0
+prog="/usr/local/memcached/bin/memcached"
+
+start_instance() {
+ echo -n $"Starting $prog ($1): "
+ daemon --pidfile /var/run/memcached/memcached.$1.pid memcached -d -p $PORT -u $USER -m $2 -c $MAXCONN -P /var/run/memcached/memcached.$1.pid $OPTIONS
+ RETVAL=$?
+ echo
+ [ $RETVAL -eq 0 ] && touch /var/lock/subsys/memcached.$1
+ PORT=`expr $PORT + 1`
+}
+
+stop_instance() {
+ echo -n $"Stopping $prog ($1): "
+ killproc -p /var/run/memcached/memcached.$1.pid /usr/bin/memcached
+ RETVAL=$?
+ echo
+ if [ $RETVAL -eq 0 ] ; then
+ rm -f /var/lock/subsys/memcached.$1
+ rm -f /var/run/memcached.$1.pid
+ fi
+}
+
+start () {
+ # insure that /var/run/memcached has proper permissions
+ mkdir -p /var/run/memcached
+ if [ "`stat -c %U /var/run/memcached`" != "$USER" ]; then
+ chown $USER /var/run/memcached
+ fi
+
+ start_instance default 64;
+ #start_instance block 16;
+ #start_instance content 128;
+ #start_instance filter 128;
+ #start_instance form 32;
+ #start_instance menu 16;
+ #start_instance page 8;
+ #start_instance update 8;
+ #start_instance views 8;
+}
+stop () {
+ stop_instance default;
+ #stop_instance block;
+ #stop_instance content;
+ #stop_instance filter;
+ #stop_instance form;
+ #stop_instance menu;
+ #stop_instance page;
+ #stop_instance update;
+ #stop_instance views;
+}
+
+restart () {
+ stop
+ start
+}
+
+
+# See how we were called.
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ status)
+ status memcached
+ ;;
+ restart|reload|force-reload)
+ restart
+ ;;
+ *)
+ echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}"
+ exit 1
+esac
+
+exit $?
+
diff --git a/inc/openlitespeed/conf/memcached-debian b/inc/openlitespeed/conf/memcached-debian
new file mode 100644
index 0000000..6c6241d
--- /dev/null
+++ b/inc/openlitespeed/conf/memcached-debian
@@ -0,0 +1,86 @@
+#! /bin/sh
+#
+
+PORT=11211
+USER=memcached
+MAXCONN=1024
+OPTIONS=""
+DAEMON=/usr/local/memcached/bin/memcached
+
+RETVAL=0
+prog="/usr/local/memcached/bin/memcached"
+
+start_instance() {
+ echo -n $"Starting $prog ($1): "
+ start-stop-daemon --start --quiet --pidfile /var/run/memcached/memcached.$1.pid --exec $DAEMON -- -d -p $PORT -u $USER -m $2 -c $MAXCONN -P /var/run/memcached/memcached.$1.pid $OPTIONS
+ RETVAL=$?
+ echo
+ [ $RETVAL -eq 0 ] && touch /var/lock/memcached.$1
+ PORT=`expr $PORT + 1`
+}
+
+stop_instance() {
+ echo -n $"Stopping $prog ($1): "
+ start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/memcached/memcached.$1.pid --exec $DAEMON
+ RETVAL=$?
+ echo
+ if [ $RETVAL -eq 0 ] ; then
+ rm -f /var/lock/memcached.$1
+ rm -f /var/run/memcached/memcached.$1.pid
+ fi
+}
+start () {
+ # insure that /var/run/memcached has proper permissions
+ mkdir -p /var/run/memcached
+ if [ "`stat -c %U /var/run/memcached`" != "$USER" ]; then
+ chown $USER /var/run/memcached
+ fi
+
+ start_instance default 64;
+ #start_instance block 16;
+ #start_instance content 128;
+ #start_instance filter 128;
+ #start_instance form 32;
+ #start_instance menu 16;
+ #start_instance page 8;
+ #start_instance update 8;
+ #start_instance views 8;
+}
+stop () {
+ stop_instance default;
+ #stop_instance block;
+ #stop_instance content;
+ #stop_instance filter;
+ #stop_instance form;
+ #stop_instance menu;
+ #stop_instance page;
+ #stop_instance update;
+ #stop_instance views;
+}
+
+restart () {
+ stop
+ start
+}
+
+# See how we were called.
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ status)
+ status memcached
+ ;;
+ restart|reload|force-reload)
+ restart
+ ;;
+ *)
+ echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}"
+ exit 1
+esac
+
+exit $?
+
diff --git a/inc/openlitespeed/conf/memcached.php b/inc/openlitespeed/conf/memcached.php
new file mode 100644
index 0000000..a7d485f
--- /dev/null
+++ b/inc/openlitespeed/conf/memcached.php
@@ -0,0 +1,863 @@
+ |
+ +----------------------------------------------------------------------+
+*/
+
+$VERSION='$Id: memcache.php,v 1.1.2.3 2008/08/28 18:07:54 mikl Exp $';
+
+define('DATE_FORMAT','Y/m/d H:i:s');
+define('GRAPH_SIZE',200);
+define('MAX_ITEM_DUMP',50);
+
+$MEMCACHE_SERVERS[] = 'localhost:11211'; // add more as an array
+
+
+////////// END OF DEFAULT CONFIG AREA /////////////////////////////////////////////////////////////
+
+///////////MEMCACHE FUNCTIONS /////////////////////////////////////////////////////////////////////
+
+function sendMemcacheCommands($command){
+ global $MEMCACHE_SERVERS;
+ $result = array();
+
+ foreach($MEMCACHE_SERVERS as $server){
+ $strs = explode(':',$server);
+ $host = $strs[0];
+ $port = $strs[1];
+ $result[$server] = sendMemcacheCommand($host,$port,$command);
+ }
+ return $result;
+}
+function sendMemcacheCommand($server,$port,$command){
+
+ $s = @fsockopen($server,$port);
+ if (!$s){
+ die("Cant connect to:".$server.':'.$port);
+ }
+
+ fwrite($s, $command."\r\n");
+
+ $buf='';
+ while ((!feof($s))) {
+ $buf .= fgets($s, 256);
+ if (strpos($buf,"END\r\n")!==false){ // stat says end
+ break;
+ }
+ if (strpos($buf,"DELETED\r\n")!==false || strpos($buf,"NOT_FOUND\r\n")!==false){ // delete says these
+ break;
+ }
+ if (strpos($buf,"OK\r\n")!==false){ // flush_all says ok
+ break;
+ }
+ }
+ fclose($s);
+ return parseMemcacheResults($buf);
+}
+function parseMemcacheResults($str){
+
+ $res = array();
+ $lines = explode("\r\n",$str);
+ $cnt = count($lines);
+ for($i=0; $i< $cnt; $i++){
+ $line = $lines[$i];
+ $l = explode(' ',$line,3);
+ if (count($l)==3){
+ $res[$l[0]][$l[1]]=$l[2];
+ if ($l[0]=='VALUE'){ // next line is the value
+ $res[$l[0]][$l[1]] = array();
+ list ($flag,$size)=explode(' ',$l[2]);
+ $res[$l[0]][$l[1]]['stat']=array('flag'=>$flag,'size'=>$size);
+ $res[$l[0]][$l[1]]['value']=$lines[++$i];
+ }
+ }elseif($line=='DELETED' || $line=='NOT_FOUND' || $line=='OK'){
+ return $line;
+ }
+ }
+ return $res;
+
+}
+
+function dumpCacheSlab($server,$slabId,$limit){
+ list($host,$port) = explode(':',$server);
+ $resp = sendMemcacheCommand($host,$port,'stats cachedump '.$slabId.' '.$limit);
+
+ return $resp;
+
+}
+
+function flushServer($server){
+ list($host,$port) = explode(':',$server);
+ $resp = sendMemcacheCommand($host,$port,'flush_all');
+ return $resp;
+}
+function getCacheItems(){
+ $items = sendMemcacheCommands('stats items');
+ $serverItems = array();
+ $totalItems = array();
+ foreach ($items as $server=>$itemlist){
+ $serverItems[$server] = array();
+ $totalItems[$server]=0;
+ if (!isset($itemlist['STAT'])){
+ continue;
+ }
+
+ $iteminfo = $itemlist['STAT'];
+
+ foreach($iteminfo as $keyinfo=>$value){
+ if (preg_match('/items\:(\d+?)\:(.+?)$/',$keyinfo,$matches)){
+ $serverItems[$server][$matches[1]][$matches[2]] = $value;
+ if ($matches[2]=='number'){
+ $totalItems[$server] +=$value;
+ }
+ }
+ }
+ }
+ return array('items'=>$serverItems,'counts'=>$totalItems);
+}
+function getMemcacheStats($total=true){
+ $resp = sendMemcacheCommands('stats');
+ if ($total){
+ $res = array();
+ foreach($resp as $server=>$r){
+ foreach($r['STAT'] as $key=>$row){
+ if (!isset($res[$key])){
+ $res[$key]=null;
+ }
+ switch ($key){
+ case 'pid':
+ $res['pid'][$server]=$row;
+ break;
+ case 'uptime':
+ $res['uptime'][$server]=$row;
+ break;
+ case 'time':
+ $res['time'][$server]=$row;
+ break;
+ case 'version':
+ $res['version'][$server]=$row;
+ break;
+ case 'pointer_size':
+ $res['pointer_size'][$server]=$row;
+ break;
+ case 'rusage_user':
+ $res['rusage_user'][$server]=$row;
+ break;
+ case 'rusage_system':
+ $res['rusage_system'][$server]=$row;
+ break;
+ case 'curr_items':
+ $res['curr_items']+=$row;
+ break;
+ case 'total_items':
+ $res['total_items']+=$row;
+ break;
+ case 'bytes':
+ $res['bytes']+=$row;
+ break;
+ case 'curr_connections':
+ $res['curr_connections']+=$row;
+ break;
+ case 'total_connections':
+ $res['total_connections']+=$row;
+ break;
+ case 'connection_structures':
+ $res['connection_structures']+=$row;
+ break;
+ case 'cmd_get':
+ $res['cmd_get']+=$row;
+ break;
+ case 'cmd_set':
+ $res['cmd_set']+=$row;
+ break;
+ case 'get_hits':
+ $res['get_hits']+=$row;
+ break;
+ case 'get_misses':
+ $res['get_misses']+=$row;
+ break;
+ case 'evictions':
+ $res['evictions']+=$row;
+ break;
+ case 'bytes_read':
+ $res['bytes_read']+=$row;
+ break;
+ case 'bytes_written':
+ $res['bytes_written']+=$row;
+ break;
+ case 'limit_maxbytes':
+ $res['limit_maxbytes']+=$row;
+ break;
+ case 'threads':
+ $res['rusage_system'][$server]=$row;
+ break;
+ }
+ }
+ }
+ return $res;
+ }
+ return $resp;
+}
+
+//////////////////////////////////////////////////////
+
+//
+// don't cache this page
+//
+header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
+header("Cache-Control: post-check=0, pre-check=0", false);
+header("Pragma: no-cache"); // HTTP/1.0
+
+function duration($ts) {
+ global $time;
+ $years = (int)((($time - $ts)/(7*86400))/52.177457);
+ $rem = (int)(($time-$ts)-($years * 52.177457 * 7 * 86400));
+ $weeks = (int)(($rem)/(7*86400));
+ $days = (int)(($rem)/86400) - $weeks*7;
+ $hours = (int)(($rem)/3600) - $days*24 - $weeks*7*24;
+ $mins = (int)(($rem)/60) - $hours*60 - $days*24*60 - $weeks*7*24*60;
+ $str = '';
+ if($years==1) $str .= "$years year, ";
+ if($years>1) $str .= "$years years, ";
+ if($weeks==1) $str .= "$weeks week, ";
+ if($weeks>1) $str .= "$weeks weeks, ";
+ if($days==1) $str .= "$days day,";
+ if($days>1) $str .= "$days days,";
+ if($hours == 1) $str .= " $hours hour and";
+ if($hours>1) $str .= " $hours hours and";
+ if($mins == 1) $str .= " 1 minute";
+ else $str .= " $mins minutes";
+ return $str;
+}
+
+// create graphics
+//
+function graphics_avail() {
+ return extension_loaded('gd');
+}
+
+function bsize($s) {
+ foreach (array('','K','M','G') as $i => $k) {
+ if ($s < 1024) break;
+ $s/=1024;
+ }
+ return sprintf("%5.1f %sBytes",$s,$k);
+}
+
+// create menu entry
+function menu_entry($ob,$title) {
+ global $PHP_SELF;
+ if ($ob==$_GET['op']){
+ return "$title";
+ }
+ return "$title";
+}
+
+function getHeader(){
+ $header = <<
+
+MEMCACHE INFO
+
+
+
+
+
+EOB;
+
+ return $header;
+}
+function getFooter(){
+ global $VERSION;
+ $footer = '
+
+';
+
+ return $footer;
+
+}
+function getMenu(){
+ global $PHP_SELF;
+echo "