private void CheckPackage(string name, ProfilerPackage package) { InstalledWaiter waiter = new InstalledWaiter(); var proc = SDBLib.CreateSdbProcess(true, true); string cmdline = DeviceManager.AdjustSdbArgument("shell \"rpm -q " + name + "\""); var result = SDBLib.RunSdbProcessAsync(proc, cmdline, true, waiter); if (!waiter.Waiter.WaitOne(30000)) { Print($"CheckPackage fails for {name}"); return; } bool installed = !string.IsNullOrEmpty(waiter.InstalledStatus) && !waiter.InstalledStatus.EndsWith("not installed"); Print($"Package {name} installed: {installed}"); if (installed) { string[] components = ParsePackageFilename(waiter.InstalledStatus); if (components.Length > 2) { package.InstalledVersion = components[2]; } if (components.Length > 3) { package.InstalledRelease = components[3]; } } package.NeedToInstall = !installed; }
private bool InstallPackage(string name, ProfilerPackage p) { string rpm = name + "-" + p.AvailableVersion + "-" + p.AvailableRelease + "." + ArchToSuffix(GetArch()) + ".rpm"; string package_path = GetRpmsPath() + "/" + rpm; Print($"Installing {package_path}"); var process = SDBLib.CreateSdbProcess(); string cmdline = DeviceManager.AdjustSdbArgument($"shell \"rpm -U --force {package_path}\""); SDBLib.RunSdbProcess(process, cmdline, true); int rc = process.ExitCode; process.Close(); return(rc == 0); }
private bool PushPackage(string name, ProfilerPackage p) { string rpm = name + "-" + p.AvailableVersion + "-" + p.AvailableRelease + "." + ArchToSuffix(GetArch()) + ".rpm"; string src = ToolsPathInfo.OndemandFolderPath + @"\" + rpm; string dst = GetRpmsPath() + "/" + rpm; Print($"Push {src} -> {dst}"); var proc = SDBLib.CreateSdbProcess(true, true); string cmdline = DeviceManager.AdjustSdbArgument($"push \"{src}\" {dst}"); SDBLib.RunSdbProcess(proc, cmdline, true); int rc = proc.ExitCode; proc.Close(); return(rc == 0); }
private void CheckInstalled() { foreach (KeyValuePair <string, ProfilerPackage> package in _packages) { CheckPackage(package.Key, package.Value); if (!package.Value.NeedToInstall) { Version av = null, iv = null; double ar = 0, ir = 0; if (!string.IsNullOrEmpty(package.Value.AvailableVersion) && !string.IsNullOrEmpty(package.Value.InstalledVersion)) { av = new Version(package.Value.AvailableVersion); iv = new Version(package.Value.InstalledVersion); } if (!string.IsNullOrEmpty(package.Value.AvailableRelease) && !string.IsNullOrEmpty(package.Value.InstalledRelease)) { ar = double.Parse(package.Value.AvailableRelease); ir = double.Parse(package.Value.InstalledRelease); } if (av != null && iv != null) { if (av > iv) { package.Value.NeedToInstall = true; } else if (av == iv) { if (ar > ir) { package.Value.NeedToInstall = true; } } } } } ProfilerPackage liburcu1 = _packages["liburcu0"], liburcu2 = _packages["userspace-rcu"]; if (liburcu1 != null && liburcu2 != null) { if (liburcu1.NeedToInstall && liburcu2.NeedToInstall) { if (!string.IsNullOrEmpty(liburcu2.AvailableVersion)) { liburcu1.NeedToInstall = false; } else if (!string.IsNullOrEmpty(liburcu1.AvailableVersion)) { liburcu2.NeedToInstall = false; } } else if (liburcu2.NeedToInstall && !liburcu1.NeedToInstall) { liburcu2.NeedToInstall = false; } else if (liburcu1.NeedToInstall && !liburcu2.NeedToInstall) { liburcu1.NeedToInstall = false; } } }