[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
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 : 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> </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 :</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 : 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égé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é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 : "; 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 :</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ées</em>)<br />"; 736 echo "Pour cloner Seven (<em>64 ou non</em>) et une partition Linux derriè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érieure à 20140409. 738 Version à 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ées d'un tiret bas _</em>).<br />Avec le choix ntfsclone+udpcast, les partitions ntfs sont clonées avec ntfsclone+udpcast et les autres partitions sont cloné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 :</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 :</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-<MAC>\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 : </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 être mis en place pour permettre un accès SSH aux postes cloné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 :</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 :</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 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |