49 ClassImp (TAlienPackage)
54 TAlienPackage::TAlienPackage() : fInstallList (0), fPackages (0), fDebugLevel (0)
57 fVersion =
"v5-16-00";
58 fPlatform =
"Linux-i686";
59 fAliEnMainPackageDir =
"/alice/packages";
60 fInstallationDirectory =
"/var/tmp/alien/packages";
61 fPostInstallCommand =
"post_install";
65 Info (
"TAlienPackage",
66 "\tPackage=%s Version=%s Platform=%s Installdir=%s AlienInstalldir=%s PostInstall=%s",
67 fName.Data (), fVersion.Data (), fPlatform.Data (),
68 fInstallationDirectory.Data (), fAliEnMainPackageDir.Data (),
69 fPostInstallCommand.Data ());
71 gGrid = TGrid::Connect (
"alien://");
74 fInstallList =
new TList ();
76 fPackages =
new TList ();
79 fPackages->SetOwner (kFALSE);
85 TAlienPackage::TAlienPackage(
const char *name,
const char *version,
87 const char *installationdirectory) :
88 fInstallList (0), fPackages (0), fDebugLevel (0)
94 fAliEnMainPackageDir =
"/alice/packages";
95 fInstallationDirectory = installationdirectory;
96 fPostInstallCommand =
"post_install";
102 Info (
"TAlienPackage",
103 "\tPackage=%s Version=%s Platform=%s Installdir=%s AlienInstalldir=%s PostInstall=%s",
104 name, version, platform, installationdirectory,
105 fAliEnMainPackageDir.Data (), fPostInstallCommand.Data ());
108 gGrid = TGrid::Connect (
"alien://");
111 fInstallList =
new TList ();
114 fPackages =
new TList ();
115 fPackages->SetOwner (kFALSE);
121 TAlienPackage::~TAlienPackage()
123 if (GetDebugLevel () > 2)
124 Info (
"~TAlienPackage",
"\tDestr: Package=%s Version=%s Platform=%s",
125 fName.Data (), fVersion.Data (), fPlatform.Data ());
126 SafeDelete (fInstallList);
132 Bool_t TAlienPackage::Enable()
134 fInstallList->Clear ();
135 if (GetDebugLevel () > 1)
136 Info (
"Install",
"\t\tInstalling Package=%s Version=%s Platform=%s",
137 fName.Data (), fVersion.Data (), fPlatform.Data ());
139 if (CheckDirectories (fName, fVersion) == kFALSE)
142 if (CheckDependencies () == kFALSE)
145 if (InstallAllPackages () == kFALSE)
148 gSystem->Exec(Form(
"mkdir -p %s/%s/%s/%s ; touch %s/%s/%s/%s/.safeguard",
149 fInstallationDirectory.Data (), fName.Data (), fVersion.Data (),
150 fVersion.Data (), fInstallationDirectory.Data (), fName.Data (),
151 fVersion.Data (), fVersion.Data ()));
160 const char *TAlienPackage::GetEnable ()
163 Form (
"%s/%s/%s/.alienEnvironment %s/%s/%s ",
164 fInstallationDirectory.Data (), fName.Data (), fVersion.Data (),
165 fInstallationDirectory.Data (), fName.Data (), fVersion.Data ());
166 return fEnableCommand.Data ();
172 Bool_t TAlienPackage::UnInstall ()
175 (
"test -e %s/%s/%s/%s/.safeguard && rm -rf %s/%s/%s",
176 fInstallationDirectory.Data (), fName.Data (), fVersion.Data (),
177 fVersion.Data (), fInstallationDirectory.Data (), fName.Data (),
186 Bool_t TAlienPackage::IsDirectory (
const char *dir1,
const char *str)
188 TGridResult *result = gGrid->Ls (dir1);
190 while (result->GetFileName (i)) {
191 if (TString (result->GetFileName (i)) == str) {
203 Bool_t TAlienPackage::CheckDirectories (TString name, TString version)
205 TString s(GetAliEnMainPackageDir());
207 if ((IsDirectory (s.Data (), name.Data ())) == kTRUE) {
208 if (GetDebugLevel () > 1)
209 Info (
"CheckDirectories",
"\t%s/%s exists.", s.Data (), name.Data ());
212 if ((IsDirectory (s, version.Data ())) == kTRUE) {
213 if (GetDebugLevel () > 1)
214 Info (
"CheckDirectories",
"\t%s/%s exist.", s.Data (), version.Data ());
217 if ((IsDirectory (s, GetPlatform ().Data ())) == kTRUE) {
218 if (GetDebugLevel () > 1)
219 Info (
"CheckDirectories",
"\t%s/%s exist.", s.Data (), GetPlatform ().Data ());
222 Error (
"CheckDirectories",
"\t%s/%s does not exist.", s.Data (), GetPlatform ().Data ());
225 Error (
"CheckDirectories",
"\t%s/%s does not exist.", s.Data (), version.Data ());
228 Info (
"CheckDirectories",
"\t%s/%s exists.", s.Data (), name.Data ());
237 Bool_t TAlienPackage::ReInstall ()
239 if (UnInstall () == kFALSE)
242 if (Enable () == kFALSE)
250 Bool_t TAlienPackage::PostInstall (TString name, TString version)
252 TGridResult *result =
254 (
"showTagValue -z %s/%s/%s PackageDef",
255 fAliEnMainPackageDir.Data (), name.Data (), version.Data ()));
256 TString post_install (result->GetKey (0,
"post_install"));
258 if (post_install.IsNull () == kTRUE) {
259 if (GetDebugLevel () > 0)
261 "\tNo post install procedure defined in AliEn.");
265 if (GetDebugLevel () > 0)
267 "\tDownloading PostInstall for Package=%s Version=%s",
268 name.Data (), version.Data ());
270 if (!TFile::Cp(Form(
"alien://%s", post_install.Data ()),
271 Form(
"%s/%s/%s/%s", fInstallationDirectory.Data (), name.Data (),
272 version.Data (), fPostInstallCommand.Data ()))) {
273 Error (
"PostInstall",
"\tCannot download the PostInstall script %s!", post_install.Data ());
277 gSystem->ChangeDirectory (Form
278 (
"%s/%s/%s", fInstallationDirectory.Data (),
279 name.Data (), version.Data ()));
280 gSystem->Exec (Form (
"chmod +x %s", fPostInstallCommand.Data ()));
281 gSystem->Exec (Form (
"./%s %s/%s/%s", fPostInstallCommand.Data (),
282 fInstallationDirectory.Data (), name.Data (), version.Data ()));
284 if (GetDebugLevel () > 1)
286 "\tExecuted PostInstall for Package=%s Version=%s ", name.Data (),
294 Bool_t TAlienPackage::Exec (
const char *cmdline)
296 TString fullline =
"";
303 for (Int_t j = 0; j < fPackages->GetEntries (); j++) {
304 TAlienPackage *
package = (TAlienPackage *) fPackages->At (j);
305 fullline += package->GetEnable ();
311 Info(
"Exec",
"\t\tExecuting Package=%s Version=%s \"%s\"", fName.Data (),
312 fVersion.Data (), fullline.Data ());
314 gSystem->Exec(fullline.Data());
321 Bool_t TAlienPackage::CheckDependencies ()
323 TString path (Form(
"%s/%s/%s", fAliEnMainPackageDir.Data (), fName.Data (),
326 TGridResult *result =
327 gGrid->Command (Form (
"showTagValue -z %s PackageDef", path.Data ()));
329 TString strDep (result->GetKey (0,
"dependencies"));
331 if (strDep.IsNull () == kTRUE) {
332 if (GetDebugLevel () > 0)
333 Info (
"CheckDepencencies",
"\tFound no dependencies ... ");
335 new TObjString (Form (
"%s::%s", fName.Data (), fVersion.Data ()));
336 fInstallList->Add (strObj);
340 TObjArray *strDeps = strDep.Tokenize (
",");
342 if (GetDebugLevel () > 0)
343 Info (
"CheckDepencencies",
"\tFound %d dependencies ... ",
344 strDeps->GetEntries ());
346 for (Int_t i = 0; i < strDeps->GetEntries (); i++) {
347 TObjString *strObj = (TObjString *) strDeps->At (i);
348 TObjArray *strDepsPackgAndVer = strObj->GetString ().Tokenize (
"@");
349 TObjString *strObj2 = (TObjString *) strDepsPackgAndVer->At (1);
351 if (GetDebugLevel () > 2)
352 Info (
"CheckDependencies",
"\t[%d] Dep. Package=%s", i,
353 strObj2->GetString ().Data ());
354 fInstallList->Add (strObj2);
357 TObjString *strObj =
new TObjString (Form (
"%s::%s", fName.Data (), fVersion.Data ()));
358 fInstallList->Add (strObj);
360 for (Int_t j = 0; j < fInstallList->GetEntries (); j++) {
361 strObj = (TObjString *) fInstallList->At(j);
362 TString strObjPackage, strObjVersion;
364 if (strObj->GetString().Tokenize(strObjPackage, from,
"::")) {
365 if (!strObj->GetString().Tokenize(strObjVersion, from,
"::")) {
366 Warning(
"CheckDepencencies",
"version string not found for j=%d (%s)", j, strObj->GetName());
370 Warning(
"CheckDepencencies",
"package string not found for j=%d (%s)", j, strObj->GetName());
374 if (GetDebugLevel () > 2)
375 Info (
"CheckDepencencies",
"\t[%d] Name=%s Version=%s", j,
376 strObjPackage.Data(), strObjVersion.Data());
378 if (CheckDirectories(strObjPackage, strObjVersion) == kFALSE)
388 Bool_t TAlienPackage::InstallSinglePackage(TString name, TString version, Bool_t isDep)
390 Info (
"InstallSinglePackage",
"\t%s %s", name.Data (), version.Data ());
392 TString s1 (Form (
"%s/%s/%s/%s", fAliEnMainPackageDir.Data (), name.Data (),
393 version.Data (), fPlatform.Data ()));
394 TString s2 (Form (
"%s(%s)", name.Data (), version.Data ()));
395 TString s3 (Form (
"%s/%s/%s/%s", fInstallationDirectory.Data (), name.Data (),
396 version.Data (), version.Data ()));
397 TString s4 (Form (
"%s/%s/%s/%s/%s", fInstallationDirectory.Data (), name.Data (),
398 version.Data (), version.Data (), fPlatform.Data ()));
399 TString s5 (Form (
"%s/%s/%s/%s", fInstallationDirectory.Data (), name.Data (),
400 version.Data (), fPlatform.Data ()));
401 TString s6 (Form (
"%s/%s", fAliEnMainPackageDir.Data (), name.Data ()));
402 TString s7 (Form (
"%s/%s/%s", fInstallationDirectory.Data (), name.Data (),
404 TString s8 (Form (
"%s/%s/%s/%s/.safeguard", fInstallationDirectory.Data (),
405 name.Data (), version.Data (), version.Data ()));
407 if (gSystem->AccessPathName (s8.Data ()) == 0) {
408 if (isDep == kFALSE) {
409 if (GetDebugLevel () > 0) {
410 Warning (
"InstallSinglePackage",
411 "\tPackage=%s exists in /%s directory.",
412 s2.Data (), s3.Data ());
413 Warning (
"InstallSinglePackage",
414 "\tYou might use function UnInstall() before Enable(), or do ReInstall() !!!!");
422 if (GetDebugLevel () > 1)
423 Info (
"InstallSinglePackage",
"\tCopying from alien://%s to %s ",
424 s1.Data (), s5.Data ());
426 gSystem->Exec (Form (
"mkdir -p %s", s3.Data ()));
428 if (gSystem->AccessPathName (s3.Data ())) {
429 Error (
"InstallSinglePackage",
"\tCouldn't create directory %s !",
434 if (!TFile::Cp (Form (
"alien://%s", s1.Data ()), Form (
"%s", s5.Data ()))) {
435 Error (
"InstallSinglePackage",
"\tCouldn't copy alien://%s -> %s",
436 s1.Data (), s5.Data ());
440 if (GetDebugLevel () > 2)
441 Info (
"InstallSinglePackage",
"\tEntering directory %s ", s7.Data ());
443 if (!gSystem->ChangeDirectory (Form (
"%s", s7.Data ()))) {
444 Error (
"InstallSinglePackage",
"\tCannot change into directory %s",
449 if (GetDebugLevel () > 2)
450 Info (
"InstallSinglePackage",
"\tUnpacking the package %s ...",
453 gSystem->Exec (Form (
"tar -xzf %s", fPlatform.Data ()));
455 if (GetDebugLevel () > 2)
456 Info (
"InstallSinglePackage",
"\tUnpacking the package %s DONE ...",
459 gSystem->Exec (Form (
"rm -f %s", fPlatform.Data ()));
461 if (GetDebugLevel () > 2)
462 Info (
"InstallSinglePackage",
463 "\tCopying PostInstall alien://%s/%s -> %s", s6.Data (),
464 fPostInstallCommand.Data (), s7.Data ());
466 if (!PostInstall (name, version)) {
467 Error (
"InstallSinglePackage",
468 "\tPostInstall procedure failed for package %s failed!",
479 Bool_t TAlienPackage::InstallAllPackages ()
481 Bool_t isDep = kFALSE;
483 Info (
"InstallAllPackages",
"\tPackage=%s Version=%s", fName.Data (),
486 for (Int_t j = 0; j < fPackages->GetEntries (); j++) {
487 TAlienPackage *
package = (TAlienPackage *) fPackages->At (j);
488 if (package && (package !=
this))
494 for (Int_t j = 0; j < fInstallList->GetEntries (); j++) {
495 TObjString *strObj = (TObjString *) fInstallList->At (j);
497 TObjArray *strDepsPackgOrVer = strObj->GetString ().Tokenize (
"::");
498 TObjString *strObjPackage = (TObjString *) strDepsPackgOrVer->At (0);
499 TObjString *strObjVersion = (TObjString *) strDepsPackgOrVer->At (1);
500 if (GetDebugLevel () > 1)
501 Info (
"InstallAllPackages",
"\tPackage=%s Version=%s",
502 strObjPackage->GetString ().Data (),
503 strObjVersion->GetString ().Data ());
505 if (j < (fInstallList->GetEntries () - 1))
510 if (j == (fInstallList->GetEntries () - 1)) {
511 if (InstallSinglePackage(strObjPackage->GetString (), strObjVersion->GetString (), isDep) == kFALSE)
513 fPackages->Add ((TObject *)
this);
515 TAlienPackage *newpackage =
new TAlienPackage(strObjPackage->GetName(),
516 strObjVersion->GetName(),
519 if (!newpackage->Enable ()) {
527 fPackages->Add ((TObject *) newpackage);