126 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/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 git://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 -l")
 | |
| 
 | |
| # force sync all
 | |
| os.system("lib/wnf.py --sync_all -f")
 | |
| 
 | |
| os.system("lib/wnf.py --cms")
 | |
| 
 | |
| # 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 = """
 | |
| 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
 | |
| 
 |