Browse Source

Merge branch 'master' into stable

stable
gau1991 10 years ago
parent
commit
de6743c060
  1. 13
      .travis.yml
  2. 30
      CONTRIBUTING.md
  3. 23
      README.md
  4. 38
      config/bash_completion.d/ee_auto.rc
  5. 20
      ee/cli/ext/ee_outputhandler.py
  6. 25
      ee/cli/main.py
  7. 123
      ee/cli/plugins/debug.py
  8. 78
      ee/cli/plugins/log.py
  9. 3
      ee/cli/plugins/secure.py
  10. 6
      ee/cli/plugins/site.py
  11. 48
      ee/cli/plugins/stack.py
  12. 124
      ee/cli/plugins/stack_migrate.py
  13. 163
      ee/core/aptget.py
  14. 4
      ee/core/domainvalidate.py
  15. 43
      ee/core/mysql.py
  16. 21
      ee/core/variables.py
  17. 361
      install
  18. 6
      setup.py

13
.travis.yml

@ -25,7 +25,7 @@ script:
- sudo echo -e "[user]\n\tname = abc\n\temail = root@localhost.com" > ~/.gitconfig
- sudo echo "Travis Banch = $TRAVIS_BRANCH"
- sudo apt-get install -y --force-yes git python3-setuptools python3-dev python3-apt
- sudo python3 setup.py install
- sudo bash install $TRAVIS_BRANCH
- sudo ee --help
- sudo ee stack install
- sudo ee stack install --web
@ -64,10 +64,10 @@ script:
- sudo ee site create site12.in --wpfc --wpsubdomain
- sudo ee site create site12.net --wpfc --wpsubdomain
- sudo ee debug
- sudo ee debug --stop
- sudo ee debug --all
- sudo ee debug --all=off
- sudo ee debug site12.net
- sudo ee debug site12.net --stop
- sudo ee debug site12.net --all=off
- sudo ee site create 1.com --html
- sudo ee site create 2.com --php
- sudo ee site create 3.com --mysql
@ -88,6 +88,11 @@ script:
- sudo ee site update site9.com --wpsubdomain --w3tc
- sudo ee site update site9.com --wpsubdomain --wpsc
- sudo ee site create www.site-1.com --wp
- sudo ee site create www.subsite.site-1.com --wpfc
- sudo ee site update www.subsite.site-1.com --wp
- sudo ee site delete www.subsite.site-1.com --all --no-prompt
- sudo ee site delete site12.in --all --no-prompt
- sudo ee site delete site12.net --no-prompt
- sudo ee site delete site12.org --no-prompt

30
CONTRIBUTING.md

@ -1,12 +1,13 @@
# Contribute to EasyEngine (ee)
# Community Guidelines
This guide details how to use issues and pull requests to improve EasyEngine (ee).
This guide details how to get involve in EasyEngine commmunity. Please read this carefully.
## How to report issue:
Github issue-tracker is used **only** for report bugs and feature request.
Please attach the output of following command when open a new issue/bug
## How to get help?
Please attach the output of following command when open a new support request.
```bash
lsb_release -a
ee -v
@ -14,13 +15,22 @@ ee info
wp --allow-root --info
```
### EasyEngine chat:
Developer & contributor discussion: https://gitter.im/rtCamp/easyengine
### Where to create issue?
For free support, please use - http://community.rtcamp.com/c/easyengine
For premium support, please check - https://rtcamp.com/products/easyengine-premium-support/
Please do NOT clutter github issue tracker here with support requests. It hampers development speed of this project.
### EasyEngine support request:
For support-request please use - http://community.rtcamp.com/c/easyengine
### Pull Requests
### Pull Requests:
When submitting your code please follow this coding standerds - http://docs.rtcamp.com/easyengine/dev/python/
### EasyEngine Chat
Developer & contributor discussion: https://gitter.im/rtCamp/easyengine
Please do NOT use chat for technical support. Chat is limited to developer & contributor disucssion related to EasyEngine future.

23
README.md

@ -1,16 +1,7 @@
IMPORTANT
============================================
#### We are looking for [Python Developers] (https://rtcamp.com/careers/python-developer/) to join our team. We offer work from home, so you can join EasyEngine team anywhere! _[Why Python?] (https://rtcamp.com/blog/easyengine-3-roadmap/#whypython)_
---
[![Stories in Ready](https://badge.waffle.io/rtcamp/easyengine.png?label=ready&title=Ready)](https://waffle.io/rtcamp/easyengine)
[![Stories in Progress](https://badge.waffle.io/rtcamp/easyengine.png?label=in%20progress&title=In%20Progress)](https://waffle.io/rtcamp/easyengine)
<img src="https://d3qt5vpr7p9rgn.cloudfront.net/wp-content/uploads/2013/08/easy-engine-logo-2-RS1.png" alt="EasyEngine Logo" align="right" />
[![Travis Build Status](https://travis-ci.org/rtCamp/easyengine.svg "Travis Build Status")] (https://travis-ci.org/rtCamp/easyengine)
[![Join the chat at https://gitter.im/rtCamp/easyengine](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/rtCamp/easyengine?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
<img src="https://d3qt5vpr7p9rgn.cloudfront.net/wp-content/uploads/2013/08/easy-engine-logo-2-RS1-240x184.png" alt="EasyEngine Logo" align="right" />
EasyEngine (ee) is a python tool, which makes it easy to manage your wordpress sites running on nginx web-server.
@ -92,5 +83,13 @@ ee site create example.com --mysql # create example.com with php & mysql supp
[![Donate](https://cloud.githubusercontent.com/assets/4115/5297691/c7b50292-7bd7-11e4-987b-2dc21069e756.png)] (https://rtcamp.com/donate/?project=easyengine)
## Careers
We are looking for [Python Developers] (https://rtcamp.com/careers/python-developer/) to join our team.
We offer work from home, so you can join EasyEngine team anywhere! _[Why Python?] (https://rtcamp.com/blog/easyengine-3-roadmap/#whypython)_
---
## License
[MIT] (http://opensource.org/licenses/MIT)

38
config/bash_completion.d/ee_auto.rc

@ -29,13 +29,13 @@ _ee_complete()
# IF YOU HAD ANOTHER CONTROLLER, YOU'D HANDLE THAT HERE
"debug")
COMPREPLY=( $(compgen \
-W "$(command find /etc/nginx/sites-enabled/ -type l -printf "%P " 2> /dev/null) --start --nginx --php --fpm --mysql -i --interactive --stop " \
-W "$(command find /etc/nginx/sites-enabled/ -type l -printf "%P " 2> /dev/null) --nginx --php --fpm --mysql -i --interactive --all --nginx=off --php=off --fpm=off --mysql=off --all=off " \
-- $cur) )
;;
"stack")
COMPREPLY=( $(compgen \
-W "install purge reload remove restart start status stop" \
-W "install purge reload remove restart start status stop migrate" \
-- $cur) )
;;
@ -59,7 +59,7 @@ _ee_complete()
"log")
COMPREPLY=( $(compgen \
-W "--mysql --php --nginx --all" \
-W "$(command find /etc/nginx/sites-enabled/ -type l -printf "%P " 2> /dev/null) --mysql --php --nginx --all" \
-- $cur) )
;;
@ -74,7 +74,7 @@ _ee_complete()
# HANDLE EVERYTHING AFTER THE THIRD LEVEL NAMESPACE
"install" | "purge" | "remove" )
COMPREPLY=( $(compgen \
-W "--web --admin --mail --nginx --php --mysql --postfix --wpcli --phpmyadmin --adminer --utils --memcache --dovecot" \
-W "--web --admin --mail --nginx --php --mysql --postfix --wpcli --phpmyadmin --adminer --utils --memcache --dovecot --all" \
-- $cur) )
;;
"start" | "stop" | "reload" | "restart" | "status")
@ -82,7 +82,11 @@ _ee_complete()
-W "--nginx --php --mysql --postfix --memcache --dovecot" \
-- $cur) )
;;
"migrate")
COMPREPLY=( $(compgen \
-W "--mariadb" \
-- $cur) )
;;
"list")
COMPREPLY=( $(compgen \
-W "--enabled --disabled" \
@ -106,13 +110,22 @@ _ee_complete()
esac
if [ ${COMP_WORDS[1]} == "debug" ] && ([ "$prev" != "--start" ] || [ "$prev" != "--nginx" ] || [ "$prev" != "--php" ] || [ "$prev" != "--fpm" ] || [ "$prev" != "--mysql" ] || [ "$prev" != "-i" ] || ["$prev" != "--interactive" ] || ["$prev" != "--stop" ]); then
retlist="--start --stop --wp --rewrite -i"
retlist="--all --wp --rewrite -i --all=off --wp=off --rewrite=off"
ret="${retlist[@]/$prev}"
COMPREPLY=( $(compgen \
-W "$(echo $ret)" \
-- $cur) )
fi
if [ ${COMP_WORDS[1]} == "log" ] && ([ "$prev" != "--access" ] || [ "$prev" != "--nginx" ] || [ "$prev" != "--php" ] || [ "$prev" != "--fpm" ] || [ "$prev" != "--mysql" ] || [ "$prev" != "-i" ] || ["$prev" != "--interactive" ] || ["$prev" != "--stop" ]); then
retlist="--all --wp --rewrite -i --all=off --wp=off --rewrite=off"
ret="${retlist[@]/$prev}"
COMPREPLY=( $(compgen \
-W "$(echo $ret)" \
-- $cur) )
fi
elif [ $COMP_CWORD -eq 4 ]; then
case "$mprev" in
# HANDLE EVERYTHING AFTER THE THIRD LEVEL NAMESPACE
@ -141,9 +154,16 @@ _ee_complete()
case "$prev" in
"--wp" | "--wpsubdir" | "--wpsubdomain")
COMPREPLY=( $(compgen \
-W "--w3tc --wpfc --wpsc" \
-- $cur) )
if [ ${COMP_WORDS[1]} != "debug" ]; then
retlist="--w3tc --wpfc --wpsc"
else
retlist="--wp=off --rewrite --rewrite=off -i --interactive"
fi
ret="${retlist[@]/$prev}"
COMPREPLY=( $(compgen \
-W "$(echo $ret)" \
-- $cur) )
;;
"--web" | "--admin" | "--mail" | "--nginx" | "--php" | "--mysql" | "--postfix" | "--wpcli" | "--phpmyadmin" | "--adminer" | "--utils" | "--memcache" | "--dovecot")

20
ee/cli/ext/ee_outputhandler.py

@ -0,0 +1,20 @@
# Based on https://github.com/datafolklabs/cement/issues/295
# To avoid encoding releated error,we defined our custom output handler
# I hope we will remove this when we upgarde to Cement 2.6 (Not released yet)
import os
from cement.utils import fs
from cement.ext.ext_mustache import MustacheOutputHandler
class EEOutputHandler(MustacheOutputHandler):
class Meta:
label = 'ee_output_handler'
def _load_template_from_file(self, path):
for templ_dir in self.app._meta.template_dirs:
full_path = fs.abspath(os.path.join(templ_dir, path))
if os.path.exists(full_path):
self.app.log.debug('loading template file %s' % full_path)
return open(full_path, encoding='utf-8', mode='r').read()
else:
continue

25
ee/cli/main.py

@ -13,10 +13,9 @@ else:
from cement.core import foundation
from cement.utils.misc import init_defaults
from cement.core.exc import FrameworkError, CaughtSignal
from cement.utils import fs
from cement.ext.ext_mustache import MustacheOutputHandler
from cement.ext.ext_argparse import ArgParseArgumentHandler
from ee.core import exc
from ee.cli.ext.ee_outputhandler import EEOutputHandler
# Application default. Should update config/ee.conf to reflect any
# changes, or additions here.
@ -31,22 +30,12 @@ defaults['ee']['plugin_dir'] = '/var/lib/ee/plugins'
# External templates (generally, do not ship with application code)
defaults['ee']['template_dir'] = '/var/lib/ee/templates'
# Based on https://github.com/datafolklabs/cement/issues/295
# To avoid encoding releated error,we defined our custom output handler
# I hope we will remove this when we upgarde to Cement 2.6 (Not released yet)
class EEOutputHandler(MustacheOutputHandler):
class EEArgHandler(ArgParseArgumentHandler):
class Meta:
label = 'ee_output_handler'
label = 'ee_args_handler'
def _load_template_from_file(self, path):
for templ_dir in self.app._meta.template_dirs:
full_path = fs.abspath(os.path.join(templ_dir, path))
if os.path.exists(full_path):
self.app.log.debug('loading template file %s' % full_path)
return open(full_path, encoding='utf-8', mode='r').read()
else:
continue
def error(self, message):
super(EEArgHandler, self).error("unknown args")
class EEApp(foundation.CementApp):
@ -72,6 +61,8 @@ class EEApp(foundation.CementApp):
# default output handler
output_handler = EEOutputHandler
arg_handler = EEArgHandler
debug = TOGGLE_DEBUG

123
ee/cli/plugins/debug.py

@ -14,6 +14,27 @@ import glob
import signal
import subprocess
usage = """
Usage: ee debug {<sitename>} {arguments}
arguments usage:
--all --all=on start debugging all server parameters.
--all=off stop debugging all server parameters
--nginx --nginx=on start debugging nginx server configuration for site
--nginx=off stop debugging nginx server configuration for site
--rewrite --rewrite=on start debugging nginx rewrite rules for site
--rewrite=off stop debugging nginx rewrite rules for site
--php --php=on start debugging server php configuration
--php=off stop debugging server php configuration
--fpm --fpm=on start debugging fastcgi configuration
--fpm=off stop debugging fastcgi configuration
--mysql --mysql=on start debugging mysql server
--mysql=off stop debugging mysql server
--wp --wp=on start wordpress debugging
--wp=off stop wordpress debugging
"""
def debug_plugin_hook(app):
# do something with the ``app`` object here.
@ -32,17 +53,34 @@ class EEDebugController(CementBaseController):
(['--start'],
dict(help='Start debug', action='store_true')),
(['--nginx'],
dict(help='Debug Nginx', action='store_true')),
dict(help='start/stop debugging nginx server '
'configuration for site',
action='store' or 'store_const',
choices=('on', 'off'), const='on', nargs='?')),
(['--php'],
dict(help='Debug PHP', action='store_true')),
dict(help='start/stop debugging server php configuration',
action='store' or 'store_const',
choices=('on', 'off'), const='on', nargs='?')),
(['--fpm'],
dict(help='Debug FastCGI', action='store_true')),
dict(help='start/stop debugging fastcgi configuration',
action='store' or 'store_const',
choices=('on', 'off'), const='on', nargs='?')),
(['--mysql'],
dict(help='Debug MySQL', action='store_true')),
dict(help='start/stop debugging mysql server',
action='store' or 'store_const',
choices=('on', 'off'), const='on', nargs='?')),
(['--wp'],
dict(help='Debug WordPress sites', action='store_true')),
dict(help='start/stop wordpress debugging for site',
action='store' or 'store_const', choices=('on', 'off'),
const='on', nargs='?')),
(['--rewrite'],
dict(help='Debug Nginx rewrite rules', action='store_true')),
dict(help='start/stop debugging nginx rewrite rules for site',
action='store' or 'store_const', choices=('on', 'off'),
const='on', nargs='?')),
(['--all'],
dict(help='start/stop debugging all server parameters',
action='store' or 'store_const', choices=('on', 'off'),
const='on', nargs='?')),
(['-i', '--interactive'],
dict(help='Interactive debug', action='store_true')),
(['--import-slow-log-interval'],
@ -56,7 +94,7 @@ class EEDebugController(CementBaseController):
def debug_nginx(self):
"""Start/Stop Nginx debug"""
# start global debug
if self.start and not self.app.pargs.site_name:
if (self.app.pargs.nginx == 'on' and not self.app.pargs.site_name):
try:
debug_address = (self.app.config.get('stack', 'ip-address')
.split())
@ -79,7 +117,7 @@ class EEDebugController(CementBaseController):
self.msg = self.msg + ["/var/log/nginx/*.error.log"]
# stop global debug
elif not self.start and not self.app.pargs.site_name:
elif (self.app.pargs.nginx == 'off' and not self.app.pargs.site_name):
if "debug_connection " in open('/etc/nginx/nginx.conf',
encoding='utf-8').read():
Log.info(self, "Disabling Nginx debug connections")
@ -90,7 +128,7 @@ class EEDebugController(CementBaseController):
Log.info(self, "Nginx debug connection already disabled")
# start site specific debug
elif self.start and self.app.pargs.site_name:
elif (self.app.pargs.nginx == 'on'and self.app.pargs.site_name):
config_path = ("/etc/nginx/sites-available/{0}"
.format(self.app.pargs.site_name))
if os.path.isfile(config_path):
@ -115,7 +153,7 @@ class EEDebugController(CementBaseController):
.format(self.app.pargs.site_name))
# stop site specific debug
elif not self.start and self.app.pargs.site_name:
elif (self.app.pargs.nginx == 'off' and self.app.pargs.site_name):
config_path = ("/etc/nginx/sites-available/{0}"
.format(self.app.pargs.site_name))
if os.path.isfile(config_path):
@ -139,7 +177,7 @@ class EEDebugController(CementBaseController):
def debug_php(self):
"""Start/Stop PHP debug"""
# PHP global debug start
if self.start:
if (self.app.pargs.php == 'on' and not self.app.pargs.site_name):
if not (EEShellExec.cmd_exec(self, "sed -n \"/upstream php"
"{/,/}/p \" /etc/nginx/"
"conf.d/upstream.conf "
@ -160,7 +198,7 @@ class EEDebugController(CementBaseController):
self.msg = self.msg + ['/var/log/php5/slow.log']
# PHP global debug stop
else:
elif (self.app.pargs.php == 'off' and not self.app.pargs.site_name):
if EEShellExec.cmd_exec(self, " sed -n \"/upstream php {/,/}/p\" "
"/etc/nginx/conf.d/upstream.conf "
"| grep 9001"):
@ -181,7 +219,7 @@ class EEDebugController(CementBaseController):
def debug_fpm(self):
"""Start/Stop PHP5-FPM debug"""
# PHP5-FPM start global debug
if self.start:
if (self.app.pargs.php == 'on'and not self.app.pargs.site_name):
if not EEShellExec.cmd_exec(self, "grep \"log_level = debug\" "
"/etc/php5/fpm/php-fpm.conf"):
Log.info(self, "Setting up PHP5-FPM log_level = debug")
@ -202,7 +240,7 @@ class EEDebugController(CementBaseController):
self.msg = self.msg + ['/var/log/php5/fpm.log']
# PHP5-FPM stop global debug
else:
elif (self.app.pargs.php == 'on' and not self.app.pargs.site_name):
if EEShellExec.cmd_exec(self, "grep \"log_level = debug\" "
"/etc/php5/fpm/php-fpm.conf"):
Log.info(self, "Disabling PHP5-FPM log_level = debug")
@ -225,7 +263,7 @@ class EEDebugController(CementBaseController):
def debug_mysql(self):
"""Start/Stop MySQL debug"""
# MySQL start global debug
if self.start:
if (self.app.pargs.mysql == 'on' and not self.app.pargs.site_name):
if not EEShellExec.cmd_exec(self, "mysql -e \"show variables like"
" \'slow_query_log\';\" | "
"grep ON"):
@ -258,7 +296,7 @@ class EEDebugController(CementBaseController):
self.msg = self.msg + ['/var/log/mysql/mysql-slow.log']
# MySQL stop global debug
else:
elif (self.app.pargs.mysql == 'off' and not self.app.pargs.site_name):
if EEShellExec.cmd_exec(self, "mysql -e \"show variables like \'"
"slow_query_log\';\" | grep ON"):
Log.info(self, "Disabling MySQL slow log")
@ -276,7 +314,7 @@ class EEDebugController(CementBaseController):
@expose(hide=True)
def debug_wp(self):
"""Start/Stop WordPress debug"""
if self.start and self.app.pargs.site_name:
if (self.app.pargs.wp == 'on' and self.app.pargs.site_name):
wp_config = ("{0}/{1}/wp-config.php"
.format(EEVariables.ee_webroot,
self.app.pargs.site_name))
@ -316,7 +354,7 @@ class EEDebugController(CementBaseController):
Log.info(self, "{0} domain not valid"
.format(self.app.pargs.site_name))
elif not self.start and self.app.pargs.site_name:
elif (self.app.pargs.wp == 'off' and self.app.pargs.site_name):
wp_config = ("{0}{1}/wp-config.php"
.format(EEVariables.ee_webroot,
self.app.pargs.site_name))
@ -347,7 +385,7 @@ class EEDebugController(CementBaseController):
def debug_rewrite(self):
"""Start/Stop Nginx rewrite rules debug"""
# Start Nginx rewrite debug globally
if self.start and not self.app.pargs.site_name:
if (self.app.pargs.rewrite == 'on' and not self.app.pargs.site_name):
if not EEShellExec.cmd_exec(self, "grep \"rewrite_log on;\" "
"/etc/nginx/nginx.conf"):
Log.info(self, "Setting up Nginx rewrite logs")
@ -361,7 +399,8 @@ class EEDebugController(CementBaseController):
self.msg = self.msg + ['/var/log/nginx/*.error.log']
# Stop Nginx rewrite debug globally
elif not self.start and not self.app.pargs.site_name:
elif (self.app.pargs.rewrite == 'off'
and not self.app.pargs.site_name):
if EEShellExec.cmd_exec(self, "grep \"rewrite_log on;\" "
"/etc/nginx/nginx.conf"):
Log.info(self, "Disabling Nginx rewrite logs")
@ -371,7 +410,7 @@ class EEDebugController(CementBaseController):
else:
Log.info(self, "Nginx rewrite logs already disabled")
# Start Nginx rewrite for site
elif self.start and self.app.pargs.site_name:
elif (self.app.pargs.rewrite == 'on' and self.app.pargs.site_name):
config_path = ("/etc/nginx/sites-available/{0}"
.format(self.app.pargs.site_name))
if not EEShellExec.cmd_exec(self, "grep \"rewrite_log on;\" {0}"
@ -394,7 +433,7 @@ class EEDebugController(CementBaseController):
self.app.pargs.site_name)]
# Stop Nginx rewrite for site
elif not self.start and self.app.pargs.site_name:
elif (self.app.pargs.rewrite == 'off' and self.app.pargs.site_name):
config_path = ("/etc/nginx/sites-available/{0}"
.format(self.app.pargs.site_name))
if EEShellExec.cmd_exec(self, "grep \"rewrite_log on;\" {0}"
@ -442,32 +481,48 @@ class EEDebugController(CementBaseController):
@expose(hide=True)
def default(self):
"""Default function of debug"""
self.start = True
# self.start = True
self.interactive = False
self.msg = []
self.trigger_nginx = False
self.trigger_php = False
if self.app.pargs.stop:
self.start = False
if ((not self.app.pargs.nginx) and (not self.app.pargs.php)
and (not self.app.pargs.fpm) and (not self.app.pargs.mysql)
and (not self.app.pargs.wp) and (not self.app.pargs.rewrite)
and (not self.app.pargs.all)
and (not self.app.pargs.site_name)):
self.app.pargs.nginx = True
self.app.pargs.php = True
self.app.pargs.fpm = True
self.app.pargs.mysql = True
self.app.pargs.rewrite = True
if self.app.pargs.stop or self.app.pargs.start:
print("--start/stop option is deprecated in ee3.0.5", usage)
else:
print(usage)
if self.app.pargs.all == 'on':
if self.app.pargs.site_name:
self.app.pargs.wp = 'on'
self.app.pargs.nginx = 'on'
self.app.pargs.php = 'on'
self.app.pargs.fpm = 'on'
self.app.pargs.mysql = 'on'
self.app.pargs.rewrite = 'on'
if self.app.pargs.all == 'off':
if self.app.pargs.site_name:
self.app.pargs.wp = 'off'
self.app.pargs.nginx = 'off'
self.app.pargs.php = 'off'
self.app.pargs.fpm = 'off'
self.app.pargs.mysql = 'off'
self.app.pargs.rewrite = 'off'
if ((not self.app.pargs.nginx) and (not self.app.pargs.php)
and (not self.app.pargs.fpm) and (not self.app.pargs.mysql)
and (not self.app.pargs.wp) and (not self.app.pargs.rewrite)
and self.app.pargs.site_name):
self.app.pargs.nginx = True
self.app.pargs.wp = True
self.app.pargs.rewrite = True
print(usage)
# self.app.pargs.nginx = 'on'
# self.app.pargs.wp = 'on'
# self.app.pargs.rewrite = 'on'
if self.app.pargs.nginx:
self.debug_nginx()

78
ee/cli/plugins/log.py

@ -5,6 +5,8 @@ from cement.core import handler, hook
from ee.core.logging import Log
from ee.cli.plugins.site_functions import logwatch
from ee.core.variables import EEVariables
from ee.core.fileutils import EEFileUtils
from ee.core.shellexec import EEShellExec
import os
import glob
@ -24,11 +26,22 @@ class EELogController(CementBaseController):
(['--all'],
dict(help='Show All logs file', action='store_true')),
(['--nginx'],
dict(help='Show Nginx logs file', action='store_true')),
dict(help='Show Nginx Error logs file', action='store_true')),
(['--php'],
dict(help='Show PHP logs file', action='store_true')),
dict(help='Show PHP Error logs file', action='store_true')),
(['--fpm'],
dict(help='Show PHP5-fpm slow logs file',
action='store_true')),
(['--mysql'],
dict(help='Show MySQL logs file', action='store_true')),
(['--wp'],
dict(help='Show Site specific WordPress logs file',
action='store_true')),
(['--access'],
dict(help='Show Nginx access log file',
action='store_true')),
(['site_name'],
dict(help='Website Name', nargs='?', default=None))
]
@expose(hide=True)
@ -36,15 +49,32 @@ class EELogController(CementBaseController):
"""Default function of debug"""
self.msg = []
if ((not self.app.pargs.nginx) and (not self.app.pargs.php)
and (not self.app.pargs.mysql)):
if self.app.pargs.php:
self.app.pargs.nginx = True
if ((not self.app.pargs.nginx) and (not self.app.pargs.fpm)
and (not self.app.pargs.mysql) and (not self.app.pargs.access)
and (not self.app.pargs.wp) and (not self.app.pargs.site_name)):
self.app.pargs.nginx = True
self.app.pargs.fpm = True
self.app.pargs.mysql = True
self.app.pargs.access = True
if ((not self.app.pargs.nginx) and (not self.app.pargs.fpm)
and (not self.app.pargs.mysql) and (not self.app.pargs.access)
and (not self.app.pargs.wp) and (self.app.pargs.site_name)):
self.app.pargs.nginx = True
self.app.pargs.php = True
self.app.pargs.wp = True
self.app.pargs.access = True
self.app.pargs.mysql = True
if self.app.pargs.nginx:
if self.app.pargs.nginx and (not self.app.pargs.site_name):
self.msg = self.msg + ["/var/log/nginx/*error.log"]
if self.app.pargs.php:
if self.app.pargs.access and (not self.app.pargs.site_name):
self.msg = self.msg + ["/var/log/nginx/*access.log"]
if self.app.pargs.fpm:
open('/var/log/php5/slow.log', 'a').close()
open('/var/log/php5/fpm.log', 'a').close()
self.msg = self.msg + ['/var/log/php5/slow.log',
@ -62,6 +92,40 @@ class EELogController(CementBaseController):
Log.warn(self, "Remote MySQL found, EasyEngine is not able to"
"show MySQL log file")
if self.app.pargs.site_name:
if self.app.pargs.access:
self.msg = self.msg + ["{0}/{1}/logs/access.log"
.format(EEVariables.ee_webroot,
self.app.pargs.site_name)]
if self.app.pargs.nginx:
self.msg = self.msg + ["{0}/{1}/logs/error.log"
.format(EEVariables.ee_webroot,
self.app.pargs.site_name)]
if self.app.pargs.wp:
webroot = "{0}{1}".format(EEVariables.ee_webroot,
self.app.pargs.site_name)
if not os.path.isfile('{0}/logs/debug.log'
.format(webroot)):
if not os.path.isfile('{0}/htdocs/wp-content/debug.log'
.format(webroot)):
open("{0}/htdocs/wp-content/debug.log".format(webroot),
encoding='utf-8', mode='a').close()
EEShellExec.cmd_exec(self, "chown {1}: {0}/htdocs/wp-"
"content/debug.log"
"".format(webroot,
EEVariables.ee_php_user)
)
# create symbolic link for debug log
EEFileUtils.create_symlink(self, ["{0}/htdocs/wp-content/"
"debug.log"
.format(webroot),
'{0}/logs/debug.log'
.format(webroot)])
self.msg = self.msg + ["{0}/{1}/logs/debug.log"
.format(EEVariables.ee_webroot,
self.app.pargs.site_name)]
watch_list = []
for w_list in self.msg:
watch_list = watch_list + glob.glob(w_list)

3
ee/cli/plugins/secure.py

@ -4,6 +4,7 @@ from ee.core.shellexec import EEShellExec
from ee.core.variables import EEVariables
from ee.core.logging import Log
from ee.core.git import EEGit
from ee.core.services import EEService
import string
import random
import sys
@ -103,7 +104,7 @@ class EESecureController(CementBaseController):
.format(port=self.app.pargs.user_input))
EEGit.add(self, ["/etc/nginx"],
msg="Adding changed secure port into Git")
EEService.reload_service(self, 'nginx')
Log.info(self, "Successfully port changed {port}"
.format(port=self.app.pargs.user_input))

6
ee/cli/plugins/site.py

@ -522,7 +522,7 @@ class EESiteCreateController(CementBaseController):
.format(ee_wp_creds['wp_pass']), log=False)
display_cache_settings(self, data)
addNewSite(self, ee_www_domain, stype, cache, ee_site_webroot)
addNewSite(self, ee_domain, stype, cache, ee_site_webroot)
Log.info(self, "Successfully created site"
" http://{0}".format(ee_domain))
@ -982,7 +982,7 @@ class EESiteUpdateController(CementBaseController):
" {0}".format(ee_wp_creds['wp_user']))
Log.info(self, Log.ENDC + "WordPress admin password : {0}"
.format(ee_wp_creds['wp_pass']) + "\n\n")
updateSiteInfo(self, ee_www_domain, stype=stype, cache=cache)
updateSiteInfo(self, ee_domain, stype=stype, cache=cache)
Log.info(self, "Successfully updated site"
" http://{0}".format(ee_domain))
@ -1071,6 +1071,8 @@ class EESiteDeleteController(CementBaseController):
if (ee_nginx_prompt == 'Y' or ee_nginx_prompt == 'y'):
Log.debug(self, "Removing Nginx configuration")
EEFileUtils.rm(self, '/etc/nginx/sites-enabled/{0}'
.format(ee_domain))
EEFileUtils.rm(self, '/etc/nginx/sites-available/{0}'
.format(ee_domain))
EEGit.add(self, ["/etc/nginx"],

48
ee/cli/plugins/stack.py

@ -26,6 +26,7 @@ import pwd
import grp
import codecs
from ee.cli.plugins.stack_services import EEStackStatusController
from ee.cli.plugins.stack_migrate import EEStackMigrateController
from ee.core.logging import Log
@ -86,29 +87,34 @@ class EEStackController(CementBaseController):
" $(hostname -f)\" | debconf-set-selections")
if set(EEVariables.ee_mysql).issubset(set(apt_packages)):
Log.info(self, "Adding repository for MySQL")
Log.info(self, "Adding repository for MySQL, please wait ...")
mysql_pref = ("Package: *\nPin: origin mirror.aarnet.edu.au"
"\nPin-Priority: 1000\n")
with open('/etc/apt/preferences.d/'
'MariaDB.pref', 'w') as mysql_pref_file:
mysql_pref_file.write(mysql_pref)
EERepo.add(self, repo_url=EEVariables.ee_mysql_repo)
Log.debug(self, 'Adding key for {0}'
.format(EEVariables.ee_mysql_repo))
EERepo.add_key(self, '1C4CBDCDCD2EFD2A',
EERepo.add_key(self, '0xcbcb082a1bb943db',
keyserver="keyserver.ubuntu.com")
chars = ''.join(random.sample(string.ascii_letters, 8))
Log.debug(self, "Pre-seeding MySQL")
Log.debug(self, "echo \"percona-server-server-5.6 "
"percona-server-server/root_password "
Log.debug(self, "echo \"mariadb-server-10.0 "
"mysql-server/root_password "
"password \" | "
"debconf-set-selections")
EEShellExec.cmd_exec(self, "echo \"percona-server-server-5.6 "
"percona-server-server/root_password "
EEShellExec.cmd_exec(self, "echo \"mariadb-server-10.0 "
"mysql-server/root_password "
"password {chars}\" | "
"debconf-set-selections".format(chars=chars),
log=False)
Log.debug(self, "echo \"percona-server-server-5.6 "
"percona-server-server/root_password_again "
Log.debug(self, "echo \"mariadb-server-10.0 "
"mysql-server/root_password_again "
"password \" | "
"debconf-set-selections")
EEShellExec.cmd_exec(self, "echo \"percona-server-server-5.6 "
"percona-server-server/root_password_again "
EEShellExec.cmd_exec(self, "echo \"mariadb-server-10.0 "
"mysql-server/root_password_again "
"password {chars}\" | "
"debconf-set-selections".format(chars=chars),
log=False)
@ -125,7 +131,7 @@ class EEStackController(CementBaseController):
config.write(configfile)
if set(EEVariables.ee_nginx).issubset(set(apt_packages)):
Log.info(self, "Adding repository for Nginx")
Log.info(self, "Adding repository for NGINX, please wait ...")
if EEVariables.ee_platform_distro == 'debian':
Log.debug(self, 'Adding Dotdeb/nginx GPG key')
EERepo.add(self, repo_url=EEVariables.ee_nginx_repo)
@ -134,7 +140,7 @@ class EEStackController(CementBaseController):
Log.debug(self, 'Adding ppa of Nginx')
if set(EEVariables.ee_php).issubset(set(apt_packages)):
Log.info(self, "Adding repository for PHP")
Log.info(self, "Adding repository for PHP, please wait ...")
if EEVariables.ee_platform_distro == 'debian':
Log.debug(self, 'Adding repo_url of php for debian')
EERepo.add(self, repo_url=EEVariables.ee_php_repo)
@ -146,7 +152,8 @@ class EEStackController(CementBaseController):
if set(EEVariables.ee_mail).issubset(set(apt_packages)):
if EEVariables.ee_platform_codename == 'squeeze':
Log.info(self, "Adding repository for dovecot ")
Log.info(self, "Adding repository for dovecot, "
"please wait ...")
EERepo.add(self, repo_url=EEVariables.ee_dovecot_repo)
Log.debug(self, 'Executing the command debconf-set-selections.')
EEShellExec.cmd_exec(self, "echo \"dovecot-core dovecot-core/"
@ -539,6 +546,15 @@ class EEStackController(CementBaseController):
"/dovecot.pem")
# Custom Dovecot configuration by EasyEngine
data = dict()
Log.debug(self, "Writting configuration into file"
"/etc/dovecot/conf.d/auth-sql.conf.ext ")
ee_dovecot = open('/etc/dovecot/conf.d/auth-sql.conf.ext',
encoding='utf-8', mode='w')
self.app.render((data), 'auth-sql-conf.mustache',
out=ee_dovecot)
ee_dovecot.close()
data = dict(email=EEVariables.ee_email)
Log.debug(self, "Writting configuration into file"
"/etc/dovecot/conf.d/99-ee.conf ")
@ -1308,8 +1324,9 @@ class EEStackController(CementBaseController):
self.pre_pref(apt_packages)
if len(apt_packages):
EESwap.add(self)
Log.info(self, "Updating apt-cache")
Log.info(self, "Updating apt-cache, please wait ...")
EEAptGet.update(self)
Log.info(self, "Installing packages, please wait ...")
EEAptGet.install(self, apt_packages)
if len(packages):
Log.debug(self, "Downloading following: {0}".format(packages))
@ -1412,6 +1429,7 @@ class EEStackController(CementBaseController):
if len(apt_packages):
Log.debug(self, "Removing apt_packages")
Log.info(self, "Uninstalling packages, please wait ...")
EEAptGet.remove(self, apt_packages)
EEAptGet.auto_remove(self)
if len(packages):
@ -1507,6 +1525,7 @@ class EEStackController(CementBaseController):
]
if len(apt_packages):
Log.info(self, "Uninstalling packages, please wait ...")
EEAptGet.remove(self, apt_packages, purge=True)
EEAptGet.auto_remove(self)
if len(packages):
@ -1519,6 +1538,7 @@ def load(app):
# register the plugin class.. this only happens if the plugin is enabled
handler.register(EEStackController)
handler.register(EEStackStatusController)
handler.register(EEStackMigrateController)
# register a hook (function) to run after arguments are parsed.
hook.register('post_argument_parsing', ee_stack_hook)

124
ee/cli/plugins/stack_migrate.py

@ -0,0 +1,124 @@
from cement.core.controller import CementBaseController, expose
from cement.core import handler, hook
from ee.core.mysql import EEMysql
from ee.core.logging import Log
from ee.core.variables import EEVariables
from ee.core.aptget import EEAptGet
from ee.core.shellexec import EEShellExec
from ee.core.apt_repo import EERepo
from ee.core.services import EEService
import configparser
import os
class EEStackMigrateController(CementBaseController):
class Meta:
label = 'migrate'
stacked_on = 'stack'
stacked_type = 'nested'
description = ('Migrate stack safely')
arguments = [
(['--mariadb'],
dict(help="Migrate database to MariaDB",
action='store_true')),
# (['--PHP'],
# dict(help="update to html site", action='store_true')),
]
@expose(hide=True)
def migrate_mariadb(self):
# Backup all database
EEMysql.backupAll(self)
# Add MariaDB repo
Log.info(self, "Adding repository for MariaDB, please wait ...")
mysql_pref = ("Package: *\nPin: origin mirror.aarnet.edu.au"
"\nPin-Priority: 1000\n")
with open('/etc/apt/preferences.d/'
'MariaDB.pref', 'w') as mysql_pref_file:
mysql_pref_file.write(mysql_pref)
EERepo.add(self, repo_url=EEVariables.ee_mysql_repo)
Log.debug(self, 'Adding key for {0}'
.format(EEVariables.ee_mysql_repo))
EERepo.add_key(self, '0xcbcb082a1bb943db',
keyserver="keyserver.ubuntu.com")
config = configparser.ConfigParser()
config.read(os.path.expanduser("~")+'/.my.cnf')
try:
chars = config['client']['password']
except Exception as e:
Log.error(self, "Error: process exited with error %s"
% e)
Log.debug(self, "Pre-seeding MariaDB")
Log.debug(self, "echo \"mariadb-server-10.0 "
"mysql-server/root_password "
"password \" | "
"debconf-set-selections")
EEShellExec.cmd_exec(self, "echo \"mariadb-server-10.0 "
"mysql-server/root_password "
"password {chars}\" | "
"debconf-set-selections"
.format(chars=chars),
log=False)
Log.debug(self, "echo \"mariadb-server-10.0 "
"mysql-server/root_password_again "
"password \" | "
"debconf-set-selections")
EEShellExec.cmd_exec(self, "echo \"mariadb-server-10.0 "
"mysql-server/root_password_again "
"password {chars}\" | "
"debconf-set-selections"
.format(chars=chars),
log=False)
# Install MariaDB
apt_packages = EEVariables.ee_mysql
# If PHP is installed then install php5-mysql
if EEAptGet.is_installed(self, "php5-fpm"):
apt_packages = apt_packages + ["php5-mysql"]
# If mail server is installed then install dovecot-sql and postfix-sql
if EEAptGet.is_installed(self, "dovecot-core"):
apt_packages = apt_packages + ["dovecot-mysql", "postfix-mysql",
"libclass-dbi-mysql-perl"]
Log.info(self, "Updating apt-cache, please wait ...")
EEAptGet.update(self)
Log.info(self, "Installing MariaDB, please wait ...")
EEAptGet.remove(self, ["mysql-common", "libmysqlclient18"])
EEAptGet.auto_remove(self)
EEAptGet.install(self, apt_packages)
# Restart dovecot and postfix if installed
if EEAptGet.is_installed(self, "dovecot-core"):
EEService.restart_service(self, 'dovecot')
EEService.restart_service(self, 'postfix')
@expose(hide=True)
def default(self):
if ((not self.app.pargs.mariadb)):
self.app.args.print_help()
if self.app.pargs.mariadb:
if EEVariables.ee_mysql_host is not "localhost":
Log.error(self, "Remote MySQL found, EasyEngine will not "
"install MariaDB")
if EEShellExec.cmd_exec(self, "mysqladmin ping") and (not
EEAptGet.is_installed(self, 'mariadb-server')):
Log.info(self, "If your database size is big, "
"migration may take some time.")
Log.info(self, "During migration non nginx-cached parts of "
"your site may remain down")
start_migrate = input("Type \"mariadb\" to continue:")
if start_migrate != "mariadb":
Log.error(self, "Not starting migration")
self.migrate_mariadb()
else:
Log.error(self, "Your current MySQL is not alive or "
"you allready installed MariaDB")

163
ee/core/aptget.py

@ -2,6 +2,7 @@
import apt
import apt_pkg
import sys
import subprocess
from ee.core.logging import Log
from sh import apt_get
from sh import ErrorReturnCode
@ -15,23 +16,21 @@ class EEAptGet():
Similar to `apt-get upgrade`
"""
try:
apt_cache = apt.cache.Cache()
import sys
orig_out = sys.stdout
sys.stdout = open(self.app.config.get('log.logging', 'file'),
encoding='utf-8', mode='a')
apt_cache.update(apt.progress.text.AcquireProgress())
sys.stdout = orig_out
# success = (apt_cache.commit(
# apt.progress.text.AcquireProgress(),
# apt.progress.base.InstallProgress()))
# #apt_cache.close()
# return success
except AttributeError as e:
Log.error(self, 'AttributeError: ' + str(e))
with open('/var/log/ee/ee.log', 'a') as f:
proc = subprocess.Popen('apt-get update',
shell=True,
stdin=None, stdout=f, stderr=f,
executable="/bin/bash")
proc.wait()
if proc.returncode == 0:
return True
else:
Log.error(self, "Unable to run apt-get update")
except Exception as e:
Log.debug(self, 'SystemError: ' + str(e))
Log.error(self, 'Unable to Fetch update')
Log.error(self, "Error while installing packages, "
"apt-get exited with error")
def dist_upgrade():
"""
@ -54,112 +53,48 @@ class EEAptGet():
Log.error(self, 'Unable to Fetch update')
def install(self, packages):
"""
Similar to `apt-get install`
"""
apt_pkg.init()
# #apt_pkg.PkgSystemLock()
global apt_cache
apt_cache = apt.cache.Cache()
all_packages = ' '.join(packages)
try:
with open('/var/log/ee/ee.log', 'a') as f:
proc = subprocess.Popen("apt-get install -o Dpkg::Options::=--"
"force-confold -y {0}"
.format(all_packages), shell=True,
stdin=None, stdout=f, stderr=f,
executable="/bin/bash")
proc.wait()
def install_package(self, package_name):
pkg = apt_cache[package_name.strip()]
if package_name.strip() in apt_cache:
if pkg.is_installed:
# apt_pkg.PkgSystemUnLock()
Log.debug(self, 'Trying to install a package that '
'is already installed (' +
package_name.strip() + ')')
# apt_cache.close()
return False
else:
try:
# print(pkg.name)
pkg.mark_install()
except Exception as e:
Log.debug(self, str(e))
Log.error(self, str(e))
if proc.returncode == 0:
return True
else:
# apt_cache.close()
Log.error(self, 'Unknown package selected (' +
package_name.strip() + ')')
Log.error(self, "Unable to run apt-get install")
for package in packages:
if not install_package(self, package):
continue
if apt_cache.install_count > 0:
try:
# apt_pkg.PkgSystemUnLock()
orig_out = sys.stdout
sys.stdout = open(self.app.config.get('log.logging', 'file'),
encoding='utf-8', mode='a')
result = apt_cache.commit(apt.progress.text.AcquireProgress(),
apt.progress.base.InstallProgress())
sys.stdout = orig_out
# apt_cache.close()
return result
except SystemError as e:
Log.debug(self, 'SystemError: ' + str(e))
Log.error(self, 'SystemError: ' + str(e))
# apt_cache.close()
except Exception as e:
Log.debug(self, str(e))
Log.error(self, str(e))
except Exception as e:
Log.error(self, "Error while installing packages, "
"apt-get exited with error")
def remove(self, packages, auto=False, purge=False):
"""
Similar to `apt-get remove/purge`
purge packages if purge=True
"""
apt_pkg.init()
# apt_pkg.PkgSystemLock()
global apt_cache
apt_cache = apt.cache.Cache()
def remove_package(self, package_name, purge=False):
pkg = apt_cache[package_name.strip()]
if package_name.strip() in apt_cache:
if not pkg.is_installed:
# apt_pkg.PkgSystemUnLock()
Log.debug(self, 'Trying to uninstall a package '
'that is not installed (' +
package_name.strip() + ')')
return False
all_packages = ' '.join(packages)
try:
with open('/var/log/ee/ee.log', 'a') as f:
if purge:
proc = subprocess.Popen('apt-get purge -y {0}'
.format(all_packages), shell=True,
stdin=None, stdout=f, stderr=f,
executable="/bin/bash")
else:
try:
# print(pkg.name)
pkg.mark_delete(purge)
except SystemError as e:
Log.debug(self, 'SystemError: ' + str(e))
return False
proc = subprocess.Popen('apt-get remove -y {0}'
.format(all_packages), shell=True,
stdin=None, stdout=f, stderr=f,
executable="/bin/bash")
proc.wait()
if proc.returncode == 0:
return True
else:
# apt_cache.close()
Log.error(self, 'Unknown package selected (' +
package_name.strip() + ')')
for package in packages:
if not remove_package(self, package, purge=purge):
continue
Log.error(self, "Unable to run apt-get remove/purge")
if apt_cache.delete_count > 0:
try:
# apt_pkg.PkgSystemUnLock()
orig_out = sys.stdout
sys.stdout = open(self.app.config.get('log.logging', 'file'),
encoding='utf-8', mode='a')
result = apt_cache.commit(apt.progress.text.AcquireProgress(),
apt.progress.base.InstallProgress())
sys.stdout = orig_out
# apt_cache.close()
return result
except SystemError as e:
Log.debug(self, 'SystemError: ' + str(e))
return False
except Exception as e:
Log.debug(self, str(e))
Log.error(self, str(e))
# apt_cache.close()
except Exception as e:
Log.error(self, "Error while installing packages, "
"apt-get exited with error")
def auto_clean(self):
"""

4
ee/core/domainvalidate.py

@ -18,7 +18,7 @@ def ValidateDomain(url):
final_domain = ''
if www_domain_name[0] == 'www':
final_domain = '.'.join(www_domain_name[1:])
return final_domain
else:
final_domain = domain_name
return (final_domain, domain_name)
return (final_domain, domain_name)

43
ee/core/mysql.py

@ -3,7 +3,9 @@ import pymysql
import configparser
from os.path import expanduser
import sys
import os
from ee.core.logging import Log
from ee.core.variables import EEVariables
class EEMysql():
@ -60,7 +62,42 @@ class EEMysql():
else:
Log.error(self, '{0}'.format(errormsg))
def backupAll(self):
import subprocess
try:
Log.info(self, "Backing up database at location: "
"/var/ee-mysqlbackup")
# Setup Nginx common directory
if not os.path.exists('/var/ee-mysqlbackup'):
Log.debug(self, 'Creating directory'
'/var/ee-mysqlbackup')
os.makedirs('/var/ee-mysqlbackup')
# def __del__(self):
# self.cur.close()
# self.conn.close()
db = subprocess.check_output(["mysql -Bse \'show databases\'"],
universal_newlines=True,
shell=True).split('\n')
for dbs in db:
if dbs == "":
continue
Log.info(self, "Backing up {0} database".format(dbs))
p1 = subprocess.Popen("mysqldump {0}"
" --max_allowed_packet=1024M"
" --single-transaction".format(dbs),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE, shell=True)
p2 = subprocess.Popen("gzip -c > /var/ee-mysqlbackup/{0}{1}.s"
"ql.gz".format(dbs, EEVariables.ee_date),
stdin=p1.stdout,
shell=True)
# Allow p1 to receive a SIGPIPE if p2 exits
p1.stdout.close()
output = p1.stderr.read()
p1.wait()
if p1.returncode == 0:
Log.debug(self, "done")
else:
Log.error(self, output.decode("utf-8"))
except Exception as e:
Log.error(self, "Error: process exited with status %s"
% e)

21
ee/core/variables.py

@ -12,7 +12,7 @@ class EEVariables():
"""Intialization of core variables"""
# EasyEngine version
ee_version = "3.0.4"
ee_version = "3.0.5"
# EasyEngine packages versions
ee_wp_cli = "0.18.0"
@ -78,21 +78,24 @@ class EEVariables():
# PHP repo and packages
if ee_platform_distro == 'Ubuntu':
ee_php_repo = "ppa:ondrej/php5"
elif ee_platform_codename == 'squeeze':
ee_php_repo = ("deb http://packages.dotdeb.org {codename}-php54 all"
.format(codename=ee_platform_codename))
elif ee_platform_codename == 'wheezy':
ee_php_repo = ("deb http://packages.dotdeb.org {codename}-php55 all"
.format(codename=ee_platform_codename))
ee_php = ["php5-fpm", "php5-curl", "php5-gd", "php5-imap",
"php5-mcrypt", "php5-xdebug", "php5-common", "php5-readline",
"php5-mysql", "php5-cli", "php5-memcache", "memcached",
"graphviz"]
"php5-mysql", "php5-cli", "php5-memcache", "php5-imagick",
"memcached", "graphviz"]
# MySQL repo and packages
ee_mysql_repo = ("deb http://repo.percona.com/apt {codename} main"
.format(codename=ee_platform_codename))
ee_mysql = ["percona-server-server-5.6", "mysqltuner", "percona-toolkit"]
if ee_platform_distro == 'Ubuntu':
ee_mysql_repo = ("deb http://mirror.aarnet.edu.au/pub/MariaDB/repo/"
"10.0/ubuntu {codename} main"
.format(codename=ee_platform_codename))
elif ee_platform_distro == 'debian':
ee_mysql_repo = ("deb http://mirror.aarnet.edu.au/pub/MariaDB/repo/"
"10.0/debian {codename} main"
.format(codename=ee_platform_codename))
ee_mysql = ["mariadb-server", "mysqltuner", "percona-toolkit"]
# Postfix repo and packages
ee_postfix_repo = ""

361
install

@ -4,13 +4,15 @@
# This script is designed to install latest EasyEngine or
# to update current EasyEngine from 2.x to 3.x
old_ee_version="2.2.3"
new_ee_version="3.0.4"
branch=$1
# Checking permissions
if [[ $EUID -ne 0 ]]; then
ee_lib_echo_fail "Sudo privilege required..."
ee_lib_echo_fail "Uses: wget -qO ee rt.cx/ee && sudo bash ee"
exit 100
fi
# Define echo function
# Blue color
function ee_lib_echo()
{
echo $(tput setaf 4)$@$(tput sgr0)
@ -33,26 +35,75 @@ function ee_lib_error()
exit $2
}
function install_dep()
{
# Execute: apt-get update
ee_lib_echo "Executing apt-get update, please wait..."
apt-get update &>> /dev/null
# Install Python3 on users system
ee_lib_echo "Installing pre depedencies"
if [ "$EE_LINUX_DISTRO" == "Ubuntu" ]; then
apt-get -y install gcc python-software-properties software-properties-common python3 python3-apt python3-setuptools python3-dev sqlite3 git || ee_lib_error "Unable to install pre depedencies, exit status " 1
elif [ "$EE_LINUX_DISTRO" == "Debian" ]; then
apt-get -y install gcc graphviz python-software-properties python3 python3-apt python3-setuptools python3-dev sqlite3 git || ee_lib_error "Unable to pre depedencies, exit status " 1
# Checking lsb_release package
if [ ! -x /usr/bin/lsb_release ]; then
ee_lib_echo "Installing lsb-release, please wait..."
apt-get -y install lsb-release &>> /dev/null
fi
# Define variables for later use
ee_branch=$1
readonly ee_version_old="2.2.3"
readonly ee_version_new="3.0.5"
readonly ee_log_dir=/var/log/ee/
readonly ee_install_log=/var/log/ee/install.log
readonly ee_linux_distro=$(lsb_release -i | awk '{print $3}')
readonly ee_debian_version=$(lsb_release -sc)
# Checking linux distro
if [ "$ee_linux_distro" != "Ubuntu" ] && [ "$ee_linux_distro" != "Debian" ]; then
ee_lib_echo_fail "EasyEngine (ee) is made for Ubuntu and Debian only as of now"
ee_lib_echo_fail "You are free to fork EasyEngine (ee): https://github.com/rtCamp/easyengine/fork"
ee_lib_echo_fail "EasyEngine (ee) only support Ubuntu 12.04/14.04 and Debian 7.x"
exit 100
fi
# EasyEngine (ee) only support all Ubuntu/Debian distro except the distro reached EOL
lsb_release -d | egrep -e "12.04|14.04|wheezy" &>> /dev/null
if [ "$?" -ne "0" ]; then
ee_lib_echo_fail "EasyEngine (ee) only support Ubuntu 12.04/14.04 and Debian 7.x"
exit 100
fi
# Pre checks to avoid later screw ups
# Checking EasyEngine (ee) log directory
if [ ! -d $ee_log_dir ]; then
ee_lib_echo "Creating EasyEngine log directory, please wait..."
mkdir -p $ee_log_dir || ee_lib_error "Unable to create log directory $ee_log_dir, exit status " $?
# Create EasyEngine log files
touch /var/log/ee/{ee.log,install.log}
# Keep EasyEngine log folder accessible to root only
chmod -R 700 /var/log/ee || ee_lib_error "Unable to change permissions for EasyEngine log folder, exit status " $?
fi
# Install Python3, Git, Tar and python-software-properties required packages
# Generate Locale
function ee_install_dep()
{
ee_lib_echo "Installing required packages, please wait..."
if [ "$ee_linux_distro" == "Ubuntu" ]; then
apt-get -y install gcc gzip python3 python3-apt python3-setuptools python3-dev sqlite3 git tar python-software-properties software-properties-common || ee_lib_error "Unable to install pre depedencies, exit status " 1
elif [ "$ee_linux_distro" == "Debian" ]; then
apt-get -y install gcc gzip python3 python3-apt python3-setuptools python3-dev sqlite3 git tar python-software-properties || ee_lib_error "Unable to pre depedencies, exit status " 1
fi
# Generating Locale
locale-gen en &>> /dev/null
}
function sync_db()
# Sqlite query to create table `sites` into ee.db
# which will be used by EasyEngine 3.x
function ee_sync_db()
{
mkdir -p /var/lib/ee
# Sqlite query to create table `sites` into ee.db which will be used by ee.3.0
echo "CREATE TABLE sites (
id INTEGER PRIMARY KEY AUTOINCREMENT,
sitename UNIQUE,
@ -66,259 +117,213 @@ function sync_db()
storage_db CHAR
);" | sqlite3 /var/lib/ee/ee.db
# Check site is enable/live or disable
for site in $(ls /etc/nginx/sites-available/ | grep -v default);
do
if [ -f /etc/nginx/sites-available/$site ]; then
ENABLE_STATUS='1'
if [ -f /etc/nginx/sites-enabled/$site ]; then
ee_site_status='1'
else
ENABLE_STATUS='0'
ee_site_status='0'
fi
# Find out information about current NGINX configuration
EE_SITE_CURRENT_TYPE=$(head -n1 /etc/nginx/sites-available/$site | grep "NGINX CONFIGURATION" | rev | cut -d' ' -f3,4,5,6,7 | rev | cut -d ' ' -f2,3,4,5)
ee_site_current_type=$(head -n1 /etc/nginx/sites-available/$site | grep "NGINX CONFIGURATION" | rev | cut -d' ' -f3,4,5,6,7 | rev | cut -d ' ' -f2,3,4,5)
# Detect current website type and cache
if [ "$EE_SITE_CURRENT_TYPE" = "HTML" ]; then
EE_SITE_CURRENT="html"
EE_SITE_CURRENT_CACHE="basic"
elif [ "$EE_SITE_CURRENT_TYPE" = "PHP" ]; then
EE_SITE_CURRENT="php"
EE_SITE_CURRENT_CACHE="basic"
elif [ "$EE_SITE_CURRENT_TYPE" = "MYSQL" ]; then
EE_SITE_CURRENT="mysql"
EE_SITE_CURRENT_CACHE="basic"
if [ "$ee_site_current_type" = "HTML" ]; then
ee_site_current="html"
ee_site_current_cache="basic"
elif [ "$ee_site_current_type" = "PHP" ]; then
ee_site_current="php"
ee_site_current_cache="basic"
elif [ "$ee_site_current_type" = "MYSQL" ]; then
ee_site_current="mysql"
ee_site_current_cache="basic"
# Single WordPress
elif [ "$EE_SITE_CURRENT_TYPE" = "WPSINGLE BASIC" ]; then
EE_SITE_CURRENT="wp"
EE_SITE_CURRENT_CACHE="basic"
elif [ "$ee_site_current_type" = "WPSINGLE BASIC" ]; then
ee_site_current="wp"
ee_site_current_cache="basic"
elif [ "$EE_SITE_CURRENT_TYPE" = "WPSINGLE WP SUPER CACHE" ]; then
EE_SITE_CURRENT="wp"
EE_SITE_CURRENT_CACHE="wpsc"
elif [ "$ee_site_current_type" = "WPSINGLE WP SUPER CACHE" ]; then
ee_site_current="wp"
ee_site_current_cache="wpsc"
elif [ "$EE_SITE_CURRENT_TYPE" = "WPSINGLE W3 TOTAL CACHE" ]; then
EE_SITE_CURRENT="wp"
EE_SITE_CURRENT_CACHE="w3tc"
elif [ "$ee_site_current_type" = "WPSINGLE W3 TOTAL CACHE" ]; then
ee_site_current="wp"
ee_site_current_cache="w3tc"
elif [ "$EE_SITE_CURRENT_TYPE" = "WPSINGLE FAST CGI" ] || [ "$EE_SITE_CURRENT_TYPE" = "WPSINGLE FASTCGI" ]; then
EE_SITE_CURRENT="wp"
EE_SITE_CURRENT_CACHE="wpfc"
elif [ "$ee_site_current_type" = "WPSINGLE FAST CGI" ] || [ "$ee_site_current_type" = "WPSINGLE FASTCGI" ]; then
ee_site_current="wp"
ee_site_current_cache="wpfc"
# WordPress subdirectory
elif [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDIR BASIC" ]; then
EE_SITE_CURRENT="wpsubdir"
EE_SITE_CURRENT_CACHE="basic"
elif [ "$ee_site_current_type" = "WPSUBDIR BASIC" ]; then
ee_site_current="wpsubdir"
ee_site_current_cache="basic"
elif [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDIR WP SUPER CACHE" ]; then
EE_SITE_CURRENT="wpsubdir"
EE_SITE_CURRENT_CACHE="wpsc"
elif [ "$ee_site_current_type" = "WPSUBDIR WP SUPER CACHE" ]; then
ee_site_current="wpsubdir"
ee_site_current_cache="wpsc"
elif [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDIR W3 TOTAL CACHE" ]; then
EE_SITE_CURRENT="wpsubdir"
EE_SITE_CURRENT_CACHE="w3tc"
elif [ "$ee_site_current_type" = "WPSUBDIR W3 TOTAL CACHE" ]; then
ee_site_current="wpsubdir"
ee_site_current_cache="w3tc"
elif [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDIR FAST CGI" ] || [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDIR FASTCGI" ]; then
EE_SITE_CURRENT="wpsubdir"
EE_SITE_CURRENT_CACHE="wpfc"
elif [ "$ee_site_current_type" = "WPSUBDIR FAST CGI" ] || [ "$ee_site_current_type" = "WPSUBDIR FASTCGI" ]; then
ee_site_current="wpsubdir"
ee_site_current_cache="wpfc"
# WordPress subdomain
elif [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDOMAIN BASIC" ]; then
EE_SITE_CURRENT="wpsubdomain"
EE_SITE_CURRENT_CACHE="basic"
elif [ "$ee_site_current_type" = "WPSUBDOMAIN BASIC" ]; then
ee_site_current="wpsubdomain"
ee_site_current_cache="basic"
elif [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDOMAIN WP SUPER CACHE" ]; then
EE_SITE_CURRENT="wpsubdomain"
EE_SITE_CURRENT_CACHE="wpsc"
elif [ "$ee_site_current_type" = "WPSUBDOMAIN WP SUPER CACHE" ]; then
ee_site_current="wpsubdomain"
ee_site_current_cache="wpsc"
elif [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDOMAIN W3 TOTAL CACHE" ]; then
EE_SITE_CURRENT="wpsubdomain"
EE_SITE_CURRENT_CACHE="w3tc"
elif [ "$ee_site_current_type" = "WPSUBDOMAIN W3 TOTAL CACHE" ]; then
ee_site_current="wpsubdomain"
ee_site_current_cache="w3tc"
elif [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDOMAIN FAST CGI" ] || [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDOMAIN FASTCGI" ]; then
EE_SITE_CURRENT="wpsubdomain"
EE_SITE_CURRENT_CACHE="wpfc"
elif [ "$ee_site_current_type" = "WPSUBDOMAIN FAST CGI" ] || [ "$ee_site_current_type" = "WPSUBDOMAIN FASTCGI" ]; then
ee_site_current="wpsubdomain"
ee_site_current_cache="wpfc"
fi
WEBROOT="/var/www/$site"
ee_webroot="/var/www/$site"
# Insert query to insert old site information into ee.db
echo "INSERT INTO sites (sitename, site_type, cache_type, site_path, is_enabled, is_ssl, storage_fs, storage_db)
VALUES (\"$site\", \"$EE_SITE_CURRENT\", \"$EE_SITE_CURRENT_CACHE\", \"$WEBROOT\", \"$ENABLE_STATUS\", 0, 'ext4', 'mysql');" | sqlite3 /var/lib/ee/ee.db
VALUES (\"$site\", \"$ee_site_current\", \"$ee_site_current_cache\", \"$ee_webroot\", \"$ee_site_status\", 0, 'ext4', 'mysql');" | sqlite3 /var/lib/ee/ee.db
done
}
function install_ee3()
# Install EasyEngine 3.x
function ee_install()
{
# Remove old clone of EasyEngine (ee) if any
rm -rf /tmp/easyengine &>> /dev/null
# Clone EE 3.0 Python branch
ee_lib_echo "Cloning EasyEngine 3"
if [ "$branch" = "" ]; then
branch=stable
# Clone EE 3.0 Python ee_branch
ee_lib_echo "Cloning EasyEngine, please wait..."
if [ "$ee_branch" = "" ]; then
ee_branch=stable
fi
git clone -b $branch https://github.com/rtCamp/easyengine.git /tmp/easyengine --quiet > /dev/null || ee_lib_error "Unable to clone EasyEngine, exit status" 1
git clone -b $ee_branch https://github.com/rtCamp/easyengine.git /tmp/easyengine --quiet > /dev/null \
|| ee_lib_error "Unable to clone EasyEngine, exit status" $?
cd /tmp/easyengine
ee_lib_echo "Installing EasyEngine 3"
python3 setup.py install || ee_lib_error "Unable to install EasyEngine 3.0, exit status " 1
ee_lib_echo "Installing EasyEngine, please wait..."
python3 setup.py install || ee_lib_error "Unable to install EasyEngine, exit status " $?
}
function update_to_ee3()
# Update EasyEngine configuration
# Remove EasyEngine 2.x
function ee_update()
{
# Preserve old configuration
ee_lib_echo "Updating EasyEngine 3 configuration"
ee_lib_echo "Updating EasyEngine configuration, please wait..."
if [ -f /etc/nginx/nginx.conf ]; then
sed -i "s/X-Powered-By.*/X-Powered-By \"EasyEngine $new_ee_version\";/" /etc/nginx/nginx.conf &>> /dev/null
sed -i "s/X-Powered-By.*/X-Powered-By \"EasyEngine $ee_version_new\";/" /etc/nginx/nginx.conf &>> /dev/null
fi
grant_host=$(grep grant-host /etc/easyengine/ee.conf | awk '{ print $3 }' | head -1 )
db_name=$(grep db-name /etc/easyengine/ee.conf | awk '{ print $3 }')
db_user=$(grep db-name /etc/easyengine/ee.conf | awk '{ print $3 }')
wp_prefix=$(grep prefix /etc/easyengine/ee.conf | awk '{ print $3 }')
wp_user=$(grep 'user ' /etc/easyengine/ee.conf | grep -v db-user |awk '{ print $3 }')
wp_pass=$(grep password /etc/easyengine/ee.conf | awk '{ print $3 }')
wp_email=$(grep email /etc/easyengine/ee.conf | awk '{ print $3 }')
ip_addr=$(grep ip-address /etc/easyengine/ee.conf |awk -F'=' '{ print $2 }')
sed -i "s/ip-address.*/ip-address = ${ip_addr}/" /etc/ee/ee.conf && \
sed -i "s/grant-host.*/grant-host = ${grant_host}/" /etc/ee/ee.conf && \
ee_grant_host=$(grep grant-host /etc/easyengine/ee.conf | awk '{ print $3 }' | head -1 )
ee_db_name=$(grep db-name /etc/easyengine/ee.conf | awk '{ print $3 }')
ee_db_user=$(grep db-name /etc/easyengine/ee.conf | awk '{ print $3 }')
ee_wp_prefix=$(grep prefix /etc/easyengine/ee.conf | awk '{ print $3 }')
ee_wp_user=$(grep 'user ' /etc/easyengine/ee.conf | grep -v db-user |awk '{ print $3 }')
ee_wp_pass=$(grep password /etc/easyengine/ee.conf | awk '{ print $3 }')
ee_wp_email=$(grep email /etc/easyengine/ee.conf | awk '{ print $3 }')
ee_ip_addr=$(grep ip-address /etc/easyengine/ee.conf |awk -F'=' '{ print $2 }')
sed -i "s/ip-address.*/ip-address = ${ee_ip_addr}/" /etc/ee/ee.conf && \
sed -i "s/grant-host.*/grant-host = ${ee_grant_host}/" /etc/ee/ee.conf && \
sed -i "s/db-name.*/db-name = ${db-name}/" /etc/ee/ee.conf && \
sed -i "s/db-user.*/db-user = ${db_user}/" /etc/ee/ee.conf && \
sed -i "s/prefix.*/prefix = ${wp_prefix}/" /etc/ee/ee.conf && \
sed -i "s/^user.*/user = ${wp_user}/" /etc/ee/ee.conf && \
sed -i "s/password.*/password = ${wp_password}/" /etc/ee/ee.conf && \
sed -i "s/email.*/email = ${wp_email}/" /etc/ee/ee.conf || ee_lib_error "Unable to update configuration, exit status " 1
sed -i "s/db-user.*/db-user = ${ee_db_user}/" /etc/ee/ee.conf && \
sed -i "s/prefix.*/prefix = ${ee_wp_prefix}/" /etc/ee/ee.conf && \
sed -i "s/^user.*/user = ${ee_wp_user}/" /etc/ee/ee.conf && \
sed -i "s/password.*/password = ${ee_wp_password}/" /etc/ee/ee.conf && \
sed -i "s/email.*/email = ${ee_wp_email}/" /etc/ee/ee.conf || ee_lib_error "Unable to update configuration, exit status " $?
# Remove old EasyEngine
ee_lib_echo "Removing EasyEngine 2"
ee_lib_echo "Removing EasyEngine 2.x"
rm -rf /etc/bash_completion.d/ee /etc/easyengine/ /usr/share/easyengine/ /usr/local/lib/easyengine /usr/local/sbin/easyengine /usr/local/sbin/ee /var/log/easyengine
# Softlink to fix command not found error
ln -s /usr/local/bin/ee /usr/local/sbin/ee || ee_lib_error "Unable to create softlink to old EasyEngine, exit status " 1
ln -s /usr/local/bin/ee /usr/local/sbin/ee || ee_lib_error "Unable to create softlink to old EasyEngine, exit status " $?
}
function update_to_ee_latest()
function ee_update_latest()
{
ee_lib_echo "Updating Nginx configuration"
ee_lib_echo "Updating Nginx configuration, please wait..."
if [ -f /etc/nginx/ee-nginx.conf ]; then
sed -i "s/X-Powered-By.*/X-Powered-By \"EasyEngine $new_ee_version\";/" /etc/nginx/nginx.conf &>> /dev/null
sed -i "s/X-Powered-By.*/X-Powered-By \"EasyEngine $ee_version_new\";/" /etc/nginx/nginx.conf &>> /dev/null
elif [ -f /etc/nginx/nginx.conf ]; then
sed -i "s/X-Powered-By.*/X-Powered-By \"EasyEngine $new_ee_version\";/" /etc/nginx/nginx.conf &>> /dev/null
sed -i "s/X-Powered-By.*/X-Powered-By \"EasyEngine $ee_version_new\";/" /etc/nginx/nginx.conf &>> /dev/null
fi
}
function git_init()
# Do git intialisation
function ee_git_init()
{
# Do git intialisation on EasyEngine adn Nginx configuration
# Nginx under git version control
if [ -d /etc/nginx ];then
cd /etc/nginx
if [ ! -d /etc/nginx/.git ]; then
git init > /dev/null
git init &>> /dev/null
fi
git add .
git commit -am "Updated Nginx" > /dev/null
fi
# EasyEngine under git version control
cd /etc/ee
if [ ! -d /etc/ee/.git ]; then
git init > /dev/null
fi
git add .
git commit -am "Installed/Updated to EasyEngine 3" > /dev/null
git commit -am "Installed/Updated to EasyEngine 3.x" &>> /dev/null
}
# Checking permissions
if [[ $EUID -ne 0 ]]; then
ee_lib_echo_fail "Sudo privilege required..."
ee_lib_echo_fail "Uses: wget -qO ee rt.cx/ee && sudo bash ee"
exit 1
fi
# Execute: apt-get update
ee_lib_echo "Executing apt-get update"
apt-get update &>> /dev/null
# Checking lsb_release package
if [ ! -x /usr/bin/lsb_release ]; then
ee_lib_echo "Installing lsb-release, please wait..."
apt-get -y install lsb-release &>> /dev/null
fi
# Define variables for later use
readonly EE_LOG_DIR=/var/log/ee/
readonly EE_INSTALL_LOG=/var/log/ee/install.log
readonly EE_LINUX_DISTRO=$(lsb_release -i | awk '{print $3}')
readonly EE_DEBIAN_VERSION=$(lsb_release -sc)
# Checking linux distro
if [ "$EE_LINUX_DISTRO" != "Ubuntu" ] && [ "$EE_LINUX_DISTRO" != "Debian" ]; then
ee_lib_echo_fail "EasyEngine (ee) is made for Ubuntu and Debian only as of now"
ee_lib_echo_fail "You are free to fork EasyEngine (ee): https://github.com/rtCamp/easyengine/fork"
ee_lib_echo_fail "EasyEngine (ee) only support Ubuntu 12.04/14.04 and Debian 7.x"
exit 100
fi
# EasyEngine (ee) only support all Ubuntu/Debian distro except the distro reached EOL
lsb_release -d | egrep -e "12.04|14.04|wheezy" &>> /dev/null
if [ "$?" -ne "0" ]; then
exit 100
fi
# Pre checks to avoid later screw ups
# Checking EasyEngine (ee) log directory
if [ ! -d $EE_LOG_DIR ]; then
ee_lib_echo "Creating EasyEngine log directory, please wait..."
mkdir -p $EE_LOG_DIR || ee_lib_error "Creating log directory failed, exit status " 1
# Create EasyEngine log files
touch /var/log/ee/{ee.log,install.log}
# Keep EasyEngine log folder accessible to root only
chmod -R 700 /var/log/ee || ee_lib_error "Unable to setup log directory permissions , exit status " 1
fi
# Update EasyEngine
if [ -f /usr/local/sbin/easyengine ]; then
# Check old EasyEngine version
ee version | grep ${old_ee_version} &>> /dev/null
ee version | grep ${ee_version_old} &>> /dev/null
if [[ $? -ne 0 ]]; then
ee_lib_echo "EasyEngine $old_ee_version not found on your system" | tee -ai $EE_INSTALL_LOG
ee_lib_echo "Updating your EasyEngine to $old_ee_version for compability" | tee -ai $EE_INSTALL_LOG
wget -q https://raw.githubusercontent.com/rtCamp/easyengine/old-stable/bin/update && bash update | tee -ai $EE_INSTALL_LOG
ee_lib_echo "EasyEngine $ee_version_old not found on your system" | tee -ai $ee_install_log
ee_lib_echo "Updating your EasyEngine to $ee_version_old for compability" | tee -ai $ee_install_log
wget -q https://raw.githubusercontent.com/rtCamp/easyengine/old-stable/bin/update && bash update | tee -ai $ee_install_log
if [[ $? -ne 0 ]]; then
ee_lib_echo_info "Unbale to update EasyEngine2 to $old_ee_version"
exit 1
ee_lib_echo_fail "Unbale to update EasyEngine to $ee_version_old, exit status = " $?
fi
fi
install_dep | tee -ai $EE_INSTALL_LOG
sync_db | tee -ai $EE_INSTALL_LOG
install_ee3 | tee -ai $EE_INSTALL_LOG
update_to_ee3 | tee -ai $EE_INSTALL_LOG
git_init | tee -ai $EE_INSTALL_LOG
ee_install_dep | tee -ai $ee_install_log
ee_sync_db | tee -ai $ee_install_log
ee_install | tee -ai $ee_install_log
ee_update | tee -ai $ee_install_log
ee_git_init | tee -ai $ee_install_log
elif [ ! -f /usr/local/bin/ee ]; then
install_dep | tee -ai $EE_INSTALL_LOG
install_ee3 | tee -ai $EE_INSTALL_LOG
git_init | tee -ai $EE_INSTALL_LOG
ee_install_dep | tee -ai $ee_install_log
ee_install | tee -ai $ee_install_log
ee_git_init | tee -ai $ee_install_log
else
ee -v 2>&1 | grep $new_ee_version &>> /dev/null
ee -v 2>&1 | grep $ee_version_new &>> /dev/null
if [[ $? -ne 0 ]];then
read -p "Update EasyEngine to $new_ee_version (y/n): " ee_ans
read -p "Update EasyEngine to $ee_version_new (y/n): " ee_ans
if [ "$ee_ans" = "y" ] || [ "$ee_ans" = "Y" ]; then
install_dep | tee -ai $EE_INSTALL_LOG
update_to_ee_latest | tee -ai $EE_INSTALL_LOG
install_ee3 | tee -ai $EE_INSTALL_LOG
git_init | tee -ai $EE_INSTALL_LOG
ee_install_dep | tee -ai $ee_install_log
ee_update_latest | tee -ai $ee_install_log
ee_install | tee -ai $ee_install_log
ee_git_init | tee -ai $ee_install_log
service nginx reload &>> /dev/null
fi
else
ee_lib_echo_fail "You already have EasyEngine $new_ee_version" | tee -ai $EE_INSTALL_LOG
exit 1
ee_lib_echo_fail "You already have EasyEngine $ee_version_new, exit status = " $? | tee -ai $ee_install_log
fi
fi

6
setup.py

@ -54,15 +54,15 @@ except Exception as e:
os.system("git config --global user.email {0}".format(ee_email))
setup(name='ee',
version='3.0.4',
version='3.0.5',
description=long_description,
long_description=long_description,
classifiers=[],
keywords='',
author='rtCamp Soultions Pvt. LTD',
author_email='sys@rtcamp.com',
author_email='ee@rtcamp.com',
url='http://rtcamp.com/easyengine',
license='GPL',
license='MIT',
packages=find_packages(exclude=['ez_setup', 'examples', 'tests',
'templates']),
include_package_data=True,

Loading…
Cancel
Save