| #!/usr/bin/python |
| import os, commands |
| |
| # ask for root mysql password |
| import getpass |
| |
| root_pwd = None |
| while not root_pwd: |
| root_pwd = getpass.getpass("MySQL Root user's Password: ") |
| |
| # test root connection |
| op = commands.getoutput("mysql -u root -p%s -e 'exit'" % \ |
| root_pwd.replace('$', '\$').replace(' ', '\ ')) |
| if "access denied" in op.lower(): |
| raise Exception("Incorrect MySQL Root user's password") |
| |
| # ask for new dbname |
| new_dbname = None |
| while not new_dbname: |
| new_dbname = raw_input("New ERPNext Database Name: ") |
| |
| # ask for new dbpassword |
| new_dbpassword = None |
| while not new_dbpassword: |
| new_dbpassword = raw_input("New ERPNext Database's Password: ") |
| |
| # get erpnext path |
| erpnext_path = os.path.dirname(os.path.abspath(__file__)) |
| os.chdir(erpnext_path) |
| |
| # setup backups |
| if not os.path.exists(os.path.join(erpnext_path, 'backups')): |
| os.makedirs('backups') |
| os.symlink(os.path.join(erpnext_path, 'backups'), |
| os.path.join(erpnext_path, 'public', 'backups')) |
| |
| # setup files |
| if not os.path.exists(os.path.join(erpnext_path, 'files')): |
| os.makedirs('files') |
| os.symlink(os.path.join(erpnext_path, 'files'), |
| os.path.join(erpnext_path, 'public', 'files')) |
| |
| # setup logs |
| if not os.path.exists(os.path.join(erpnext_path, 'logs')): |
| os.makedirs('logs') |
| os.system('touch logs/error_log.txt') |
| |
| # setup lib -- framework repo with read only access |
| # change this if you have your own fork |
| if not os.path.exists(os.path.join(erpnext_path, 'lib')): |
| os.system('git clone https://github.com/webnotes/wnframework.git lib') |
| |
| # setup symlinks in public |
| if not os.path.exists(os.path.join(erpnext_path, 'public', 'js', 'lib')): |
| os.symlink(os.path.join(erpnext_path, 'lib', 'js', 'lib'), |
| os.path.join(erpnext_path, 'public', 'js', 'lib')) |
| if not os.path.exists(os.path.join(erpnext_path, 'public', 'images', 'lib')): |
| os.symlink(os.path.join(erpnext_path, 'lib', 'images'), |
| os.path.join(erpnext_path, 'public', 'images', 'lib')) |
| |
| # extract master |
| if os.path.exists(os.path.join(erpnext_path, 'data', 'master.sql.gz')): |
| os.system('gunzip data/master.sql.gz') |
| |
| # setup conf |
| if not os.path.exists(os.path.join(erpnext_path, 'conf.py')): |
| # read template conf file |
| with open(os.path.join(erpnext_path, 'lib', 'conf', 'conf.py'), 'r') as template: |
| content = template.read() |
| |
| # manipulate content |
| import re |
| |
| # set new_dbname, new_dbpassword, modules_path, files_path, backup_path, log_file_name |
| content = re.sub("db_name.*", "db_name = '%s'" % new_dbname, content) |
| content = re.sub("db_password.*", "db_password = '%s'" % new_dbpassword, content) |
| content = re.sub("modules_path.*", "modules_path = '%s'" % \ |
| os.path.join(erpnext_path, 'erpnext'), content) |
| content = re.sub("files_path.*", "files_path = '%s'" % \ |
| os.path.join(erpnext_path, 'files'), content) |
| content = re.sub("backup_path.*", "backup_path = '%s'" % \ |
| os.path.join(erpnext_path, 'backups'), content) |
| content = re.sub("log_file_name.*", "log_file_name = '%s'" % \ |
| os.path.join(erpnext_path, 'logs', 'error_log.txt'), content) |
| |
| |
| # write conf file |
| with open(os.path.join(erpnext_path, 'conf.py'), 'w') as new_conf: |
| new_conf.write(content) |
| |
| # install db |
| import sys |
| sys.path.append(erpnext_path) |
| sys.path.append(os.path.join(erpnext_path, 'lib', 'py')) |
| import conf |
| sys.path.append(conf.modules_path) |
| |
| from webnotes.install_lib.install import Installer |
| inst = Installer('root', root_pwd) |
| inst.import_from_db(new_dbname, source_path=os.path.join(erpnext_path, 'data', 'master.sql'), verbose = 1) |
| |
| # apply patches |
| os.chdir(erpnext_path) |
| os.system("lib/wnf.py --update origin master") |
| |
| # set filemode false |
| os.system("git config core.filemode false") |
| os.chdir(os.path.join(erpnext_path, 'lib')) |
| os.system("git config core.filemode false") |
| |
| steps_remaining = """ |
| Notes: |
| ------ |
| |
| sample apache conf file |
| #----------------------------------------------------------- |
| SetEnv PYTHON_EGG_CACHE /var/www |
| |
| # you can change 99 to any other port |
| |
| Listen 99 |
| NameVirtualHost *:99 |
| <VirtualHost *:99> |
| ServerName localhost |
| DocumentRoot {path to erpnext's folder}/public |
| AddHandler cgi-script .cgi .xml .py |
| |
| <Directory {path to erpnext's folder}/public/> |
| # directory specific options |
| Options -Indexes +FollowSymLinks +ExecCGI |
| |
| # directory's index file |
| DirectoryIndex web.py |
| |
| # rewrite rule |
| RewriteEngine on |
| |
| # condition 1: |
| # ignore login-page.html, app.html, blank.html, unsupported.html |
| RewriteCond %{REQUEST_URI} ^((?!app\.html|blank\.html|unsupported\.html).)*$ |
| |
| # condition 2: if there are no slashes |
| # and file is .html or does not containt a . |
| RewriteCond %{REQUEST_URI} ^(?!.+/)((.+\.html)|([^.]+))$ |
| |
| # rewrite if both of the above conditions are true |
| RewriteRule ^(.+)$ web.py?page=$1 [NC,L] |
| |
| AllowOverride all |
| Order Allow,Deny |
| Allow from all |
| </Directory> |
| </VirtualHost> |
| #----------------------------------------------------------- |
| |
| To Do: |
| |
| * Configure apache/http conf file to point to public folder |
| * chown recursively all files in your folder to apache user |
| * login using: user="Administrator" and password="admin" |
| |
| """ |
| |
| print steps_remaining |
| |