#!/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 ServerName localhost DocumentRoot {path to erpnext's folder}/public AddHandler cgi-script .cgi .xml .py # 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 #----------------------------------------------------------- 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