[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 /* $Id: action_rest_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_une_restauration"; 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 $pref_distrib_svgrest=crob_getParam('pref_distrib_svgrest'); 42 if(($pref_distrib_svgrest=='slitaz')||($pref_distrib_svgrest=='sysresccd')) {$valeur_par_defaut=$pref_distrib_svgrest;} 43 else {$valeur_par_defaut="slitaz";} 44 $distrib=isset($_POST['distrib']) ? $_POST['distrib'] : $valeur_par_defaut; 45 46 $sysresccd_kernel=isset($_POST['sysresccd_kernel']) ? $_POST['sysresccd_kernel'] : "rescue32"; 47 48 // Création de la table dès que possible: 49 creation_tftp_tables(); 50 51 // Paramètres SliTaz: 52 $nom_image=isset($_POST['nom_image']) ? $_POST['nom_image'] : (isset($_GET['nom_image']) ? $_GET['nom_image'] : NULL); 53 $src_part=isset($_POST['src_part']) ? $_POST['src_part'] : (isset($_GET['src_part']) ? $_GET['src_part'] : NULL); 54 $dest_part=isset($_POST['dest_part']) ? $_POST['dest_part'] : (isset($_GET['dest_part']) ? $_GET['dest_part'] : NULL); 55 $auto_reboot=isset($_POST['auto_reboot']) ? $_POST['auto_reboot'] : (isset($_GET['auto_reboot']) ? $_GET['auto_reboot'] : NULL); 56 $delais_reboot=isset($_POST['delais_reboot']) ? $_POST['delais_reboot'] : (isset($_GET['delais_reboot']) ? $_GET['delais_reboot'] : NULL); 57 58 // Paramètres concernant l'action immédiate sur les machines choisies: 59 $wake=isset($_POST['wake']) ? $_POST['wake'] : (isset($_GET['wake']) ? $_GET['wake'] : "n"); 60 $shutdown_reboot=isset($_POST['shutdown_reboot']) ? $_POST['shutdown_reboot'] : (isset($_GET['shutdown_reboot']) ? $_GET['shutdown_reboot'] : NULL); 61 62 $type_src_part=isset($_POST['type_src_part']) ? $_POST['type_src_part'] : "partition"; 63 $src_srv=isset($_POST['src_srv']) ? $_POST['src_srv'] : ""; 64 $src_partage=isset($_POST['src_partage']) ? $_POST['src_partage'] : ""; 65 $src_sous_dossier=isset($_POST['src_sous_dossier']) ? $_POST['src_sous_dossier'] : ""; 66 $src_compte=isset($_POST['src_compte']) ? $_POST['src_compte'] : ""; 67 $src_mdp=isset($_POST['src_mdp']) ? $_POST['src_mdp'] : ""; 68 69 $type_svg=isset($_POST['type_svg']) ? $_POST['type_svg'] : "partimage"; 70 71 echo "<h1>".gettext("Action restauration TFTP")."</h1>\n"; 72 73 $restriction_parcs="n"; 74 if(is_admin("system_is_admin",$login)!="Y") { 75 $restriction_parcs="y"; 76 $tab_delegated_parcs=list_delegated_parcs($login); 77 if(count($tab_delegated_parcs)==0) { 78 echo "<p>Aucun parc ne vous a été délégué.</p>\n"; 79 include ("pdp.inc.php"); 80 die(); 81 } 82 } 83 84 85 $temoin_fichiers_requis="y"; 86 $chemin_tftpboot="/tftpboot"; 87 $tab_udpcast_file=array("bzImage", "rootfs.gz"); 88 for($loop=0;$loop<count($tab_udpcast_file);$loop++) { 89 if(!file_exists($chemin_tftpboot."/".$tab_udpcast_file[$loop])) { 90 echo "<span style='color:red'>".$chemin_tftpboot."/".$tab_udpcast_file[$loop]." est absent.</span><br />\n"; 91 echo "Effectuez le telechargement SliTaz en <a href='config_tftp.php'>Configurer le module TFTP</a><br />\n"; 92 $temoin_fichiers_requis="n"; 93 } 94 } 95 96 if($temoin_fichiers_requis=="n") { 97 echo "<p style='color:red'>ABANDON : Un ou des fichiers requis sont manquants.</p>\n"; 98 include ("pdp.inc.php"); 99 die(); 100 } 101 102 103 if(!isset($parc)){ 104 105 echo "<p>Choisissez un ou des parcs:</p>\n"; 106 107 $list_parcs=search_machines("objectclass=groupOfNames","parcs"); 108 if ( count($list_parcs)==0) { 109 echo "<br><br>"; 110 echo gettext("Il n'existe aucun parc. Vous devez d'abord créer un parc"); 111 include ("pdp.inc.php"); 112 exit; 113 } 114 sort($list_parcs); 115 116 echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n"; 117 118 // Affichage des parcs sur 3/4 colonnes 119 $nb_parcs_par_colonne=round(count($list_parcs)/3); 120 echo "<table border='0'>\n"; 121 echo "<tr valign='top'>\n"; 122 echo "<td> </td>\n"; 123 echo "<td align='left'>\n"; 124 for ($loop=0; $loop < count($list_parcs); $loop++) { 125 if(($loop>0)&&(round($loop/$nb_parcs_par_colonne)==$loop/$nb_parcs_par_colonne)){ 126 echo "</td>\n"; 127 echo "<td align='left'>\n"; 128 } 129 130 if(($restriction_parcs=="n")||(in_array($list_parcs[$loop]["cn"], $tab_delegated_parcs))) { 131 echo "<label for='parc_$loop'><input type='checkbox' id='parc_$loop' name='parc[]' value=\"".$list_parcs[$loop]["cn"]."\""; 132 if(count($list_parcs)==1) {echo " checked";} 133 echo " />".$list_parcs[$loop]["cn"]."</label>\n"; 134 echo "<br />\n"; 135 } 136 } 137 138 echo "</td>\n"; 139 echo "</tr>\n"; 140 echo "</table>\n"; 141 142 echo "<p align='center'><input type=\"submit\" name=\"submit\" value=\"Valider\" /></p>\n"; 143 144 echo "</form>\n"; 145 146 147 echo "<script type='text/javascript'> 148 nb_parcs=0; 149 id_parc=''; 150 for(i=0;i<$loop;i++) { 151 if(document.getElementById('parc_'+i)) { 152 nb_parcs++; 153 id_parc='parc_'+i; 154 } 155 } 156 if(nb_parcs==1) { 157 document.getElementById(id_parc).checked=true; 158 } 159 </script>\n"; 160 161 echo "<p><a href='index.php'>Retour à l'index</a>.</p>\n"; 162 } 163 else { 164 if(!isset($_POST['parametrage_action'])){ 165 166 echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n"; 167 echo "<input type=\"hidden\" name=\"parametrage_action\" value=\"1\" />\n"; 168 $max_eff_parc=0; 169 for($i=0;$i<count($parc);$i++){ 170 171 echo "<h2>Parc $parc[$i]</h2>\n"; 172 echo "<input type=\"hidden\" name=\"parc[]\" value=\"$parc[$i]\" />\n"; 173 174 $mp=gof_members($parc[$i],"parcs",1); 175 $nombre_machine=count($mp); 176 sort($mp); 177 178 //echo "<table border='1'>\n"; 179 echo "<table class='crob'>\n"; 180 echo "<tr>\n"; 181 182 echo "<th>Nom</th>\n"; 183 echo "<th>Etat</th>\n"; 184 echo "<th>Session</th>\n"; 185 echo "<th>Config DHCP</th>\n"; 186 echo "<th>Dernier Rapport</th>\n"; 187 188 //echo "<th>Restauration</th>\n"; 189 echo "<th>Restauration<br />\n"; 190 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"; 191 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"; 192 echo "</th>\n"; 193 echo "<th>Actions programmées</th>\n"; 194 echo "</tr>\n"; 195 196 for ($loop=0; $loop < count($mp); $loop++) { 197 $mpenc=urlencode($mp[$loop]); 198 199 // Test si on a une imprimante ou une machine 200 $resultat=search_imprimantes("printer-name=$mpenc","printers"); 201 $suisje_printer="non"; 202 for ($loopp=0; $loopp < count($resultat); $loopp++) { 203 if ($mpenc==$resultat[$loopp]['printer-name']) { 204 $suisje_printer="yes"; 205 continue; 206 } 207 } 208 209 if($suisje_printer=="non") { 210 // Réinitialisation: 211 $id_machine=""; 212 213 echo "<tr>\n"; 214 echo "<td width='20%'>".$mp[$loop]."</td>\n"; 215 216 // Etat: allumé ou éteint 217 echo "<td width='20%'>"; 218 $mp_curr=search_machines2("(&(cn=$mpenc)(objectClass=ipHost))","computers"); 219 if ($mp_curr[0]["ipHostNumber"]) { 220 $iphost=$mp_curr[0]["ipHostNumber"]; 221 222 echo "<div id='divip$loop'>Patientez</div>\n"; 223 echo "<script type='text/javascript'> 224 // <![CDATA[ 225 new Ajax.Updater($('divip$loop'),'ajax_lib.php?ip=$iphost&mode=ping_ip',{method: 'get'}); 226 //]]> 227 </script>\n"; 228 } 229 echo "</td>\n"; 230 231 232 // Session: ouverte ou pas... sous quelle identité 233 echo "<td width='20%'>\n"; 234 echo "<div id='divsession$loop'>Patientez</div>\n"; 235 echo "<script type='text/javascript'> 236 // <![CDATA[ 237 new Ajax.Updater($('divsession$loop'),'ajax_lib.php?nom_machine=".$mp[$loop]."&mode=session',{method: 'get'}); 238 //]]> 239 </script>\n"; 240 echo "</td>\n"; 241 242 243 // Etat config DHCP: 244 // Par la suite il ne faudra pas prendre les IP dans l'annuaire, 245 // mais dans la config DHCP parce que ce sont ces IP qui seront attribuées lors du boot PXE 246 echo "<td width='20%'>\n"; 247 //$mp_curr=search_machines("(&(cn=$mpenc)(objectClass=ipHost))","computers"); 248 if ($mp_curr[0]["macAddress"]) { 249 $sql="SELECT * FROM se3_dhcp WHERE mac='".$mp_curr[0]["macAddress"]."';"; 250 //echo "$sql<br />"; 251 $res=mysql_query($sql); 252 if(mysql_num_rows($res)>0) { 253 $lig=mysql_fetch_object($res); 254 $id_machine=$lig->id; 255 256 //echo $lig->ip; 257 echo "<img src=\"../elements/images/enabled.gif\" border='0' alt=\"$lig->ip\" title=\"$lig->ip\" />"; 258 } 259 else { 260 echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'adresse IP attribuée\" title=\"Pas d'adresse IP attribuée\" />"; 261 } 262 } 263 else { 264 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???\" />"; 265 } 266 echo "</td>\n"; 267 268 //dernier rapport 269 270 $sql="SELECT * FROM se3_tftp_rapports WHERE name='".$mp[$loop]."' ORDER BY date DESC LIMIT 1;"; 271 $res_rapport_tftp=mysql_query($sql); 272 if(mysql_num_rows($res_rapport_tftp)>0) { 273 $lig=mysql_fetch_object($res_rapport_tftp); 274 echo "<td align=\"center\">"; 275 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"; 276 $st="$lig->statut"; 277 if($st=="SUCCES") { 278 $cl="green"; 279 } else { 280 $cl="red"; 281 } 282 echo "<FONT color=$cl size=1>"."$lig->statut"."</font>"; 283 echo "</td>\n"; 284 } 285 else { 286 echo "<td align=\"center\" style='color:purple'>".gettext("Aucun rapport")."</td>\n"; 287 } 288 289 290 291 292 // Sélection des machines à sauvegarder: 293 echo "<td width='20%'>\n"; 294 /* 295 foreach($mp_curr[0] as $champ => $valeur) { 296 echo "\$mp_curr[0]['$champ']=$valeur<br />"; 297 } 298 */ 299 if($id_machine!=""){ 300 echo "<input type='checkbox' name='id_machine[]' id='machine_".$i."_".$loop."' value='$id_machine' />\n"; 301 } 302 else { 303 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\" />"; 304 } 305 echo "</td>\n"; 306 307 308 // Action programmée 309 echo "<td>\n"; 310 if($id_machine!=""){ 311 $sql="SELECT * FROM se3_tftp_action WHERE id='".$id_machine."';"; 312 $res=mysql_query($sql); 313 if(mysql_num_rows($res)>0) { 314 $lig=mysql_fetch_object($res); 315 echo "<a href='visu_action.php?id_machine=$id_machine' target='_blank'>$lig->type programmé(e)</a>"; 316 } 317 else { 318 echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'action programmée\" title=\"Pas d'action programmée\" />"; 319 } 320 } 321 echo "</td>\n"; 322 323 echo "</tr>\n"; 324 } 325 } 326 echo "</table>\n"; 327 if($max_eff_parc<$loop) {$max_eff_parc=$loop;} 328 } 329 330 echo "<script type='text/javascript'> 331 function check_machine(num_parc,mode) { 332 for(i=0;i<$max_eff_parc;i++){ 333 if(document.getElementById('machine_'+num_parc+'_'+i)){ 334 if(mode=='check'){ 335 document.getElementById('machine_'+num_parc+'_'+i).checked=true; 336 } 337 else{ 338 document.getElementById('machine_'+num_parc+'_'+i).checked=false; 339 } 340 } 341 } 342 } 343 </script>\n"; 344 345 echo "<p align='center'><input type=\"submit\" name=\"submit\" value=\"Valider\" /></p>\n"; 346 echo "</form>\n"; 347 348 349 } 350 else { 351 $validation_parametres=isset($_POST['validation_parametres']) ? $_POST['validation_parametres'] : (isset($_GET['validation_parametres']) ? $_GET['validation_parametres'] : NULL); 352 if(!isset($validation_parametres)) { 353 echo "<h2>Paramétrage de la restauration</h2>\n"; 354 355 $nombre_machines=count($id_machine); 356 if($nombre_machines==0){ 357 echo "<p>ERREUR: Il faut choisir au moins une machine.</p>\n"; 358 359 echo "<p><a href='#' onclick='history.go(-1);'>Retour au choix des machines à restaurer</a>.</p>\n"; 360 361 echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour au choix du/des parc(s)</a>.</p>\n"; 362 include ("pdp.inc.php"); 363 exit(); 364 } 365 366 echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\" name=\"form1\">\n"; 367 echo "<input type=\"hidden\" name=\"parametrage_action\" value=\"1\" />\n"; 368 // Liste des parcs: 369 for($i=0;$i<count($parc);$i++){ 370 echo "<input type=\"hidden\" name=\"parc[]\" value=\"$parc[$i]\" />\n"; 371 } 372 373 // Liste des machines sur lesquelles lancer la restauration: 374 $chaine=""; 375 for($i=0;$i<count($id_machine);$i++){ 376 if($i>0) {$chaine.=", ";} 377 $sql="SELECT * FROM se3_dhcp WHERE id='".$id_machine[$i]."';"; 378 //echo "$sql<br />"; 379 $res=mysql_query($sql); 380 if(mysql_num_rows($res)>0) { 381 $lig=mysql_fetch_object($res); 382 $chaine.=$lig->name; 383 echo "<input type=\"hidden\" name=\"id_machine[]\" value=\"$id_machine[$i]\" />\n"; 384 } 385 } 386 if(count($id_machine)>1){$s="s";}else{$s="";} 387 echo "<p>Machine$s concernée$s: $chaine</p>\n"; 388 389 390 391 $aujourdhui = getdate(); 392 $mois_se3 = sprintf("%02d",$aujourdhui['mon']); 393 $jour_se3 = sprintf("%02d",$aujourdhui['mday']); 394 $annee_se3 = $aujourdhui['year']; 395 $heure_se3 = sprintf("%02d",$aujourdhui['hours']); 396 $minute_se3 = sprintf("%02d",$aujourdhui['minutes']); 397 $seconde_se3 = sprintf("%02d",$aujourdhui['seconds']); 398 399 $date_se3=$annee_se3.$mois_se3.$jour_se3; 400 401 echo "<p>Choisissez les paramètres de restauration: <br />\n"; 402 403 $temoin_sysresccd=check_sysresccd_files(); 404 405 if($temoin_sysresccd=="y") { 406 // Il faut aussi le noyau et l'initram.igz dans /tftpboot, 407 echo "<input type='radio' name='distrib' id='distrib_slitaz' value='slitaz' onchange='affiche_sections_distrib()' "; 408 if($pref_distrib_svgrest!="sysresccd") {echo "checked ";} 409 echo "/><label for='distrib_slitaz'>Utiliser la distribution SliTaz</label><br />\n"; 410 echo "<input type='radio' name='distrib' id='distrib_sysresccd' value='sysresccd' onchange='affiche_sections_distrib()' "; 411 if($pref_distrib_svgrest=="sysresccd") {echo "checked ";} 412 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>)<br />\n"; 413 414 415 echo "<div id='div_sysresccd_kernel'>\n"; 416 echo "<table border='0'>\n"; 417 echo "<tr>\n"; 418 echo "<td valign='top'>\n"; 419 echo "Utiliser le noyau : "; 420 echo "</td>\n"; 421 echo "<td>\n"; 422 echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_auto' value='auto' checked /><label for='sysresccd_kernel_auto'>auto</label><br />\n"; 423 echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_rescuecd' value='rescue32' /><label for='sysresccd_kernel_rescuecd'>rescue32</label><br />\n"; 424 echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_altker32' value='altker32' /><label for='sysresccd_kernel_altker32'>altker32</label><br />\n"; 425 echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_rescue64' value='rescue64' /><label for='sysresccd_kernel_rescue64'>rescue64</label><br />\n"; 426 echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_altker64' value='altker64' /><label for='sysresccd_kernel_altker64'>altker64</label><br />\n"; 427 echo "</td>\n"; 428 echo "</tr>\n"; 429 echo "</table>\n"; 430 echo "</div>\n"; 431 432 } 433 else { 434 echo "<input type=\"hidden\" name=\"distrib\" value=\"slitaz\" />\n"; 435 } 436 437 echo "<table border='0'>\n"; 438 echo "<tr><td>Nom de l'image à restaurer: </td><td><input type='text' name='nom_image' value='' />\n"; 439 echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Si vous laissez vide, la sauvegarde la plus récente réussie est utilisée.')")."\"><img name=\"action_image1\" src=\"../elements/images/help-info.gif\"></u>\n"; 440 echo "</td></tr>\n"; 441 442 echo "<tr><td>Partition à restaurer: </td><td><input type='text' name='dest_part' value='auto' />\n"; 443 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 à restaurer.')")."\"><img name=\"action_image2\" src=\"../elements/images/help-info.gif\"></u>\n"; 444 echo "</td></tr>\n"; 445 446 /* 447 echo "<tr><td>Partition de stockage de l'image: </td><td><input type='text' name='src_part' value='auto' />\n"; 448 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"; 449 echo "</td></tr>\n"; 450 */ 451 452 $srcd_scripts_vers=crob_getParam('srcd_scripts_vers'); 453 if(($temoin_sysresccd=="y")&&($srcd_scripts_vers!='')&&($srcd_scripts_vers>=20111008)) { 454 echo "<tr><td><input type='radio' name='type_src_part' id='type_src_part_partition' value='partition' checked /><label for='type_src_part_partition'> Partition de stockage de l'image: </label></td><td><input type='text' name='src_part' value='auto' />\n"; 455 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"; 456 echo "</td></tr>\n"; 457 458 echo "<tr id='tr_src_part_smb'><td style='vertical-align:top'><b>Ou</b><br /><input type='radio' name='type_src_part' id='type_src_part_smb' value='smb' /><label for='type_src_part_smb'> Effectuer une restauration depuis un partage Window$/Samba :</label><br />(<i>tous les champs doivent être renseignés<br />si vous optez pour ce choix</i>)</td>\n"; 459 echo "<td>\n"; 460 echo "<br />\n"; 461 462 $svg_default_srv=crob_getParam('svg_default_srv'); 463 if($svg_default_srv=='') {$svg_default_srv=crob_getParam('se3ip');} 464 $svg_default_partage=crob_getParam('svg_default_partage'); 465 $svg_default_dossier=crob_getParam('svg_default_dossier'); 466 $svg_default_compte=crob_getParam('svg_default_compte'); 467 468 echo "<table>\n"; 469 echo "<tr>\n"; 470 echo "<td>Serveur :</td>\n"; 471 echo "<td><input type='text' name='src_srv' id='src_srv' value='".$svg_default_srv."' onchange=\"document.getElementById('type_src_part_smb').checked=true;\" /></td>\n"; 472 echo "</tr>\n"; 473 474 echo "<tr>\n"; 475 echo "<td>Partage :</td>\n"; 476 echo "<td><input type='text' name='src_partage' id='src_partage' value='$svg_default_partage' onchange=\"document.getElementById('type_src_part_smb').checked=true;\" /></td>\n"; 477 echo "</tr>\n"; 478 479 echo "<tr>\n"; 480 echo "<td style='vertical-align:top;'>Sous-dossier :</td>\n"; 481 echo "<td>\n"; 482 echo "<input type='text' name='src_sous_dossier' id='src_sous_dossier' value='$svg_default_dossier' onchange=\"document.getElementById('type_src_part_smb').checked=true;\" />\n"; 483 echo "<br />\n"; 484 echo "Si un sous-dossier <ADRESSE_MAC> du dossier proposé ici existe, la sauvegarde y sera d'abord recherchée, avant de se rabattre sur le sous-dossier proposé lui-même si un tel dossier n'existe pas.\n"; 485 echo "</td>\n"; 486 echo "</tr>\n"; 487 488 echo "<tr>\n"; 489 echo "<td>Compte :</td>\n"; 490 echo "<td><input type='text' name='src_compte' id='src_compte' value='$svg_default_compte' onchange=\"document.getElementById('type_src_part_smb').checked=true;\" /></td>\n"; 491 echo "</tr>\n"; 492 493 echo "<tr>\n"; 494 echo "<td style='vertical-align:top'>Mot de passe :</td>\n"; 495 echo "<td><input type='text' name='src_mdp' id='src_mdp' value='' onchange=\"document.getElementById('type_src_part_smb').checked=true;\" autocomplete=\"off\" /><br /><b>Attention :</b> Le mot de passe circule en clair.<br />Evitez d'utiliser un compte comme admin ou adminse3.</td>\n"; 496 echo "</tr>\n"; 497 echo "</table>\n"; 498 echo "</td></tr>\n"; 499 500 /* 501 // Le type de sauvegarde est indentifié par le script d'après le nom de l'image 502 echo "<tr><td style='vertical-align:top'>Type de sauvegarde : </td>\n"; 503 echo "<td>\n"; 504 echo "<input type='radio' name='type_svg' id='type_svg_partimage' value='partimage' checked /><label for='type_svg_partimage'> partimage</label><br />\n"; 505 echo "<input type='radio' name='type_svg' id='type_svg_ntfsclone' value='ntfsclone' /><label for='type_svg_ntfsclone'> ntfsclone</label><br />\n"; 506 echo "<input type='radio' name='type_svg' id='type_svg_fsarchiver' value='fsarchiver' /><label for='type_svg_fsarchiver'> fsarchiver</label><br />\n"; 507 echo "</td></tr>\n"; 508 */ 509 } 510 else { 511 echo "<tr><td>Partition de stockage: </td><td><input type='text' name='src_part' value='auto' />\n"; 512 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"; 513 echo "</td></tr>\n"; 514 } 515 516 517 if(($temoin_sysresccd=="y")&&(crob_getParam('srcd_scripts_vers')>='20110910')) { 518 echo "<tr id='tr_authorized_keys'>\n"; 519 echo "<td>Url authorized_keys : </td>\n"; 520 echo "<td><input type='checkbox' name='prendre_en_compte_url_authorized_keys' value='y' /> \n"; 521 echo "<input type='text' name='url_authorized_keys' value='".crob_getParam('url_authorized_keys')."' size='40' />\n"; 522 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 restauré.')")."\">\n"; 523 echo "<img name=\"action_image3\" src=\"../elements/images/help-info.gif\"></u>\n"; 524 echo "</td>\n"; 525 echo "</tr>\n"; 526 } 527 528 echo "<tr><td valign='top'>Rebooter en fin de restauration: </td>\n"; 529 echo "<td>\n"; 530 echo "<input type='radio' name='auto_reboot' value='y' checked />\n"; 531 echo "</td>\n"; 532 echo "</tr>\n"; 533 534 echo "<tr><td valign='top'>Eteindre en fin de restauration: </td>\n"; 535 echo "<td>\n"; 536 echo "<input type='radio' name='auto_reboot' value='halt' />\n"; 537 echo "</td>\n"; 538 echo "</tr>\n"; 539 540 echo "<tr><td valign='top'>Ne pas rebooter ni éteindre la machine<br />en fin de restauration: </td>\n"; 541 echo "<td>\n"; 542 echo "<input type='radio' name='auto_reboot' value='n' />\n"; 543 echo "</td>\n"; 544 echo "</tr>\n"; 545 546 echo "<tr><td valign='top'>\n"; 547 echo "Délai avant reboot/arrêt:</td>\n"; 548 echo "<td>\n"; 549 echo "<input type='text' name='delais_reboot' value='90' size='3' />\n"; 550 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 de restauration.')")."\"><img name=\"action_image4\" src=\"../elements/images/help-info.gif\"></u>\n"; 551 echo "</td>\n"; 552 echo "</tr>\n"; 553 554 echo "<tr><td valign='top'>Pour la ou les machines sélectionnées: </td>\n"; 555 echo "<td>\n"; 556 echo "<table border='0'>\n"; 557 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"; 558 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"; 559 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"; 560 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"; 561 echo "</table>\n"; 562 echo "</td></tr>\n"; 563 564 echo "</table>\n"; 565 566 echo "<input type=\"hidden\" name=\"validation_parametres\" value=\"y\" />\n"; 567 568 echo "<p id='bouton_submit' style='text-align:center; display:none;'><input type=\"button\" name=\"bouton_validation_parametres2\" value=\"Valider\" onclick=\"check_smb_et_valide_formulaire('Un ou des champs ne sont pas remplis. Etes-vous sûr de vouloir poursuivre ?');\" /></p>\n"; 569 570 echo "<noscript>"; 571 echo "<p align='center'><input type=\"submit\" name=\"bouton_validation_parametres\" value=\"Valider\" /></p>\n"; 572 echo "</noscript>"; 573 574 echo "</form>\n"; 575 576 echo "<script type='text/javascript'> 577 // Si javascript est actif, on de-cache le bouton_submit: 578 if(document.getElementById('bouton_submit')) {document.getElementById('bouton_submit').style.display='';} 579 580 function affiche_sections_distrib() { 581 if(document.getElementById('distrib_sysresccd').checked==true) { 582 distrib='sysresccd'; 583 } 584 else { 585 distrib='slitaz'; 586 } 587 //alert(distrib); 588 589 if(distrib=='slitaz') { 590 document.getElementById('div_sysresccd_kernel').style.display='none'; 591 document.getElementById('tr_authorized_keys').style.display='none'; 592 if(document.getElementById('tr_src_part_smb')) {document.getElementById('tr_src_part_smb').style.display='none';} 593 } 594 else { 595 document.getElementById('div_sysresccd_kernel').style.display='block'; 596 document.getElementById('tr_authorized_keys').style.display=''; 597 if(document.getElementById('tr_src_part_smb')) {document.getElementById('tr_src_part_smb').style.display='';} 598 } 599 } 600 601 affiche_sections_distrib(); 602 603 function check_smb_et_valide_formulaire(themessage) { 604 if(document.getElementById('type_src_part_smb')) { 605 if(document.getElementById('type_src_part_smb').checked==true) { 606 // On vérifie si les champs sont non vides 607 src_srv='' 608 src_partage='' 609 src_sous_dossier='' 610 src_compte='' 611 src_mdp='' 612 if(document.getElementById('src_srv')) {src_srv=document.getElementById('src_srv').value;} 613 if(document.getElementById('src_partage')) {src_partage=document.getElementById('src_partage').value;} 614 if(document.getElementById('src_sous_dossier')) {src_sous_dossier=document.getElementById('src_sous_dossier').value;} 615 if(document.getElementById('src_compte')) {src_compte=document.getElementById('src_compte').value;} 616 if(document.getElementById('src_mdp')) {src_mdp=document.getElementById('src_mdp').value;} 617 618 if((src_srv!='')&&(src_partage!='')&&(src_sous_dossier!='')&&(src_compte!='')&&(src_mdp!='')) { 619 document.form1.submit(); 620 } 621 else { 622 var is_confirmed = confirm(themessage); 623 if(is_confirmed){ 624 document.form1.submit(); 625 } 626 } 627 } 628 else { 629 document.form1.submit(); 630 } 631 } 632 else { 633 document.form1.submit(); 634 } 635 } 636 </script>\n"; 637 638 639 //====================================================== 640 $temoin_svg_existantes=0; 641 $chaine_tab="<p>Liste des sauvegardes existantes:</p>\n"; 642 $chaine_tab.="<table class='crob'>\n"; 643 $chaine_tab.="<tr>\n"; 644 $chaine_tab.="<th>Id</th>\n"; 645 $chaine_tab.="<th>Nom</th>\n"; 646 $chaine_tab.="<th>Partition</th>\n"; 647 $chaine_tab.="<th>Sauvegarde</th>\n"; 648 $chaine_tab.="<th>Date</th>\n"; 649 $chaine_tab.="<th>Descriptif</th>\n"; 650 $chaine_tab.="</tr>\n"; 651 for($i=0;$i<count($id_machine);$i++){ 652 $sql="SELECT * FROM se3_tftp_sauvegardes WHERE id='".$id_machine[$i]."';"; 653 //echo "$sql<br />"; 654 $res=mysql_query($sql); 655 $sql="SELECT * FROM se3_tftp_sauvegardes WHERE id='".$id_machine[$i]."' ORDER BY date DESC;"; 656 //echo "$sql<br />"; 657 $res=mysql_query($sql); 658 if(mysql_num_rows($res)>0) { 659 while($lig=mysql_fetch_object($res)) { 660 $chaine_tab.="<tr>\n"; 661 $chaine_tab.="<td>$lig->id</td>\n"; 662 $chaine_tab.="<td>$lig->name</td>\n"; 663 $chaine_tab.="<td>$lig->partition</td>\n"; 664 $chaine_tab.="<td>$lig->image</td>\n"; 665 $chaine_tab.="<td>".mysql_date_to_fr_date($lig->date)."</td>\n"; 666 $chaine_tab.="<td style='text-align:left'><pre>$lig->descriptif</pre></td>\n"; 667 $chaine_tab.="</tr>\n"; 668 669 $temoin_svg_existantes++; 670 } 671 } 672 } 673 $chaine_tab.="</table>\n"; 674 $chaine_tab.="<p><br /></p>\n"; 675 if($temoin_svg_existantes>0) { 676 echo $chaine_tab; 677 } 678 //====================================================== 679 680 echo "<p><i>NOTES:</i></p>\n"; 681 echo "<ul>\n"; 682 echo "<li>Ce choix nécessite une partition de sauvegarde sur la machine.</li>\n"; 683 echo "<li>Si le nom de l'image est laissé vide, c'est la sauvegarde la plus récente tagguée 'SUCCES' qui est utilisée.<br />C'est-à-dire qu'il doit exister un fichier NOM_SAUVEGARDE.SUCCES.txt<br />Les sauvegardes sont recherchées dans un dossier /oscar/ à la racine de la partition (<i>si le nom de l'image est laissé vide</i>).</li>\n"; 684 echo "<li>Il faudra stocker dans une table les informations sur les sauvegardes effectuées/trouvées pour pouvoir ne proposer ici que des choix valides.</li>\n"; 685 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 /> 686 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 /> 687 Une tâche cron se charge d'effectuer le 'wget' sur les infos, puis le remplissage d'une table MySQL.<br /> 688 La tâche cron est lancée toutes les 60s.</li>\n"; 689 echo "<li>Pour que la restauration 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"; 690 echo "</ul>\n"; 691 692 693 } 694 else { 695 echo "<h2>Validation des paramètres de la restauration</h2>\n"; 696 697 $opt_url_authorized_keys=""; 698 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'])=='')) { 699 $opt_url_authorized_keys="url_authorized_keys=".$_POST['url_authorized_keys']; 700 crob_setParam('url_authorized_keys',$_POST['url_authorized_keys'],'Url fichier authorized_keys pour acces ssh aux clients TFTP'); 701 } 702 703 echo "<p>Rappel des paramètres:</p>\n"; 704 705 $sauvegarde_pref=crob_setParam('pref_distrib_svgrest', $distrib, 'Distrib preferee pour les sauvegardes et restaurations'); 706 707 $temoin_sysresccd=check_sysresccd_files(); 708 709 if($temoin_sysresccd=="y") { 710 echo "<table class='crob'>\n"; 711 echo "<tr>\n"; 712 echo "<th style='text-align:left;'>Distribution linux à utiliser: </th>\n"; 713 echo "<td>\n"; 714 echo $distrib; 715 if($distrib=='sysresccd') { 716 echo " (<i>noyau $sysresccd_kernel</i>)"; 717 } 718 echo "<input type=\"hidden\" name=\"distrib\" value=\"$distrib\" />\n"; 719 echo "</td>\n"; 720 echo "</tr>\n"; 721 } 722 else { 723 echo "<input type=\"hidden\" name=\"distrib\" value=\"slitaz\" />\n"; 724 echo "<table class='crob'>\n"; 725 } 726 727 echo "<tr>\n"; 728 echo "<th style='text-align:left;'>Nom de l'image: </th>\n"; 729 echo "<td>\n"; 730 if($nom_image=="") {echo "Détecté automatiquement lors de la restauration.";} else {echo $nom_image;} 731 echo "</td>\n"; 732 echo "</tr>\n"; 733 734 echo "<tr>\n"; 735 echo "<th style='text-align:left;'>Partition à restaurer: </th>\n"; 736 echo "<td>\n"; 737 if($dest_part=="auto") {echo "Détectée automatiquement lors de la restauration.";} else {echo $dest_part;} 738 echo "</td>\n"; 739 echo "</tr>\n"; 740 741 if($type_src_part=='partition') { 742 echo "<tr>\n"; 743 echo "<th style='text-align:left;'>Partition de stockage de la sauvegarde: </th>\n"; 744 echo "<td>\n"; 745 if($src_part=="auto") {echo "Détectée automatiquement lors de la restauration.";} else {echo $src_part;} 746 echo "</td>\n"; 747 echo "</tr>\n"; 748 } 749 elseif($type_src_part=='smb') { 750 if($src_srv!='') {crob_setParam('svg_default_srv',$_POST['src_srv'],'Serveur samba par défaut de destination des sauvegardes (TFTP)');} 751 if($src_partage!='') {crob_setParam('svg_default_partage',$_POST['src_partage'],'Partage samba par défaut de destination des sauvegardes (TFTP)');} 752 if($src_sous_dossier!='') {crob_setParam('svg_default_dossier',$_POST['src_sous_dossier'],'Sous-dossier par défaut de destination des sauvegardes (TFTP)');} 753 if($src_compte!='') {crob_setParam('svg_default_compte',$_POST['src_compte'],'Compte par défaut pour le montage de la destination des sauvegardes (TFTP)');} 754 755 echo "<tr>\n"; 756 echo "<th style='text-align:left; vertical-align:top;'>Sauvegarde dans un partage Window$/Samba: </th>\n"; 757 echo "<td>\n"; 758 echo "<table>\n"; 759 echo "<tr>\n"; 760 echo "<td>Serveur :</td>\n"; 761 echo "<td>$src_srv</td>\n"; 762 echo "</tr>\n"; 763 764 echo "<tr>\n"; 765 echo "<td>Partage :</td>\n"; 766 echo "<td>$src_partage</td>\n"; 767 echo "</tr>\n"; 768 769 echo "<tr>\n"; 770 echo "<td>Sous-dossier :</td>\n"; 771 echo "<td>$src_sous_dossier</td>\n"; 772 echo "</tr>\n"; 773 774 echo "<tr>\n"; 775 echo "<td>Compte :</td>\n"; 776 echo "<td>$src_compte</td>\n"; 777 echo "</tr>\n"; 778 779 echo "<tr>\n"; 780 echo "<td>Mot de passe :</td>\n"; 781 echo "<td>XXXXXXXX</td>\n"; 782 echo "</tr>\n"; 783 echo "</table>\n"; 784 785 echo "</td>\n"; 786 echo "</tr>\n"; 787 } 788 else { 789 echo "</table>\n"; 790 echo "<p style='color:red'>ANOMALIE : Le type de la destination de sauvegarde est inconnu.</p>\n"; 791 include ("pdp.inc.php"); 792 die(); 793 } 794 795 /* 796 echo "<tr>\n"; 797 echo "<th style='text-align:left;'>Type de sauvegarde: </th>\n"; 798 echo "<td>$type_svg</td>\n"; 799 echo "</tr>\n"; 800 */ 801 802 echo "<tr>\n"; 803 echo "<th style='text-align:left;'>Rebooter en fin de restauration: </th>\n"; 804 echo "<td>\n"; 805 echo $auto_reboot; 806 echo "</td>\n"; 807 echo "</tr>\n"; 808 809 //if($auto_reboot=='y') { 810 if(($auto_reboot=='y')||($auto_reboot=='halt')) { 811 echo "<tr>\n"; 812 echo "<th style='text-align:left;'>Délai avant reboot: </th>\n"; 813 echo "<td>\n"; 814 echo "$delais_reboot s"; 815 echo "</td>\n"; 816 echo "</tr>\n"; 817 } 818 819 echo "</table>\n"; 820 821 822 echo "<p>Génération du fichier dans /tftpboot/pxelinux.cfg/ pour la restauration.<br />\n"; 823 824 // BOUCLE SUR LA LISTE DES $id_machine[$i] 825 826 // Numéro de l'opération de sauvegarde: 827 $num_op=get_free_se3_action_tftp_num_op(); 828 for($i=0;$i<count($id_machine);$i++) { 829 $sql="SELECT * FROM se3_dhcp WHERE id='".$id_machine[$i]."';"; 830 //echo "$sql<br />"; 831 $res=mysql_query($sql); 832 if(mysql_num_rows($res)==0) { 833 echo "<span style='color:red;'>La machine d'identifiant $id_machine[$i] n'existe pas dans 'se3_dhcp'.</span><br />\n"; 834 } 835 else { 836 $temoin_erreur="n"; 837 838 $lig=mysql_fetch_object($res); 839 $mac_machine=$lig->mac; 840 $nom_machine=$lig->name; 841 $ip_machine=$lig->ip; 842 843 if($restriction_parcs=="y") { 844 $temoin_erreur='y'; 845 for($loop=0; $loop<count($tab_delegated_parcs);$loop++) { 846 // La machine est-elle dans un des parcs délégués? 847 if(is_machine_in_parc($nom_machine,$tab_delegated_parcs[$loop])) {$temoin_erreur='n';break;} 848 } 849 } 850 851 if($temoin_erreur=="y") { 852 echo "<p style='color:red'>La machine $nom_machine ne vous est pas déléguée</p>\n"; 853 } 854 else { 855 echo "Génération pour $nom_machine: "; 856 857 $corrige_mac=strtolower(strtr($mac_machine,":","-")); 858 859 $chemin="/usr/share/se3/scripts"; 860 861 if($distrib=='slitaz') { 862 $ajout_kernel=""; 863 } 864 else { 865 $ajout_kernel="|kernel=$sysresccd_kernel"; 866 } 867 868 if($distrib=='slitaz') { 869 //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'restaure' '$corrige_mac' '$ip_machine' '$nom_machine' '$nom_image' '$src_part' '$dest_part' '$auto_reboot' '$delais_reboot'", $retour); 870 $resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=$src_part dest_part=$dest_part auto_reboot=$auto_reboot delais_reboot=$delais_reboot'", $retour); 871 872 $info_src_part=$src_part; 873 } 874 else { 875 //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' '$corrige_mac' '$ip_machine' '$nom_machine' '$nom_image' '$src_part' '$dest_part' '$auto_reboot' '$delais_reboot'", $retour); 876 //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=$src_part dest_part=$dest_part auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour); 877 878 if($type_src_part=='smb') { 879 //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=smb:$src_compte:$src_mdp@$src_srv:$src_partage:$src_sous_dossier dest_part=$dest_part type_svg=$type_svg auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour); 880 $resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=smb:$src_compte:$src_mdp@$src_srv:$src_partage:$src_sous_dossier dest_part=$dest_part auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour); 881 882 $info_src_part="smb:$src_compte:XXXXXXXX@$src_srv:$src_partage:$src_sous_dossier"; 883 } 884 else { 885 //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=$src_part dest_part=$dest_part type_svg=$type_svg auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour); 886 $resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=$src_part dest_part=$dest_part auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour); 887 888 $info_src_part=$src_part; 889 } 890 } 891 892 if(count($retour)>0){ 893 echo "<span style='color:red;'>ECHEC de la génération du fichier</span><br />\n"; 894 for($j=0;$j<count($retour);$j++){ 895 echo "$retour[$j]<br />\n"; 896 } 897 $temoin_erreur="y"; 898 } 899 else { 900 $sql="DELETE FROM se3_tftp_action WHERE id='$id_machine[$i]';"; 901 $suppr=mysql_query($sql); 902 903 $timestamp=time(); 904 $sql="INSERT INTO se3_tftp_action SET id='$id_machine[$i]', 905 mac='$mac_machine', 906 name='$nom_machine', 907 date='$timestamp', 908 type='restauration', 909 num_op='$num_op', 910 infos='nom_image=$nom_image|src_part=$info_src_part|dest_part=$dest_part|auto_reboot=$auto_reboot|delais_reboot=$delais_reboot}$ajout_kernel';"; 911 $insert=mysql_query($sql); 912 if(!$insert) { 913 echo "<span style='color:red;'>ECHEC de l'enregistrement dans 'se3_tftp_action'</span><br />\n"; 914 $temoin_erreur="y"; 915 } 916 917 // Génération du lanceur de récupération: 918 //$dossier="/var/se3/tmp/tftp/$id_machine[$i]"; 919 $dossier="/etc/se3/www-tools/tftp/$id_machine[$i]"; 920 if(!file_exists($dossier)) { mkdir($dossier,0700);} 921 $lanceur_recup="$dossier/lanceur_recup_rapport_action_tftp.sh"; 922 $fich=fopen($lanceur_recup,"w+"); 923 $timestamp_limit=time()+4*3600; 924 //fwrite($fich,"/usr/share/se3/scripts/recup_rapport.php '$id_machine[$i]' '$ip_machine' 'restauration' '$timestamp_limit'"); 925 if($distrib=='slitaz') { 926 $mode_restauration="restauration"; 927 } 928 else { 929 $mode_restauration="restauration_sysresccd"; 930 } 931 fwrite($fich,"sudo /usr/share/se3/scripts/recup_rapport.php '$id_machine[$i]' '$ip_machine' '$mode_restauration' '$timestamp_limit'"); 932 fclose($fich); 933 chmod($lanceur_recup,0750); 934 935 // Ménage dans les tâches précédentes 936 @exec("sudo /usr/share/se3/scripts/se3_tftp_menage_atq.sh $id_machine[$i]",$retour); 937 938 // Planification de la tâche 939 //@exec("at -f $lanceur_recup now + 1 minute 2>/dev/null",$retour); 940 @exec("at -f $lanceur_recup now + 1 minute 2>$dossier/at.txt",$retour); 941 if($retour) { 942 echo "<span style='color:red;'>ECHEC de la planification de la tâche.</span><br />\n"; 943 for($j=0;$j<count($retour);$j++){echo "$retour[$j]<br />\n";} 944 $temoin_erreur="y"; 945 } 946 947 if($temoin_erreur=="n") { 948 echo "<span style='color:green;'>OK</span>\n"; 949 // Application de l'action choisie: 950 echo " <span id='wake_shutdown_or_reboot_$i'></span>"; 951 952 echo "<script type='text/javascript'> 953 // <![CDATA[ 954 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'}); 955 //]]> 956 </script>\n"; 957 958 959 echo "<br />\n"; 960 } 961 } 962 } 963 } 964 } 965 966 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 967 // POUVOIR TAGUER DANS LA TABLE se3_dhcp LES MACHINES QUI PEUVENT BOOTER EN PXE 968 // Ajouter un champ? 969 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 970 971 972 // On n'affiche le fichier que pour le dernier (à titre d'info): 973 if(isset($corrige_mac)) { 974 $fich=fopen("/tftpboot/pxelinux.cfg/01-$corrige_mac","r"); 975 if($fich) { 976 echo "<p>Pour information, voici le contenu du fichier généré:<br />\n"; 977 echo "<pre style='color:green;'>"; 978 while(!feof($fich)) { 979 $ligne=fgets($fich,4096); 980 echo htmlentities($ligne); 981 } 982 echo "</pre>\n"; 983 fclose($fich); 984 } 985 else { 986 echo "<p style='color:red;'>Il n'a pas été possible d'ouvrir le fichier /tftpboot/pxelinux.cfg/01-$corrige_mac</p>\n"; 987 } 988 } 989 } 990 } 991 echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour au choix du/des parc(s)</a>.</p>\n"; 992 } 993 } 994 else { 995 print (gettext("Vous n'avez pas les droits nécessaires pour ouvrir cette page...")); 996 } 997 998 // Footer 999 include ("pdp.inc.php"); 1000 ?>
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 |