def SetupVirtualMachine(self): subutai.AddStatus("Setting up virtual machine") subutai.SetAction("INSTVM") rc = 0 subutai.AddStatus("Installing VM") if subutai.CheckVMExists(self.name) != 0: subutai.download("core.ova") while subutai.isDownloadComplete() != 1: sleep(0.05) self.progress.setCoreProgress(subutai.GetBytesDownload()) self.progress.updateProgress() subutai.AddStatus("VM Image downloaded") self.progress.setCoreProgress(self.progress.getCoreSize()) self.progress.updateProgress() rc = subutai.VBoxS("import " + subutai.GetTmpDir().replace(" ", "+++") + "core.ova --vsys 0 --vmname " + self.name) if rc != 0: subutai.RaiseError("Failed to import Virtual Machine") return rc sleep(3) cpus = subutai.GetCoreNum() mem = subutai.GetMemSize() * 1024 subutai.VBox("modifyvm " + self.name + " --cpus " + str(cpus)) subutai.VBox("modifyvm " + self.name + " --memory " + str(mem)) return rc
def StartVirtualMachine(self): subutai.SetAction("STARTVM") rc = 0 if subutai.CheckVMRunning(self.name) != 0: rc = subutai.VBoxS("startvm --type headless " + self.name) if rc != 0: subutai.RaiseError("Failed to start Virtual Machine") return rc
def RetrievePeerIP(self): subutai.SetAction("GETIP") self.PeerIP = subutai.GetPeerIP() self.LocalIP = '127.0.0.1' # Fixing peer ip self.PeerIP = self.LocalIP if self.PeerIP == "": subutai.RaiseError("Failed to determine peer IP address") return 1 return 0
def Install(self): subutai.SetAction('INST') if not os.path.exists(self.tmp+self.GoogleChromeFile): return 0 try: script = 'do shell script "/usr/bin/tar -xf '+self.tmp+self.GoogleChromeFile+' -C /Applications" with administrator privileges' p = Popen(['osascript', '-'], stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True) stdout, stderr = p.communicate(script) except: subutai.RaiseError("Failed to install Google Chrome") return 64 return 0
def StopVirtualMachine(self): subutai.SetAction("STOPVM") subutai.SSHRun("sync && poweroff") subutai.log("info", "Stopping Virtual machine") sleep(15) rc = 0 if subutai.CheckVMRunning(self.name) == 0: sleep(15) if subutai.CheckVMRunning(self.name) == 0: rc = subutai.VBoxS("controlvm " + self.name + " poweroff soft") return rc
def WaitPeerResponse(self): subutai.SetAction("WAITREST") ip = self.LocalIP if self.PeerIP != '': ip = self.PeerIP subutai.AddStatus("Waiting for peer at " + ip) attempts = 0 while subutai.IsPeerReady(ip) != 0: sleep(2) attempts = attempts + 1 if attempts >= 30: return 14 return 0
def Download(self): rc = 0 subutai.SetAction("DWL") if not self.__checkGoogleChrome(): subutai.AddStatus("Downloading Google Chrome") subutai.download(self.GoogleChromeFile) while subutai.isDownloadComplete() != 1: sleep(0.05) self.progress.setChromeProgress(subutai.GetBytesDownload()) self.progress.updateProgress() self.progress.setChromeProgress(self.progress.getChromeSize()) self.progress.updateProgress() return rc
def InstallUbuntu(self): subutai.SetAction("INSTUB") td = "/var/snap/subutai/common/lxc/tmpdir/" awk = " | awk '{print $5}'" subutai.AddStatus("Downloading Ubuntu Linux") rc = subutai.SSHStartSession("mng-setup") if rc != 0: subutai.RaiseError( "Failed to install Ubuntu interactively. Switching to static install" ) subutai.SSHRun( "sudo subutai -d import ubuntu16 >/tmp/ubuntu16.log 2>&1") return 0 rc = subutai.SSHExecute("mng-setup", "sudo subutai import ubuntu16 &") if rc[0] != 0: subutai.RaiseError( "Failed to install Ubuntu in background. Switching to static install" ) subutai.SSHRun( "sudo subutai -d import ubuntu16 >/tmp/ubuntu16.log 2>&1") else: checks = 0 while True: out = subutai.SSHRunOut( "ps -ef | grep \"subutai import\" | grep -v grep | awk '{print $2}'" ) if out == '': subutai.AddStatus("Download completed") break sleep(1) checks = checks + 1 if checks >= 60: subutai.SSHExecute("mng-setup", "ls / &") checks = 0 out = subutai.SSHRunOut("ls -l " + td + self.UbuntuFile + awk) try: val = int(out) self.progress.setUbuntuProgress(val) self.progress.updateProgress() except: pass subutai.SSHStopSession("mng-setup") return 0
def ConfigureNetwork(self): subutai.AddStatus("(Re)configuring Network") subutai.SetAction("NETCONF") rc = 0 gateway = subutai.GetDefaultRoutingInterface() bridged = subutai.GetVBoxBridgedInterface(gateway) bridged = bridged.replace(' ', '+++') subutai.VBox("modifyvm " + self.name + ' --nic1 bridged --bridgeadapter1 ' + bridged) subutai.VBox("modifyvm " + self.name + " --cableconnected1 on") subutai.VBox("modifyvm " + self.name + " --nic2 nat") subutai.VBox("modifyvm " + self.name + " --cableconnected2 on") subutai.VBox( "modifyvm " + self.name + ' --natpf2 ssh-fwd,tcp,,4567,,22 --natpf2 https-fwd,tcp,,9999,,8443' ) return rc
def InstallManagement(self): subutai.SetAction("INSTMNG") td = "/var/snap/subutai/common/lxc/tmpdir/" awk = " | awk '{print $5}'" rc = subutai.SSHStartSession("mng-setup3") if rc != 0: subutai.AddStatus("Installing Management Container") subutai.SSHRun( "sudo subutai -d import management 1>/tmp/management-1.log 2>/tmp/management-2.log" ) return 0 subutai.AddStatus("Installing Management Container") rc = subutai.SSHExecute("mng-setup3", "sudo subutai import management &") if rc[0] != 0: subutai.RaiseError( "Failed to install Management in background. Switching to static install" ) subutai.SSHRun( "sudo subutai import management >/tmp/management.log 2>&1") else: checks = 0 while True: out = subutai.SSHRunOut( "ps -ef | grep \"subutai import\" | grep -v grep | awk '{print $2}'" ) if out == '': break sleep(1) checks = checks + 1 if checks >= 60: subutai.SSHExecute("mng-setup3", "ls / &") checks = 0 out = subutai.SSHRunOut("ls -l " + td + "*" + self.ManagementFile + "*" + awk) try: val = int(out) self.progress.setManagementProgress(val) self.progress.updateProgress() except: pass subutai.SSHStopSession("mng-setup3") return 0
def InstallSnap(self): subutai.SetAction("INSTSNAP") subutai.AddStatus("Installing Subutai. This may take a few minutes") command = 'sudo snap install --beta --devmode subutai > /tmp/subutai-snap.log 2>&1' attempts = 0 while attempts < 10: subutai.SSHRun( "sudo snap install --beta --devmode subutai > /tmp/subutai-snap.log 2>&1" ) out = subutai.SSHRunOut("which subutai >/dev/null; echo $?") if out == '0': return 0 sleep(30) attempts = attempts + 1 return 55
def InstallOpenJRE(self): subutai.SetAction("INSTJRE") td = "/var/snap/subutai/common/lxc/tmpdir/" awk = " | awk '{print $5}'" rc = subutai.SSHStartSession("mng-setup2") if rc != 0: subutai.AddStatus("Downloading JVM") subutai.SSHRun( "sudo subutai -d import openjre16 1>/tmp/openjre16-1.log 2>/tmp/openjre16-2.log" ) return 0 subutai.AddStatus("Downloading JVM") rc = subutai.SSHExecute("mng-setup2", "sudo subutai import openjre16 &") if rc[0] != 0: subutai.RaiseError( "Failed to install OpenJRE in background. Switching to static install" ) subutai.SSHRun( "sudo subutai import openjre16 >/tmp/openjre16.log 2>&1") else: checks = 0 while True: out = subutai.SSHRunOut( "ps -ef | grep \"subutai import\" | grep -v grep | awk '{print $2}'" ) if out == '': break sleep(1) checks = checks + 1 if checks >= 60: subutai.SSHExecute("mng-setup2", "ls / &") checks = 0 out = subutai.SSHRunOut("ls -l " + td + self.OpenJREFile + awk) try: val = int(out) self.progress.setOpenjreProgress(val) self.progress.updateProgress() except: pass subutai.SSHStopSession("mng-setup2") return 0
def PreconfigureNetwork(self): subutai.AddStatus("Configuring Network") subutai.SetAction("NETPCONF") subutai.VBox("modifyvm " + self.name + " --nic1 nat") subutai.VBox("modifyvm " + self.name + " --cableconnected1 on") subutai.VBox( "modifyvm " + self.name + " --natpf1 ssh-fwd,tcp,,4567,,22 --natpf1 https-fwd,tcp,,9999,,8443" ) subutai.VBox("modifyvm " + self.name + " --rtcuseutc on") adapterName = subutai.GetVBoxHostOnlyInterface() adapter = adapterName.replace(' ', '+++') if adapter != 'undefined': subutai.Information("Enabling host-only adapter " + adapterName) subutai.VBox("modifyvm " + self.name + " --nic3 hostonly --hostonlyadapter3 " + adapter) return 0
def WaitForNetwork(self): subutai.AddStatus("Waiting for network") subutai.SetAction("NETWAIT") ping = ( 'if [ $(timeout 3 ping 8.8.8.8 -c1 2>/dev/null | grep -c "1 received") -ne 1 ]; ' 'then echo 1; else echo 0; fi') attempts = 0 while True: out = subutai.SSHRunOut(ping) if out == '0': break if attempts >= 60: subutai.RaiseError( "Failed to establish Internet connection on peer") return 82 attempts = attempts + 1 sleep(1) return 0
def WaitSSH(self): subutai.SetAction("WAITSSH") attempts = 0 while subutai.TestSSH() != 0: sleep(5) attempts = attempts + 1 if attempts == 30: subutai.RaiseError("SSH connection failed after 30 attempts") return 34 attempts = 0 out = '' while out == '': out = subutai.SSHRunOut("uptime") attempts = attempts + 1 if attempts >= 30: subutai.RaiseError("SSH connection failed after 30 attempts") return 35 return 0
def Download(self): subutai.SetAction('DWL') rc = 0 if not CheckOsascript() and not CheckCocoasudo(self.install): rc = InstallCocoasudo(self.tmp, self.install, self.progress) if rc != 0: return rc if not self.__checkGoogleChrome(): subutai.AddStatus("Downloading Google Chrome") subutai.download(self.GoogleChromeFile) while subutai.isDownloadComplete() != 1: sleep(0.05) self.progress.setChromeProgress(subutai.GetBytesDownload()) self.progress.updateProgress() self.progress.setChromeProgress(self.progress.getChromeSize()) self.updateProgress() return rc
def PostInstall(self): subutai.SetAction('POSTINST') pfile = 'ffddnlbamkjlbngpekmdpnoccckapcnh.json' location = os.environ['HOME'] + '/Library/Application Support/Google/Chrome/External Extensions' slocation = os.environ['HOME'] + '/Library/Application\ Support/Google/Chrome/External\ Extensions/' script = 'tell application "Google Chrome" to quit' p = Popen(['osascript', '-'], stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True) stdout, stderr = p.communicate(script) postinst = subuco.PostInstall(self.tmp) postinst.append('if [ ! -d "'+location+'" ]; then') postinst.append('mkdir -p ' + slocation) postinst.append('fi') postinst.append('rm -f '+slocation+pfile) postinst.append('cp '+self.tmp+pfile+' '+slocation+pfile) postinst.append('chown -R '+os.environ['USER']+' '+os.environ['HOME']+'/Library/Application\ Support/Google' ) ins = 'do shell script "/bin/sh '+postinst.get()+'" with administrator privileges' p = Popen(['osascript', '-'], stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True) stdout, stderr = p.communicate(ins) if p.returncode != 0: return 95 return 0
def PostInstall(self): self.__writeJson() subutai.SetAction("POSINST") location = '/opt/google/chrome/extensions/' postinst = subuco.PostInstall(self.tmp) postinst.append('dpkg -i ' + self.tmp + self.GoogleChromeFile) postinst.append('apt-get install -f -y') if not os.path.exists(location): postinst.append('mkdir -p ' + location) postinst.append('cp ' + self.tmp + self.Plugin + ' ' + location) try: p = Popen([ '/usr/bin/gksudo', '--message', 'Finalize E2E Installation', postinst.get() ], stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True) stdout, stderr = p.communicate('') except: subutai.RaiseError("Failed to install Google Chrome") return 64 return 0
def PreInstall(self): subutai.SetAction('PREINST') self.progress.setChrome(self.GoogleChromeFile) self.progress.setCocoasudo(self.CocoasudoFile) self.progress.calculateTotal() return 0
def SetupSSH(self): subutai.SetAction("SETUPSSH") subutai.log("info", "Setting up SSH") subutai.SSHRun("mkdir -p /home/subutai/.ssh") subutai.InstallSSHKey() return 0
def Install(self): subutai.SetAction("INST") return 0
def PreInstall(self): subutai.SetAction("PREINST") self.progress.setChrome(self.GoogleChromeFile) self.progress.calculateTotal() return 0
def InitBTRFS(self): subutai.SetAction("INITBTRFS") subutai.AddStatus("Initializing BTRFS") subutai.SSHRun("sudo subutai.btrfsinit /dev/sdb") return 0
def SetupAlias(self): subutai.SetAction("SETALIAS") subutai.log("info", "Setting Alias") subutai.SSHRun("sudo bash -c 'snap alias subutai-dev subutai'") return 0