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