Merge pull request #2087 from emhs/master

Distro-specific devSetup for Arch Linux and Ubuntu
This commit is contained in:
Nick Winter 2015-01-14 16:23:32 -08:00
commit 865ae66b5c
2 changed files with 103 additions and 1 deletions

View file

@ -80,9 +80,103 @@ class SetupFactory(object):
class MacSetup(SetupFactory): class MacSetup(SetupFactory):
def setup(self): def setup(self):
super(self.__class__, self).setup() super(self.__class__, self).setup()
class WinSetup(SetupFactory): class WinSetup(SetupFactory):
def setup(self): def setup(self):
super(self.__class__, self).setup() super(self.__class__, self).setup()
class LinuxSetup(SetupFactory): class LinuxSetup(SetupFactory):
def setup(self): def setup(self):
self.distroSetup()
super(self.__class__, self).setup() super(self.__class__, self).setup()
def detectDistro(self):
distro_checks = {
"arch": "/etc/arch-release",
"ubuntu": "/etc/lsb-release"
}
for distro, path in distro_checks.items():
if os.path.exists(path):
return(distro)
def distroSetup(self):
distro = self.detectDistro()
if distro == "arch":
print("Arch Linux detected. Would you like to install \n"
"NodeJS and MongoDB via pacman? [y/N]")
if raw_input().lower() in ["y", "yes"]:
try:
subprocess.check_call(["pacman", "-S",
"nodejs", "mongodb",
"--noconfirm"])
except subprocess.CalledProcessError as err:
print("Installation failed. Retry, Continue, or "
"Abort? [r/c/A]")
answer = raw_input().lower()
if answer in ["r", "retry"]:
return(self.distroSetup())
elif answer in ["c", "continue"]:
return()
else:
exit(1)
else:
#try:
#print("Enabling and starting MongoDB in systemd.")
#subprocess.check_call(["systemctl", "enable",
# "mongodb.service"])
#subprocess.check_call(["systemctl", "start",
# "mongodb.service"])
#print("Node and Mongo installed. Continuing.")
#except subprocess.CalledProcessError as err:
#print("Mongo failed to start. Aborting")
#exit(1)
if distro == "ubuntu":
print("Ubuntu installation detected. Would you like to install \n"
"NodeJS and MongoDB via apt-get? [y/N]")
if raw_input().lower() in ["y", "yes"]:
print("Adding repositories for MongoDB and NodeJS...")
try:
subprocess.check_call(["apt-key", "adv",
"--keyserver",
"hkp://keyserver.ubuntu.com:80",
"--recv", "7F0CEB10"])
subprocess.check_call(["add-apt-repository",
"deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen"])
subprocess.check_call("curl -sL "
"https://deb.nodesource.com/setup"
" | bash", shell=True)
subprocess.check_call(["apt-get", "update"])
except subprocess.CalledProcessError as err:
print("Adding repositories failed. Retry, Install without"
"adding \nrepositories, Skip apt-get installation, "
"or Abort? [r/i/s/A]")
answer = raw_input().lower()
if answer in ["r", "retry"]:
return(self.distroSetup())
elif answer in ["i", "install"]:
pass
elif answer in ["s", "skip"]:
return()
else:
exit(1)
else:
try:
print("Repositories added successfully. Installing NodeJS and MongoDB.")
subprocess.check_call(["apt-get", "install",
"nodejs", "mongodb-org",
"build-essential", "-y"])
except subprocess.CalledProcessError as err:
print("Installation via apt-get failed. \nContinue "
"with manual installation, or Abort? [c/A]")
if raw_input().lower() in ["c", "continue"]:
return()
else:
exit(1)
else:
print("NodeJS and MongoDB installed successfully. "
"Staring MongoDB.")
#try:
#subprocess.check_call(["service", "mongod", "start"])
#except subprocess.CalledProcessError as err:
#print("Mongo failed to start. Aborting.")
#exit(1)

View file

@ -4,6 +4,7 @@ import configuration
import errors import errors
import subprocess import subprocess
import os import os
import sys
from which import which from which import which
#git clone https://github.com/nwinter/codecombat.git coco #git clone https://github.com/nwinter/codecombat.git coco
class RepositoryInstaller(): class RepositoryInstaller():
@ -64,7 +65,14 @@ class RepositoryInstaller():
#TODO: "Replace npm with more robust package #TODO: "Replace npm with more robust package
#npm_location = self.config.directory.bin_directory + os.sep + "node" + os.sep + "bin" + os.sep + "npm" #npm_location = self.config.directory.bin_directory + os.sep + "node" + os.sep + "bin" + os.sep + "npm"
npm_location = u"npm" npm_location = u"npm"
return_code = subprocess.call([npm_location,u"install"],cwd=self.config.directory.root_dir + os.sep + u"coco") if sys.version_info[0] == 2:
py_cmd = "python"
else:
py_cmd = subprocess.check_output(['which', 'python2'])
return_code = subprocess.call([npm_location, u"install",
"--python=" + py_cmd],
cwd=self.config.directory.root_dir +
os.sep + u"coco")
if return_code: if return_code:
raise errors.CoCoError(u"Failed to install node packages") raise errors.CoCoError(u"Failed to install node packages")
else: else: