mirror of
https://github.com/frappe/bench.git
synced 2024-11-12 00:06:36 +00:00
154 lines
3.7 KiB
Python
154 lines
3.7 KiB
Python
# wget setup_frappe.py | python
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
import getpass
|
|
from distutils.spawn import find_executable
|
|
|
|
bench_repo = '/usr/local/frappe/bench-repo'
|
|
|
|
def install_bench(args):
|
|
# pre-requisites for bench repo cloning
|
|
success = run_os_command({
|
|
'apt-get': [
|
|
'sudo apt-get update',
|
|
'sudo apt-get install -y git build-essential python-setuptools python-dev'
|
|
],
|
|
'yum': [
|
|
'sudo yum groupinstall -y "Development tools"',
|
|
'sudo yum install -y git python-setuptools python-devel'
|
|
],
|
|
})
|
|
|
|
if not find_executable("git"):
|
|
success = run_os_command({
|
|
'brew': 'brew install git'
|
|
})
|
|
|
|
if not success:
|
|
print 'Could not install pre-requisites. Please check for errors or install them manually.'
|
|
return
|
|
|
|
# secure pip installation
|
|
if not os.path.exists("get-pip.py"):
|
|
run_os_command({
|
|
'apt-get': 'wget https://bootstrap.pypa.io/get-pip.py',
|
|
'yum': 'wget https://bootstrap.pypa.io/get-pip.py'
|
|
})
|
|
|
|
run_os_command({
|
|
'apt-get': 'sudo python get-pip.py',
|
|
'yum': 'sudo python get-pip.py',
|
|
})
|
|
|
|
success = run_os_command({
|
|
'pip': 'sudo pip install ansible'
|
|
})
|
|
|
|
if not success:
|
|
could_not_install('Ansible')
|
|
|
|
if is_sudo_user():
|
|
raise Exception('Please run this script as a non-root user with sudo privileges, but without using sudo')
|
|
|
|
# clone bench repo
|
|
clone_bench_repo()
|
|
|
|
if args.develop:
|
|
run_playbook('develop/install.yml', sudo=True)
|
|
|
|
def install_python27():
|
|
version = (sys.version_info[0], sys.version_info[1])
|
|
|
|
if version == (2, 7):
|
|
return
|
|
|
|
print 'Installing Python 2.7'
|
|
|
|
# install python 2.7
|
|
success = run_os_command({
|
|
'apt-get': 'sudo apt-get install -y python2.7',
|
|
'yum': 'sudo yum install -y python27',
|
|
'brew': 'brew install python'
|
|
})
|
|
|
|
if not success:
|
|
could_not_install('Python 2.7')
|
|
|
|
# replace current python with python2.7
|
|
os.execvp('python2.7', ([] if is_sudo_user() else ['sudo']) + ['python2.7', __file__] + sys.argv[1:])
|
|
|
|
def clone_bench_repo():
|
|
'''Clones the bench repository in the user folder'''
|
|
|
|
if os.path.exists(bench_repo):
|
|
return 0
|
|
|
|
run_os_command({
|
|
'brew': 'mkdir -p /usr/local/frappe',
|
|
'apt-get': 'sudo mkdir -p /usr/local/frappe',
|
|
'yum': 'sudo mkdir -p /usr/local/frappe',
|
|
})
|
|
|
|
# change user
|
|
run_os_command({
|
|
'ls': 'sudo chown -R {user}:{user} /usr/local/frappe'.format(user=getpass.getuser()),
|
|
})
|
|
|
|
success = run_os_command(
|
|
{'git': 'git clone https://github.com/frappe/bench {bench_repo} --depth 1 --branch develop'.format(bench_repo=bench_repo)}
|
|
)
|
|
|
|
return success
|
|
|
|
def run_os_command(command_map):
|
|
'''command_map is a dictionary of {'executable': command}. For ex. {'apt-get': 'sudo apt-get install -y python2.7'} '''
|
|
success = True
|
|
for executable, commands in command_map.items():
|
|
if find_executable(executable):
|
|
if isinstance(commands, basestring):
|
|
commands = [commands]
|
|
|
|
for command in commands:
|
|
returncode = subprocess.check_call(command, shell=True)
|
|
success = success and ( returncode == 0 )
|
|
|
|
break
|
|
|
|
return success
|
|
|
|
def could_not_install(package):
|
|
raise Exception('Could not install {0}. Please install it manually.'.format(package))
|
|
|
|
def is_sudo_user():
|
|
return os.geteuid() == 0
|
|
|
|
def run_playbook(playbook_name, sudo=False):
|
|
args = ['ansible-playbook', '-c', 'local', playbook_name]
|
|
if sudo:
|
|
args.append('-K')
|
|
|
|
success = subprocess.check_call(args, cwd=os.path.join(bench_repo, 'playbooks'))
|
|
return success
|
|
|
|
def parse_commandline_args():
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser(description='Frappe Installer')
|
|
parser.add_argument('--develop', dest='develop', action='store_true', default=False,
|
|
help='Install developer setup')
|
|
args = parser.parse_args()
|
|
|
|
return args
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
import argparse
|
|
except ImportError:
|
|
# install python2.7
|
|
install_python27()
|
|
|
|
args = parse_commandline_args()
|
|
|
|
install_bench(args)
|