FOSSology  3.2.0rc1
Open Source License Compliance by Open Source Software
pkgConfig.php
Go to the documentation of this file.
1 #!/usr/bin/php
2 <?php
3 /*
4  Copyright (C) 2011-2014 Hewlett-Packard Development Company, L.P.
5 
6  This program is free software; you can redistribute it and/or
7  modify it under the terms of the GNU General Public License
8  version 2 as published by the Free Software Foundation.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License along
16  with this program; if not, write to the Free Software Foundation, Inc.,
17  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  */
34 require_once '../lib/TestRun.php';
35 
36 global $Debian;
37 global $RedHat;
38 
39 $debian = NULL;
40 $redHat = NULL;
41 $fedora = NULL;
42 $ubuntu = NULL;
43 
44 /*
45  * determine what os and version:
46  * configure yum or apt for fossology
47  * install fossology
48  * stop scheduler (if install is good).
49  * do the steps below.
50  * 1. tune kernel
51  * 2. postgres files
52  * 3. php ini files
53  * 4. fossology.org apache file (No needec)
54  * 5. checkout fossology
55  * 6. run fo-installdeps
56  * 7. for RHEL what else?
57  */
58 
59 // Check for Super User
60 $euid = posix_getuid();
61 if($euid != 0) {
62  print "Error, this script must be run as root\n";
63  exit(1);
64 }
65 
66 // determine os flavor
67 $distros = array();
68 $f = exec('cat /etc/issue', $dist, $dRtn);
69 $distros = explode(' ', $dist[0]);
70 
71 //echo "DB: distros[0] is:{$distros[0]}\n";
72 
73 // configure for fossology and install fossology packages.
74 // Note that after this point, you could just stop if one could rely on the install
75 // process to give a valid exit code... Another script will run the agent unit
76 // and functional tests.
77 
78 // create this class which can be used by any release/os
79 $testUtils = new TestRun();
80 // distro can be Debian, Red, Fedora, Ubuntu
81 switch ($distros[0]) {
82  case 'Debian':
83  $debian = TRUE; // is this needed?
84  $debianVersion = $distros[2];
85  echo "debian version is:$debianVersion\n";
86  try
87  {
88  $Debian = new ConfigSys($distros[0], $debianVersion);
89  }
90  catch (Exception $e)
91  {
92  echo "FATAL! could not process ini file for Debian $debianVersion system\n";
93  exit(1);
94  }
95 
96  if(insertDeb($Debian) === FALSE)
97  {
98  echo "FATAL! cannot insert deb line into /etc/apt/sources.list\n";
99  exit(1);
100  }
101  echo "*** Installing fossology ***\n";
102  if(!installFossology($Debian))
103  {
104  echo "FATAL! Could not install fossology on {$distros[0]} version $debianVersion\n";
105  exit(1);
106  }
107  echo "*** stopping scheduler ***\n";
108  // Stop scheduler so system files can be configured.
109  //$testUtils->stopScheduler();
110  /*
111  echo "*** Tuning kernel ***\n";
112  tuneKernel();
113 
114  echo "*** Setting up config files ***\n";
115  if(configDebian($distros[0], $debianVersion) === FALSE)
116  {
117  echo "FATAL! could not configure postgres or php config files\n";
118  exit(1);
119  }
120  */
121  /*
122  echo "*** Checking apache config ***\n";
123  if(!configApache2($distros[0]))
124  {
125  echo "Fatal, could not configure apache2 to use fossology\n";
126  }
127 
128  if(!restart('apache2'))
129  {
130  echo "Erorr! Could not restart apache2, please restart by hand\n";
131  exit(1);
132  }
133  */
134  /*
135  echo "*** Starting FOSSology ***\n";
136  if(!start('fossology'))
137  {
138  echo "Erorr! Could not start FOSSology, please restart by hand\n";
139  exit(1);
140  }
141  */
142  break;
143  case 'Red':
144  $redHat = 'RedHat';
145  $rhVersion = $distros[6];
146  //echo "rh version is:$rhVersion\n";
147  try
148  {
149  $RedHat = new ConfigSys($redHat, $rhVersion);
150  }
151  catch (Exception $e)
152  {
153  echo "FATAL! could not process ini file for RedHat $rhVersion system\n";
154  echo $e;
155  exit(1);
156  }
157  if(!configYum($RedHat))
158  {
159  echo "FATAL! could not install fossology.conf yum configuration file\n";
160  exit(1);
161  }
162  /*
163  echo "*** Tuning kernel ***\n";
164  tuneKernel();
165  */
166  echo "*** Installing fossology ***\n";
167  if(!installFossology($RedHat))
168  {
169  echo "FATAL! Could not install fossology on $redHat version $rhVersion\n";
170  exit(1);
171  }
172  echo "*** stopping scheduler ***\n";
173  // Stop scheduler so system files can be configured.
174  //$testUtils->stopScheduler();
175  /*
176  echo "*** Setting up config files ***\n";
177  if(!configRhel($redHat, $rhVersion))
178  {
179  echo "FATAL! could not install php and postgress configuration files\n";
180  exit(1);
181  }
182  */
183  /*
184  echo "*** Checking apache config ***\n";
185  if(!configApache2($distros[0]))
186  {
187  echo "Fatal, could not configure apache2 to use fossology\n";
188  }
189  */
190  /*
191  if(!restart('httpd'))
192  {
193  echo "Erorr! Could not restart httpd, please restart by hand\n";
194  exit(1);
195  }
196  */
197  if(!stop('iptables'))
198  {
199  echo "Erorr! Could not stop Firewall, please stop by hand\n";
200  exit(1);
201  }
202 
203  break;
204  case 'CentOS':
205  $redHat = 'RedHat';
206  $rhVersion = $distros[2];
207  echo "rh version is:$rhVersion\n";
208  try
209  {
210  $RedHat = new ConfigSys($redHat, $rhVersion);
211  }
212  catch (Exception $e)
213  {
214  echo "FATAL! could not process ini file for RedHat $rhVersion system\n";
215  echo $e;
216  exit(1);
217  }
218  if(!configYum($RedHat))
219  {
220  echo "FATAL! could not install fossology.conf yum configuration file\n";
221  exit(1);
222  }
223  /*
224  echo "*** Tuning kernel ***\n";
225  tuneKernel();
226  */
227  echo "*** Installing fossology ***\n";
228  if(!installFossology($RedHat))
229  {
230  echo "FATAL! Could not install fossology on $redHat version $rhVersion\n";
231  exit(1);
232  }
233  echo "*** stopping scheduler ***\n";
234  // Stop scheduler so system files can be configured.
235  //$testUtils->stopScheduler();
236  /*
237  echo "*** Setting up config files ***\n";
238  if(!configRhel($redHat, $rhVersion))
239  {
240  echo "FATAL! could not install php and postgress configuration files\n";
241  exit(1);
242  }
243  */
244  /*
245  echo "*** Checking apache config ***\n";
246  if(!configApache2($distros[0]))
247  {
248  echo "Fatal, could not configure apache2 to use fossology\n";
249  }
250  */
251  /*
252  if(!stop('httpd'))
253  {
254  echo "Erorr! Could not restart httpd, please restart by hand\n";
255  exit(1);
256  }
257  if(!start('httpd'))
258  {
259  echo "Erorr! Could not restart httpd, please restart by hand\n";
260  exit(1);
261  }
262  */
263  if(!stop('iptables'))
264  {
265  echo "Erorr! Could not stop Firewall, please stop by hand\n";
266  exit(1);
267  }
268  /*
269  echo "*** Starting fossology ***\n";
270  if(!start('fossology'))
271  {
272  echo "Erorr! Could not start fossology, please restart by hand\n";
273  exit(1);
274  }
275  */
276  break;
277  case 'Fedora':
278  $fedora = 'Fedora';
279  $fedVersion = $distros[2];
280  try
281  {
282  $Fedora = new ConfigSys($fedora, $fedVersion);
283  }
284  catch (Exception $e)
285  {
286  echo "FATAL! could not process ini file for Fedora $fedVersion system\n";
287  echo $e;
288  exit(1);
289  }
290  if(!configYum($Fedora))
291  {
292  echo "FATAL! could not install fossology.repo yum configuration file\n";
293  exit(1);
294  break;
295  }
296  echo "*** Installing fossology ***\n";
297  if(!installFossology($Fedora))
298  {
299  echo "FATAL! Could not install fossology on $fedora version $fedVersion\n";
300  exit(1);
301  }
302  echo "*** stopping scheduler ***\n";
303  // Stop scheduler so system files can be configured.
304  //$testUtils->stopScheduler();
305  /*
306  echo "*** Tuning kernel ***\n";
307  tuneKernel();
308 
309  echo "*** Setting up config files ***\n";
310  if(!configRhel($fedora, $fedVersion))
311  {
312  echo "FATAL! could not install php and postgress configuration files\n";
313  exit(1);
314  }
315  */
316  /*
317  echo "*** Checking apache config ***\n";
318  if(!configApache2($distros[0]))
319  {
320  echo "Fatal, could not configure apache2 to use fossology\n";
321  }
322  */
323  /*
324  $last = exec("systemctl restart httpd.service", $out, $rtn);
325  if($rtn != 0)
326  {
327  echo "Erorr! Could not restart httpd, please restart by hand\n";
328  exit(1);
329  }
330  */
331  $last = exec("systemctl stop iptables.service", $out, $rtn);
332  if($rtn != 0)
333  {
334  echo "Erorr! Could not stop Firewall, please stop by hand\n";
335  exit(1);
336  }
337  /*
338  echo "*** Starting fossology ***\n";
339  if(!start('fossology'))
340  {
341  echo "Erorr! Could not start fossology, please restart by hand\n";
342  exit(1);
343  }
344  */
345  break;
346  case 'Ubuntu':
347  $distro = 'Ubuntu';
348  $ubunVersion = $distros[1];
349  echo "Ubuntu version is:$ubunVersion\n";
350  try
351  {
352  $Ubuntu = new ConfigSys($distros[0], $ubunVersion);
353  }
354  catch (Exception $e)
355  {
356  echo "FATAL! could not process ini file for Ubuntu $ubunVersion system\n";
357  echo $e . "\n";
358  exit(1);
359  }
360  if(insertDeb($Ubuntu) === FALSE)
361  {
362  echo "FATAL! cannot insert deb line into /etc/apt/sources.list\n";
363  exit(1);
364  }
365  /*
366  echo "*** Tuning kernel ***\n";
367  tuneKernel();
368  */
369  echo "*** Installing fossology ***\n";
370  if(!installFossology($Ubuntu))
371  {
372  echo "FATAL! Could not install fossology on {$distros[0]} version $ubunVersion\n";
373  exit(1);
374  }
375  echo "*** stopping scheduler ***\n";
376  // Stop scheduler so system files can be configured.
377  //$testUtils->stopScheduler();
378 
379  echo "*** Setting up config files ***\n";
380  if(configDebian($distros[0], $ubunVersion) === FALSE)
381  {
382  echo "FATAL! could not configure postgres or php config files\n";
383  exit(1);
384  }
385  /*
386  echo "*** Checking apache config ***\n";
387  if(!configApache2($distros[0]))
388  {
389  echo "Fatal, could not configure apache2 to use fossology\n";
390  }
391 
392  if(!restart('apache2'))
393  {
394  echo "Erorr! Could not restart apache2, please restart by hand\n";
395  exit(1);
396  }
397  */
398  /*
399  echo "*** Starting FOSSology ***\n";
400  if(!start('fossology'))
401  {
402  echo "Erorr! Could not start FOSSology, please restart by hand\n";
403  exit(1);
404  }
405  */
406  break;
407  default:
408  echo "Fatal! unrecognized distribution! {$distros[0]}\n" ;
409  exit(1);
410  break;
411 }
412 class ConfigSys {
413 
414  public $osFlavor;
415  public $osVersion = 0;
416  private $fossVersion;
417  private $osCodeName;
418  public $deb;
419  public $comment = '';
420  public $yum;
421 
422  function __construct($osFlavor, $osVersion)
423  {
424  if(empty($osFlavor))
425  {
426  throw new Exception("No Os Flavor supplied\n");
427  }
428  if(empty($osVersion))
429  {
430  throw new Exception("No Os Version Supplied\n");
431  }
432 
433  $dataFile = '../dataFiles/pkginstall/' . strtolower($osFlavor) . '.ini';
434  $releases = parse_ini_file($dataFile, 1);
435  //echo "DB: the parsed ini file is:\n";
436  //print_r($releases) . "\n";
437  foreach($releases as $release => $values)
438  {
439  if($values['osversion'] == $osVersion)
440  {
441  // found the correct os, gather attributes
442  $this->osFlavor = $values['osflavor'];
443  $this->osVersion = $values['osversion'];
444  $this->fossVersion = $values['fossversion'];
445  $this->osCodeName = $values['codename'];
446  // code below is needed to avoid php notice
447  switch (strtolower($this->osFlavor)) {
448  case 'ubuntu':
449  case 'debian':
450  $this->deb = $values['deb'];
451  break;
452  case 'fedora':
453  case 'redhat':
454  $this->yum = $values['yum'];
455  break;
456  default:
457  ;
458  break;
459  }
460  $this->comment = $values['comment'];
461  }
462  }
463  if($this->osVersion == 0)
464  {
465  throw new Exception("FATAL! no matching os flavor or version found\n");
466  }
467  return;
468  } // __construct
469 
475  public function printAttr()
476  {
477 
478  echo "Attributes of ConfigSys:\n";
479  echo "\tosFlavor:$this->osFlavor\n";
480  echo "\tosVersion:$this->osVersion\n";
481  echo "\tfossVersion:$this->fossVersion\n";
482  echo "\tosCodeName:$this->osCodeName\n";
483  echo "\tdeb:$this->deb\n";
484  echo "\tcomment:$this->comment\n";
485  echo "\tyum:$this->yum\n";
486 
487  return;
488  } //printAttr
489 } // ConfigSys
490 
498 function insertDeb($objRef)
499 {
500 
501  if(!is_object($objRef))
502  {
503  return(FALSE);
504  }
505  // open file for append
506  $APT = fopen('/etc/apt/sources.list', 'a+');
507  if(!is_resource($APT))
508  {
509  echo "FATAL! could not open /etc/apt/sources.list for modification\n";
510  return(FALSE);
511  }
512  $written = fwrite($APT, "\n");
513  fflush($APT);
514 
515  if(empty($objRef->comment))
516  {
517  $comment = '# Automatically inserted by pkgConfig.php';
518  }
519 
520  $com = fwrite($APT, $objRef->comment . "\n");
521  if(!$written = fwrite($APT, $objRef->deb))
522  {
523  echo "FATAL! could not write deb line to /etc/apt/sources.list\n";
524  return(FALSE);
525  }
526  fclose($APT);
527  return(TRUE);
528 } // insertDeb
529 
540 function installFossology($objRef)
541 {
542  if(!is_object($objRef))
543  {
544  return(FALSE);
545  }
546  $aptUpdate = 'apt-get update 2>&1';
547  $aptInstall = 'apt-get -y --force-yes install fossology > fossinstall.log 2>&1';
548  $yumClean = 'yum clean all';
549  $yumUpdate = 'yum -y update 2>&1';
550  $yumInstall = 'yum -y install fossology > fossinstall.log 2>&1';
551  $debLog = NULL;
552  $installLog = NULL;
553 
554  //echo "DB: IFOSS: osFlavor is:$objRef->osFlavor\n";
555  switch ($objRef->osFlavor) {
556  case 'Ubuntu':
557  case 'Debian':
558  $last = exec($aptUpdate, $out, $rtn);
559  //echo "last is:$last\nresults of update are:\n";print_r($out) . "\n";
560  $last = exec($aptInstall, $iOut, $iRtn);
561  if($iRtn != 0)
562  {
563  echo "Failed to install fossology! aptInstall is:$aptInstall, iRtn is:$iRtn, last is:$last \nTranscript is:\n";
564  echo implode("\n",$iOut) . "\n";
565  return(FALSE);
566  }
567  // check for php or other errors that don't make apt return 1
568  echo "DB: in ubun/deb case, before installLog implode\n";
569  $debLog = implode("\n",$iOut);
570  if(!ckInstallLog($debLog))
571  {
572  echo "One or more of the phrases:\nPHP Stack trace:\nFATAL\n".
573  "Could not connect to FOSSology database:\n" .
574  "Unable to connect to PostgreSQL server:\n" .
575  "Was found in the install output. This install is suspect and is considered FAILED.\n";
576  return(FALSE);
577  }
578  // if any of the above are non zero, return false
579  break;
580  case 'Fedora':
581  case 'RedHat':
582  echo "** Running yum clean **\n";
583  $last = exec($yumClean, $out, $rtn);
584  if($rtn != 0)
585  {
586  echo "Failed to clean all cache data!\nTranscript is:\n";
587  echo implode("\n",$out) . "\n";
588  return(FALSE);
589  }
590  echo "** Running yum update **\n";
591  $last = exec($yumUpdate, $out, $rtn);
592  if($rtn != 0)
593  {
594  echo "Failed to update yum repositories with fossology!\nTranscript is:\n";
595  echo implode("\n",$out) . "\n";
596  return(FALSE);
597  }
598  echo "** Running yum install fossology **\n";
599  $last = exec($yumInstall, $yumOut, $yumRtn);
600  //echo "install of fossology finished, yumRtn is:$yumRtn\nlast is:$last\n";
601  //$clast = system('cat fossinstall.log');
602  if($yumRtn != 0)
603  {
604  echo "Failed to install fossology! yumInstall is:$yumInstall, yumRtn is:$yumRtn, last is:$last \nTranscript is:\n";
605  echo implode("\n",$yumOut) . "\n";
606  return(FALSE);
607  }
608  if(!($installLog = file_get_contents('fossinstall.log')))
609  {
610  echo "FATAL! could not read 'fossinstall.log\n";
611  return(FALSE);
612  }
613  if(!ckInstallLog($installLog))
614  {
615  echo "One or more of the phrases:\nPHP Stack trace:\nFATAL\n".
616  "Could not connect to FOSSology database:\n" .
617  "Unable to connect to PostgreSQL server:\n" .
618  "Was found in the install output. This install is suspect and is considered failed.\n";
619  return(FALSE);
620  }
621  break;
622 
623  default:
624  echo "FATAL! Unrecongnized OS/Release, not one of Ubuntu, Debian, RedHat" .
625  " or Fedora\n";
626  return(FALSE);
627  break;
628  }
629  return(TRUE);
630 }
631 
641 function ckInstallLog($log) {
642  if(empty($log))
643  {
644  return(FALSE);
645  }
646  // check for php or other errors that don't make apt return 1
647  $traces = $fates = $connects = $postgresFail = 0;
648  $stack = '/PHP Stack trace:/';
649  $fatal = '/FATAL/';
650  $noConnect = '/Could not connect to FOSSology database/';
651  $noPG = '/Unable to connect to PostgreSQL server:/';
652 
653  $traces = preg_match_all($stack, $log, $stackMatches);
654  $fates = preg_match_all($fatal, $log, $fatalMatches);
655  $connects = preg_match_all($noConnect, $log, $noconMatches);
656  $postgresFail = preg_match_all($noPG, $log, $noPGMatches);
657  echo "Number of PHP stack traces found:$traces\n";
658  echo "Number of FATAL's found:$fates\n";
659  echo "Number of 'cannot connect' found:$connects\n";
660  echo "Number of 'cannot connect to postgres server' found:$postgresFail\n";
661  //print "DB: install log is:\n$log\n";
662  if($traces ||
663  $fates ||
664  $connects ||
665  $postgresFail)
666  {
667  return(FALSE);
668  }
669  return(TRUE);
670 }
684 function copyFiles($files, $dest)
685 {
686  if(empty($files))
687  {
688  throw new Exception('No file to copy', 0);
689  }
690  if(empty($dest))
691  {
692  throw new Exception('No destination for copy', 0);
693  }
694  //echo "DB: copyFiles: we are at:" . getcwd() . "\n";
695  $login = posix_getlogin();
696  //echo "DB: copyFiles: running as:$login\n";
697  //echo "DB: copyFiles: uid is:" . posix_getuid() . "\n";
698  if(is_array($files))
699  {
700  foreach($files as $file)
701  {
702  // Get left name and check if dest is a directory, copy cannot copy to a
703  // dir.
704  $baseFile = basename($file);
705  if(is_dir($dest))
706  {
707  $to = $dest . "/$baseFile";
708  }
709  else
710  {
711  $to = $dest;
712  }
713  //echo "DB: copyfiles: file copied is:$file\n";
714  //echo "DB: copyfiles: to is:$to\n";
715  if(!copy($file, $to))
716  {
717  throw new Exception("Could not copy $file to $to");
718  }
719  //$lastcp = exec("cp -v $file $to", $cpout, $cprtn);
720  //echo "DB: copyfiles: cprtn is:$cprtn\n";
721  //echo "DB: copyfiles: lastcp is:$lastcp\n";
722  //echo "DB: copyfiles: out is:\n";print_r($cpout) . "\n";
723  }
724  }
725  else
726  {
727  $baseFile = basename($files);
728  if(is_dir($dest))
729  {
730  $to = $dest . "/$baseFile";
731  }
732  else
733  {
734  $to = $dest;
735  }
736  //echo "DB: copyfiles-single: file copied is:$files\n";
737  //echo "DB: copyfiles-single: to is:$to\n";
738  if(!copy($files,$to))
739  {
740  throw new Exception("Could not copy $file to $to");
741  }
742  }
743  return(TRUE);
744 } // copyFiles
745 
746 
753 function findVerPsql()
754 {
755  $version = NULL;
756 
757  $last = exec('psql --version', $out, $rtn);
758  if($rtn != 0)
759  {
760  return(FALSE);
761  }
762  else
763  {
764  // isolate the version number and return it
765  list( , ,$ver) = explode(' ', $out[0]);
766  $version = substr($ver, 0, 3);
767  }
768  return($version);
769 }
770 
776 function tuneKernel()
777 {
778  // check to see if we have already done this... so the sysctl.conf file doesn't
779  // end up with dup entries.
780  $grepCmd = 'grep shmmax=512000000 /etc/sysctl.conf /dev/null 2>&1';
781  $last = exec($grepCmd, $out, $rtn);
782  if($rtn == 0) // kernel already configured
783  {
784  echo "NOTE: kernel already configured.\n";
785  return;
786  }
787  $cmd1 = "echo 512000000 > /proc/sys/kernel/shmmax";
788  $cmd2 = "echo 'kernel.shmmax=512000000' >> /etc/sysctl.conf";
789  // Tune the kernel
790  $last1 = exec($cmd1, $cmd1Out, $rtn1);
791  if ($rtn1 != 0)
792  {
793  echo "Fatal! Could not set kernel shmmax in /proc/sys/kernel/shmmax\n";
794  }
795  $last2 = exec($cmd2, $cmd2Out, $rtn2);
796  // make it permanent
797  if ($rtn2 != 0)
798  {
799  echo "Fatal! Could not turn kernel.shmmax in /etc/sysctl.conf\n";
800  }
801  return;
802 } // tuneKernel
803 
813 function configApache2($osType)
814 {
815  if(empty($osType))
816  {
817  return(FALSE);
818  }
819  switch ($osType) {
820  case 'Ubuntu':
821  case 'Debian':
822  if(is_link('/etc/apache2/conf.d/fossology'))
823  {
824  break;
825  }
826  else
827  {
828  // copy config file, create sym link
829  if(!copy('../dataFiles/pkginstall/fo-apache.conf', '/etc/fossology/fo-apache.conf'))
830  {
831  echo "FATAL!, Cannot configure fossology into apache2\n";
832  return(FALSE);
833  }
834  if(!symlink('/etc/fossology/fo-apache.conf','/etc/apache2/conf.d/fossology'))
835  {
836  echo "FATAL! Could not create symlink in /etc/apache2/conf.d/ for fossology\n";
837  return(FALSE);
838  }
839  // restart apache so changes take effect
840  if(!restart('apache2'))
841  {
842  echo "Erorr! Could not restart apache2, please restart by hand\n";
843  return(FALSE);
844  }
845  }
846  break;
847  case 'Red':
848  // copy config file, no symlink needed for redhat
849  if(!copy('../dataFiles/pkginstall/fo-apache.conf', '/etc/httpd/conf.d/fossology.conf'))
850  {
851  echo "FATAL!, Cannot configure fossology into apache2\n";
852  return(FALSE);
853  }
854  // restart apapche so changes take effect
855  if(!restart('httpd'))
856  {
857  echo "Erorr! Could not restart httpd, please restart by hand\n";
858  return(FALSE);
859  }
860  break;
861  default:
862  ;
863  break;
864  }
865  return(TRUE);
866 } // configApache2
867 
878 function configDebian($osType, $osVersion)
879 {
880  if(empty($osType))
881  {
882  return(FALSE);
883  }
884  if(empty($osVersion))
885  {
886  return(FALSE);
887  }
888 
889  // based on type read the appropriate ini file.
890 
891  //echo "DB:configD: osType is:$osType\n";
892  //echo "DB:configD: osversion is:$osVersion\n";
893 
894  // can't check in pg_hba.conf as it shows HP's firewall settings, get it
895  // internally
896 
897  // No need to update pg_hba.conf file
898  //getPGhba('../dataFiles/pkginstall/debian/6/pg_hba.conf');
899 
900  //$debPath = '../dataFiles/pkginstall/debian/6/';
901 
902  //$psqlFiles = array(
903  //$debPath . 'pg_hba.conf',
904  //$debPath . 'postgresql.conf');
905 
906  switch ($osVersion)
907  {
908  case '6.0':
909  echo "debianConfig got os version 6.0!\n";
910  // copy config files
911  /*
912  * Change the structure of data files:
913  * e.g. debian/5/pg_hba..., etc, all files that go with this version
914  * debian/6/pg_hba....
915  * and use a symlink for the 'codename' squeeze -> debian/6/
916  */
917  /*
918  try
919  {
920  copyFiles($psqlFiles, "/etc/postgresql/8.4/main");
921  }
922  catch (Exception $e)
923  {
924  echo "Failure: Could not copy postgres 8.4 config file\n";
925  }
926  try
927  {
928  copyFiles($debPath . 'cli-php.ini', '/etc/php5/cli/php.ini');
929  } catch (Exception $e)
930  {
931  echo "Failure: Could not copy php.ini to /etc/php5/cli/php.ini\n";
932  return(FALSE);
933  }
934  try
935  {
936  copyFiles($debPath . 'apache2-php.ini', '/etc/php5/apache2/php.ini');
937  } catch (Exception $e)
938  {
939  echo "Failure: Could not copy php.ini to /etc/php5/apache2/php.ini\n";
940  return(FALSE);
941  }
942  */
943  break;
944  case '10.04.3':
945  case '11.04':
946  case '11.10':
947  echo "debianConfig got os version $osVersion!\n";
948  /*
949  try
950  {
951  copyFiles($psqlFiles, "/etc/postgresql/8.4/main");
952  }
953  catch (Exception $e)
954  {
955  echo "Failure: Could not copy postgres 8.4 config file\n";
956  }
957  try
958  {
959  copyFiles($debPath . 'cli-php.ini', '/etc/php5/cli/php.ini');
960  } catch (Exception $e)
961  {
962  echo "Failure: Could not copy php.ini to /etc/php5/cli/php.ini\n";
963  return(FALSE);
964  }
965  try
966  {
967  copyFiles($debPath . 'apache2-php.ini', '/etc/php5/apache2/php.ini');
968  } catch (Exception $e)
969  {
970  echo "Failure: Could not copy php.ini to /etc/php5/apache2/php.ini\n";
971  return(FALSE);
972  }
973  */
974  break;
975  case '12.04.1':
976  case '12.04.2':
977  case '12.04.3':
978  case '12.04.4':
979  echo "debianConfig got os version $osVersion!\n";
980  echo "Old PHPunit installation with PEAR is deprecated, it is now done with composer.\n";
981  echo "To install composer type:\n";
982  echo "curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer\n ";
983  break;
984  case '12.10':
985  echo "debianConfig got os version $osVersion!\n";
986  //postgresql-9.1 can't use 8.4 conf file
987  /*
988  try
989  {
990  copyFiles($psqlFiles, "/etc/postgresql/9.1/main");
991  }
992  catch (Exception $e)
993  {
994  echo "Failure: Could not copy postgres 9.1 config file\n";
995  }
996  */
997  /*
998  try
999  {
1000  copyFiles($debPath . 'cli-php.ini', '/etc/php5/cli/php.ini');
1001  } catch (Exception $e)
1002  {
1003  echo "Failure: Could not copy php.ini to /etc/php5/cli/php.ini\n";
1004  return(FALSE);
1005  }
1006  try
1007  {
1008  copyFiles($debPath . 'apache2-php.ini', '/etc/php5/apache2/php.ini');
1009  } catch (Exception $e)
1010  {
1011  echo "Failure: Could not copy php.ini to /etc/php5/apache2/php.ini\n";
1012  return(FALSE);
1013  }
1014  */
1015  break;
1016  default:
1017  return(FALSE); // unsupported debian version
1018  break;
1019  }
1020  /*
1021  // restart apache and postgres so changes take effect
1022  if(!restart('apache2'))
1023  {
1024  echo "Erorr! Could not restart apache2, please restart by hand\n";
1025  return(FALSE);
1026  }
1027  // Get the postrgres version so the correct file is used.
1028  $pName = 'postgresql';
1029  if($osVersion == '10.04.3')
1030  {
1031  $ver = findVerPsql();
1032  //echo "DB: returned version is:$ver\n";
1033  $pName = 'postgresql-' . $ver;
1034  }
1035  echo "DB pName is:$pName\n";
1036  if(!restart($pName))
1037  {
1038  echo "Erorr! Could not restart $pName, please restart by hand\n";
1039  return(FALSE);
1040  }
1041  */
1042  return(TRUE);
1043 } // configDebian
1044 
1052 function configRhel($osType, $osVersion)
1053 {
1054  if(empty($osType))
1055  {
1056  return(FALSE);
1057  }
1058  if(empty($osVersion))
1059  {
1060  return(FALSE);
1061  }
1062 
1063  $rpmPath = '../dataFiles/pkginstall/redhat/6.x';
1064  // getPGhba($rpmPath . '/pg_hba.conf');
1065  $psqlFiles = array(
1066  //$rpmPath . '/pg_hba.conf',
1067  $rpmPath . '/postgresql.conf');
1068  // fossology tweaks the postgres files so the packages work.... don't copy
1069  /*
1070  try
1071  {
1072  copyFiles($psqlFiles, "/var/lib/pgsql/data/");
1073  }
1074  catch (Exception $e)
1075  {
1076  echo "Failure: Could not copy postgres 8.4 config files\n";
1077  }
1078  */
1079  try
1080  {
1081  copyFiles($rpmPath . '/php.ini', '/etc/php.ini');
1082  } catch (Exception $e)
1083  {
1084  echo "Failure: Could not copy php.ini to /etc/php.ini\n";
1085  return(FALSE);
1086  }
1087  // restart postgres, postgresql conf didn't change do not restart
1088  /*
1089  $pName = 'postgresql';
1090  if(!restart($pName))
1091  {
1092  echo "Erorr! Could not restart $pName, please restart by hand\n";
1093  return(FALSE);
1094  }
1095  */
1096  return(TRUE);
1097 } // configRhel
1098 
1108 function configYum($objRef)
1109 {
1110  if(!is_object($objRef))
1111  {
1112  return(FALSE);
1113  }
1114  if(empty($objRef->yum))
1115  {
1116  echo "FATAL, no yum install line to install\n";
1117  return(FALSE);
1118  }
1119 
1120  $RedFedRepo = 'redfed-fossology.repo'; // name of generic repo file.
1121  // replace the baseurl line with the current one.
1122  $n = "../dataFiles/pkginstall/" . $RedFedRepo;
1123  $fcont = file_get_contents($n);
1124  //if(!$fcont);
1125  //{
1126  //echo "FATAL! could not read repo file $n\n";
1127  //exit(1);
1128  //}
1129  //echo "DB: contents is:\n$fcont\n";
1130  $newRepo = preg_replace("/baseurl=(.*)?/", 'baseurl=' . $objRef->yum, $fcont,-1, $cnt);
1131  // write the file, fix below to copy the correct thing...
1132  if(!($written = file_put_contents("../dataFiles/pkginstall/" . $RedFedRepo, $newRepo)))
1133  {
1134  echo "FATAL! could not write repo file $RedFedRepo\n";
1135  exit(1);
1136  }
1137  // coe plays with yum stuff, check if yum.repos.d exists and if not create it.
1138  if(is_dir('/etc/yum.repos.d'))
1139  {
1140  copyFiles("../dataFiles/pkginstall/" . $RedFedRepo, '/etc/yum.repos.d/fossology.repo');
1141  }
1142  else
1143  {
1144  // create the dir and then copy
1145  if(!mkdir('/etc/yum.repos.d'))
1146  {
1147  echo "FATAL! could not create yum.repos.d\n";
1148  return(FALSE);
1149  }
1150  copyFiles("../dataFiles/pkginstall/" . $RedFedRepo, '/etc/yum.repos.d/fossology.repo');
1151  }
1152  //print_r($objRef);
1153  if ($objRef->osFlavor == 'RedHat')
1154  {
1155  $last = exec("yum -y install wget", $out, $rtn);
1156  if($rtn != 0)
1157  {
1158  echo "FATAL! install EPEL repo fail\n";
1159  echo "transcript is:\n";print_r($out) . "\n";
1160  return(FALSE);
1161  }
1162  /* comment out the epel repo installation
1163  $last = exec("wget -e http_proxy=http://web-proxy.cce.hp.com:8088 http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm", $out, $rtn);
1164  if($rtn != 0)
1165  {
1166  echo "FATAL! install EPEL repo fail\n";
1167  echo "transcript is:\n";print_r($out) . "\n";
1168  return(FALSE);
1169  }
1170  $last = exec("rpm -ivh epel-release-6-8.noarch.rpm", $out, $rtn);
1171  if($rtn != 0)
1172  {
1173  echo "FATAL! install EPEL repo fail\n";
1174  echo "transcript is:\n";print_r($out) . "\n";
1175  return(FALSE);
1176  }*/
1177  $last = exec("yum -y install php-phpunit-PHPUnit", $out, $rtn);
1178  if($rtn != 0)
1179  {
1180  echo "FATAL! install PHPUnit fail\n";
1181  echo "transcript is:\n";print_r($out) . "\n";
1182  return(FALSE);
1183  }
1184  }
1185  return(TRUE);
1186 } // configYum
1187 
1198 function restart($application)
1199 {
1200  if(empty($application))
1201  {
1202  return(FALSE);
1203  }
1204 
1205  $last = exec("/etc/init.d/$application restart 2>&1", $out, $rtn);
1206  if($rtn != 0)
1207  {
1208  echo "FATAL! could not restart $application\n";
1209  echo "transcript is:\n";print_r($out) . "\n";
1210  return(FALSE);
1211  }
1212  return(TRUE);
1213 } // restart
1214 
1225 function start($application)
1226 {
1227  if(empty($application))
1228  {
1229  return(FALSE);
1230  }
1231 
1232  echo "Starting $application ...\n";
1233  $last = exec("/etc/init.d/$application stop 2>&1", $out, $rtn);
1234  if($rtn != 0)
1235  {
1236  echo "FATAL! could not start $application\n";
1237  echo "transcript is:\n";print_r($out) . "\n";
1238  return(FALSE);
1239  }
1240  $last = exec("/etc/init.d/$application start 2>&1", $out, $rtn);
1241  if($rtn != 0)
1242  {
1243  echo "FATAL! could not start $application\n";
1244  echo "transcript is:\n";print_r($out) . "\n";
1245  return(FALSE);
1246  }
1247  return(TRUE);
1248 } // start
1259 function stop($application)
1260 {
1261  if(empty($application))
1262  {
1263  return(FALSE);
1264  }
1265 
1266  $last = exec("/etc/init.d/$application stop 2>&1", $out, $rtn);
1267  if($rtn != 0)
1268  {
1269  echo "FATAL! could not stop $application\n";
1270  echo "transcript is:\n";print_r($out) . "\n";
1271  return(FALSE);
1272  }
1273  return(TRUE);
1274 } // stop
1275 
1283 function getPGhba($destPath)
1284 {
1285  if(empty($destPath))
1286  {
1287  return(FALSE);
1288  }
1289  $wcmd = "wget -q -O $destPath " .
1290  "http://fonightly.usa.hp.com/testfiles/pg_hba.conf ";
1291 
1292  $last = exec($wcmd, $wOut, $wRtn);
1293  if($wRtn != 0)
1294  {
1295  echo "Error, could not download pg_hba.conf file, pleases configure by hand\n";
1296  echo "wget output is:\n" . implode("\n",$wOut) . "\n";
1297  return(FALSE);
1298  }
1299  return(TRUE);
1300 }
1301 ?>
tuneKernel()
tune the kernel for this boot and successive boots
Definition: pkgConfig.php:776
stop($application)
stop the application Assumes application is restartable via /etc/init.d/<script>. The application pas...
Definition: pkgConfig.php:1259
getPGhba($destPath)
wget the pg_hba.conf file and place it in $destPath
Definition: pkgConfig.php:1283
copyFiles($files, $dest)
copyFiles, copy one or more files to the destination, throws exception if file is not copied...
Definition: pkgConfig.php:684
start($application)
start the application Assumes application is restartable via /etc/init.d/<script>. The application passed in should match the script name in /etc/init.d
Definition: pkgConfig.php:1225
configDebian($osType, $osVersion)
config a debian based system to install fossology.
Definition: pkgConfig.php:878
restart($application)
restart the application passed in, so any config changes will take affect. Assumes application is res...
Definition: pkgConfig.php:1198
insertDeb($objRef)
insert the fossology debian line in /etc/apt/sources.list
Definition: pkgConfig.php:498
configYum($objRef)
config yum on a redhat based system to install fossology.
Definition: pkgConfig.php:1108
configRhel($osType, $osVersion)
copy configuration files and restart apache and postgres
Definition: pkgConfig.php:1052
installFossology($objRef)
Install fossology using either apt or yum.
Definition: pkgConfig.php:540
findVerPsql()
find the version of postgres and return major release and sub release. For example, if postgres is at 8.4.8, this function will return 8.4.
Definition: pkgConfig.php:753
list_t type structure used to keep various lists. (e.g. there are multiple lists).
Definition: nomos.h:321
ckInstallLog($log)
Check the fossology install output for errors in the install.
Definition: pkgConfig.php:641
configApache2($osType)
check to see if fossology is configured into apache. If not copy the config file and configure it...
Definition: pkgConfig.php:813