def __init__(self, core, vbox, ubuntu, openjre, management): self.lastProgress = -1.0 self.coreSize = subutai.GetFileSize(core) self.vboxSize = subutai.GetFileSize(vbox) self.ubuntuSize = subutai.GetTemplateSize(ubuntu) self.openjreSize = subutai.GetTemplateSize(openjre) self.managementSize = subutai.GetTemplateSize(management) self.totalSize = self.coreSize + self.vboxSize + self.ubuntuSize + self.openjreSize + self.managementSize
def subutaistart(): p2pSize = subutai.GetFileSize("p2p") totalSize = p2pSize p2pProgress = 0 subutai.AddStatus("Download p2p binary") sfile = "/etc/systemd/system/p2p.service" if os.path.exists(sfile): subutai.RemoveSystemdUnit("p2p.service") subutai.download("p2p") while subutai.isDownloadComplete() != 1: sleep(0.05) p2pProgress = subutai.GetBytesDownload() updateProgress(p2pProgress, totalSize) subutai.SetProgress(1.0) tmpDir = subutai.GetTmpDir() installDir = subutai.GetInstallDir() subutai.AddStatus("Download finished. Installing") copyfile(tmpDir+"/p2p", installDir+"/bin/p2p") st = os.stat(installDir+"/bin/p2p") os.chmod(installDir+"/bin/p2p", st.st_mode | stat.S_IEXEC) subutai.AddStatus("Creating symlink") subutai.MakeLink(installDir+"/bin/p2p", "/usr/bin/p2p") subutai.AddStatus("Creating systemd unit") unit = ''' [Unit] Description=Service for Subutai p2p daemon Wants=network-online.target After=network-online.target [Service] ExecStart=/opt/subutai/bin/p2p daemon Restart=on-failure WorkingDirectory=/opt/subutai/ TimeoutStopSec=30 Type=simple [Install] WantedBy=multi-user.target '''.strip() f = open(tmpDir+"p2p.service", 'w') f.write(unit) f.close() subutai.AddSystemdUnit("p2p.service", tmpDir+"p2p.service") subutai.Shutdown() return 0
def subutaistart(): tmpDir = subutai.GetTmpDir() chromeFilename = "GoogleChromeStandaloneEnterprise64.msi" chromeSize = subutai.GetFileSize(chromeFilename) totalSize = chromeSize chromeProgress = 0 if subutai.IsChromeInstalled() != 0: subutai.AddStatus("Downloading Chrome") subutai.download(chromeFilename) while subutai.isDownloadComplete() != 1: sleep(0.05) chromeProgress = subutai.GetBytesDownload() updateProgress(chromeProgress, totalSize) chromeProgress = chromeSize subutai.AddStatus("Installing Chrome") try: call(['msiexec', '/qn', '/i', tmpDir + chromeFilename]) except: subutai.RaiseError("Failed to install Google Chrome") sleep(5) subutai.AddStatus("Installing Browser Plugin") subutai.RegisterPlugin() subutai.Shutdown() return 0
def subutaistart(): subutai.AddStatus("Download Tray application") trayFile = "SubutaiTray_libs.tar.gz" traySize = subutai.GetFileSize(trayFile) totalSize = traySize trayProgress = 0 subutai.download(trayFile) while subutai.isDownloadComplete() != 1: sleep(0.05) trayProgress = subutai.GetBytesDownload() updateProgress(trayProgress, totalSize) trayProgress = traySize tmpDir = subutai.GetTmpDir() installDir = subutai.GetInstallDir() subutai.AddStatus("Unpacking Tray") call(['/usr/bin/killall', '-9', 'SubutaiTray']) tar = tarfile.open(tmpDir + "/" + trayFile, "r:gz") tar.extractall(installDir + "/bin/") tar.close() subutai.AddStatus("Creating Symlink") subutai.MakeLink(installDir + "/bin/SubutaiTray", "/usr/local/bin/SubutaiTray") desktop = ''' [Desktop Entry] Version=1.0 Name=Subutai Tray Comment=Subutai Tray Keywords=Internet; Exec=SubutaiTray Terminal=false Type=Application Icon=/usr/share/icons/launcher-logo.png Categories=GNOME;Network; StartupNotify=true '''.strip() f = open(tmpDir + "SubutaiTray.desktop", 'w') f.write(desktop) f.close() subutai.DesktopFileInstall(tmpDir + "SubutaiTray.desktop") subutai.StartTray() subutai.Shutdown() return 0
def setP2P(self, p2p): self.p2pSize = subutai.GetFileSize(p2p) self.p2pProgress = 0
def setTuntap(self, tuntap): self.tuntapSize = subutai.GetFileSize(tuntap) self.tuntapProgress = 0
def setCore(self, core): self.coreSize = subutai.GetFileSize(core) self.coreProgress = 0
def setVBox(self, vbox): self.vboxSize = subutai.GetFileSize(vbox) self.vboxProgress = 0
def setChrome(self, chrome): self.chromeSize = subutai.GetFileSize(chrome) self.chromeProgress = 0
def setNssm(self, nssm): self.nssmSize = subutai.GetFileSize(nssm) self.nssmProgress = 0
def subutaistart(): tmpDir = subutai.GetTmpDir() installDir = subutai.GetInstallDir() trayFile = "SubutaiTray_libs_osx.tar.gz" libsshFile = "libssh2-1.6.0-0_osx.pkg" cocoasudoFile = "cocoasudo" cocoasudoSize = subutai.GetFileSize(cocoasudoFile) traySize = subutai.GetFileSize(trayFile) libsshSize = subutai.GetFileSize(libsshFile) totalSize = cocoasudoSize + traySize + libsshSize cocoasudoProgress = 0 trayProgress = 0 libsshProgress = 0 if not os.path.exists(installDir + "bin/cocoasudo"): subutai.AddStatus("Downloading cocoasudo application") subutai.download(cocoasudoFile) while subutai.isDownloadComplete() != 1: sleep(0.05) cocoasudoProgress = subutai.GetBytesDownload() updateProgress(cocoasudoProgress, trayProgress, libsshProgress, totalSize) try: copyfile(tmpDir + cocoasudoFile, installDir + "bin/cocoasudo") st = os.stat(installDir + "bin/cocoasudo") os.chmod(installDir + "bin/cocoasudo", st.st_mode | stat.S_IEXEC) except: subutai.RaiseError("Failed to install cocoasudo. Aborting") sleep(10) return -99 cocoasudoProgress = cocoasudoSize subutai.AddStatus("Download Tray application") subutai.download(trayFile) while subutai.isDownloadComplete() != 1: sleep(0.05) trayProgress = subutai.GetBytesDownload() updateProgress(cocoasudoProgress, trayProgress, libsshProgress, totalSize) trayProgress = traySize subutai.AddStatus("Installing Tray") try: tar = tarfile.open(tmpDir + "/" + trayFile, "r:gz") tar.extractall("/Applications/Subutai") tar.close() except: subutai.RaiseError("Failed to unpack Tray archive. Aborting") sleep(10) return 86 subutai.AddStatus("Installing Tray dependencies") subutai.download(libsshFile) while subutai.isDownloadComplete() != 1: sleep(0.05) libsshProgress = subutai.GetBytesDownload() updateProgress(cocoasudoProgress, trayProgress, libsshProgress, totalSize) libsshProgress = libsshSize try: call([ installDir + 'bin/cocoasudo', '-prompt="Install libssh"', 'installer', '-pkg', tmpDir + '/' + libsshFile, '-target', '/' ]) except: subutai.RaiseError("Failed to install libssh. Aborting") sleep(10) return -99 try: launch = 'tell application "SubutaiTray.app" to activate' p = Popen(['osascript', '-'], stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True) stdout, stderr = p.communicate(launch) except: subutai.RaiseError("Failed to launch Subutai Tray application") subutai.Shutdown() return 0
def setLibssh(self, libssh): self.libsshSize = subutai.GetFileSize(libssh) self.libsshProgress = 0
def setCocoasudo(self, cocoasudo): self.cocoasudoSize = subutai.GetFileSize(cocoasudo) self.cocoasudoProgress = 0
def subutaistart(): tmpDir = subutai.GetTmpDir() installDir = subutai.GetInstallDir() nssmSize = subutai.GetFileSize("nssm.exe") p2pSize = subutai.GetFileSize("p2p.exe") tuntapSize = subutai.GetFileSize("tap-windows-9.21.2.exe") totalSize = nssmSize + p2pSize + tuntapSize nssmProgress = 0 p2pProgress = 0 tuntapProgress = 0 subutai.AddStatus("Installing Service Manager") if os.path.exists(installDir + "nssm.exe"): subutai.UnregisterService("Subutai P2P") sleep(30) subutai.ProcessKill("nssm.exe") subutai.download("nssm.exe") while subutai.isDownloadComplete() != 1: sleep(0.05) nssmProgress = subutai.GetBytesDownload() updateProgress(nssmProgress, p2pProgress, tuntapProgress, totalSize) copyfile(tmpDir + "nssm.exe", installDir + "bin/nssm.exe") if not os.path.exists(installDir + "nssm.exe"): subutai.download("nssm.exe") while subutai.isDownloadComplete() != 1: sleep(0.05) nssmProgress = subutai.GetBytesDownload() updateProgress(nssmProgress, p2pProgress, tuntapProgress, totalSize) subutai.UnregisterService("Subutai P2P") sleep(30) subutai.ProcessKill("nssm.exe") copyfile(tmpDir + "nssm.exe", installDir + "bin/nssm.exe") nssmProgress = nssmSize subutai.AddStatus("Downloading p2p binary") subutai.download("p2p.exe") while subutai.isDownloadComplete() != 1: sleep(0.05) p2pProgress = subutai.GetBytesDownload() updateProgress(nssmProgress, p2pProgress, tuntapProgress, totalSize) p2pProgress = p2pSize subutai.AddStatus("Downloading extra tools") subutai.download("tap-windows-9.21.2.exe") while subutai.isDownloadComplete() != 1: sleep(0.05) tuntapProgress = subutai.GetBytesDownload() updateProgress(nssmProgress, p2pProgress, tuntapProgress, totalSize) tuntapProgress = tuntapSize subutai.ProcessKill("p2p.exe") subutai.AddStatus("Installing P2P") if os.path.exists(installDir + "bin/p2p.exe"): subutai.AddStatus("Removing previous installation") os.remove(installDir + "bin/p2p.exe") if os.path.exists(installDir + "bin/p2p.exe"): subutai.RaiseError("Failed to remove p2p binary") subutai.AddStatus("Copying files") copyfile(tmpDir + "p2p.exe", installDir + "bin/p2p.exe") st = os.stat(installDir + "bin/p2p.exe") os.chmod(installDir + "bin/p2p.exe", st.st_mode | stat.S_IEXEC) subutai.AddStatus("Registering P2P as a Windows service") subutai.RegisterService("Subutai P2P", installDir + "bin/p2p.exe|daemon") subutai.AddStatus("Installing TUN/TAP driver") call([tmpDir + 'tap-windows-9.21.2.exe', '/S']) sleep(5) subutai.Shutdown() return 0
def subutaistart(): tmpDir = subutai.GetTmpDir() installDir = subutai.GetInstallDir() cocoasudoFile = "cocoasudo" p2pFile = "p2p_osx" tuntapFile = "tuntap_20150118_osx.pkg" cocoasudoSize = subutai.GetFileSize(cocoasudoFile) p2pSize = subutai.GetFileSize(p2pFile) tuntapSize = subutai.GetFileSize(tuntapFile) totalSize = cocoasudoSize + p2pSize + tuntapSize cocoasudoProgress = 0 p2pProgress = 0 tuntapProgress = 0 if not os.path.exists(installDir+"bin/cocoasudo"): subutai.AddStatus("Downloading cocoasudo application") subutai.download(cocoasudoFile) while subutai.isDownloadComplete() != 1: sleep(0.05) cocoasudoProgress = subutai.GetBytesDownload() updateProgress(cocoasudoProgress, p2pProgress, tuntapProgress, totalSize) try: copyfile(tmpDir+cocoasudoFile, installDir+"bin/cocoasudo") st = os.stat(installDir+"bin/cocoasudo") os.chmod(installDir+"bin/cocoasudo", st.st_mode | stat.S_IEXEC) except: subutai.RaiseError("Failed to install cocoasudo. Aborting") sleep(10) return -99 cocoasudoProgress = cocoasudoSize subutai.AddStatus("Download TUNTAP driver") subutai.download(tuntapFile) while subutai.isDownloadComplete() != 1: sleep(0.05) tuntapProgress = subutai.GetBytesDownload() updateProgress(cocoasudoProgress, p2pProgress, tuntapProgress, totalSize) tuntapProgress = tuntapSize subutai.AddStatus("Download p2p binary") subutai.download(p2pFile) while subutai.isDownloadComplete() != 1: sleep(0.05) p2pProgress = subutai.GetBytesDownload() updateProgress(cocoasudoProgress, p2pProgress, tuntapProgress, totalSize) p2pProgress = p2pSize subutai.AddStatus("Download finished. Installing") try: copyfile(tmpDir+p2pFile, installDir+"bin/p2p") except: subutai.RaiseError("Failed to move p2p binary to " + installDir + "bin/p2p") return 21 subutai.SetProgress(0.99) subutai.AddStatus("Making p2p binary executable") try: st = os.stat(installDir+"/bin/p2p") os.chmod(installDir+"/bin/p2p", st.st_mode | stat.S_IEXEC) except: subutai.RaiseError("Failed to make p2p binary executable") return 31 subutai.AddStatus("Creating p2p service") service = ''' <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>io.subutai.p2p.daemon</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/p2p</string> <string>daemon</string> </array> <key>KeepAlive</key> <true/> <key>StandardOutPath</key> <string>/var/log/p2p.log</string> <key>StandardErrorPath</key> <string>/var/log/p2p.log</string> <key>Debug</key> <true/> </dict> </plist> '''.strip() daemonFile = 'io.subutai.p2p.daemon.plist' f = open(tmpDir+daemonFile, 'w') f.write(service) f.close() syslog = ''' # logfilename [owner:group] mode count size when flags [/pid_file] [sig_num] /var/log/p2p.log 644 7 * $D0 J '''.strip() sf = open(tmpDir+'p2p.conf', 'w') sf.write(syslog) sf.close() subutai.AddStatus("Configure P2P Daemon") installScript = "#!/bin/bash\n\n" installScript = installScript + "cp " + tmpDir + daemonFile + " /Library/LaunchDaemons/" + daemonFile + "\n" installScript = installScript + "cp " + tmpDir + "p2p.conf /etc/newsyslog.d/p2p.conf\n" installScript = installScript + "launchctl load /Library/LaunchDaemons/" + daemonFile + "\n" installScript = installScript + "installer -pkg " + tmpDir + "tuntap_20150118.pkg -target /\n" installScript = installScript + "ln -s "+installDir+"/bin/p2p /usr/local/bin/p2p\n" f = open(tmpDir+"p2p-setup.sh", 'w') f.write(installScript) f.close() try: st = os.stat(tmpDir+"p2p-setup.sh") os.chmod(tmpDir+"p2p-setup.sh", st.st_mode | stat.S_IEXEC) except: subutai.RaiseError("Failed to configure p2p daemon") sleep(10) return 31 try: script = 'do shell script "'+tmpDir+'p2p-setup.sh" 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 p2p daemon") sleep(10) return 22 subutai.SetProgress(1.00) sleep(5) subutai.Shutdown() return 0
def subutaistart(): subutai.AddStatus("Download Tray application") trayFile = "SubutaiTray_libs.zip" sshlibFile = "ssh.zip" traySize = subutai.GetFileSize(trayFile) libsshSize = subutai.GetFileSize(sshlibFile) totalSize = traySize + libsshSize trayProgress = 0 libsshProgress = 0 subutai.download(trayFile) while subutai.isDownloadComplete() != 1: sleep(0.05) trayProgress = subutai.GetBytesDownload() updateProgress(trayProgress, libsshProgress, totalSize) trayProgress = traySize subutai.download(sshlibFile) while subutai.isDownloadComplete() != 1: sleep(0.05) libsshProgress = subutai.GetBytesDownload() updateProgress(trayProgress, libsshProgress, totalSize) libsshProgress = libsshSize tmpDir = subutai.GetTmpDir() installDir = subutai.GetInstallDir() subutai.AddStatus("Installing Tray") subutai.ProcessKill("SubutaiTray.exe") subutai.ProcessKill("ssh.exe") subutai.ProcessKill("ssh-keygen.exe") try: zf = zipfile.ZipFile(tmpDir + "/" + trayFile, 'r') zf.extractall(installDir) zf.close() zfl = zipfile.ZipFile(tmpDir + "/" + sshlibFile, 'r') zfl.extractall(installDir + "/bin") zfl.close() except: subutai.RaiseError("Failed to replace tray") subutai.CreateDesktopShortcut(installDir + "/tray/SubutaiTray.exe", "Subutai Tray") subutai.AddStatus("Writing configuration") unPath = installDir.replace('\\', '/') unVBoxPath = subutai.GetVBoxPath().replace('\\', '/') f = open(unPath + "/tray/subutai_tray.ini", "w") f.write("P2P_Path=" + unPath + "/bin/p2p.exe\n") if unVBoxPath != "": f.write("VBoxManage_Path=" + unVBoxPath + "\n") f.write("Ssh_Path=" + unPath + "/bin/ssh.exe\n") f.write("Ssh_Keygen_Cmd=" + unPath + "/bin/ssh-keygen.exe\n") f.close() subutai.Shutdown() return 0
def subutaistart(): tmpDir = subutai.GetTmpDir() installDir = subutai.GetInstallDir() cocoasudoSize = subutai.GetFileSize("cocoasudo") chromeSize = subutai.GetFileSize("GoogleChrome_osx.tar.gz") totalSize = cocoasudoSize + chromeSize cocoasudoProgress = 0 chromeProgress = 0 if not os.path.exists(installDir + "bin/cocoasudo"): subutai.AddStatus("Downloading cocoasudo application") subutai.download("cocoasudo") while subutai.isDownloadComplete() != 1: sleep(0.05) cocoasudoProgress = subutai.GetBytesDownload() updateProgress(cocoasudoProgress, chromeProgress, totalSize) try: copyfile(tmpDir + "cocoasudo", installDir + "bin/cocoasudo") st = os.stat(installDir + "bin/cocoasudo") os.chmod(installDir + "bin/cocoasudo", st.st_mode | stat.S_IEXEC) except: subutai.RaiseError("Failed to install cocoasudo. Aborting") sleep(10) return -99 cocoasudoProgress = cocoasudoSize subutai.AddStatus("Checking Google Chrome Installation") if not os.path.exists("/Applications/Google Chrome.app"): subutai.AddStatus("Downloading Google Chrome") subutai.download("GoogleChrome_osx.tar.gz") while subutai.isDownloadComplete() != 1: sleep(0.05) chromeProgress = subutai.GetBytesDownload() updateProgress(cocoasudoProgress, chromeProgress, totalSize) subutai.AddStatus("Download Complete") chromeProgress = chromeSize updateProgress(cocoasudoProgress, chromeProgress, totalSize) #try: # script = 'quit Application \"Google Chrome.app\"' # p = Popen(['osascript', '-'], stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True) # stdout, stderr = p.communicate(script) #except: # subutai.RaiseError("Failed to stop Google Chrome") # sleep(10) sleep(1) subutai.AddStatus("Installing Google Chrome") try: script = 'do shell script "/usr/bin/tar -xf ' + tmpDir + 'GoogleChrome_osx.tar.gz -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") sleep(5) subutai.AddStatus("Installing Browser Plugin") sleep(3) location = os.environ[ 'HOME'] + '/Library/Application Support/Google/Chrome/External Extensions' if not os.path.exists(location): os.makedirs(location) ete = '{\n\t"external_update_url": "https://clients2.google.com/service/update2/crx"\n}' try: f = open(location + "/kpmiofpmlciacjblommkcinncmneeoaa.json", 'w') f.write(ete) # python will convert \n to os.linesep f.close() except: subutai.RaiseError("Can't write plugin to Extensions directory") subutai.Shutdown() return 0
def subutaistart(): tmpDir = subutai.GetTmpDir() subutai.AddStatus("Downloading Google Chrome") chromeFilename = "google-chrome-stable_current_amd64.deb" chromeSize = subutai.GetFileSize(chromeFilename) totalSize = chromeSize chromeProgress = 0 subutai.download(chromeFilename) while subutai.isDownloadComplete() != 1: sleep(0.05) chromeProgress = subutai.GetBytesDownload() updateProgress(chromeProgress, totalSize) chromeProgress = chromeSize try: call([ '/usr/bin/gksudo', '--message', 'Install Google Chrome Dependencies', 'apt-get install libappindicator1 -y' ]) call([ '/usr/bin/gksudo', '--message', 'Install Google Chrome', 'dpkg -i ' + tmpDir + chromeFilename ]) sleep(20) except: subutai.RaiseError("Failed to install Google Chrome") sleep(5) subutai.AddStatus("Installing Browser Plugin") #location = os.environ['HOME'] + '/.config/google-chrome/Default/External Extensions' location = '/opt/google/chrome/extensions/' if not os.path.exists(location): try: call([ '/usr/bin/gksudo', '--message', 'Create extension directory', 'mkdir -p ' + location ]) except: subutai.RaiseError("Failed to create " + location + " directory") sleep(5) return -22 ete = '{\n\t"external_update_url": "https://clients2.google.com/service/update2/crx"\n}\n' f = open(tmpDir + "kpmiofpmlciacjblommkcinncmneeoaa.json", 'w') f.write(ete) # python will convert \n to os.linesep f.close() try: call([ '/usr/bin/gksudo', '--message', 'Create extension directory', 'cp ' + tmpDir + 'kpmiofpmlciacjblommkcinncmneeoaa.json ' + location ]) except: subutai.RaiseError("Failed to move extension file") sleep(5) return -22 subutai.Shutdown() return 0
def setTray(self, tray): self.traySize = subutai.GetFileSize(tray) self.trayProgress = 0