[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-clonage/sources/www/tftp/ -> action_rapport_tftp.php (source)

   1  <?php
   2  /* $Id: action_rapport_tftp.php 8426 2015-02-03 08:08:34Z crob $
   3  ===========================================
   4     Projet SE3
   5     Dispositif SE3+TFTP+Sauvegarde/Restauration/Clonage
   6     Stephane Boireau
   7     Distribué selon les termes de la licence GPL
   8  =============================================
   9  */
  10  
  11  // loading libs and init
  12  include  "entete.inc.php";
  13  include  "ldap.inc.php";
  14  include  "ihm.inc.php";
  15  //require_once "../dhcp/dhcpd.inc.php";
  16  include  "printers.inc.php";
  17  
  18  require ("lib_action_tftp.php");
  19  
  20  //aide
  21  $_SESSION["pageaide"]="Le_module_Clonage_des_stations#Programmer_un_rapport";
  22  
  23  // On active les rapports d'erreurs:
  24  //error_reporting(E_ALL);
  25  
  26  // Bibliothèque prototype Ajax pour afficher en décalé l'état des machines:
  27  echo "<script type='text/javascript' src='../includes/prototype.js'></script>\n";
  28  
  29  // CSS pour mes tableaux:
  30  echo "<link type='text/css' rel='stylesheet' href='tftp.css' />\n";
  31  
  32  if ((is_admin("system_is_admin",$login)=="Y")||(ldap_get_right("parc_can_clone",$login)=="Y"))
  33  {
  34      // Choix des parcs:
  35      $parc=isset($_POST['parc']) ? $_POST['parc'] : (isset($_GET['parc']) ? $_GET['parc'] : NULL);
  36      // Choix des machines:
  37      $id_machine=isset($_POST['id_machine']) ? $_POST['id_machine'] : (isset($_GET['id_machine']) ? $_GET['id_machine'] : NULL);
  38  
  39      $parametrage_action=isset($_POST['parametrage_action']) ? $_POST['parametrage_action'] : (isset($_GET['parametrage_action']) ? $_GET['parametrage_action'] : NULL);
  40  
  41      $distrib=isset($_POST['distrib']) ? $_POST['distrib'] : "slitaz";
  42      $sysresccd_kernel=isset($_POST['sysresccd_kernel']) ? $_POST['sysresccd_kernel'] : "rescue32";
  43  
  44      // Création de la table dès que possible:
  45      creation_tftp_tables();
  46  
  47      // Paramètres SliTaz:
  48      /*
  49      $nom_image=isset($_POST['nom_image']) ? $_POST['nom_image'] : (isset($_GET['nom_image']) ? $_GET['nom_image'] : NULL);
  50      $src_part=isset($_POST['src_part']) ? $_POST['src_part'] : (isset($_GET['src_part']) ? $_GET['src_part'] : NULL);
  51      $dest_part=isset($_POST['dest_part']) ? $_POST['dest_part'] : (isset($_GET['dest_part']) ? $_GET['dest_part'] : NULL);
  52      */
  53      $auto_reboot=isset($_POST['auto_reboot']) ? $_POST['auto_reboot'] : (isset($_GET['auto_reboot']) ? $_GET['auto_reboot'] : NULL);
  54      $delais_reboot=isset($_POST['delais_reboot']) ? $_POST['delais_reboot'] : (isset($_GET['delais_reboot']) ? $_GET['delais_reboot'] : NULL);
  55  
  56      // Paramètres concernant l'action immédiate sur les machines choisies:
  57      $wake=isset($_POST['wake']) ? $_POST['wake'] : (isset($_GET['wake']) ? $_GET['wake'] : "n");
  58      $shutdown_reboot=isset($_POST['shutdown_reboot']) ? $_POST['shutdown_reboot'] : (isset($_GET['shutdown_reboot']) ? $_GET['shutdown_reboot'] : NULL);
  59  
  60  
  61      echo "<h1>".gettext("Action rapport TFTP")."</h1>\n";
  62  
  63      $restriction_parcs="n";
  64      if(is_admin("system_is_admin",$login)!="Y") {
  65          $restriction_parcs="y";
  66          $tab_delegated_parcs=list_delegated_parcs($login);
  67          if(count($tab_delegated_parcs)==0) {
  68              echo "<p>Aucun parc ne vous a été délégué.</p>\n";
  69              include ("pdp.inc.php");
  70              die();
  71          }
  72      }
  73  
  74  
  75      $temoin_fichiers_requis="y";
  76      $chemin_tftpboot="/tftpboot";
  77      $tab_udpcast_file=array("bzImage", "rootfs.gz");
  78      for($loop=0;$loop<count($tab_udpcast_file);$loop++) {
  79          if(!file_exists($chemin_tftpboot."/".$tab_udpcast_file[$loop])) {
  80              echo "<span style='color:red'>".$chemin_tftpboot."/".$tab_udpcast_file[$loop]." est absent.</span><br />\n";
  81              echo "Effectuez le telechargement SliTaz en <a href='config_tftp.php'>Configurer le module TFTP</a><br />\n";
  82              $temoin_fichiers_requis="n";
  83          }
  84      }
  85  
  86      if($temoin_fichiers_requis=="n") {
  87          echo "<p style='color:red'>ABANDON&nbsp;: Un ou des fichiers requis sont manquants.</p>\n";
  88          include ("pdp.inc.php");
  89          die();
  90      }
  91  
  92  
  93      if(!isset($parc)){
  94          echo "<p>Cette page doit vous permettre de programmer une récupération d'informations sur les machines choisies pour connaître les partitions, les sauvegardes présentes,...</p>\n";
  95  
  96          echo "<p>Choisissez un ou des parcs:</p>\n";
  97  
  98          $list_parcs=search_machines("objectclass=groupOfNames","parcs");
  99          if ( count($list_parcs)==0) {
 100              echo "<br><br>";
 101              echo gettext("Il n'existe aucun parc. Vous devez d'abord créer un parc");
 102              include ("pdp.inc.php");
 103              exit;
 104          }
 105          sort($list_parcs);
 106  
 107          echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n";
 108  
 109          // Affichage des parcs sur 3/4 colonnes
 110          $nb_parcs_par_colonne=round(count($list_parcs)/3);
 111          echo "<table border='0'>\n";
 112          echo "<tr valign='top'>\n";
 113          echo "<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>\n";
 114          echo "<td align='left'>\n";
 115          for ($loop=0; $loop < count($list_parcs); $loop++) {
 116              if(($loop>0)&&(round($loop/$nb_parcs_par_colonne)==$loop/$nb_parcs_par_colonne)){
 117                  echo "</td>\n";
 118                  echo "<td align='left'>\n";
 119              }
 120  
 121              if(($restriction_parcs=="n")||(in_array($list_parcs[$loop]["cn"], $tab_delegated_parcs))) {
 122                  echo "<label for='parc_$loop'><input type='checkbox' id='parc_$loop' name='parc[]' value=\"".$list_parcs[$loop]["cn"]."\"";
 123                  if(count($list_parcs)==1) {echo " checked";}
 124                  echo " />".$list_parcs[$loop]["cn"]."</label>\n";
 125                  echo "<br />\n";
 126              }
 127          }
 128  
 129          echo "</td>\n";
 130          echo "</tr>\n";
 131          echo "</table>\n";
 132  
 133          echo "<p align='center'><input type=\"submit\" name=\"submit\" value=\"Valider\" /></p>\n";
 134  
 135          echo "</form>\n";
 136  
 137  
 138          echo "<script type='text/javascript'>
 139  nb_parcs=0;
 140  id_parc='';
 141  for(i=0;i<$loop;i++) {
 142      if(document.getElementById('parc_'+i)) {
 143          nb_parcs++;
 144          id_parc='parc_'+i;
 145      }
 146  }
 147  if(nb_parcs==1) {
 148      document.getElementById(id_parc).checked=true;
 149  }
 150  </script>\n";
 151  
 152          echo "<p><a href='index.php'>Retour à l'index</a>.</p>\n";
 153      }
 154      else {
 155          if(!isset($_POST['parametrage_action'])){
 156  
 157              echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n";
 158              echo "<input type=\"hidden\" name=\"parametrage_action\" value=\"1\" />\n";
 159              $max_eff_parc=0;
 160              for($i=0;$i<count($parc);$i++){
 161  
 162                  echo "<h2>Parc $parc[$i]</h2>\n";
 163                  echo "<input type=\"hidden\" name=\"parc[]\" value=\"$parc[$i]\" />\n";
 164  
 165                  $mp=gof_members($parc[$i],"parcs",1);
 166                  $nombre_machine=count($mp);
 167                  sort($mp);
 168  
 169                  //echo "<table border='1'>\n";
 170                  echo "<table class='crob'>\n";
 171                  echo "<tr>\n";
 172  
 173                  echo "<th>Nom</th>\n";
 174                  echo "<th>Etat</th>\n";
 175                  echo "<th>Session</th>\n";
 176                  echo "<th>Config DHCP</th>\n";  
 177                                  echo "<th>Dernier Rapport</th>\n";
 178                                  
 179  
 180                  //echo "<th>Sauvegarde</th>\n";
 181                  echo "<th>Rapport<br />\n";
 182                  echo "<a href='#' onclick='check_machine($i,\"check\");return false'><img src=\"../elements/images/enabled.gif\" border='0' alt=\"Tout cocher\" title=\"Tout cocher\" /></a>\n";
 183                  echo " / <a href='#' onclick='check_machine($i,\"uncheck\");return false'><img src=\"../elements/images/disabled.gif\" border='0' alt=\"Tout décocher\" title=\"Tout décocher\" /></a>\n";
 184                  echo "</th>\n";
 185                  echo "<th>Actions programmées</th>\n";
 186                  echo "</tr>\n";
 187  
 188                  for ($loop=0; $loop < count($mp); $loop++) {
 189                      $mpenc=urlencode($mp[$loop]);
 190  
 191                      // Test si on a une imprimante ou une machine
 192                      $resultat=search_imprimantes("printer-name=$mpenc","printers");
 193                      $suisje_printer="non";
 194                      for ($loopp=0; $loopp < count($resultat); $loopp++) {
 195                          if ($mpenc==$resultat[$loopp]['printer-name']) {
 196                              $suisje_printer="yes";
 197                              continue;
 198                          }
 199                      }
 200  
 201                      if($suisje_printer=="non") {
 202                          // Réinitialisation:
 203                          $id_machine="";
 204  
 205                          echo "<tr>\n";
 206                          echo "<td width='20%'>".$mp[$loop]."</td>\n";
 207  
 208                          // Etat: allumé ou éteint
 209                          echo "<td width='20%'>";
 210                          $mp_curr=search_machines2("(&(cn=$mpenc)(objectClass=ipHost))","computers");
 211                          if ($mp_curr[0]["ipHostNumber"]) {
 212                              $iphost=$mp_curr[0]["ipHostNumber"];
 213  
 214                              echo "<div id='divip$loop'>Patientez</div>\n";
 215                              echo "<script type='text/javascript'>
 216                                  // <![CDATA[
 217                                  new Ajax.Updater($('divip$loop'),'ajax_lib.php?ip=$iphost&mode=ping_ip',{method: 'get'});
 218                                  //]]>
 219                              </script>\n";
 220                          }
 221                          echo "</td>\n";
 222  
 223  
 224                          // Session: ouverte ou pas... sous quelle identité
 225                          echo "<td width='20%'>\n";
 226                          echo "<div id='divsession$loop'>Patientez</div>\n";
 227                          echo "<script type='text/javascript'>
 228                              // <![CDATA[
 229                              new Ajax.Updater($('divsession$loop'),'ajax_lib.php?nom_machine=".$mp[$loop]."&mode=session',{method: 'get'});
 230                              //]]>
 231                          </script>\n";
 232                          echo "</td>\n";
 233  
 234  
 235                          // Etat config DHCP:
 236                          // Par la suite il ne faudra pas prendre les IP dans l'annuaire,
 237                          // mais dans la config DHCP parce que ce sont ces IP qui seront attribuées lors du boot PXE
 238                          echo "<td width='20%'>\n";
 239                          //$mp_curr=search_machines("(&(cn=$mpenc)(objectClass=ipHost))","computers");
 240                          if ($mp_curr[0]["macAddress"]) {
 241                              $sql="SELECT * FROM se3_dhcp WHERE mac='".$mp_curr[0]["macAddress"]."';";
 242                              // mp_curr[0]["macAddress"] correspond à une adresse mac recherchée dans l'annuaire LDAP.
 243                              // Si les machines ont été changées et que l'on a ré-attribué le nom, il faut penser à nettoyer l'entrée dans l'annuaire:
 244                              // source /usr/share/se3/sbin/variables_admin_ldap.sh
 245                              // ldapdelete -x -D $ROOTDN -w $PASSDN cn=NOM_MACHINE,ou=Computers,$BASEDN
 246                              // Et se reconnecter une fois sur la machine pour que le connexion.pl renseigne une nouvelle entrée cn=NOM_MACHINE
 247                              //echo "$sql<br />";
 248                              $res=mysql_query($sql);
 249                              if(mysql_num_rows($res)>0) {
 250                                  $lig=mysql_fetch_object($res);
 251                                  $id_machine=$lig->id;
 252  
 253                                  //echo $lig->ip;
 254                                  echo "<img src=\"../elements/images/enabled.gif\" border='0' alt=\"$lig->ip\" title=\"$lig->ip\" />";
 255                              }
 256                              else {
 257                                  echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'adresse IP attribuée\" title=\"Pas d'adresse IP attribuée\" />";
 258                              }
 259                          }
 260                          else {
 261                              echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'adresse MAC dans l'annuaire???\" title=\"Pas d'adresse MAC dans l'annuaire???\" />";
 262                          }
 263                          echo "</td>\n";
 264  
 265  
 266                          // Sélection des machines à sauvegarder:
 267                          echo "<td width='20%'>\n";
 268                          /*
 269                          foreach($mp_curr[0] as $champ => $valeur) {
 270                              echo "\$mp_curr[0]['$champ']=$valeur<br />";
 271                          }
 272                          */
 273                          if($id_machine!=""){
 274                              echo "<input type='checkbox' name='id_machine[]' id='machine_".$i."_".$loop."' value='$id_machine' />\n";
 275                          }
 276                          else {
 277                              echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Il faut commencer par effectuer la configuration DHCP\" title=\"Il faut commencer par effectuer la configuration DHCP\" />";
 278                          }
 279                          echo "</td>\n";
 280  
 281                                                  //dernier rapport
 282                                                  
 283                                                  $sql="SELECT * FROM se3_tftp_rapports WHERE name='".$mp[$loop]."' ORDER BY date DESC LIMIT 1;";
 284                                                  $res_rapport_tftp=mysql_query($sql);
 285                                                  if(mysql_num_rows($res_rapport_tftp)>0) {
 286                                                      $lig=mysql_fetch_object($res_rapport_tftp);
 287                                                      echo "<td align=\"center\">";
 288                                                      echo "<span style='font-size: x-small;' title='Dernier rapport: $lig->tache ($lig->statut)'><a href=\"../tftp/visu_rapport.php?id_machine=$lig->id\" target='_blank'>".$lig->date."</a></span>\n";
 289                                                      $st="$lig->statut";
 290                                                      if($st=="SUCCES") {
 291                              $cl="green";
 292                              } else {
 293                              $cl="red";
 294                                                          }
 295                                                      echo "<FONT color=$cl size=1>"."$lig->statut"."</font>";
 296                                                      echo "</td>\n";
 297                                                  }
 298                                                  else {
 299                                                      echo "<td align=\"center\" style='color:purple'>".gettext("Aucun rapport")."</td>\n";
 300                                                      }
 301                                                  
 302                                                  
 303                                                  
 304                                                  
 305                                                  
 306                          // Action programmée
 307                          echo "<td>\n";
 308                          if($id_machine!=""){
 309                              $sql="SELECT * FROM se3_tftp_action WHERE id='".$id_machine."';";
 310                              $res=mysql_query($sql);
 311                              if(mysql_num_rows($res)>0) {
 312                                  $lig=mysql_fetch_object($res);
 313                                  echo "<a href='visu_action.php?id_machine=$id_machine' target='_blank'>$lig->type programmé(e)</a>";
 314                              }
 315                              else {
 316                                  echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'action programmée\" title=\"Pas d'action programmée\" />";
 317                              }
 318                          }
 319                          echo "</td>\n";
 320  
 321                          echo "</tr>\n";
 322                      }
 323                  }
 324                  echo "</table>\n";
 325                  if($max_eff_parc<$loop) {$max_eff_parc=$loop;}
 326              }
 327  
 328              echo "<script type='text/javascript'>
 329  	function check_machine(num_parc,mode) {
 330          for(i=0;i<$max_eff_parc;i++){
 331              if(document.getElementById('machine_'+num_parc+'_'+i)){
 332                  if(mode=='check'){
 333                      document.getElementById('machine_'+num_parc+'_'+i).checked=true;
 334                  }
 335                  else{
 336                      document.getElementById('machine_'+num_parc+'_'+i).checked=false;
 337                  }
 338              }
 339          }
 340      }
 341  </script>\n";
 342  
 343              echo "<p align='center'><input type=\"submit\" name=\"submit\" value=\"Valider\" /></p>\n";
 344              echo "</form>\n";
 345  
 346  
 347          }
 348          else {
 349              $validation_parametres=isset($_POST['validation_parametres']) ? $_POST['validation_parametres'] : (isset($_GET['validation_parametres']) ? $_GET['validation_parametres'] : NULL);
 350              if(!isset($validation_parametres)) {
 351                  echo "<h2>Paramétrage de la remontée de rapport</h2>\n";
 352  
 353                  $nombre_machines=count($id_machine);
 354                  if($nombre_machines==0){
 355                      echo "<p>ERREUR: Il faut choisir au moins une machine.</p>\n";
 356  
 357                      echo "<p><a href='#' onclick='history.go(-1);'>Retour au choix des machines sur lesquelles programmer une remontée de rapport</a>.</p>\n";
 358  
 359                      echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour au choix du/des parc(s)</a>.</p>\n";
 360                      include ("pdp.inc.php");
 361                      exit();
 362                  }
 363  
 364                  echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n";
 365                  echo "<input type=\"hidden\" name=\"parametrage_action\" value=\"1\" />\n";
 366                  // Liste des parcs:
 367                  for($i=0;$i<count($parc);$i++){
 368                      echo "<input type=\"hidden\" name=\"parc[]\" value=\"$parc[$i]\" />\n";
 369                  }
 370  
 371                  // Liste des machines sur lesquelles lancer la sauvegarde:
 372                  $chaine="";
 373                  for($i=0;$i<count($id_machine);$i++){
 374                      if($i>0) {$chaine.=", ";}
 375                      $sql="SELECT * FROM se3_dhcp WHERE id='".$id_machine[$i]."';";
 376                      //echo "$sql<br />";
 377                      $res=mysql_query($sql);
 378                      if(mysql_num_rows($res)>0) {
 379                          $lig=mysql_fetch_object($res);
 380                          $chaine.=$lig->name;
 381                          echo "<input type=\"hidden\" name=\"id_machine[]\" value=\"$id_machine[$i]\" />\n";
 382                      }
 383                  }
 384                  if(count($id_machine)>1){$s="s";}else{$s="";}
 385                  echo "<p>Machine$s concernée$s: $chaine</p>\n";
 386  
 387  
 388                  // Date pour le nom de l'image à générer:
 389                  $aujourdhui = getdate();
 390                  $mois_se3 = sprintf("%02d",$aujourdhui['mon']);
 391                  $jour_se3 = sprintf("%02d",$aujourdhui['mday']);
 392                  $annee_se3 = $aujourdhui['year'];
 393                  $heure_se3 = sprintf("%02d",$aujourdhui['hours']);
 394                  $minute_se3 = sprintf("%02d",$aujourdhui['minutes']);
 395                  $seconde_se3 = sprintf("%02d",$aujourdhui['seconds']);
 396  
 397                  $date_se3=$annee_se3.$mois_se3.$jour_se3;
 398  
 399                  echo "<p>Choisissez les paramètres pour la remontée de rapport: <br />\n";
 400  
 401                  $temoin_sysresccd=check_sysresccd_files();
 402  
 403                  if($temoin_sysresccd=="y") {
 404                      // Il faut aussi le noyau et l'initram.igz dans /tftpboot, 
 405                      echo "<input type='radio' name='distrib' id='distrib_slitaz' value='slitaz' onchange='affiche_sections_distrib()' /><label for='distrib_slitaz'>Utiliser la distribution SliTaz</label><br />\n";
 406                      echo "<input type='radio' name='distrib' id='distrib_sysresccd' value='sysresccd' onchange='affiche_sections_distrib()' checked /><label for='distrib_sysresccd'>Utiliser la distribution SysRescCD</label> (<i>plus long à booter et 300Mo de RAM minimum, mais meilleure détection des pilotes</i>)<br />\n";
 407  
 408  echo "<div id='div_sysresccd_kernel'>\n";
 409  echo "<table border='0'>\n";
 410  echo "<tr>\n";
 411  echo "<td valign='top'>\n";
 412  echo "Utiliser le noyau&nbsp;: ";
 413  echo "</td>\n";
 414  echo "<td>\n";
 415  echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_auto' value='auto' checked /><label for='sysresccd_kernel_auto'>auto</label><br />\n";
 416  echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_rescuecd' value='rescue32' /><label for='sysresccd_kernel_rescuecd'>rescue32</label><br />\n";
 417  echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_altker32' value='altker32' /><label for='sysresccd_kernel_altker32'>altker32</label><br />\n";
 418  echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_rescue64' value='rescue64' /><label for='sysresccd_kernel_rescue64'>rescue64</label><br />\n";
 419  echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_altker64' value='altker64' /><label for='sysresccd_kernel_altker64'>altker64</label><br />\n";
 420  echo "</td>\n";
 421  echo "</tr>\n";
 422  echo "</table>\n";
 423  echo "</div>\n";
 424  
 425                  }
 426                  else {
 427                      echo "<input type=\"hidden\" name=\"distrib\" value=\"slitaz\" />\n";
 428                  }
 429  
 430                  echo "<table border='0'>\n";
 431                  /*
 432                  echo "<tr><td>Nom de la sauvegarde: </td><td><input type='text' name='nom_image' value='image_$date_se3' />\n";
 433                  echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Si vous laissez vide, un nom du type image_NOM_PARTITION_DATE_HEURE_MINUTE_SECONDE sera utilisé.')")."\"><img name=\"action_image1\"  src=\"../elements/images/help-info.gif\"></u>\n";
 434                  echo "</td></tr>\n";
 435  
 436                  echo "<tr><td>Partition à sauvegarder: </td><td><input type='text' name='src_part' value='auto' />\n";
 437                  echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Proposer hda1, sda1,... selon les cas, ou laissez \'auto\' si la première partition du disque est bien la partition système à sauvegarder.')")."\"><img name=\"action_image2\"  src=\"../elements/images/help-info.gif\"></u>\n";
 438                  echo "</td></tr>\n";
 439  
 440                  echo "<tr><td>Partition de stockage: </td><td><input type='text' name='dest_part' value='auto' />\n";
 441                  echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Proposer hda5, sda5,... selon les cas, ou laissez \'auto\' si la première partition Linux (<i>ou à défaut W$ après la partition système</i>) est bien la partition de stockage.')")."\"><img name=\"action_image3\"  src=\"../elements/images/help-info.gif\"></u>\n";
 442                  echo "</td></tr>\n";
 443                  */
 444  
 445                  if(($temoin_sysresccd=="y")&&(crob_getParam('srcd_scripts_vers')>='20110910')) {
 446                      echo "<tr id='tr_authorized_keys'>\n";
 447                      echo "<td>Url authorized_keys&nbsp;: </td>\n";
 448                      echo "<td><input type='checkbox' name='prendre_en_compte_url_authorized_keys' value='y' /> \n";
 449                      echo "<input type='text' name='url_authorized_keys' value='".crob_getParam('url_authorized_keys')."' size='40' />\n";
 450                      echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Un fichier authorized_keys peut &ecirc;tre mis en place pour permettre un acc&egrave;s SSH au poste inspect&eacute;.')")."\">\n";
 451                      echo "<img name=\"action_image3\"  src=\"../elements/images/help-info.gif\"></u>\n";
 452                      echo "</td>\n";
 453                      echo "</tr>\n";
 454                  }
 455  
 456                  echo "<tr><td valign='top'>Rebooter en fin de rapport: </td>\n";
 457                  echo "<td>\n";
 458                  echo "<input type='radio' name='auto_reboot' value='y' checked />\n";
 459                  echo "</td>\n";
 460                  echo "</tr>\n";
 461  
 462                  echo "<tr><td valign='top'>Eteindre en fin de rapport: </td>\n";
 463                  echo "<td>\n";
 464                  echo "<input type='radio' name='auto_reboot' value='halt' />\n";
 465                  echo "</td>\n";
 466                  echo "</tr>\n";
 467  
 468                  echo "<tr><td valign='top'>Ne pas rebooter ni éteindre la machine<br />en fin de rapport: </td>\n";
 469                  echo "<td>\n";
 470                  echo "<input type='radio' name='auto_reboot' value='n' />\n";
 471                  echo "</td>\n";
 472                  echo "</tr>\n";
 473  
 474                  echo "<tr><td valign='top'>\n";
 475                  echo "Délai avant reboot/arrêt:</td>\n";
 476                  echo "<td>\n";
 477                  echo "<input type='text' name='delais_reboot' value='90' size='3' />\n";
 478                  echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Le délai doit être supérieur à 60 secondes pour permettre la récupération du rapport.')")."\"><img name=\"action_image4\"  src=\"../elements/images/help-info.gif\"></u>\n";
 479                  echo "</td>\n";
 480                  echo "</tr>\n";
 481  
 482                  echo "<tr><td valign='top'>Pour la ou les machines sélectionnées: </td>\n";
 483                  echo "<td>\n";
 484                      echo "<table border='0'>\n";
 485                      echo "<tr><td valign='top'><input type='checkbox' id='wake' name='wake' value='y' checked /> </td><td><label for='wake'>Démarrer les machines par Wake-On-Lan/etherwake<br />si elles sont éteintes.</label></td></tr>\n";
 486                      echo "<tr><td valign='top'><input type='radio' id='shutdown_reboot_wait1' name='shutdown_reboot' value='wait1' /> </td><td><label for='shutdown_reboot_wait1'>Attendre le reboot des machines<br />même si aucune session n'est ouverte,</label></td></tr>\n";
 487                      echo "<tr><td valign='top'><input type='radio' id='shutdown_reboot_wait2' name='shutdown_reboot' value='wait2' checked /> </td><td><label for='shutdown_reboot_wait2'>Redémarrer les machines sans session ouverte<br />et attendre le reboot pour les machines<br />qui ont des sessions ouvertes,</label></td></tr>\n";
 488                      echo "<tr><td valign='top'><input type='radio' id='shutdown_reboot_reboot' name='shutdown_reboot' value='reboot' /> </td><td><label for='shutdown_reboot_reboot'>Redémarrer les machines<br />même si une session est ouverte (<i>pô cool</i>).</label></td></tr>\n";
 489                      echo "</table>\n";
 490                  echo "</td></tr>\n";
 491  
 492                  echo "</table>\n";
 493  
 494                  echo "<p align='center'><input type=\"submit\" name=\"validation_parametres\" value=\"Valider\" /></p>\n";
 495                  echo "</form>\n";
 496  
 497  echo "<script type='text/javascript'>
 498  function affiche_sections_distrib() {
 499      if(document.getElementById('distrib_sysresccd').checked==true) {
 500          distrib='sysresccd';
 501      }
 502      else {
 503          distrib='slitaz';
 504      }
 505      
 506      if(distrib=='slitaz') {
 507          document.getElementById('div_sysresccd_kernel').style.display='none';
 508          document.getElementById('tr_authorized_keys').style.display='none';
 509      }
 510      else {
 511          document.getElementById('div_sysresccd_kernel').style.display='block';
 512          document.getElementById('tr_authorized_keys').style.display='';
 513      }
 514  }
 515  
 516  affiche_sections_distrib();
 517  </script>\n";
 518  
 519                  echo "<p><i>NOTES:</i></p>\n";
 520                  echo "<ul>\n";
 521                  //echo "<li>Ce choix nécessite une partition de sauvegarde sur la machine.</li>\n";
 522                  echo "<li><b>Attention:</b > Le délai avant reboot ajouté au temps de l'opération lancée doit dépasser la périodicité du script controle_actions_tftp.sh en crontab.<br />
 523                  Ce délai doit aussi permettre de récupérer en http://IP_CLIENT/~hacker/Public/*.txt des informations sur le succès ou l'échec de l'opération.<br />
 524                  Une tâche cron se charge d'effectuer le 'wget' sur les infos, puis le remplissage d'une table MySQL.<br />
 525                  La tâche cron est lancée toutes les 60s.</li>\n";
 526                  echo "<li>Pour que l'opération puisse être entièrement provoquée depuis le serveur, il faut que les postes clients soient configurés pour booter en PXE (<i>ou au moins s'éveiller (wol) en bootant sur le réseau</i>).<br />Dans le cas contraire, vous devrez passer sur les postes et presser F12 pour choisir de booter en PXE.</li>\n";
 527                  echo "</ul>\n";
 528  
 529              }
 530              else {
 531                  echo "<h2>Validation des paramètres de la récupération de rapports</h2>\n";
 532  
 533                  $opt_url_authorized_keys="";
 534                  if((isset($_POST['prendre_en_compte_url_authorized_keys']))&&(isset($_POST['url_authorized_keys']))&&($_POST['url_authorized_keys']!='')&&(preg_replace('|[A-Za-z0-9/:_\.\-]|','',$_POST['url_authorized_keys'])=='')) {
 535                      $opt_url_authorized_keys="url_authorized_keys=".$_POST['url_authorized_keys'];
 536                      crob_setParam('url_authorized_keys',$_POST['url_authorized_keys'],'Url fichier authorized_keys pour acces ssh aux clients TFTP');
 537                  }
 538  
 539                  echo "<p>Rappel des paramètres:</p>\n";
 540  
 541                  $temoin_sysresccd=check_sysresccd_files();
 542  
 543                  if($temoin_sysresccd=="y") {
 544                      echo "<table class='crob'>\n";
 545                      echo "<tr>\n";
 546                      echo "<th style='text-align:left;'>Distribution linux à utiliser: </th>\n";
 547                      echo "<td>\n";
 548                      echo $distrib;
 549                      if($distrib=='sysresccd') {
 550                          echo " (<i>noyau $sysresccd_kernel</i>)";
 551                      }
 552                      echo "<input type=\"hidden\" name=\"distrib\" value=\"$distrib\" />\n";
 553                      echo "</td>\n";
 554                      echo "</tr>\n";
 555                  }
 556                  else {
 557                      echo "<input type=\"hidden\" name=\"distrib\" value=\"slitaz\" />\n";
 558                      echo "<table class='crob'>\n";
 559                  }
 560                  /*
 561                  echo "<tr>\n";
 562                  echo "<th style='text-align:left;'>Nom de l'image: </th>\n";
 563                  echo "<td>\n";
 564                  if($nom_image=="") {echo "Nom généré automatiquement lors de la sauvegarde.";} else {echo $nom_image;}
 565                  echo "</td>\n";
 566                  echo "</tr>\n";
 567  
 568                  echo "<tr>\n";
 569                  echo "<th style='text-align:left;'>Partition à sauvegarder: </th>\n";
 570                  echo "<td>\n";
 571                  if($src_part=="auto") {echo "Détectée automatiquement lors de la sauvegarde.";} else {echo $src_part;}
 572                  echo "</td>\n";
 573                  echo "</tr>\n";
 574  
 575                  echo "<tr>\n";
 576                  echo "<th style='text-align:left;'>Partition de stockage de la sauvegarde: </th>\n";
 577                  echo "<td>\n";
 578                  if($dest_part=="auto") {echo "Détectée automatiquement lors de la sauvegarde.";} else {echo $dest_part;}
 579                  echo "</td>\n";
 580                  echo "</tr>\n";
 581                  */
 582  
 583                  echo "<tr>\n";
 584                  echo "<th style='text-align:left;'>Rebooter en fin d'opération: </th>\n";
 585                  echo "<td>\n";
 586                  echo $auto_reboot;
 587                  echo "</td>\n";
 588                  echo "</tr>\n";
 589  
 590                  //if($auto_reboot=='y') {
 591                  if(($auto_reboot=='y')||($auto_reboot=='halt')) {
 592                      echo "<tr>\n";
 593                      echo "<th style='text-align:left;'>Délai avant reboot: </th>\n";
 594                      echo "<td>\n";
 595                      echo "$delais_reboot s";
 596                      echo "</td>\n";
 597                      echo "</tr>\n";
 598                  }
 599  
 600                  echo "</table>\n";
 601  
 602  
 603                  echo "<p>Génération du fichier dans /tftpboot/pxelinux.cfg/ pour la remontée de rapports.<br />\n";
 604  
 605                  // BOUCLE SUR LA LISTE DES $id_machine[$i]
 606  
 607                  // Numéro de l'opération de remontée de rapport:
 608                  $num_op=get_free_se3_action_tftp_num_op();
 609                  for($i=0;$i<count($id_machine);$i++) {
 610                      $sql="SELECT * FROM se3_dhcp WHERE id='".$id_machine[$i]."';";
 611                      //echo "$sql<br />";
 612                      $res=mysql_query($sql);
 613                      if(mysql_num_rows($res)==0) {
 614                          echo "<span style='color:red;'>La machine d'identifiant $id_machine[$i] n'existe pas dans 'se3_dhcp'.</span><br />\n";
 615                      }
 616                      else {
 617                          $temoin_erreur="n";
 618  
 619                          $lig=mysql_fetch_object($res);
 620                          $mac_machine=$lig->mac;
 621                          $nom_machine=$lig->name;
 622                          $ip_machine=$lig->ip;
 623  
 624                          if($restriction_parcs=="y") {
 625                              $temoin_erreur='y';
 626                              for($loop=0; $loop<count($tab_delegated_parcs);$loop++) {
 627                                  // La machine est-elle dans un des parcs délégués?
 628                                  if(is_machine_in_parc($nom_machine,$tab_delegated_parcs[$loop])) {$temoin_erreur='n';break;}
 629                              }
 630                          }
 631  
 632                          if($temoin_erreur=="y") {
 633                              echo "<p style='color:red'>La machine $nom_machine ne vous est pas déléguée</p>\n";
 634                          }
 635                          else {
 636                              echo "Génération pour $nom_machine: ";
 637      
 638                              $corrige_mac=strtolower(strtr($mac_machine,":","-"));
 639      
 640                              $chemin="/usr/share/se3/scripts";
 641      
 642                              if($distrib=='slitaz') {
 643                                  $ajout_kernel="";
 644                              }
 645                              else {
 646                                  $ajout_kernel="|kernel=$sysresccd_kernel";
 647                              }
 648      
 649                              if($distrib=='slitaz') {
 650                                  //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'rapport' '$corrige_mac' '$ip_machine' '$nom_machine' '$auto_reboot' '$delais_reboot'", $retour);
 651                                  $resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'rapport' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine auto_reboot=$auto_reboot delais_reboot=$delais_reboot'", $retour);
 652                              }
 653                              else {
 654                                  //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_rapport' '$corrige_mac' '$ip_machine' '$nom_machine' '$auto_reboot' '$delais_reboot'", $retour);
 655                                  $resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_rapport' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour);
 656                              }
 657      
 658                              if(count($retour)>0){
 659                                  //echo "<p>";
 660                                  //echo "<span style='color:red;'>Il semble que la génération du fichier ait échoué...</span><br />\n";
 661                                  echo "<span style='color:red;'>ECHEC de la génération du fichier</span><br />\n";
 662                                  for($j=0;$j<count($retour);$j++){
 663                                      echo "$retour[$j]<br />\n";
 664                                  }
 665                                  $temoin_erreur="y";
 666                                  //echo "</p>\n";
 667                              }
 668                              else {
 669                                  $sql="DELETE FROM se3_tftp_action WHERE id='$id_machine[$i]';";
 670                                  $suppr=mysql_query($sql);
 671      
 672                                  $timestamp=time();
 673                                  $sql="INSERT INTO se3_tftp_action SET id='$id_machine[$i]',
 674                                                                          mac='$mac_machine',
 675                                                                          name='$nom_machine',
 676                                                                          date='$timestamp',
 677                                                                          type='rapport',
 678                                                                          num_op='$num_op',
 679                                                                          infos='auto_reboot=$auto_reboot|delais_reboot=$delais_reboot}$ajout_kernel}';";
 680                                  $insert=mysql_query($sql);
 681                                  if(!$insert) {
 682                                      echo "<span style='color:red;'>ECHEC de l'enregistrement dans 'se3_tftp_action'</span><br />\n";
 683                                      $temoin_erreur="y";
 684                                  }
 685      
 686                                  // Génération du lanceur de récupération:
 687                                  //$dossier="/var/se3/tmp/tftp/$id_machine[$i]";
 688                                  $dossier="/etc/se3/www-tools/tftp/$id_machine[$i]";
 689                                  if(!file_exists($dossier)) { mkdir($dossier,0700);}
 690                                  $lanceur_recup="$dossier/lanceur_recup_rapport_action_tftp.sh";
 691                                  $fich=fopen($lanceur_recup,"w+");
 692                                  // On donne 4H pour que la récup soit effectuée:
 693                                  $timestamp_limit=time()+4*3600;
 694                                  //fwrite($fich,"/usr/share/se3/scripts/recup_rapport.php '$id_machine[$i]' '$ip_machine' 'rapport' '$timestamp_limit'");
 695                                  if($distrib=='slitaz') {
 696                                      $mode_rapport="rapport";
 697                                  }
 698                                  else {
 699                                      $mode_rapport="rapport_sysresccd";
 700                                  }
 701                                  fwrite($fich,"sudo /usr/share/se3/scripts/recup_rapport.php '$id_machine[$i]' '$ip_machine' '$mode_rapport' '$timestamp_limit'");
 702                                  fclose($fich);
 703                                  chmod($lanceur_recup,0750);
 704      
 705                                  // Ménage dans les tâches précédentes
 706                                  @exec("sudo /usr/share/se3/scripts/se3_tftp_menage_atq.sh $id_machine[$i]",$retour);
 707      
 708                                  // Planification de la tâche
 709                                  //@exec("at -f $lanceur_recup now + 1 minute 2>/dev/null",$retour);
 710                                  @exec("at -f $lanceur_recup now + 1 minute 2>$dossier/at.txt",$retour);
 711                                  //passthru("at -f $lanceur_recup now + 1 minute",$retour);
 712                                  if($retour) {
 713                                      echo "<span style='color:red;'>ECHEC de la planification de la tâche.</span><br />\n";
 714                                      for($j=0;$j<count($retour);$j++){echo "$retour[$j]<br />\n";}
 715                                      //echo "$retour<br />\n";
 716                                      $temoin_erreur="y";
 717                                  }
 718      
 719                                  /*
 720                                  // Avec ça on arrive à récupérer l'info:
 721                                  //    -warning: commands will be executed using /bin/sh -
 722                                  //    -job 1572 at 2008-03-01 15:13 -
 723                                  // Mais une fois le at repoussé, ce n'est plus www-se3, mais root qui en est proprio...
 724                                  if(file_exists("$dossier/at.txt")) {
 725                                      $fp=fopen("$dossier/at.txt","r");
 726                                      while(!feof($fp)) {
 727                                          $ligne=fgets($fp,4096);
 728                                          echo "<p>-".$ligne."-</p>";
 729                                      }
 730                                      fclose($fp);
 731                                  }
 732                                  */
 733      
 734                                  /*
 735                                  $fp=popen("at -f $lanceur_recup now + 1 minute","r");
 736                                  while(!feof($fp)) {
 737                                      $ligne=fgets($fp,4096);
 738                                      echo "<p>-".$ligne."-</p>";
 739                                  }
 740                                  fclose($fp);
 741                                  */
 742      
 743                                  if($temoin_erreur=="n") {
 744                                      //echo "<span style='color:green;'>OK</span><br />\n";
 745                                      echo "<span style='color:green;'>OK</span>\n";
 746                                      // Application de l'action choisie:
 747                                      echo " <span id='wake_shutdown_or_reboot_$i'></span>";
 748      
 749                                      echo "<script type='text/javascript'>
 750                                          // <![CDATA[
 751                                          new Ajax.Updater($('wake_shutdown_or_reboot_$i'),'ajax_lib.php?ip=$ip_machine&nom=$nom_machine&mode=wake_shutdown_or_reboot&wake=$wake&shutdown_reboot=$shutdown_reboot',{method: 'get'});
 752                                          //]]>
 753                                      </script>\n";
 754      
 755      
 756                                      echo "<br />\n";
 757                                  }
 758                              }
 759                          }
 760                      }
 761                  }
 762  
 763                  // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
 764                  // POUVOIR TAGUER DANS LA TABLE se3_dhcp LES MACHINES QUI PEUVENT BOOTER EN PXE
 765                  // Ajouter un champ?
 766                  // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
 767  
 768  
 769                  // On n'affiche le fichier que pour le dernier (à titre d'info):
 770                  if(isset($corrige_mac)) {
 771                      //$fich=fopen("/tftpboot/pxelinux.cfg/01-$lig1->mac","r");
 772                      $fich=fopen("/tftpboot/pxelinux.cfg/01-$corrige_mac","r");
 773                      if($fich) {
 774                          echo "<p>Pour information, voici le contenu du fichier généré:<br />\n";
 775                          echo "<pre style='border:1px solid black; color:green;'>";
 776                          while(!feof($fich)) {
 777                              $ligne=fgets($fich,4096);
 778                              echo htmlentities($ligne);
 779                          }
 780                          echo "</pre>\n";
 781                          fclose($fich);
 782                      }
 783                      else {
 784                          echo "<p style='color:red;'>Il n'a pas été possible d'ouvrir le fichier /tftpboot/pxelinux.cfg/01-$corrige_mac</p>\n";
 785                      }
 786                  }
 787              }
 788          }
 789          echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour au choix du/des parc(s)</a>.</p>\n";
 790      }
 791  }
 792  else {
 793      print (gettext("Vous n'avez pas les droits nécessaires pour ouvrir cette page..."));
 794  }
 795  
 796  // Footer
 797  include ("pdp.inc.php");
 798  ?>


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1