/**** * Contents in the unzipped directory * script: script file to be handled by ScriptHandler * powershell: powershell file to be handled by ScriptHandler * eucalyptus: eucalyptus file to be handled by EucalyptusParameterHandler * include: include file to be handled by IncludeHandler * and any other resource files to be used by script/powershell handlers (exe, dll, etc) ****/ override protected void Handle() { if (!Directory.Exists(UnzippedDir)) { EucaLogger.Error(String.Format("Can't find the unzipped directory {0}", UnzippedDir)); return; } else if (File.Exists(UserDataFile)) { try { EucaFileUtil.Unzip(UnzippedDir, UserDataFile); } catch (Exception ex) { EucaLogger.Exception(String.Format("Failed to unzip {0} into {1}", UserDataFile, UnzippedDir), ex); return; } } foreach (String filePath in Directory.GetFiles(UnzippedDir)) { String fileName = Path.GetFileName(filePath).ToLower(); UserDataHandler handler = null; if (fileName.Equals("script") || fileName.Equals("powershell")) { handler = new ScriptHandler(); } else if (fileName.Equals("eucalyptus")) { handler = new EucalyptusParameterHandler(); } else if (fileName.Equals("include")) { handler = new IncludeHandler(); } else { EucaLogger.Debug(String.Format("unknown file: {0}", fileName)); continue; } try { handler.HandleUserData(filePath); EucaLogger.Debug(String.Format("Successfully handled the contents in {0}", fileName)); } catch (Exception ex) { EucaLogger.Exception(String.Format("failed to handle the file {0}", fileName), ex); } } }
void tryDecompress(String userDataFile, String unzippedDir) { EucaFileUtil.Unzip(unzippedDir, userDataFile); }
protected override void OnAfterInstall(IDictionary savedState) { base.OnAfterInstall(savedState); try { RegistryKey regKey = Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("Eucalyptus Systems"). OpenSubKey("Eucalyptus", true); if (regKey == null) { regKey = Registry.CurrentUser.OpenSubKey("SOFTWARE").OpenSubKey("Eucalyptus Systems"). OpenSubKey("Eucalyptus", true); } object objLocation = regKey.GetValue("InstallLocation"); regKey.Close(); if (objLocation == null) { string msg = "Can't retrieve Eucalyptus' location from registry"; Log(msg); throw new Exception(msg); /// will halt the installation } _installLocation = (string)objLocation; string exe = _installLocation + "\\" + "PostInstallation.exe"; if (!System.IO.File.Exists(exe)) { string msg = string.Format("Can't find the 'PostInstallation.exe' in {0}", _installLocation); Log(msg); throw new Exception(msg); // will halt the installation } string xenPVFile = _installLocation + "\\xenpv.zip"; string virtioFile = _installLocation + "\\virtio.zip"; string vmwareFile = _installLocation + "\\vmware"; string hypervFile = _installLocation + "\\hyperv"; if (!(File.Exists(xenPVFile) || File.Exists(virtioFile) || File.Exists(vmwareFile) || File.Exists(hypervFile))) { throw new InstallException("No hypervisor is chosen!"); } int retCode = 0; try { retCode = LaunchEucaPostInstaller(exe, "--registry"); if (retCode != 0) { Log(string.Format("[FAILURE]'PostInstaller.exe --registry' returned error code ({0})", retCode)); } } catch (Exception e) { Log(string.Format("[FAILURE] 'PostInstllation.exe --registry generated exception ({0})", e.Message)); } try { retCode = LaunchEucaPostInstaller(exe, "--envconf"); if (retCode != 0) { Log(string.Format("[FAILURE]'PostInstaller.exe --envconf' returned error code ({0})", retCode)); } } catch (Exception e) { Log(string.Format("[FAILURE] 'PostInstllation.exe --envconf generated exception ({0})", e.Message)); } try { retCode = LaunchEucaPostInstaller(exe, "--norecovery"); if (retCode != 0) { Log(string.Format("[FAILURE] 'PostInstaller.exe --norecovery' returned error code ({0})", retCode)); } } catch (Exception e) { Log(string.Format("[FAILURE] 'PostInstllation.exe --norecovery generated exception ({0})", e.Message)); } string xenPVDir = _installLocation + "\\xenpv"; try { if (File.Exists(xenPVFile)) { if (EucaFileUtil.Unzip(_installLocation, xenPVFile)) { ; } else { Log(string.Format("[FAILURE] Couldn't install xenpv; unzip failed for file: {0}", xenPVFile)); } } else // meaning that xenpv is not checked during the installation { ; } } catch (Exception e) { Log(e.Message); Log(e.StackTrace); throw e; /// this will termnate installation abnormally } finally { try { if (File.Exists(xenPVFile)) { File.Delete(xenPVFile); } } catch (Exception) { } } string virtioDir = _installLocation + "\\virtio"; try { if (File.Exists(virtioFile)) { if (EucaFileUtil.Unzip(_installLocation, virtioFile)) { string[] paths = Directory.GetDirectories(virtioDir); if (paths != null && paths.Length > 0) { if (paths.Length > 1) { Log(string.Format("[WARNING] Multiple virtio drivers are found; we're using {0}", paths[0])); } retCode = LaunchEucaPostInstaller(exe, string.Format("--virtio \"{0}\"", paths[0])); if (retCode != 0) { Log(string.Format("[FAILURE] 'PostInstallation.exe --virtio returned error code ({0})", retCode)); throw new Exception("Could not complete KVM VirtIO installation; Please see Eucalyptus documentation"); } } else { Log(string.Format("[FAILURE] Virtio drivers are not found in {0}", virtioDir)); } } else { Log(string.Format("[FAILURE] Virtio installation failed; could not unzip file: {0}", virtioFile)); } } else { ; // means that virtio option is not checked during the installation } } catch (Exception e) { throw e; /// this will termnate installation abnormally } finally { try { if (File.Exists(virtioFile)) { File.Delete(virtioFile); } } catch (Exception) { } } } catch (Exception e) { Log("Eucalyptus installation has failed."); Log(e.Message); Log(e.StackTrace); throw e; } }