[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

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

   1  <?php
   2  /* $Id: action_clone_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_clonage";
  22  
  23  // On active les rapports d'erreurs:
  24  //error_reporting(E_ALL);
  25  
  26  // Liste des modules réseau pour Udpcast
  27  // Appliquer le traitement:
  28  // chaine="";while read A;do B=$(echo "$A" | cut -d'"' -f2);chaine="$chaine,'$B'";done<netmodule.txt;echo $chaine
  29  // sur la portion appropriée de la page http://udpcast.linux.lu/cast-o-matic/stage2.cgi (en ayant cliqué sur 'Chech all' dans http://udpcast.linux.lu/cast-o-matic/ et enregistré le résultat sous le nom netmodule.txt)
  30  $tab_netmodule=array('3c59x','8139cp','8139too','82596','8390','amd8111e','atp','b44','cxgb3','de2104x','dgrs','dmfe','e100','eepro100','eexpress','epic100','es3210','forcedeth','hp100','lne390','lp486e','mii','natsemi','ne3210','ne2k-pci','ni52','pcnet32','qla3xxx','sc92031','sis900','smc9194','smc-ultra32','starfire','strip','sundance','sungem','sunhme','tlan','tulip','typhoon','uli526x','via-rhine','winbond-840','acenic','atl1','bnx2','cassini','cxgb','dl2k','e1000','fealnx','hamachi','ixgb','myri10ge','netxen_nic','ns83820','r8169','sb1000','sis190','sk98lin','skge','sky2','s2io','tg3','via-velocity','yellowfin','3c574_cs','3c589_cs','airo','airo_cs','arlan','atmel','atmel_pci','atmel_cs','axnet_cs','fmvj18x_cs','hermes','ipw2100','ipw2200','libertas','netwave_cs','nmclan_cs','orinoco','orinoco_cs','orinoco_nortel','orinoco_pci','orinoco_plx','orinoco_tmd','pcnet_cs','prism54','ray_cs','smc91c92_cs','spectrum_cs','usb8xxx','wl3501_cs','wavelan','wavelan_cs','xirc2ps_cs','xircom_cb','xircom_tulip_cb','3c501','3c503','3c505','3c507','3c509','3c515','ac3200','at1700','cs89x0','de4x5','depca','e2100','eth16i','eepro','ewrk3','hp-plus','hp','lance','ne','ni5010','ni65','seeq8005','smc-ultra','wd','znet');
  31  
  32  
  33  // Liste des modules disque pour Udpcast
  34  // Appliquer le traitement:
  35  // chaine="";while read A;do B=$(echo "$A" | cut -d'"' -f2);chaine="$chaine,'$B'";done<diskmodule.txt;echo $chaine
  36  // sur la portion appropriée de la page http://udpcast.linux.lu/cast-o-matic/stage2.cgi (en ayant cliqué sur 'Chech all' dans http://udpcast.linux.lu/cast-o-matic/ et enregistré le résultat sous le nom diskmodule.txt)
  37  $tab_diskmodule=array('ahci','ata_piix','sata_inic162x','sata_mv','sata_nv','sata_promise','sata_qstor','sata_sil','sata_sil24','sata_sis','sata_svw','sata_sx4','sata_uli','sata_via','sata_vsc','pata_ali','pata_amd','pata_artop','pata_atiixp','pata_cmd640','pata_cmd64x','pata_cs5520','pata_cs5530','pata_cs5535','pata_cypress','pata_efar','pata_hpt366','pata_hpt37x','pata_hpt3x2n','pata_hpt3x3','pata_isapnp','pata_it8213','pata_it821x','pata_jmicron','pata_legacy','pata_marvell','pata_mpiix','pata_netcell','pata_ns87410','pata_oldpiix','pata_opti','pata_optidma','pata_pcmcia','pata_pdc2027x','pata_pdc202xx_old','pata_platform','pata_qdi','pata_radisys','pata_rz1000','pata_sc1200','pata_serverworks','pata_sil680','pata_sis','pata_sl82c105','pata_triflex','pata_via','pata_winbond','3w-9xxx','53c700','advansys','aha152x','aha152x_cs','aha1542','aha1740','aic7xxx','aic79xx','aic94xx','arcmsr','BusLogic','dc395x','dpt_i2o','dtc','fdomain','fdomain_cs','g_NCR5380','g_NCR5380_mmio','hptiop','in2000','ipr','iscsi_tcp','libiscsi','libsas','lpfc','NCR53c406a','nsp32','nsp_cs','pas16','pdc_adma','psi240i','qla1280','qla2100','qla2200','qla2300','qla2322','qla2xxx','qla4xxx','qla6312','qlogic_cs','qlogicfas','qlogicfas408','qlogicfc','qlogicisp','scsi_transport_iscsi','seagate','sim710','stex','sym53c416','sym53c500_cs','t128','u14-34f','ultrastor','wd7000','aacraid','megaraid_sas');
  38  
  39  // Bibliothèque prototype Ajax pour afficher en décalé l'état des machines:
  40  echo "<script type='text/javascript' src='../includes/prototype.js'></script>\n";
  41  
  42  /*
  43  echo "<script type='text/javascript'>
  44  Event.observe(window, 'load', function() {
  45     Event.observe(document, 'keydown', func_KeyDown);
  46  });
  47  </script>\n";
  48  */
  49  
  50  // CSS pour mes tableaux:
  51  echo "<link type='text/css' rel='stylesheet' href='tftp.css' />\n";
  52  
  53  if ((is_admin("system_is_admin",$login)=="Y")||(ldap_get_right("parc_can_clone",$login)=="Y"))
  54  {
  55      // Choix des parcs:
  56      $parc=isset($_POST['parc']) ? $_POST['parc'] : (isset($_GET['parc']) ? $_GET['parc'] : NULL);
  57      // Choix des machines:
  58      $id_emetteur=isset($_POST['id_emetteur']) ? $_POST['id_emetteur'] : (isset($_GET['id_emetteur']) ? $_GET['id_emetteur'] : NULL);
  59      $id_recepteur=isset($_POST['id_recepteur']) ? $_POST['id_recepteur'] : (isset($_GET['id_recepteur']) ? $_GET['id_recepteur'] : NULL);
  60  
  61  
  62      // Création de la table dès que possible:
  63      creation_tftp_tables();
  64  
  65      // Paramètres pour UdpCast
  66      $disk=isset($_POST['disk']) ? $_POST['disk'] : (isset($_GET['disk']) ? $_GET['disk'] : NULL);
  67      $compr=isset($_POST['compr']) ? $_POST['compr'] : (isset($_GET['compr']) ? $_GET['compr'] : NULL);
  68      $port=isset($_POST['port']) ? $_POST['port'] : (isset($_GET['port']) ? $_GET['port'] : NULL);
  69      $enableDiskmodule=isset($_POST['enableDiskmodule']) ? $_POST['enableDiskmodule'] : (isset($_GET['enableDiskmodule']) ? $_GET['enableDiskmodule'] : NULL);
  70      $diskmodule=isset($_POST['diskmodule']) ? $_POST['diskmodule'] : (isset($_GET['diskmodule']) ? $_GET['diskmodule'] : NULL);
  71      $netmodule=isset($_POST['netmodule']) ? $_POST['netmodule'] : (isset($_GET['netmodule']) ? $_GET['netmodule'] : NULL);
  72      $min_receivers=isset($_POST['min_receivers']) ? $_POST['min_receivers'] : (isset($_GET['min_receivers']) ? $_GET['min_receivers'] : NULL);
  73  
  74      $max_wait=isset($_POST['max_wait']) ? $_POST['max_wait'] : (isset($_GET['max_wait']) ? $_GET['max_wait'] : NULL);
  75      $min_wait=isset($_POST['min_wait']) ? $_POST['min_wait'] : (isset($_GET['min_wait']) ? $_GET['min_wait'] : NULL);
  76      $start_timeout=isset($_POST['start_timeout']) ? $_POST['start_timeout'] : (isset($_GET['start_timeout']) ? $_GET['start_timeout'] : NULL);
  77  
  78      $auto_reboot=isset($_POST['auto_reboot']) ? $_POST['auto_reboot'] : (isset($_GET['auto_reboot']) ? $_GET['auto_reboot'] : NULL);
  79  
  80      // Paramètres concernant l'action immédiate sur les machines choisies:
  81      $wake=isset($_POST['wake']) ? $_POST['wake'] : (isset($_GET['wake']) ? $_GET['wake'] : "n");
  82      $shutdown_reboot=isset($_POST['shutdown_reboot']) ? $_POST['shutdown_reboot'] : (isset($_GET['shutdown_reboot']) ? $_GET['shutdown_reboot'] : NULL);
  83  
  84  
  85      $pref_distrib_clonage=crob_getParam('pref_distrib_clonage');
  86      if(($pref_distrib_clonage=='udpcast')||($pref_distrib_clonage=='sysresccd')) {$valeur_par_defaut=$pref_distrib_clonage;}
  87      else {$valeur_par_defaut="udpcast";}
  88      $distrib=isset($_POST['distrib']) ? $_POST['distrib'] : $valeur_par_defaut;
  89  
  90      $type_os=isset($_POST['type_os']) ? $_POST['type_os'] : "xp";
  91      $sysresccd_kernel=isset($_POST['sysresccd_kernel']) ? $_POST['sysresccd_kernel'] : "rescue32";
  92  
  93  
  94      $pref_ntfsclone_udpcast=crob_getParam('pref_ntfsclone_udpcast');
  95      if(($pref_ntfsclone_udpcast=='y')||($pref_ntfsclone_udpcast=='n')) {$valeur_par_defaut=$pref_ntfsclone_udpcast;}
  96      else {$valeur_par_defaut="n";}
  97      $ntfsclone_udpcast=isset($_POST['ntfsclone_udpcast']) ? $_POST['ntfsclone_udpcast'] : $valeur_par_defaut;
  98  
  99      $pref_clonage_compression=crob_getParam('pref_clonage_compression');
 100      if(($pref_clonage_compression=='')||(!in_array($pref_clonage_compression,array('none','gzip','lzop','pbzip2')))) {$pref_clonage_compression='lzop';}
 101  
 102      $pref_clonage_max_wait=crob_getParam('pref_clonage_max_wait');
 103      if($pref_clonage_max_wait=='') {$pref_clonage_max_wait=15;}
 104      $pref_clonage_min_wait=crob_getParam('pref_clonage_min_wait');
 105      if($pref_clonage_min_wait=='') {$pref_clonage_min_wait=10;}
 106      $pref_clonage_start_timeout=crob_getParam('pref_clonage_start_timeout');
 107      if($pref_clonage_start_timeout=='') {$pref_clonage_start_timeout=20;}
 108  
 109  
 110      echo "<h1>".gettext("Action clonage TFTP")."</h1>\n";
 111  
 112      $restriction_parcs="n";
 113      if(is_admin("system_is_admin",$login)!="Y") {
 114          $restriction_parcs="y";
 115          $tab_delegated_parcs=list_delegated_parcs($login);
 116          if(count($tab_delegated_parcs)==0) {
 117              echo "<p>Aucun parc ne vous a été délégué.</p>\n";
 118              include ("pdp.inc.php");
 119              die();
 120          }
 121      }
 122  
 123      $msg_fichiers_manquants="";
 124      $temoin_fichiers_requis="y";
 125      $chemin_tftpboot="/tftpboot";
 126      $tab_udpcast_file=array("vmlu26", "udprd", "vmlu26.old", "udprd.old");
 127      for($loop=0;$loop<count($tab_udpcast_file);$loop++) {
 128          if(!file_exists($chemin_tftpboot."/".$tab_udpcast_file[$loop])) {
 129              $msg_fichiers_manquants.="<span style='color:red'>".$chemin_tftpboot."/".$tab_udpcast_file[$loop]." est absent.</span><br />\n";
 130              $msg_fichiers_manquants.="Vous devriez effectuer le telechargement udpcast en <a href='config_tftp.php'>Configurer le module TFTP</a><br />\n";
 131              $temoin_fichiers_requis="n";
 132          }
 133      }
 134  
 135      if($msg_fichiers_manquants!="") {
 136          $msg_fichiers_manquants.="<p>Vous ne pourrez pas effectuer le clonage avec la mini-distribution Linux UdpCast sans d'abord télécharger les fichiers manquants.</p>";
 137      }
 138  
 139      $temoin_sysresccd=check_sysresccd_files();
 140      if($temoin_sysresccd=="y") {
 141          $msg_fichiers_manquants.="<p>Vous pourrez effectuer le clonage avec la distribution SysRescCD.</p>";
 142          $temoin_fichiers_requis="y";
 143      }
 144      else {
 145          $msg_fichiers_manquants.="<span style='color:red'>SysRescCD est absente.<br />Cette distribution permet de cloner avec une meilleure reconnaissance matérielle qu'UdpCast seul.<br />Vous devriez en effectuer le téléchargement via <a href='config_tftp.php'>Configurer le module TFTP</a>.</span><br />\n";
 146      }
 147  
 148      if($msg_fichiers_manquants!="") {
 149          echo $msg_fichiers_manquants;
 150      }
 151  
 152      if($temoin_fichiers_requis=="n") {
 153          echo "<p style='color:red'>ABANDON&nbsp;: Un ou des fichiers requis sont manquants.</p>\n";
 154          include ("pdp.inc.php");
 155          die();
 156      }
 157  
 158      if(!isset($parc)){
 159  
 160          echo "<p>Choisissez un ou des parcs:</p>\n";
 161  
 162          $list_parcs=search_machines("objectclass=groupOfNames","parcs");
 163          if ( count($list_parcs)==0) {
 164              echo "<br><br>";
 165              echo gettext("Il n'existe aucun parc. Vous devez d'abord créer un parc");
 166              include ("pdp.inc.php");
 167              exit;
 168          }
 169          sort($list_parcs);
 170  
 171          echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n";
 172          //echo "<input type=\"hidden\" name=\"action\" value=\"$action\" />\n";
 173  
 174          // Affichage des parcs sur 3/4 colonnes
 175          $nb_parcs_par_colonne=round(count($list_parcs)/3);
 176          echo "<table border='0'>\n";
 177          echo "<tr valign='top'>\n";
 178          echo "<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>\n";
 179          echo "<td align='left'>\n";
 180          for ($loop=0; $loop < count($list_parcs); $loop++) {
 181              if(($loop>0)&&(round($loop/$nb_parcs_par_colonne)==$loop/$nb_parcs_par_colonne)){
 182                  echo "</td>\n";
 183                  echo "<td align='left'>\n";
 184              }
 185  
 186              if(($restriction_parcs=="n")||(in_array($list_parcs[$loop]["cn"], $tab_delegated_parcs))) {
 187                  echo "<label for='parc_$loop'><input type='checkbox' id='parc_$loop' name='parc[]' value=\"".$list_parcs[$loop]["cn"]."\"";
 188                  if(count($list_parcs)==1) {echo " checked";}
 189                  echo " />".$list_parcs[$loop]["cn"]."</label>\n";
 190                  echo "<br />\n";
 191              }
 192          }
 193  
 194          echo "</td>\n";
 195          echo "</tr>\n";
 196          echo "</table>\n";
 197  
 198          echo "<p align='center'><input type=\"submit\" name=\"submit\" value=\"Valider\" /></p>\n";
 199  
 200          echo "</form>\n";
 201  
 202  
 203          echo "<script type='text/javascript'>
 204  nb_parcs=0;
 205  id_parc='';
 206  for(i=0;i<$loop;i++) {
 207      if(document.getElementById('parc_'+i)) {
 208          nb_parcs++;
 209          id_parc='parc_'+i;
 210      }
 211  }
 212  if(nb_parcs==1) {
 213      document.getElementById(id_parc).checked=true;
 214  }
 215  </script>\n";
 216  
 217          //echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour au choix du/des parc(s)</a>.</p>\n";
 218  
 219          echo "<p style='text-indent: -7em; margin-left: 7em;'><b style='color:red'>ATTENTION&nbsp;:</b> Pour le bon fonctionnement du clonage, il est indispensable que les postes (<em>l'emetteur au moins</em>) soient configurés pour booter en priorité sur le réseau (<em>BIOS&nbsp;: boot PXE (network) avant disque dur</em>).<br />Sinon, quand le poste emetteur va redémarrer pour le clonage (*), il risque de redémarrer sous Window$ au lieu de démarrer en PXE.<br /><br />Et si vous lancez manuellement le clonage ensuite, le poste emetteur aura déjà réintégré le domaine et repris son nom initial. Vous clonerez alors toutes les machines sous ce même nom et elles n'intègreront pas le domaine sous leur nom propre.<br /><br />(*) Le poste emetteur reboote plusieurs fois dans l'opération (<em>il doit quitter le domaine (un reboot),<br />prendre le nom temporaire 'clone' (encore un reboot)<br />et ensuite seulement rebooter sur le réseau pour procéder au clonage</em>)</p>\n";
 220      }
 221      else {
 222          if(!isset($id_emetteur)) {
 223              echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n";
 224  
 225              echo "<p>Choisissez l'émetteur.</p>\n";
 226  
 227              $tab_detect_doublons=array();
 228              $tab_infos_doublons=array();
 229              for($i=0;$i<count($parc);$i++){
 230  
 231                  echo "<h2>Parc $parc[$i]</h2>\n";
 232                  echo "<input type=\"hidden\" name=\"parc[]\" value=\"$parc[$i]\" />\n";
 233  
 234                  $mp=gof_members($parc[$i],"parcs",1);
 235                  $nombre_machine=count($mp);
 236                  sort($mp);
 237  
 238                  //echo "<table border='1'>\n";
 239                  echo "<table class='crob'>\n";
 240                  echo "<tr>\n";
 241  
 242                  echo "<th>Nom</th>\n";
 243                  echo "<th>Etat</th>\n";
 244                  echo "<th>Session</th>\n";
 245                  echo "<th>Config DHCP</th>\n";
 246  
 247                  echo "<th>Emetteur</th>\n";
 248                  echo "<th>Actions programmées</th>\n";
 249                  echo "</tr>\n";
 250  
 251                  for ($loop=0; $loop < count($mp); $loop++) {
 252                      $mpenc=urlencode($mp[$loop]);
 253  
 254                      // Test si on a une imprimante ou une machine
 255                      $resultat=search_imprimantes("printer-name=$mpenc","printers");
 256                      $suisje_printer="non";
 257                      for ($loopp=0; $loopp < count($resultat); $loopp++) {
 258                          if ($mpenc==$resultat[$loopp]['printer-name']) {
 259                              $suisje_printer="yes";
 260                              continue;
 261                          }
 262                      }
 263  
 264                      if($suisje_printer=="non") {
 265                          // Réinitialisation:
 266                          $id_machine="";
 267  
 268                          $mp_curr=search_machines2("(&(cn=$mpenc)(objectClass=ipHost))","computers");
 269                          if(in_array($mp_curr[0]["macAddress"],$tab_detect_doublons)) {
 270                              $temoin_check='n';
 271                              $tab_infos_doublons[$mp_curr[0]["macAddress"]].=", ".$mpenc;
 272                          }
 273                          else {
 274                              $temoin_check='y';
 275                              $tab_detect_doublons[]=$mp_curr[0]["macAddress"];
 276                              $tab_infos_doublons[$mp_curr[0]["macAddress"]]=$mpenc;
 277                          }
 278  
 279                          echo "<tr>\n";
 280                          echo "<td width='20%'>".$mp[$loop]."</td>\n";
 281  
 282                          // Etat: allumé ou éteint
 283                          echo "<td width='20%'>";
 284                          if ($mp_curr[0]["ipHostNumber"]) {
 285                              $iphost=$mp_curr[0]["ipHostNumber"];
 286  
 287                              echo "<div id='divip$loop'>Patientez</div>\n";
 288                              echo "<script type='text/javascript'>
 289                                  // <![CDATA[
 290                                  new Ajax.Updater($('divip$loop'),'ajax_lib.php?ip=$iphost&mode=ping_ip',{method: 'get'});
 291                                  //]]>
 292                              </script>\n";
 293                          }
 294                          echo "</td>\n";
 295  
 296  
 297                          // Session: ouverte ou pas... sous quelle identité
 298                          echo "<td width='20%'>\n";
 299                          echo "<div id='divsession$loop'>Patientez</div>\n";
 300                          echo "<script type='text/javascript'>
 301                              // <![CDATA[
 302                              new Ajax.Updater($('divsession$loop'),'ajax_lib.php?nom_machine=".$mp[$loop]."&mode=session',{method: 'get'});
 303                              //]]>
 304                          </script>\n";
 305                          echo "</td>\n";
 306  
 307  
 308                          // Etat config DHCP:
 309                          // Par la suite il ne faudra pas prendre les IP dans l'annuaire,
 310                          // mais dans la config DHCP parce que ce sont ces IP qui seront attribuées lors du boot PXE
 311                          echo "<td width='20%'>\n";
 312                          //$mp_curr=search_machines("(&(cn=$mpenc)(objectClass=ipHost))","computers");
 313                          if ($mp_curr[0]["macAddress"]) {
 314                              $sql="SELECT * FROM se3_dhcp WHERE mac='".$mp_curr[0]["macAddress"]."';";
 315                              //echo "$sql<br />";
 316                              $res=mysql_query($sql);
 317                              if(mysql_num_rows($res)>0) {
 318                                  $lig=mysql_fetch_object($res);
 319                                  $id_machine=$lig->id;
 320  
 321                                  //echo $lig->ip;
 322                                  echo "<img src=\"../elements/images/enabled.gif\" border='0' alt=\"$lig->ip\" title=\"$lig->ip\" />";
 323                              }
 324                              else {
 325                                  echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'adresse IP attribuée\" title=\"Pas d'adresse IP attribuée\" />";
 326                              }
 327                          }
 328                          else {
 329                              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???\" />";
 330                          }
 331                          echo "</td>\n";
 332  
 333  
 334                          // Sélection de l'émetteur UDPCAST:
 335                          echo "<td width='20%'>\n";
 336                          /*
 337                          foreach($mp_curr[0] as $champ => $valeur) {
 338                              echo "\$mp_curr[0]['$champ']=$valeur<br />";
 339                          }
 340                          */
 341                          if($id_machine!=""){
 342                              //echo "<input type='checkbox' name='id_machine[]' value='$id_machine' />\n";
 343                              echo "<input type='radio' name='id_emetteur' value='$id_machine' />\n";
 344                              // On affiche quand même la case à cocher parce qu'il se peut que la case soit désactivée si l'identifiant est absent de la table se3_dhcp
 345                              if($temoin_check=='n') {
 346                                  //echo "<img src=\"../elements/images/info.png\" border='0' alt=\"La machine doit être dans plusieurs parcs ou inscrite sous plusieurs noms dans l'annuaire: ".$tab_infos_doublons[$mp_curr[0]["macAddress"]]."\" title=\"La machine doit être dans plusieurs parcs ou inscrite sous plusieurs noms dans l'annuaire: ".$tab_infos_doublons[$mp_curr[0]["macAddress"]]."\" />";
 347                                  echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('La machine doit être dans plusieurs parcs ou inscrite sous plusieurs noms dans l\'annuaire: ".$tab_infos_doublons[$mp_curr[0]["macAddress"]]."')")."\"><img name=\"action_image$loop\"  src=\"../elements/images/info.png\"></u>\n";
 348  
 349                              }
 350                          }
 351                          else {
 352                              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\" />";
 353                          }
 354                          echo "</td>\n";
 355  
 356  
 357                          // Action programmée
 358                          echo "<td>\n";
 359                          if($id_machine!=""){
 360                              $sql="SELECT * FROM se3_tftp_action WHERE id='".$id_machine."';";
 361                              $res=mysql_query($sql);
 362                              if(mysql_num_rows($res)>0) {
 363                                  $lig=mysql_fetch_object($res);
 364                                  echo "<a href='visu_action.php?id_machine=$id_machine' target='_blank'>$lig->type programmé(e)</a>";
 365                              }
 366                              else {
 367                                  echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'action programmée\" title=\"Pas d'action programmée\" />";
 368                              }
 369                          }
 370                          echo "</td>\n";
 371  
 372                          echo "</tr>\n";
 373                      }
 374                      flush();
 375                  }
 376                  echo "</table>\n";
 377              }
 378              echo "<p align='center'><input type=\"submit\" name=\"submit\" value=\"Valider\" /></p>\n";
 379              echo "</form>\n";
 380  
 381  
 382          }
 383          elseif(!isset($id_recepteur)){
 384                          // Ajout keyser test emetteur bien allume
 385                          
 386              echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n";
 387  
 388              $sql="SELECT * FROM se3_dhcp WHERE id='$id_emetteur';";
 389              $res=mysql_query($sql);
 390              $lig=mysql_fetch_object($res);
 391                          echo "<p>Emetteur: $lig->name (<i>id:$id_emetteur</i>)</p>\n";
 392                          echo "<input type=\"hidden\" name=\"id_emetteur\" value=\"$id_emetteur\" />\n";
 393                          exec("/usr/share/se3/sbin/tcpcheck 2 $lig->ip:445 | grep alive",$arrval,$return_value);
 394              if ($return_value == "1") {
 395                  echo "<p style='color:red;'>Attention, clonage impossible. La machine $lig->name est injoignable ou prot&#233;g&#233;e par un pare-feu  :  </p>\n ";
 396                  echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour au choix du/des parc(s)</a>.</p>\n";
 397                  include ("pdp.inc.php");
 398                  exit();
 399                          }
 400  
 401  
 402              echo "<p>Choisissez les r&#233;cepteurs.</p>\n";
 403              $max_eff_parc=0;
 404  
 405              $tab_detect_doublons=array();
 406              $tab_infos_doublons=array();
 407              for($i=0;$i<count($parc);$i++){
 408  
 409                  echo "<h2>Parc $parc[$i]</h2>\n";
 410                  echo "<input type=\"hidden\" name=\"parc[]\" value=\"$parc[$i]\" />\n";
 411  
 412                  $mp=gof_members($parc[$i],"parcs",1);
 413                  $nombre_machine=count($mp);
 414                  sort($mp);
 415  
 416                  //echo "\$id_emetteur=$id_emetteur<br />\n";
 417  
 418                  //echo "<table border='1'>\n";
 419                  echo "<table class='crob'>\n";
 420                  echo "<tr>\n";
 421  
 422                  echo "<th>Nom</th>\n";
 423                  echo "<th>Etat</th>\n";
 424                  echo "<th>Session</th>\n";
 425                  echo "<th>Config DHCP</th>\n";
 426  
 427                  //echo "<th>Récepteurs</th>\n";
 428                  echo "<th>Récepteurs<br />\n";
 429                  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";
 430                  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";
 431                  echo "</th>\n";
 432  
 433                  echo "<th>Actions programmées</th>\n";
 434                  echo "</tr>\n";
 435  
 436                  for ($loop=0; $loop < count($mp); $loop++) {
 437                      $mpenc=urlencode($mp[$loop]);
 438  
 439                      // Test si on a une imprimante ou une machine
 440                      $resultat=search_imprimantes("printer-name=$mpenc","printers");
 441                      $suisje_printer="non";
 442                      for ($loopp=0; $loopp < count($resultat); $loopp++) {
 443                          if ($mpenc==$resultat[$loopp]['printer-name']) {
 444                              $suisje_printer="yes";
 445                              continue;
 446                          }
 447                      }
 448  
 449                      if($suisje_printer=="non") {
 450                          // Réinitialisation:
 451                          $id_machine="";
 452  
 453                          $mp_curr=search_machines2("(&(cn=$mpenc)(objectClass=ipHost))","computers");
 454                          if(in_array($mp_curr[0]["macAddress"],$tab_detect_doublons)) {
 455                              $temoin_check='n';
 456                              $tab_infos_doublons[$mp_curr[0]["macAddress"]].=", ".$mpenc;
 457                          }
 458                          else {
 459                              $temoin_check='y';
 460                              $tab_detect_doublons[]=$mp_curr[0]["macAddress"];
 461                              $tab_infos_doublons[$mp_curr[0]["macAddress"]]=$mpenc;
 462                          }
 463                          echo "<tr>\n";
 464                          echo "<td width='20%'>".$mp[$loop]."</td>\n";
 465  
 466                          // Etat: allumé ou éteint
 467                          echo "<td width='20%'>";
 468                          //$mp_curr=search_machines2("(&(cn=$mpenc)(objectClass=ipHost))","computers");
 469                          if ($mp_curr[0]["ipHostNumber"]) {
 470                              $iphost=$mp_curr[0]["ipHostNumber"];
 471  
 472                              echo "<div id='divip$loop'>Patientez</div>\n";
 473                              echo "<script type='text/javascript'>
 474                                  // <![CDATA[
 475                                  new Ajax.Updater($('divip$loop'),'ajax_lib.php?ip=$iphost&mode=ping_ip',{method: 'get'});
 476                                  //]]>
 477                              </script>\n";
 478                          }
 479                          echo "</td>\n";
 480  
 481  
 482                          // Session: ouverte ou pas... sous quelle identité
 483                          echo "<td width='20%'>\n";
 484                          echo "<div id='divsession$loop'>Patientez</div>\n";
 485                          echo "<script type='text/javascript'>
 486                              // <![CDATA[
 487                              new Ajax.Updater($('divsession$loop'),'ajax_lib.php?nom_machine=".$mp[$loop]."&mode=session',{method: 'get'});
 488                              //]]>
 489                          </script>\n";
 490                          echo "</td>\n";
 491  
 492  
 493                          // Etat config DHCP:
 494                          // Par la suite il ne faudra pas prendre les IP dans l'annuaire,
 495                          // mais dans la config DHCP parce que ce sont ces IP qui seront attribuées lors du boot PXE
 496                          echo "<td width='20%'>\n";
 497                          //$mp_curr=search_machines("(&(cn=$mpenc)(objectClass=ipHost))","computers");
 498                          if ($mp_curr[0]["macAddress"]) {
 499                              $sql="SELECT * FROM se3_dhcp WHERE mac='".$mp_curr[0]["macAddress"]."';";
 500                              //echo "$sql<br />\n";
 501                              $res=mysql_query($sql);
 502                              if(mysql_num_rows($res)>0) {
 503                                  $lig=mysql_fetch_object($res);
 504                                  $id_machine=$lig->id;
 505                                  //echo "\$id_machine=$id_machine<br />\n";
 506  
 507                                  //echo $lig->ip;
 508                                  echo "<img src=\"../elements/images/enabled.gif\" border='0' alt=\"$lig->ip\" title=\"$lig->ip\" />";
 509                              }
 510                              else {
 511                                  echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'adresse IP attribuée\" title=\"Pas d'adresse IP attribuée\" />";
 512                              }
 513                          }
 514                          else {
 515                              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???\" />";
 516                          }
 517                          echo "</td>\n";
 518  
 519  
 520                          // Sélection des récepteurs UDPCAST:
 521                          echo "<td width='20%'>\n";
 522                          /*
 523                          foreach($mp_curr[0] as $champ => $valeur) {
 524                              echo "\$mp_curr[0]['$champ']=$valeur<br />";
 525                          }
 526                          */
 527                          if($id_machine!=""){
 528                              if($id_machine!=$id_emetteur){
 529                                  //if($temoin_check=='y') {
 530                                      echo "<input type='checkbox' name='id_recepteur[]' id='machine_".$i."_".$loop."' value='$id_machine' />\n";
 531                                      //echo "<input type='radio' name='id_emetteur' value='$id_machine' />\n";
 532                                  //}
 533                                  //else {
 534                                  // On affiche quand même la case à cocher parce qu'il se peut que la case soit désactivée si l'identifiant est absent de la table se3_dhcp
 535                                  if($temoin_check=='n') {
 536                                      //echo "<img src=\"../elements/images/info.png\" border='0' alt=\"La machine doit être dans plusieurs parcs ou inscrite sous plusieurs noms dans l'annuaire: ".$tab_infos_doublons[$mp_curr[0]["macAddress"]]."\" title=\"La machine doit être dans plusieurs parcs ou inscrite sous plusieurs noms dans l'annuaire: ".$tab_infos_doublons[$mp_curr[0]["macAddress"]]."\" />";
 537                                      echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('La machine doit être dans plusieurs parcs ou inscrite sous plusieurs noms dans l\'annuaire: ".$tab_infos_doublons[$mp_curr[0]["macAddress"]]."')")."\"><img name=\"action_image$loop\"  src=\"../elements/images/info.png\"></u>\n";
 538                                  }
 539                              }
 540                              else{
 541                                  echo "<span style='color:green;'>Emetteur</span>\n";
 542                              }
 543                          }
 544                          else {
 545                              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\" />";
 546                          }
 547                          echo "</td>\n";
 548  
 549  
 550                          // Action programmée
 551                          echo "<td>\n";
 552                          if($id_machine!=""){
 553                              $sql="SELECT * FROM se3_tftp_action WHERE id='".$id_machine."';";
 554                              $res=mysql_query($sql);
 555                              if(mysql_num_rows($res)>0) {
 556                                  $lig=mysql_fetch_object($res);
 557                                  echo "<a href='visu_action.php?id_machine=$id_machine' target='_blank'>$lig->type programmé(e)</a>";
 558                              }
 559                              else {
 560                                  echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'action programmée\" title=\"Pas d'action programmée\" />";
 561                              }
 562                          }
 563                          echo "</td>\n";
 564  
 565                          echo "</tr>\n";
 566                          flush();
 567                      }
 568                  }
 569                  echo "</table>\n";
 570                  if($max_eff_parc<$loop) {$max_eff_parc=$loop;}
 571              }
 572  
 573              echo "<script type='text/javascript'>
 574  	function check_machine(num_parc,mode) {
 575          for(i=0;i<$max_eff_parc;i++){
 576              if(document.getElementById('machine_'+num_parc+'_'+i)){
 577                  if(mode=='check'){
 578                      document.getElementById('machine_'+num_parc+'_'+i).checked=true;
 579                  }
 580                  else{
 581                      document.getElementById('machine_'+num_parc+'_'+i).checked=false;
 582                  }
 583              }
 584          }
 585      }
 586  </script>\n";
 587  
 588              echo "<p align='center'><input type=\"submit\" name=\"submit\" value=\"Valider\" /></p>\n";
 589              echo "</form>\n";
 590  
 591          }
 592          else {
 593              $validation_parametres=isset($_POST['validation_parametres']) ? $_POST['validation_parametres'] : (isset($_GET['validation_parametres']) ? $_GET['validation_parametres'] : NULL);
 594              if(!isset($validation_parametres)) {
 595                  echo "<h2>Paramétrage du clonage</h2>\n";
 596  
 597                  //$nombre_machines=count($id_machine);
 598                  //if($nombre_machines==0){
 599                  if((!isset($id_emetteur))||(count($id_recepteur)==0)) {
 600                      echo "<p>ERREUR: Il faut choisir au moins un émetteur et un récepteur.</p>\n";
 601  
 602                      echo "<p><a href='#' onclick='history.go(-1);'>Retour au choix des machines à cloner</a>.</p>\n";
 603  
 604                      echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour au choix du/des parc(s)</a>.</p>\n";
 605                      include ("pdp.inc.php");
 606                      exit();
 607                  }
 608  
 609  
 610  
 611                  echo "<form method=\"post\" name=\"form_param\" action=\"".$_SERVER['PHP_SELF']."\">\n";
 612                  // Liste des parcs:
 613                  for($i=0;$i<count($parc);$i++){
 614                      echo "<input type=\"hidden\" name=\"parc[]\" value=\"$parc[$i]\" />\n";
 615                  }
 616  
 617                  // Infos sur l'émetteur:
 618                  $sql="SELECT * FROM se3_dhcp WHERE id='$id_emetteur';";
 619                  $res=mysql_query($sql);
 620                  $lig=mysql_fetch_object($res);
 621                  echo "<p>Emetteur: $lig->name (<i>id:$id_emetteur</i>)</p>\n";
 622                  echo "<input type=\"hidden\" name=\"id_emetteur\" value=\"$id_emetteur\" />\n";
 623  
 624                  // Liste des machines récepteurs:
 625                  $chaine="";
 626                  $tab_dedoublonnage=array();
 627                  for($i=0;$i<count($id_recepteur);$i++){
 628                      $sql="SELECT * FROM se3_dhcp WHERE id='".$id_recepteur[$i]."';";
 629                      //echo "$sql<br />";
 630                      $res=mysql_query($sql);
 631                      if(mysql_num_rows($res)>0) {
 632                          $lig=mysql_fetch_object($res);
 633                          if(!in_array($lig->name,$tab_dedoublonnage)) {
 634                              if($i>0) {$chaine.=", ";}
 635                              $chaine.=$lig->name;
 636                              echo "<input type=\"hidden\" name=\"id_recepteur[]\" value=\"$id_recepteur[$i]\" />\n";
 637                              $tab_dedoublonnage[]=$lig->name;
 638                          }
 639                      }
 640                  }
 641                  //if(count($id_recepteur)>1){$s="s";}else{$s="";}
 642                  if(count($tab_dedoublonnage)>1){$s="s";}else{$s="";}
 643                  echo "<p>Machine$s clonée$s: $chaine</p>\n";
 644  
 645                  echo "<p>Choisissez les paramètres de clonage: </p>\n";
 646  
 647                  $temoin_sysresccd=check_sysresccd_files();
 648  
 649                  if($temoin_sysresccd=="y") {
 650                      // Il faut aussi le noyau et l'initram.igz dans /tftpboot, 
 651                      echo "<p>";
 652  
 653                      $temoin_fichiers_udpcast="y";
 654                      $chemin_tftpboot="/tftpboot";
 655                      $tab_udpcast_file=array("vmlu26", "udprd", "vmlu26.old", "udprd.old");
 656                      for($loop=0;$loop<count($tab_udpcast_file);$loop++) {
 657                          if(!file_exists($chemin_tftpboot."/".$tab_udpcast_file[$loop])) {
 658                              $temoin_fichiers_udpcast="n";
 659                              break;
 660                          }
 661                      }
 662  
 663                      if($temoin_fichiers_udpcast=="y") {
 664                          echo "<input type='radio' name='distrib' id='distrib_udpcast' value='udpcast' onchange='affiche_sections_distrib()' ";
 665                          if($pref_distrib_clonage!="sysresccd") {echo "checked ";}
 666                          echo "/><label for='distrib_udpcast'>Utiliser la distribution UdpCast</label><br />\n";
 667                      }
 668                      else {
 669                          $pref_distrib_clonage="y";
 670                      }
 671  
 672                      echo "<input type='radio' name='distrib' id='distrib_sysresccd' value='sysresccd' onchange='affiche_sections_distrib()' ";
 673                      if($pref_distrib_clonage=="sysresccd") {echo "checked ";}
 674                      echo "/><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>)\n";
 675                      //echo "<br />\n";
 676                      echo "</p>\n";
 677  
 678  
 679  echo "<div id='div_sysresccd_kernel'>\n";
 680  echo "<table border='0'>\n";
 681  echo "<tr>\n";
 682  echo "<td valign='top'>\n";
 683  echo "Utiliser le noyau&nbsp;: ";
 684  echo "</td>\n";
 685  echo "<td>\n";
 686  echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_auto' value='auto' checked /><label for='sysresccd_kernel_auto'>auto</label><br />\n";
 687  echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_rescue32' value='rescue32' /><label for='sysresccd_kernel_rescue32'>rescue32</label><br />\n";
 688  echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_altker32' value='altker32' /><label for='sysresccd_kernel_altker32'>altker32</label><br />\n";
 689  echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_rescue64' value='rescue64' /><label for='sysresccd_kernel_rescue64'>rescue64</label><br />\n";
 690  echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_altker64' value='altker64' /><label for='sysresccd_kernel_altker64'>altker64</label><br />\n";
 691  echo "</td>\n";
 692  echo "</tr>\n";
 693  echo "</table>\n";
 694  echo "</div>\n";
 695  
 696                      echo "<div id='div_ntfsclone'>\n";
 697                      $srcd_scripts_vers=crob_getParam('srcd_scripts_vers');
 698                      if(($srcd_scripts_vers!='')&&($srcd_scripts_vers>=20110406)) {
 699                          echo "<p>";
 700                          echo "<input type='radio' name='ntfsclone_udpcast' id='ntfsclone_udpcast_n' value='n' ";
 701                          if($pref_ntfsclone_udpcast!="y") {echo "checked ";}
 702                          echo "/><label for='ntfsclone_udpcast_n'> Utiliser udp-sender/udp-receiver seuls</label><br />\n";
 703                          echo "<input type='radio' name='ntfsclone_udpcast' id='ntfsclone_udpcast_y' value='y' ";
 704                          if($pref_ntfsclone_udpcast=="y") {echo "checked ";}
 705                          echo "/><label for='ntfsclone_udpcast_y'>Utiliser ntfsclone et udp-sender/udp-receiver</label> (<em style='color:red' title=\"Le caractère expérimental de ce mode doit être tempéré.
 706  De nombreux clonages ont été effectués avec succès et ce beaucoup plus vite grâce à ntfsclone qu'avec udpcast seul.\">experimental</em>)<br />\n";
 707                          echo "</p>\n";
 708                      }
 709                      else {
 710                          echo "<input type='hidden' name='ntfsclone_udpcast' id='ntfsclone_udpcast_n' value='n' />\n";
 711                      }
 712                      echo "</div>\n";
 713  
 714                  }
 715                  else {
 716                      echo "<p style='color:red'>SysRescCD est absent (<em>c'est pourtant le choix recommandé</em>).<br />Vous pouvez provoquer le téléchargement dans le menu Serveur TFTP/Configurer le module.<br />A défaut, UdpCast seul sera utilisé.</p>\n";
 717                      echo "<input type=\"hidden\" name=\"distrib\" value=\"udpcast\" />\n";
 718                  }
 719  
 720                  echo "<table border='0'>\n";
 721  
 722                  echo "<tr><td valign='top'>Type du système à cloner: </td>\n";
 723                  echo "<td>";
 724                  echo "<input type='radio' name='type_os' id='type_os_xp' value='xp' onchange='affiche_message_shutdown_cmd()' checked /><label for='type_os_xp'> XP (<i>il y a une intégration du domaine à faire</i>)</label><br />\n";
 725                  echo "<input type='radio' name='type_os' id='type_os_autre' value='autre' onchange='affiche_message_shutdown_cmd()' /><label for='type_os_autre'> Windows98, Linux ou autre (<i>pas d'intégration automatique du domaine</i>)</label>\n";
 726                  echo "</td></tr>\n";
 727  
 728                  echo "<tr><td valign='top'>Périphérique à cloner: </td>\n";
 729                  echo "<td>";
 730                                  echo "<input type='text' name='disk' id='disk' value='sda' size='14' /><br>\n";
 731                                  echo "Habituellement: <a href=\"javascript:affecter_valeur_disk('hda1')\" title=\"Cliquez pour prendre cette valeur.\">hda1</a> ou <a href=\"javascript:affecter_valeur_disk('sda1')\" title=\"Cliquez pour prendre cette valeur.\">sda1</a> pour la première partition<br>\n";
 732                                  echo "et <a href=\"javascript:affecter_valeur_disk('hda')\" title=\"Cliquez pour prendre cette valeur.\">hda</a> ou <a href=\"javascript:affecter_valeur_disk('sda')\" title=\"Cliquez pour prendre cette valeur.\">sda</a> pour le disque complet.<br>\n";
 733  
 734                                  echo "<p><em>Avec le choix ntfsclone+udpcast&nbsp;:</em><br />";
 735                                  echo "Pour le clonage de seven 64bits choisir <strong><a href=\"javascript:affecter_valeur_disk('seven64')\" title=\"Cliquez pour prendre cette valeur.\">seven64</a></strong> (<em>seules les partitions NTFS sont clon&eacute;es</em>)<br />";
 736                                  echo "Pour cloner Seven (<em>64 ou non</em>) et une partition Linux derri&egrave;re, choisir <strong><a href=\"javascript:affecter_valeur_disk('seven64_linux')\" title=\"Cliquez pour prendre cette valeur.\">seven64_linux</a></strong> <span style='color:red' title=\"Version du paquet scripts.tar.gz de SysRescCD requise 
 737  sup&eacute;rieure &agrave; 20140409.
 738  Version &agrave; controler dans la rubrique
 739      Serveur TFTP/Configurer le module\">(*)</span><br />";
 740                                  echo "Pour cloner (<em>par exemple</em>) les partitions sda1, sda2 et sda5, choisir <strong><a href=\"javascript:affecter_valeur_disk('sda1_sda2_sda5')\" title=\"Cliquez pour prendre cette valeur.\">sda1_sda2_sda5</a></strong> (<em>taper le nom des partitions sépar&eacute;es d'un tiret bas _</em>).<br />Avec le choix ntfsclone+udpcast, les partitions ntfs sont clon&eacute;es avec ntfsclone+udpcast et les autres partitions sont clon&eacute;es avec udpcast seul.";
 741                                  echo "</td></tr>\n";
 742                                     
 743                                  echo "<tr><td valign='top'>Compression: </td><td>";
 744                                  echo "<label for='compr_none'><input type='radio' name='compr' id='compr_none' value='none' ";
 745                                  if($pref_clonage_compression=='none') {echo "checked ";}
 746                                  echo "/> Aucune compression (<i> deconseille sauf SSD et gigabit </i>)</label><br />\n";
 747                                  echo "<label for='compr_gzip'><input type='radio' name='compr' id='compr_gzip' value='gzip' ";
 748                                  if($pref_clonage_compression=='gzip') {echo "checked ";}
 749                                  echo "/> Compression GZIP (<i>2 processeurs mini, 100M</i>)</label><br />\n";
 750                                  echo "<label for='compr_pbzip2'><input type='radio' name='compr' id='compr_pbzip2' value='pbzip2' ";
 751                                  if($pref_clonage_compression=='pbzip2') {echo "checked ";}
 752                                  echo "/> Compression BZ2 parallele (<i>4 processeurs mini, ou reseau lent</i>)</label><br />\n";
 753                                  echo "<label for='compr_lzop'><input type='radio' name='compr' id='compr_lzop' value='lzop' ";
 754                                  if($pref_clonage_compression=='lzop') {echo "checked ";}
 755                                  echo "/> Compression LZOP (<i>1 processeur ou gigabit</i>)</label><br />\n";
 756                  echo "</td></tr>\n";
 757  
 758                  // A FAIRE: Relever les clonage en attente (possible) ou en cours (pas possible en l'état) pour ne pas proposer le même port...
 759                  $sql="SELECT DISTINCT infos FROM se3_tftp_action WHERE type='udpcast_emetteur';";
 760                  $res_infos=mysql_query($sql);
 761                  if(mysql_num_rows($res_infos)>0) {
 762                      $tab_ports=array();
 763                      while($lig_infos=mysql_fetch_object($res_infos)){
 764                          $tmp_tab=decoupe_infos($lig_infos->infos);
 765                          if(isset($tmp_tab['port'])) {$tab_ports[]=$tmp_tab['port'];}
 766                      }
 767                      //sort($tab_ports);
 768                      for($i=9002;$i<64000;$i+=2) {
 769                          if(!in_array($i,$tab_ports)){$port=$i;break;}
 770                      }
 771                  }
 772                  else {
 773                      $port=9002;
 774                  }
 775                  echo "<tr><td valign='top'>Port: </td><td><input type='text' name='port' value='$port' size='5' />";
 776                  echo "<br />\n";
 777                  //echo "<b>Attention</b>: A l'heure actuelle, aucun test n'est fait sur les clonages programmés concernant le port utilisé.<br />Il ne faut pas qu'un autre clonage se déroule simultanément avec le même port.<br /><i>Remarque</i>: Le port doit être pair.\n";
 778                  echo "<b>Attention</b>: Aucun test n'est réalisé sur les clonages en cours concernant le port utilisé.<br />Seuls sont testés les clonages programmés, mais non encore amorcés.<br />Il ne faut pas qu'un autre clonage se déroule simultanément avec le même port.<br /><i>Remarque</i>: Le port doit être pair.\n";
 779                  echo "</td></tr>\n";
 780  
 781                  echo "<tr id='tr_module_disk'><td>Module Disk: </td><td>\n";
 782                  echo "<input type='checkbox' name='enableDiskmodule' value='yes' checked /> \n";
 783                  $tab_pilote=array();
 784                  $chaine_pilote="";
 785                  $sql="SELECT valeur FROM se3_tftp_infos WHERE id='$id_emetteur' AND nom='storage_driver';";
 786                  $test_driver_emetteur=mysql_query($sql);
 787                  if(mysql_num_rows($test_driver_emetteur)>0) {
 788                      $chaine_pilote.="<br />\n";
 789                      $chaine_pilote.="<b>Pilote(s) relevé(s) lors d'un précédent rapport&nbsp;:</b> ";
 790                      $cpt_pilote=0;
 791                      while($lig_pilote=mysql_fetch_object($test_driver_emetteur)) {
 792                          if($cpt_pilote>0) {$chaine_pilote.=", ";}
 793                          $chaine_pilote.=$lig_pilote->valeur;
 794                          $tab_pilote[]=strtolower($lig_pilote->valeur);
 795                          $cpt_pilote++;
 796                      }
 797                  }
 798  
 799                  echo "<select name='diskmodule'>\n";
 800                  echo "<option value='AUTO' selected='true'>Auto-detect</option>\n";
 801                  for($i=0;$i<count($tab_diskmodule);$i++){
 802                      echo "<option value='$tab_diskmodule[$i]'";
 803                      if(in_array(strtolower($tab_diskmodule[$i]),$tab_pilote)) {echo " selected='true'";}
 804                      echo ">$tab_diskmodule[$i]</option>\n";
 805                  }
 806                  echo "</select>\n";
 807                  echo $chaine_pilote;
 808                  echo "</td></tr>\n";
 809  
 810                  echo "<tr id='tr_netmodule'><td>Pilote réseau: </td><td>\n";
 811                  $tab_pilote=array();
 812                  $chaine_pilote="";
 813                  $sql="SELECT valeur FROM se3_tftp_infos WHERE id='$id_emetteur' AND nom='network_driver';";
 814                  $test_driver_emetteur=mysql_query($sql);
 815                  if(mysql_num_rows($test_driver_emetteur)>0) {
 816                      $chaine_pilote.="<br />\n";
 817                      $chaine_pilote.="<b>Pilote(s) relevé(s) lors d'un précédent rapport&nbsp;:</b> ";
 818                      $cpt_pilote=0;
 819                      while($lig_pilote=mysql_fetch_object($test_driver_emetteur)) {
 820                          if($cpt_pilote>0) {$chaine_pilote.=", ";}
 821                          $chaine_pilote.=$lig_pilote->valeur;
 822                          $tab_pilote[]=strtolower($lig_pilote->valeur);
 823                          $cpt_pilote++;
 824                      }
 825                  }
 826  
 827                  echo "<select name='netmodule'>\n";
 828                  echo "<option value='AUTO' selected='true'>Auto-detect</option>\n";
 829                  for($i=0;$i<count($tab_diskmodule);$i++){
 830                      echo "<option value='$tab_netmodule[$i]'";
 831                      if(in_array(strtolower($tab_diskmodule[$i]),$tab_pilote)) {echo " selected='true'";}
 832                      echo ">$tab_netmodule[$i]</option>\n";
 833                  }
 834                  echo "</select>\n";
 835                  echo $chaine_pilote;
 836                  echo "</td></tr>\n";
 837  
 838                  echo "<tr><td valign='top'>DHCP: </td><td>\n";
 839                  echo "<input type='checkbox' name='dhcp' value='no' /> Ne pas prendre l'IP via DHCP mais directement depuis le /tftpboot/pxelinux.cfg/01-&lt;MAC&gt;\n";
 840                  echo "</td></tr>\n";
 841  
 842                  if(($temoin_sysresccd=="y")&&(crob_getParam('srcd_scripts_vers')>='20110910')) {
 843                      echo "<tr id='tr_authorized_keys'>\n";
 844                      echo "<td>Url authorized_keys&nbsp;: </td>\n";
 845                      echo "<td><input type='checkbox' name='prendre_en_compte_url_authorized_keys' value='y' /> \n";
 846                      echo "<input type='text' name='url_authorized_keys' value='".crob_getParam('url_authorized_keys')."' size='40' />\n";
 847                      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 aux postes clon&eacute;s.')")."\">\n";
 848                      echo "<img name=\"action_image3\"  src=\"../elements/images/help-info.gif\"></u>\n";
 849                      echo "</td>\n";
 850                      echo "</tr>\n";
 851                  }
 852  
 853                  echo "<tr><td valign='top'>Rebooter en fin de clonage: </td>\n";
 854                  echo "<td>\n";
 855                  echo "<label for='auto_reboot_always'><input type='radio' name='auto_reboot' id='auto_reboot_always' value='always' checked /> Toujours</label><br />\n";
 856                  echo "<label for='auto_reboot_success'><input type='radio' name='auto_reboot' id='auto_reboot_success' value='success' /> En cas de succès</label><br />\n";
 857                  echo "<label for='auto_reboot_never'><input type='radio' name='auto_reboot' id='auto_reboot_never' value='never' /> Jamais</label>\n";
 858                  echo "</td></tr>\n";
 859  
 860                  echo "<tr><td valign='top'>Pour la ou les machines sélectionnées: </td>\n";
 861                  echo "<td>\n";
 862  
 863                      echo "<table border='0'>\n";
 864                      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 si elles sont éteintes.</label></td></tr>\n";
 865                      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 même si aucune session n'est ouverte,</label></td></tr>\n";
 866                      echo "<tr><td valign='top'><input type='radio' id='shutdown_reboot_wait2' name='shutdown_reboot' value='wait2'  /> </td><td><label for='shutdown_reboot_wait2'>Redémarrer les machines sans session ouverte et attendre le reboot pour les machines qui ont des sessions ouvertes,</label></td></tr>\n";
 867                      echo "<tr><td valign='top'><input type='radio' id='shutdown_reboot_reboot' name='shutdown_reboot' value='reboot' checked /> </td><td><label for='shutdown_reboot_reboot'>Redémarrer les machines même si une session est ouverte (<i>pô cool</i>).</label></td></tr>\n";
 868                      echo "</table>\n";
 869  
 870                  echo "</td></tr>\n";
 871  
 872  
 873                  echo "<tr><td colspan='2' style='background-color: silver;'>Paramètres spécifiques à l'émetteur</td></tr>\n";
 874  
 875                  echo "<tr><td valign='top'>Nombre (<i>min</i>) de clients à attendre: </td>\n";
 876                  echo "<td>\n";
 877                  echo "<input type='text' name='min_receivers' id='min_receivers' value='".count($id_recepteur)."' size='3' onkeydown=\"clavier_up_down_increment('min_receivers',event,1,100);\" autocomplete=\"off\" />\n";
 878                  echo "<br />\n";
 879                  echo "Vous pouvez par exemple annoncer 10 récepteurs minimum alors que vous souhaitez en cloner 12.<br />";
 880                  echo "Dans ce cas, vous acceptez que deux récepteurs manquent dans le clonage, mais pas plus.<br />";
 881                  echo "<br />\n";
 882                  echo "Lorsque le compte est atteint, le clonage démarre aussitôt le délais ci-dessous écoulé.<br />";
 883                  echo "</td></tr>\n";
 884                  /*
 885                  echo "<tr><td valign='top'><b>Ou</b></td><td>(<i>mettre 0 ou vide pour l'option à ne pas retenir;<br />si aucun des deux champs n'est vidé l'option ci-dessus l'emporte</i>)</td></tr>\n";
 886                  */
 887                  echo "<tr><td valign='top'>Délais minimum avant le démarrage:</td>\n";
 888                  echo "<td valign='bottom'>\n";
 889                  echo "<input type='text' id='min_wait' name='min_wait' value='$pref_clonage_min_wait' size='3' onkeydown=\"clavier_up_down_increment('min_wait',event,1,60);\" autocomplete=\"off\" /> minutes.\n";
 890                  echo "<br />\n";
 891                  echo "Si vous fixez un nombre de récepteurs inférieur au nombre max de clients pouvant être clonés, ce délais permettra d'attendre les récepteurs au-delà pendant cette durée.\n";
 892                  echo "</td></tr>\n";
 893  
 894                  echo "<tr><td valign='top'>Si un ou des clients<br />font défaut,<br />démarrer après: </td>\n";
 895                  echo "<td valign='bottom'>\n";
 896                  echo "<input type='text' id='max_wait' name='max_wait' value='$pref_clonage_max_wait' size='4' onkeydown=\"clavier_up_down_increment('max_wait',event,1,60);\" autocomplete=\"off\" /> minutes.\n";
 897                  echo "<br />\n";
 898                  echo "Néanmoins, le clonage ne démarre que si un client au moins est présent.\n";
 899                  echo "</td></tr>\n";
 900  
 901                  echo "<tr><td colspan='2' style='background-color: silver;'>Paramètres spécifiques au(x) récepteur(s)</td></tr>\n";
 902  
 903                  echo "<tr><td valign='top'>Abandonner après: </td>\n";
 904                  echo "<td>\n";
 905                  //echo "<input type='text' id='start_timeout' name='start_timeout' value='20' size='3' onkeydown=\"clavier_up_down_increment(this.id,event,1,60);\" autocomplete=\"off\" /> minutes si le clonage ne démarre pas.\n";
 906                  echo "<input type='text' id='start_timeout' name='start_timeout' value='$pref_clonage_start_timeout' size='3' onkeydown=\"clavier_up_down_increment('start_timeout',event,1,60);\" autocomplete=\"off\" /> minutes si le clonage ne démarre pas.\n";
 907                  echo "<br />\n";
 908                  echo "Veillez à ce que le timeout soit supérieur à la valeur 'max-wait' spécifiée pour l'émetteur.\n";
 909                  echo "</td></tr>\n";
 910  
 911                  /*
 912                  # --start-timeout sec
 913                  #    receiver aborts at start if it doesn't see a sender within this many seconds. Furthermore, the sender needs to start transmission of data within this delay. Once transmission is started, the timeout no longer applies.
 914                  */
 915  
 916  
 917                  echo "</table>\n";
 918  
 919                  echo "<input type='hidden' name='validation_parametres' value='y' />\n";
 920                  echo "<noscript><p align='center'><input type=\"submit\" name=\"bouton_submit_validation_parametres\" value=\"Valider 2\" /></p></noscript>\n";
 921                  echo "<p align='center'><input type=\"button\" name=\"bouton_validation_parametres\" value=\"Valider\" onclick=\"verif_et_valide_form()\" /></p>\n";
 922  
 923                  echo "<p id='p_message_shutdown_cmd' align='center' style='color:red;'> Attention ! si l'emetteur ne reboote pas tout seul en administrateur local, ouvrez une session administrateur local et lancez c:\\netinst\\shutdown.cmd </p>\n"; 
 924                  echo "</form>\n";
 925  
 926  
 927  echo "<script type='text/javascript'>
 928  function affecter_valeur_disk(valeur) {
 929      if(document.getElementById('disk')) {
 930          document.getElementById('disk').value=valeur;
 931      }
 932  }
 933  
 934  function verif_et_valide_form() {
 935      if(eval(document.getElementById('min_wait').value)>eval(document.getElementById('max_wait').value)) {
 936          alert('La valeur minimale d attente de l emetteur ne devrait pas etre inferieure a la valeur maximale d attente.')
 937      }
 938      else {
 939          //alert('max_wait='+document.getElementById('max_wait').value+' et start_timeout='+document.getElementById('start_timeout').value)
 940          if(eval(document.getElementById('start_timeout').value)<eval(document.getElementById('max_wait').value)) {
 941              alert('La valeur max d attente de l emetteur ne devrait pas etre superieure a la valeur maximale d attente des recepteurs.')
 942          }
 943          else {
 944              document.form_param.submit();
 945          }
 946      }
 947  }
 948  
 949  function affiche_sections_distrib() {
 950      if(document.getElementById('distrib_sysresccd').checked==true) {
 951          distrib='sysresccd';
 952      }
 953      else {
 954          distrib='udpcast';
 955      }
 956      //alert(distrib);
 957  
 958      if(distrib=='udpcast') {
 959          document.getElementById('div_sysresccd_kernel').style.display='none';
 960          document.getElementById('tr_module_disk').style.display='';
 961          document.getElementById('tr_netmodule').style.display='';
 962  
 963          document.getElementById('div_ntfsclone').style.display='none';
 964          document.getElementById('tr_authorized_keys').style.display='none';
 965      }
 966      else {
 967          document.getElementById('div_sysresccd_kernel').style.display='';
 968          document.getElementById('tr_module_disk').style.display='none';
 969          document.getElementById('tr_netmodule').style.display='none';
 970  
 971          document.getElementById('div_ntfsclone').style.display='';
 972          document.getElementById('tr_authorized_keys').style.display='';
 973      }
 974  }
 975  
 976  affiche_sections_distrib();
 977  
 978  function affiche_message_shutdown_cmd() {
 979      if(document.getElementById('type_os_xp').checked==true) {
 980          document.getElementById('p_message_shutdown_cmd').style.display='';
 981      }
 982      else {
 983          document.getElementById('p_message_shutdown_cmd').style.display='none';
 984      }
 985  }
 986  
 987  affiche_message_shutdown_cmd();
 988  
 989  function clavier_up_down_increment(n,e,vmin,vmax){
 990      //alert(n);
 991      // Fonction destinée à incrémenter/décrémenter le champ courant entre 0 et 255 (pour des composantes de couleurs)
 992      // Modifié pour aller de vmin à vmax
 993      touche= e.keyCode ;
 994      //alert('touche='+touche);
 995      if (touche == '40') {
 996          valeur=document.getElementById(n).value;
 997          if(valeur>vmin){
 998              valeur--;
 999              document.getElementById(n).value=valeur;
1000          }
1001      }
1002      else{
1003          if (touche == '38') {
1004              valeur=document.getElementById(n).value;
1005              if(valeur<vmax){
1006                  valeur++;
1007                  document.getElementById(n).value=valeur;
1008              }
1009          }
1010          else{
1011              if(touche == '34'){
1012                  valeur=document.getElementById(n).value;
1013                  if(valeur>vmin+10){
1014                      valeur=valeur-10;
1015                  }
1016                  else{
1017                      valeur=vmin;
1018                  }
1019                  document.getElementById(n).value=valeur;
1020              }
1021              else{
1022                  if(touche == '33'){
1023                      valeur=document.getElementById(n).value;
1024                      if(valeur<vmax-10){
1025                          //valeur=valeur+10;
1026                          //valeur+=10;
1027                          valeur=eval(valeur)+10;
1028                      }
1029                      else{
1030                          valeur=vmax;
1031                      }
1032                      document.getElementById(n).value=valeur;
1033                  }
1034              }
1035          }
1036      }
1037  }
1038  
1039  </script>\n";
1040  
1041              }
1042              else {
1043                  echo "<h2>Validation des paramètres du clonage</h2>\n";
1044  
1045                  $opt_url_authorized_keys="";
1046                  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'])=='')) {
1047                      $opt_url_authorized_keys="url_authorized_keys=".$_POST['url_authorized_keys'];
1048                      crob_setParam('url_authorized_keys',$_POST['url_authorized_keys'],'Url fichier authorized_keys pour acces ssh aux clients TFTP');
1049                  }
1050  
1051                  //===================================
1052                  // Contrôle des variables:
1053                  $tab_compr=array('none','gzip','lzop','pbzip2');
1054                  if(!in_array($compr,$tab_compr)){$compr='lzop';}
1055  
1056                  if((strlen(preg_replace("/[0-9]/","",$port)!=0))||($port=='')) {$port=9002;}
1057  
1058                  if(!isset($enableDiskmodule)){
1059                      $enableDiskmodule="no";
1060                  }
1061                  elseif($enableDiskmodule!="yes"){
1062                      $enableDiskmodule="no";
1063                  }
1064  
1065                  if(($auto_reboot!="always")&&($auto_reboot!="success")){$auto_reboot="never";}
1066                  //===================================
1067  
1068                  $sauvegarde_pref=crob_setParam('pref_distrib_clonage', $distrib, 'Distrib preferee pour le clonage');
1069                  $sauvegarde_pref=crob_setParam('pref_ntfsclone_udpcast', $ntfsclone_udpcast, 'Utilisation de ntfsclone+udpcast pour le clonage');
1070                  $sauvegarde_pref=crob_setParam('pref_clonage_max_wait', $max_wait, 'Clonage: Valeur max d attente du serveur');
1071                  $sauvegarde_pref=crob_setParam('pref_clonage_min_wait', $min_wait, 'Clonage: Valeur min d attente du serveur');
1072                  $sauvegarde_pref=crob_setParam('pref_clonage_start_timeout', $start_timeout, 'Clonage: Valeur max d attente des recepteurs');
1073                  $sauvegarde_pref=crob_setParam('pref_clonage_compression', $compr, 'Clonage: Mode de compression prefere');
1074  
1075                  echo "<p>Rappel des paramètres:</p>\n";
1076  
1077                  $temoin_sysresccd=check_sysresccd_files();
1078  
1079                  if($temoin_sysresccd=="y") {
1080                      echo "<table class='crob'>\n";
1081                      echo "<tr>\n";
1082                      echo "<th style='text-align:left;'>Distribution linux à utiliser: </th>\n";
1083                      echo "<td>\n";
1084                      echo $distrib;
1085                      if($distrib=='sysresccd') {
1086                          echo " (<i>noyau $sysresccd_kernel</i>)";
1087                      }
1088                      echo "<input type=\"hidden\" name=\"distrib\" value=\"$distrib\" />\n";
1089                      echo "</td>\n";
1090                      echo "</tr>\n";
1091                  }
1092                  else {
1093                      echo "<input type=\"hidden\" name=\"distrib\" value=\"udpcast\" />\n";
1094                      echo "<table class='crob'>\n";
1095                  }
1096  
1097                  echo "<tr>\n";
1098                  echo "<th style='text-align:left;'>Partition/disque à cloner: </th>\n";
1099                  echo "<td>\n";
1100                  echo $disk;
1101                  echo "</td>\n";
1102                  echo "</tr>\n";
1103  
1104                  echo "<tr>\n";
1105                  echo "<th style='text-align:left;'>Compression: </th>\n";
1106                  echo "<td>\n";
1107                  echo $compr;
1108                  echo "</td>\n";
1109                  echo "</tr>\n";
1110  
1111                  echo "<tr>\n";
1112                  echo "<th style='text-align:left;'>Port: </th>\n";
1113                  echo "<td>\n";
1114                  echo $port;
1115                  echo "</td>\n";
1116                  echo "</tr>\n";
1117  
1118                  if($distrib=='udpcast') {
1119                      echo "<tr>\n";
1120                      echo "<th style='text-align:left;'>Charger un module disque: </th>\n";
1121                      echo "<td>\n";
1122                      echo $enableDiskmodule;
1123                      echo "</td>\n";
1124                      echo "</tr>\n";
1125      
1126                      if($enableDiskmodule=="yes") {
1127                          echo "<tr>\n";
1128                          echo "<th style='text-align:left;'>Module disque: </th>\n";
1129                          echo "<td>\n";
1130                          echo $diskmodule;
1131                          echo "</td>\n";
1132                          echo "</tr>\n";
1133                      }
1134      
1135                      echo "<tr>\n";
1136                      echo "<th style='text-align:left;'>Module réseau: </th>\n";
1137                      echo "<td>\n";
1138                      echo $netmodule;
1139                      echo "</td>\n";
1140                      echo "</tr>\n";
1141                  }
1142  
1143                  echo "<tr>\n";
1144                  echo "<th style='text-align:left;'>Port: </th>\n";
1145                  echo "<td>\n";
1146                  echo $port;
1147                  echo "</td>\n";
1148                  echo "</tr>\n";
1149  
1150                  echo "<tr>\n";
1151                  echo "<th style='text-align:left;'>Rebooter en fin de restauration: </th>\n";
1152                  echo "<td>\n";
1153                  if($auto_reboot=="always") {
1154                      echo "Toujours";
1155                  }
1156                  elseif($auto_reboot=="success") {
1157                      echo "En cas de succès";
1158                  }
1159                  elseif($auto_reboot=="never") {
1160                      echo "Jamais (<i>reboot manuel</i>)";
1161                  }
1162                  echo "</td>\n";
1163                  echo "</tr>\n";
1164  
1165                  echo "</table>\n";
1166  
1167  
1168                  //=============================
1169                  // On recupere l'interface reseau pour pouvoir par la suite trouver le masque de sous-reseau depuis le script pxe_gen_cfg.sh
1170                  $sql="SELECT * FROM params WHERE name='dhcp_iface';";
1171                  $res=mysql_query($sql);
1172                  if(mysql_num_rows($res)>0) {
1173                      $lig=mysql_fetch_object($res);
1174                      //echo "dhcp_iface=".$lig->value."<br />";
1175                      $dhcp_iface=$lig->value;
1176                  }
1177  
1178                  $dhcp=isset($_POST['dhcp']) ? $_POST['dhcp'] : "yes";
1179                  //=============================
1180  
1181  
1182  
1183                  //====================================================
1184                  $sql="SELECT * FROM se3_dhcp WHERE id='$id_emetteur';";
1185                  $res=mysql_query($sql);
1186                  $lig=mysql_fetch_object($res);
1187                  //echo "<p>Emetteur: $lig->name (<i>$id_emetteur</i>)</p>\n";
1188  
1189                  /*
1190                  //$udpcparam="--max-wait=".$max_wait."--min-receivers=".$min_receivers;
1191                  $sec_max_wait=$max_wait*60;
1192                  //$udpcparam="--max-wait=".$sec_max_wait."--min-receivers=".$min_receivers;
1193                  $udpcparam="--max-wait=".$sec_max_wait."|--min-receivers=".$min_receivers;
1194  
1195                  // Je ne parviens pas à renseigner correctement le /udpcfg.txt avec les infos passées par la boot_cmdline
1196                  // Je ne m'en sors qu'avec un seul paramètre en udpcparam
1197                  if(($min_receivers!=0)&&($min_receivers!='')) {
1198                      $udpcparam="--min-receivers=".$min_receivers;
1199                  }
1200                  elseif(($max_wait!=0)&&($max_wait!='')) {
1201                      $sec_max_wait=$max_wait*60;
1202                      $udpcparam="--max-wait=".$sec_max_wait;
1203                  }
1204                  */
1205  
1206                  $sec_max_wait=$max_wait*60;
1207                  $sec_min_wait=$min_wait*60;
1208                  $udpcparam="--max-wait=".$sec_max_wait." --min-wait=".$sec_min_wait." --min-receivers=".$min_receivers;
1209                  $udpcparam_temp=strtr($udpcparam," ","_"); // Pour passer la récupération de variable dans pxe_gen_cfg.sh, l'espace dans le contenu de la variable pose un pb. On remplace par un _ et on fait la correction inverse dans pxe_gen_cfg.sh
1210  
1211                  $mac_machine=$lig->mac;
1212                  $nom_machine=$lig->name;
1213                  $ip_machine=$lig->ip;
1214                  $corrige_mac=strtolower(strtr($mac_machine,":","-"));
1215  
1216  
1217                  if($restriction_parcs=="y") {
1218                      $temoin_erreur='y';
1219                      for($loop=0; $loop<count($tab_delegated_parcs);$loop++) {
1220                          // La machine est-elle dans un des parcs délégués?
1221                          if(is_machine_in_parc($nom_machine,$tab_delegated_parcs[$loop])) {$temoin_erreur='n';break;}
1222                      }
1223                  }
1224  
1225                  if($temoin_erreur=="y") {
1226                      echo "<p style='color:red'>La machine $nom_machine ne vous est pas déléguée</p>\n";
1227                  }
1228                  else {
1229  
1230                      // Nettoyage de scories d'autres programmations:
1231                      if(file_exists("/tftpboot/pxelinux.cfg/01-".$corrige_mac)) {
1232                          echo "<p><span style='color:red;'>Suppression d'une programmation précédente pour $nom_machine</span><br>\n";
1233                          //unlink("/tftpboot/pxelinux.cfg/01-".$corrige_mac);
1234  
1235                          $resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'menage_tftpboot_pxelinux_cfg' 'mac=$corrige_mac'", $retour);
1236                          if(count($retour)>0){
1237                              for($j=0;$j<count($retour);$j++){
1238                                  echo "$retour[$j]<br />\n";
1239                              }
1240                          }
1241                          echo "</p>\n";
1242                      }
1243  
1244                      for($i=0;$i<count($id_recepteur);$i++) {
1245                          $sql="SELECT * FROM se3_dhcp WHERE id='".$id_recepteur[$i]."';";
1246                          //echo "$sql<br />";
1247                          $res_client=mysql_query($sql);
1248                          if(mysql_num_rows($res_client)==0) {
1249                              echo "<p>";
1250                              echo "<span style='color:red;'>La machine d'identifiant $id_recepteur[$i] n'existe pas dans 'se3_dhcp'.</span><br />\n";
1251                              echo "</p>\n";
1252                          }
1253                          else {
1254                              $temoin_erreur_client="n";
1255  
1256                              $lig_client=mysql_fetch_object($res_client);
1257                              $mac_machine_client=$lig_client->mac;
1258                              $nom_machine_client=$lig_client->name;
1259                              $ip_machine_client=$lig_client->ip;
1260  
1261                              if($restriction_parcs=="y") {
1262                                  $temoin_erreur_client='y';
1263                                  for($loop=0; $loop<count($tab_delegated_parcs);$loop++) {
1264                                      // La machine est-elle dans un des parcs délégués?
1265                                      if(is_machine_in_parc($nom_machine_client,$tab_delegated_parcs[$loop])) {$temoin_erreur='n';break;}
1266                                  }
1267                              }
1268  
1269                              if($temoin_erreur_client=="y") {
1270                                  echo "<p style='color:red'>La machine $nom_machine_client ne vous est pas déléguée</p>\n";
1271                              }
1272                              else {
1273  
1274                                  $corrige_mac_client=strtolower(strtr($mac_machine_client,":","-"));
1275                                  if(file_exists("/tftpboot/pxelinux.cfg/01-".$corrige_mac_client)) {
1276                                      echo "<p><span style='color:red;'>Suppression d'une programmation précédente pour $nom_machine_client</span><br>\n";
1277                                      //unlink("/tftpboot/pxelinux.cfg/01-".$corrige_mac);
1278  
1279                                      $resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'menage_tftpboot_pxelinux_cfg' 'mac=$corrige_mac_client'", $retour);
1280                                      if(count($retour)>0){
1281                                          for($j=0;$j<count($retour);$j++){
1282                                              echo "$retour[$j]<br />\n";
1283                                          }
1284                                      }
1285                                      echo "</p>\n";
1286                                  }
1287                              }
1288                          }
1289                      }
1290  
1291                      flush();
1292  
1293                      $temoin_erreur="n";
1294      
1295                      $num_op=get_free_se3_action_tftp_num_op();
1296      
1297                      $id_microtime=preg_replace('/[^0-9]/','_',microtime());
1298      
1299                      $chemin="/usr/share/se3/scripts";
1300      
1301                      if($type_os=='xp') {
1302  
1303                          echo "<p><span style='color:red; font-weight:bold;'>Rappel&nbsp;:</span> Il faut que les postes émetteur et récepteur(s) bootent en priorité sur le réseau (<em>PXE</em>) pour que le redémarrage se fasse sur ".$distrib." et que le clonage s'ensuive.</p>\n";
1304  
1305                          echo "<p><span style='font-weight:bold;'>Informations sur la suite&nbsp;:</span> Le poste émetteur va être sorti du domaine, renommé en 'clone' et préparé pour une réintégration après clonage,...<br>\n";
1306                          echo "L'opération prend couramment 5 minutes avant que la préparation soit effectuée et que la fin de la présente page HTML s'affiche.<br />\n";
1307                          echo "Soyez patient...</p>\n";
1308  
1309                          flush();
1310  
1311                          // on lance la preparation du poste emetteur
1312                          $resultat=system("/usr/bin/sudo /usr/share/se3/scripts/integreDomaine.sh clone clone $ip_machine $nom_machine adminse3 $xppass > /dev/null", $retint);
1313          
1314                          if ($retint) {
1315                              echo "<span style='color:red;'>ECHEC de la preparation du poste</span><br>\n";
1316                              $temoin_erreur="y";
1317                          } else {
1318                              echo "on attend le rapport de fin de la preparation<br>";
1319          
1320                              $sql="SELECT COUNT(*) FROM se3_tftp_rapports WHERE id='$id_emetteur' AND tache='preparation' AND statut='SUCCES' AND date>(now()-100);";
1321                              $num=0;
1322                              $incr=0;
1323                              while ($num==0) { 
1324                                  $count=mysql_query($sql);
1325                                  $num=mysql_result($count, 0);
1326                                  echo ".";
1327                                  sleep(10);
1328                                  if ($incr++==60) { 
1329                                      echo "<br>Probleme : pas de rapport remonte pour la preparation du clonage. Si le poste emetteur n'a pas reboote en adminstrateur local, relancez le clonage, connectez vous en administrateur local et lancez netinst\\shutdown.cmd";
1330                                      $temoin_erreur="y";
1331                                      break;
1332                                  }
1333                              }
1334          
1335                              if ("$temoin_erreur"=="n"){
1336                                  echo "<br> preparation reussie <br>";
1337                              }
1338                          }
1339                      }
1340      
1341      
1342                      if($distrib=='slitaz') {
1343                          $ajout_kernel="";
1344                      }
1345                      else {
1346                          $ajout_kernel="|kernel=$sysresccd_kernel";
1347                      }
1348                  }
1349  
1350                  if ("$temoin_erreur"=="n") {
1351                      echo "<p>Génération des fichiers dans /tftpboot/pxelinux.cfg/ pour l'émetteur.<br />\n";
1352                      echo "<p>Emetteur: $lig->name (<i>$id_emetteur</i>): \n";
1353                      if($distrib=='udpcast') {
1354                          //$resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'udpcast_emetteur' '$corrige_mac' '$ip_machine' '$nom_machine' '$compr' '$port' '$enableDiskmodule' '$diskmodule' '$netmodule' '$disk' '$auto_reboot' '$udpcparam' '$urlse3' '$num_op' '$dhcp' '$dhcp_iface'", $retour);
1355                          $resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'udpcast_emetteur' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine compr=$compr port=$port enableDiskmodule=$enableDiskmodule diskmodule=$diskmodule netmodule=$netmodule disk=$disk auto_reboot=$auto_reboot udpcparam=$udpcparam_temp urlse3=$urlse3 num_op=$num_op dhcp=$dhcp dhcp_iface=$dhcp_iface'", $retour);
1356                      }
1357                      else {
1358                          //$resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_udpcast_emetteur' '$corrige_mac' '$ip_machine' '$nom_machine' '$compr' '$port' '$enableDiskmodule' '$diskmodule' '$netmodule' '$disk' '$auto_reboot' '$udpcparam' '$urlse3' '$num_op' '$dhcp' '$dhcp_iface'", $retour);
1359                          if($ntfsclone_udpcast=='y') {
1360                              $resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_ntfsclone_udpcast_emetteur' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine compr=$compr port=$port enableDiskmodule=$enableDiskmodule diskmodule=$diskmodule netmodule=$netmodule disk=$disk auto_reboot=$auto_reboot udpcparam=$udpcparam_temp urlse3=$urlse3 num_op=$num_op dhcp=$dhcp dhcp_iface=$dhcp_iface kernel=$sysresccd_kernel id_microtime=$id_microtime $opt_url_authorized_keys'", $retour);
1361                          }
1362                          else {
1363                              $resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_udpcast_emetteur' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine compr=$compr port=$port enableDiskmodule=$enableDiskmodule diskmodule=$diskmodule netmodule=$netmodule disk=$disk auto_reboot=$auto_reboot udpcparam=$udpcparam_temp urlse3=$urlse3 num_op=$num_op dhcp=$dhcp dhcp_iface=$dhcp_iface kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour);
1364                          }
1365                      }
1366  
1367                      if(count($retour)>0){
1368                          echo "<span style='color:red;'>ECHEC de la génération du fichier</span><br />\n";
1369                          for($j=0;$j<count($retour);$j++){
1370                              echo "$retour[$j]<br />\n";
1371                          }
1372                          $temoin_erreur="y";
1373                      }
1374                      else {
1375                          // Numéro de l'opération de sauvegarde:
1376                          //$num_op=get_free_se3_action_tftp_num_op();
1377                          $sql="UPDATE se3_tftp_rapports SET statut='VALIDE' WHERE id='$id_emetteur' AND tache='preparation' AND statut='SUCCES';";
1378                          $upd=mysql_query($sql); 
1379                          $sql="DELETE FROM se3_tftp_action WHERE id='$id_emetteur';";
1380                          $suppr=mysql_query($sql);
1381  
1382                          $timestamp=time();
1383                          $sql="INSERT INTO se3_tftp_action SET id='$id_emetteur',
1384                                                                  mac='$mac_machine',
1385                                                                  name='$nom_machine',
1386                                                                  date='$timestamp',
1387                                                                  type='udpcast_emetteur',
1388                                                                  num_op='$num_op',
1389                                                                  infos='compr=$compr|disk=$disk|port=$port|enableDiskmodule=$enableDiskmodule|diskmodule=$diskmodule|netmodule=$netmodule|auto_reboot=$auto_reboot|udpcparam=$udpcparam}$ajout_kernel}';";
1390                          $insert=mysql_query($sql);
1391                          if(!$insert) {
1392                              echo "<span style='color:red;'>ECHEC de l'enregistrement dans 'se3_tftp_action'</span><br />\n";
1393                              $temoin_erreur="y";
1394                          }
1395  
1396                          if($temoin_erreur=="n") {
1397                              echo "<span style='color:green;'>OK</span>\n";
1398                              // Application de l'action choisie:
1399                              echo " <span id='wake_shutdown_or_reboot_emetteur'></span>";
1400  
1401                              echo "<script type='text/javascript'>
1402                                  // <![CDATA[
1403                                  new Ajax.Updater($('wake_shutdown_or_reboot_emetteur'),'ajax_lib.php?ip=$ip_machine&nom=$nom_machine&mode=wake_shutdown_or_reboot&wake=$wake&shutdown_reboot=$shutdown_reboot',{method: 'get'});
1404                                  //]]>
1405                              </script>\n";
1406  
1407                              echo "<br />\n";
1408                          }
1409                      }
1410                  }
1411                  //====================================================
1412  
1413  
1414                  if($temoin_erreur=="y") {
1415                      echo "<p>La mise en place a échoué pour l'emetteur.<br />On abandonne avant de générer les fichiers pour les émetteurs.</p>\n et on retablit la configuration initiale";
1416                      system("/usr/bin/sudo /usr/share/se3/scripts/integreDomaine.sh ldap $nom_machine $ip_machine $mac_machine > /dev/null");
1417                      include ("pdp.inc.php");
1418                      exit();
1419                  }
1420  
1421                  // On n'affiche le fichier que pour le dernier (à titre d'info):
1422                  if(isset($corrige_mac)) {
1423                      //$fich=fopen("/tftpboot/pxelinux.cfg/01-$lig1->mac","r");
1424                      $fich=fopen("/tftpboot/pxelinux.cfg/01-$corrige_mac","r");
1425                      if($fich) {
1426                          echo "<p>Pour information, voici le contenu du fichier généré:<br />\n";
1427                          echo "<pre style='border:1px solid black; color:green;'>";
1428                          while(!feof($fich)) {
1429                              $ligne=fgets($fich,4096);
1430                              echo htmlentities($ligne);
1431                          }
1432                          echo "</pre>\n";
1433                          fclose($fich);
1434                      }
1435                      else {
1436                          echo "<p style='color:red;'>Il n'a pas été possible d'ouvrir le fichier /tftpboot/pxelinux.cfg/01-$corrige_mac</p>\n";
1437                      }
1438                  }
1439  
1440                  //====================================================
1441  
1442                  echo "<p>Génération des fichiers dans /tftpboot/pxelinux.cfg/ pour les récepteurs.<br />\n";
1443                  //$udpcparam="--start-timeout=".$start_timeout;
1444                  $sec_start_timeout=$start_timeout*60;
1445                  //$udpcparam="--start-timeout=".$sec_start_timeout;
1446  
1447                  //$sec_max_wait=$max_wait*60;
1448                  //$udpcparam="--start-timeout=".$sec_start_timeout." --max-wait=".$sec_max_wait." --min-wait=".$sec_min_wait;
1449                  $udpcparam="--start-timeout=".$sec_start_timeout;
1450                  $udpcparam_temp=strtr($udpcparam," ","_"); // Pour passer la récupération de variable dans pxe_gen_cfg.sh, l'espace dans le contenu de la variable pose un pb. On remplace par un _ et on fait la correction inverse dans pxe_gen_cfg.sh
1451  
1452                  // BOUCLE SUR LA LISTE DES $id_recepteur[$i]
1453  
1454                  for($i=0;$i<count($id_recepteur);$i++) {
1455                      $sql="SELECT * FROM se3_dhcp WHERE id='".$id_recepteur[$i]."';";
1456                      //echo "$sql<br />";
1457                      $res=mysql_query($sql);
1458                      if(mysql_num_rows($res)==0) {
1459                          echo "<span style='color:red;'>La machine d'identifiant $id_recepteur[$i] n'existe pas dans 'se3_dhcp'.</span><br />\n";
1460                      }
1461                      else {
1462                          $temoin_erreur="n";
1463  
1464                          $lig=mysql_fetch_object($res);
1465                          $mac_machine=$lig->mac;
1466                          $nom_machine=$lig->name;
1467                          $ip_machine=$lig->ip;
1468  
1469                          if($restriction_parcs=="y") {
1470                              $temoin_erreur='y';
1471                              for($loop=0; $loop<count($tab_delegated_parcs);$loop++) {
1472                                  // La machine est-elle dans un des parcs délégués?
1473                                  if(is_machine_in_parc($nom_machine,$tab_delegated_parcs[$loop])) {$temoin_erreur='n';break;}
1474                              }
1475                          }
1476  
1477                          if($temoin_erreur=="y") {
1478                              echo "<p style='color:red'>La machine $nom_machine ne vous est pas déléguée</p>\n";
1479                          }
1480                          else {
1481                              echo "Génération pour $nom_machine: ";
1482      
1483                              $corrige_mac=strtolower(strtr($mac_machine,":","-"));
1484      
1485                              $chemin="/usr/share/se3/scripts";
1486                              //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'udpcast_recepteur' '$corrige_mac' '$ip_machine' '$nom_machine' '$compr' '$port' '$enableDiskmodule' '$diskmodule' '$netmodule' '$disk' '$auto_reboot' '$udpcparam' '$urlse3' '$num_op'", $retour);
1487                              if($distrib=='udpcast') {
1488                                  //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'udpcast_recepteur' '$corrige_mac' '$ip_machine' '$nom_machine' '$compr' '$port' '$enableDiskmodule' '$diskmodule' '$netmodule' '$disk' '$auto_reboot' '$udpcparam' '$urlse3' '$num_op' '$dhcp' '$dhcp_iface'", $retour);
1489                                  $resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'udpcast_recepteur' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine compr=$compr port=$port enableDiskmodule=$enableDiskmodule diskmodule=$diskmodule netmodule=$netmodule disk=$disk auto_reboot=$auto_reboot udpcparam=$udpcparam_temp urlse3=$urlse3 num_op=$num_op dhcp=$dhcp dhcp_iface=$dhcp_iface'", $retour);
1490                              }
1491                              else {
1492                                  //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_udpcast_recepteur' '$corrige_mac' '$ip_machine' '$nom_machine' '$compr' '$port' '$enableDiskmodule' '$diskmodule' '$netmodule' '$disk' '$auto_reboot' '$udpcparam' '$urlse3' '$num_op' '$dhcp' '$dhcp_iface'", $retour);
1493                                  if($ntfsclone_udpcast=='y') {
1494                                      $resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_ntfsclone_udpcast_recepteur' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine compr=$compr port=$port enableDiskmodule=$enableDiskmodule diskmodule=$diskmodule netmodule=$netmodule disk=$disk auto_reboot=$auto_reboot udpcparam=$udpcparam_temp urlse3=$urlse3 num_op=$num_op dhcp=$dhcp dhcp_iface=$dhcp_iface kernel=$sysresccd_kernel id_microtime=$id_microtime $opt_url_authorized_keys'", $retour);
1495                                  }
1496                                  else {
1497                                      $resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_udpcast_recepteur' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine compr=$compr port=$port enableDiskmodule=$enableDiskmodule diskmodule=$diskmodule netmodule=$netmodule disk=$disk auto_reboot=$auto_reboot udpcparam=$udpcparam_temp urlse3=$urlse3 num_op=$num_op dhcp=$dhcp dhcp_iface=$dhcp_iface kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour);
1498                                  }
1499                              }
1500      
1501                              if(count($retour)>0){
1502                                  echo "<span style='color:red;'>ECHEC de la génération du fichier</span><br />\n";
1503                                  for($j=0;$j<count($retour);$j++){
1504                                      echo "$retour[$j]<br />\n";
1505                                  }
1506                                  $temoin_erreur="y";
1507                              }
1508                              else {
1509                                  $sql="DELETE FROM se3_tftp_action WHERE id='$id_recepteur[$i]';";
1510                                  $suppr=mysql_query($sql);
1511      
1512                                  $timestamp=time();
1513                                  $sql="INSERT INTO se3_tftp_action SET id='$id_recepteur[$i]',
1514                                                                          mac='$mac_machine',
1515                                                                          name='$nom_machine',
1516                                                                          date='$timestamp',
1517                                                                          type='udpcast_recepteur',
1518                                                                          num_op='$num_op',
1519                                                                          infos='compr=$compr|disk=$disk|port=$port|enableDiskmodule=$enableDiskmodule|diskmodule=$diskmodule|netmodule=$netmodule|auto_reboot=$auto_reboot|udpcparam=$udpcparam}$ajout_kernel}';";
1520                                  $insert=mysql_query($sql);
1521                                  if(!$insert) {
1522                                      echo "<span style='color:red;'>ECHEC de l'enregistrement dans 'se3_tftp_action'</span><br />\n";
1523                                      $temoin_erreur="y";
1524                                  }
1525      
1526                                  if($temoin_erreur=="n") {
1527                                      echo "<span style='color:green;'>OK</span>\n";
1528                                      // Application de l'action choisie:
1529                                      echo " <span id='wake_shutdown_or_reboot_$i'></span>";
1530      
1531                                      echo "<script type='text/javascript'>
1532                                          // <![CDATA[
1533                                          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'});
1534                                          //]]>
1535                                      </script>\n";
1536      
1537                                      echo "<br />\n";
1538                                  }
1539                              }
1540                          }
1541                      }
1542                  }
1543  
1544                  // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
1545                  // POUVOIR TAGUER DANS LA TABLE se3_dhcp LES MACHINES QUI PEUVENT BOOTER EN PXE
1546                  // Ajouter un champ?
1547                  // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
1548  
1549                  // On n'affiche le fichier que pour le dernier (à titre d'info):
1550                  if(isset($corrige_mac)) {
1551                      $fich=fopen("/tftpboot/pxelinux.cfg/01-$corrige_mac","r");
1552                      if($fich) {
1553                          echo "<p>Pour information, voici le contenu du fichier généré:<br />\n";
1554                          echo "<pre style='border:1px solid black; color:green;'>";
1555                          while(!feof($fich)) {
1556                              $ligne=fgets($fich,4096);
1557                              echo htmlentities($ligne);
1558                          }
1559                          echo "</pre>\n";
1560                          fclose($fich);
1561                      }
1562                      else {
1563                          echo "<p style='color:red;'>Il n'a pas été possible d'ouvrir le fichier /tftpboot/pxelinux.cfg/01-$corrige_mac</p>\n";
1564                      }
1565                  }
1566              }
1567          }
1568          echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour au choix du/des parc(s)</a>.</p>\n";
1569      }
1570  }
1571  else {
1572      print (gettext("Vous n'avez pas les droits nécessaires pour ouvrir cette page..."));
1573  }
1574  
1575  // Footer
1576  include ("pdp.inc.php");
1577  ?>


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