[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <script type='text/javascript'> 2 function check_fdisk() 3 { 4 var i = 0; 5 while(document.getElementById('fdisk' + i)) 6 { 7 if(document.getElementById('fdisk' + i).checked) 8 return true; 9 i++; 10 } 11 window.alert("Il faut choisir le partitionnement souhaité !" ); 12 return false; 13 } 14 </script> 15 16 <?php 17 18 require ("config.inc.php"); 19 20 /** 21 22 * Fonctions tftp 23 * @Version $Id: tftp.inc.php 8531 2015-03-14 00:22:06Z keyser $ 24 25 * @Projet LCS / SambaEdu 26 27 * @auteurs keyser 28 29 30 * @note Ce fichier de fonction doit etre appele par un include 31 32 */ 33 /** 34 35 * @Repertoire: tftp 36 * file: tftp.inc.php 37 38 */ 39 40 41 /** 42 43 * Retourne la liste des parc dans un tableau 44 45 * @Parametres 46 * @Return 47 */ 48 49 function choix_parc () { 50 echo "<p>Choisissez un ou des parcs:</p>\n"; 51 52 $list_parcs=search_machines("objectclass=groupOfNames","parcs"); 53 if ( count($list_parcs)==0) { 54 echo "<br><br>"; 55 echo gettext("Il n'existe aucun parc. Vous devez d'abord créer un parc"); 56 include ("pdp.inc.php"); 57 exit; 58 } 59 sort($list_parcs); 60 61 echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n"; 62 echo "<input type=\"hidden\" name=\"os\" value=\"$os\" />\n"; 63 64 // Affichage des parcs sur 3/4 colonnes 65 $nb_parcs_par_colonne=round(count($list_parcs)/3); 66 echo "<table border='0'>\n"; 67 echo "<tr valign='top'>\n"; 68 echo "<td> </td>\n"; 69 echo "<td align='left'>\n"; 70 for ($loop=0; $loop < count($list_parcs); $loop++) { 71 if(($loop>0)&&(round($loop/$nb_parcs_par_colonne)==$loop/$nb_parcs_par_colonne)){ 72 echo "</td>\n"; 73 echo "<td align='left'>\n"; 74 } 75 76 echo "<label for='parc_$loop'><input type='checkbox' id='parc_$loop' name='parc[]' value=\"".$list_parcs[$loop]["cn"]."\" />".$list_parcs[$loop]["cn"]."</label>\n"; 77 echo "<br />\n"; 78 } 79 80 echo "</td>\n"; 81 echo "</tr>\n"; 82 echo "</table>\n"; 83 84 echo "<p align='center'><input type=\"submit\" name=\"submit\" value=\"Valider\" /></p>\n"; 85 86 echo "</form>\n"; 87 //return $parc; 88 //echo "<p><a href='index.php'>Retour à l'index</a>.</p>\n"; 89 } 90 91 92 93 /** 94 95 * Retourne la liste des machines du ou des parcs dans un tableau 96 97 * @Parametres $parc 98 * @Return 99 */ 100 101 function params_action ($parc) 102 { 103 echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n"; 104 echo "<input type=\"hidden\" name=\"parametrage_action\" value=\"1\" />\n"; 105 $max_eff_parc=0; 106 for($i=0;$i<count($parc);$i++){ 107 108 echo "<h2>Parc $parc[$i]</h2>\n"; 109 echo "<input type=\"hidden\" name=\"parc[]\" value=\"$parc[$i]\" />\n"; 110 echo "<input type=\"hidden\" name=\"os\" value=\"$os\" />\n"; 111 112 $mp=gof_members($parc[$i],"parcs",1); 113 $nombre_machine=count($mp); 114 sort($mp); 115 116 //echo "<table border='1'>\n"; 117 echo "<table class='crob'>\n"; 118 echo "<tr>\n"; 119 120 echo "<th>Nom</th>\n"; 121 echo "<th>Etat</th>\n"; 122 echo "<th>Session</th>\n"; 123 echo "<th>Config DHCP</th>\n"; 124 //echo "<th>Sauvegarde</th>\n"; 125 echo "<th>Install ".$os." Linux<br />\n"; 126 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"; 127 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"; 128 echo "</th>\n"; 129 echo "<th>Actions programmées</th>\n"; 130 echo "</tr>\n"; 131 132 for ($loop=0; $loop < count($mp); $loop++) { 133 $mpenc=urlencode($mp[$loop]); 134 135 // Test si on a une imprimante ou une machine 136 $resultat=search_imprimantes("printer-name=$mpenc","printers"); 137 $suisje_printer="non"; 138 for ($loopp=0; $loopp < count($resultat); $loopp++) { 139 if ($mpenc==$resultat[$loopp]['printer-name']) { 140 $suisje_printer="yes"; 141 continue; 142 } 143 } 144 145 if($suisje_printer=="non") { 146 // Réinitialisation: 147 $id_machine=""; 148 149 echo "<tr>\n"; 150 echo "<td width='15%'>".$mp[$loop]."</td>\n"; 151 152 // Etat: allumé ou éteint 153 echo "<td width='15%'>"; 154 $mp_curr=search_machines2("(&(cn=$mpenc)(objectClass=ipHost))","computers"); 155 if ($mp_curr[0]["ipHostNumber"]) { 156 $iphost=$mp_curr[0]["ipHostNumber"]; 157 158 echo "<div id='divip$loop'>Patientez</div>\n"; 159 echo "<script type='text/javascript'> 160 // <![CDATA[ 161 new Ajax.Updater($('divip$loop'),'ajax_lib.php?ip=$iphost&mode=ping_ip',{method: 'get'}); 162 //]]> 163 </script>\n"; 164 } 165 echo "</td>\n"; 166 167 // Session: ouverte ou pas... sous quelle identité 168 echo "<td width='15%'>\n"; 169 echo "<div id='divsession$loop'>Patientez</div>\n"; 170 echo "<script type='text/javascript'> 171 // <![CDATA[ 172 new Ajax.Updater($('divsession$loop'),'ajax_lib.php?nom_machine=".$mp[$loop]."&mode=session',{method: 'get'}); 173 //]]> 174 </script>\n"; 175 echo "</td>\n"; 176 177 178 // Etat config DHCP: 179 // Par la suite il ne faudra pas prendre les IP dans l'annuaire, 180 // mais dans la config DHCP parce que ce sont ces IP qui seront attribuées lors du boot PXE 181 echo "<td width='15%'>\n"; 182 //$mp_curr=search_machines("(&(cn=$mpenc)(objectClass=ipHost))","computers"); 183 if ($mp_curr[0]["macAddress"]) { 184 $sql="SELECT * FROM se3_dhcp WHERE mac='".$mp_curr[0]["macAddress"]."';"; 185 // mp_curr[0]["macAddress"] correspond à une adresse mac recherchée dans l'annuaire LDAP. 186 // 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: 187 // source /usr/share/se3/sbin/variables_admin_ldap.sh 188 // ldapdelete -x -D $ROOTDN -w $PASSDN cn=NOM_MACHINE,ou=Computers,$BASEDN 189 // Et se reconnecter une fois sur la machine pour que le connexion.pl renseigne une nouvelle entrée cn=NOM_MACHINE 190 //echo "$sql<br />"; 191 $res=mysql_query($sql); 192 if(mysql_num_rows($res)>0) { 193 $lig=mysql_fetch_object($res); 194 $id_machine=$lig->id; 195 196 //echo $lig->ip; 197 echo "<img src=\"../elements/images/enabled.gif\" border='0' alt=\"$lig->ip\" title=\"$lig->ip\" />"; 198 } 199 else { 200 echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'adresse IP attribuée\" title=\"Pas d'adresse IP attribuée\" />"; 201 } 202 } 203 else { 204 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???\" />"; 205 } 206 echo "</td>\n"; 207 // Sélection des machines à sauvegarder: 208 echo "<td width='15%'>\n"; 209 /* 210 foreach($mp_curr[0] as $champ => $valeur) { 211 echo "\$mp_curr[0]['$champ']=$valeur<br />"; 212 } 213 */ 214 if($id_machine!=""){ 215 echo "<input type='checkbox' name='id_machine[]' id='machine_".$i."_".$loop."' value='$id_machine' />\n"; 216 } 217 else { 218 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\" />"; 219 } 220 echo "</td>\n"; 221 222 223 // Action programmée 224 echo "<td>\n"; 225 if($id_machine!=""){ 226 $sql="SELECT * FROM se3_tftp_action WHERE id='".$id_machine."';"; 227 $res=mysql_query($sql); 228 if(mysql_num_rows($res)>0) { 229 $lig=mysql_fetch_object($res); 230 echo "<a href='visu_action.php?id_machine=$id_machine' target='_blank'>$lig->type programmé(e)</a>"; 231 } 232 else { 233 echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'action programmée\" title=\"Pas d'action programmée\" />"; 234 } 235 } 236 echo "</td>\n"; 237 238 echo "</tr>\n"; 239 } 240 } 241 echo "</table>\n"; 242 if($max_eff_parc<$loop) {$max_eff_parc=$loop;} 243 } 244 245 echo "<script type='text/javascript'> 246 function check_machine(num_parc,mode) { 247 for(i=0;i<$max_eff_parc;i++){ 248 if(document.getElementById('machine_'+num_parc+'_'+i)){ 249 if(mode=='check'){ 250 document.getElementById('machine_'+num_parc+'_'+i).checked=true; 251 } 252 else{ 253 document.getElementById('machine_'+num_parc+'_'+i).checked=false; 254 } 255 } 256 } 257 } 258 </script>\n"; 259 260 echo "<p align='center'><input type=\"submit\" name=\"submit\" value=\"Valider\" /></p>\n"; 261 echo "</form>\n"; 262 263 } 264 265 /** 266 267 * effectue le parametrage de l'installation 268 269 * @Parametres $parc,$os,$id_machine,$se3ip,$ntpserv,$xppass 270 * @Return 271 */ 272 273 function choix_params_dist ($parc,$os,$id_machine,$se3ip,$ntpserv,$xppass) { 274 275 echo "<h2>Paramétrage du lancement de l'installation</h2>\n"; 276 277 $nombre_machines=count($id_machine); 278 if($nombre_machines==0){ 279 echo "<p>ERREUR: Il faut choisir au moins une machine.</p>\n"; 280 281 echo "<p><a href='#' onclick='history.go(-1);'>Retour au choix des machines sur lesquelles installer Debian.</a>.</p>\n"; 282 283 echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour au choix du/des parc(s)</a>.</p>\n"; 284 include ("pdp.inc.php"); 285 exit(); 286 } 287 288 echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\" onsubmit=\"return check_fdisk();\">\n"; 289 echo "<input type=\"hidden\" name=\"parametrage_action\" value=\"1\" />\n"; 290 echo "<input type=\"hidden\" name=\"os\" value=\"$os\" />\n"; 291 //echo "<input type=\"hidden\" name=\"parc\" value=\"dummy\" />\n"; 292 // Liste des parcs: 293 for($i=0;$i<count($parc);$i++){ 294 echo "<input type=\"hidden\" name=\"parc[]\" value=\"$parc[$i]\" />\n"; 295 //echo "parcs : $parc[$i]"; 296 } 297 298 // Liste des machines sur lesquelles lancer l'install: 299 $chaine=""; 300 for($i=0;$i<count($id_machine);$i++){ 301 if($i>0) {$chaine.=", ";} 302 $sql="SELECT * FROM se3_dhcp WHERE id='".$id_machine[$i]."';"; 303 //echo "$sql<br />"; 304 $res=mysql_query($sql); 305 if(mysql_num_rows($res)>0) { 306 $lig=mysql_fetch_object($res); 307 $chaine.=$lig->name; 308 echo "<input type=\"hidden\" name=\"id_machine[]\" value=\"$id_machine[$i]\" />\n"; 309 } 310 } 311 if(count($id_machine)>1){$s="s";}else{$s="";} 312 echo "<p>Machine$s concernée$s: $chaine</p>\n"; 313 314 315 // Date pour le nom de l'image à générer: 316 $aujourdhui = getdate(); 317 $mois_se3 = sprintf("%02d",$aujourdhui['mon']); 318 $jour_se3 = sprintf("%02d",$aujourdhui['mday']); 319 $annee_se3 = $aujourdhui['year']; 320 $heure_se3 = sprintf("%02d",$aujourdhui['hours']); 321 $minute_se3 = sprintf("%02d",$aujourdhui['minutes']); 322 $seconde_se3 = sprintf("%02d",$aujourdhui['seconds']); 323 324 $date_se3=$annee_se3.$mois_se3.$jour_se3; 325 326 // ip du serveur de temps (on suppose que la passerelle est aussi le serveur de temps) et mdp adminse3 327 328 329 //$query = "SELECT * from params where name REGEXP 'dhcp_ntp' OR name REGEXP'xppass' "; 330 //$result = mysql_query($query); 331 //while($resultat = mysql_fetch_assoc($result)) 332 //{ 333 // $infos[$resultat['name']] = $resultat['value']; 334 //} 335 //$ntp_server = $infos['dhcp_ntp']; 336 // $xppass = $infos['xppass']; 337 338 339 $content .= "<p>Choisissez les paramètres pour le lancement de l'installation: <br />\n 340 341 <ul> 342 <li> 343 <label for='mirroir'>Choix du mirroir Debian</label> : <input type='text' name='mirroir' id='mirroir' value='$se3ip/debian' disabled='disabled'/><div style='font-size:small;'>On utilisera le se3 et son service apt-cacher <br /></div> 344 </li> 345 <li>Choix de la distribution :<br />"; 346 347 // <label for='distro'>Distribution</label> : <input type='text' name='distro' id='distro' value='Debian' disabled='disabled' /><br /> 348 $content .= " <label for='version'>Version</label> : <input type='text' name='version' id='version' value='$os' disabled='disabled' /><br />"; 349 // <label for='sections'>Sections</label> : <input type='text' name='sections' id='sections' value='main, contrib, non-free' disabled='disabled' /><br /> 350 $content .= " </li> 351 <li>Architecture :<br /> 352 <ol> 353 <li><input type='radio' name='arch' id='arch32' value='i386' check='checked' /><label for='arch32'>32 bits</label></li> 354 <li><input type='radio' name='arch' id='arch64' value='amd64' /><label for='arch64'>64 bits</label></li> 355 <li><input type='radio' name='arch' id='arm' value='armhf' check='checked' /><label for='armhf'>arm 32 bits</label></li> 356 <li><input type='radio' name='arch' id='arm64' value='arm64' /><label for='arm64'>arm 64 bits</label></li> 357 </ol> 358 </li> 359 <li>Environnement de bureau :<br /> 360 <ol> 361 <li><input type='radio' name='envbur' id='Gnome' value='gnome' check='checked' /><label for='Gnome'>Gnome</label></li> 362 <!--<li><input type='radio' name='envbur' id='KDE' value='kde' /><label for='KDE'>KDE</label></li> --> 363 <li><input type='radio' name='envbur' id='XFCE' value='xfce' /><label for='XFCE'>XFCE</label></li> 364 <li><input type='radio' name='envbur' id='LXE' value='lxde' /><label for='LXDE'>LXDE</label></li> 365 <!--<li><input type='radio' name='envbur' id='StudioBox' value='studiobox' /><label for='StudioBox'>StudioBox</label></li>--> 366 </ol> 367 </li> 368 <li> 369 <label for='ip_slis'>Adresse ip du serveur de temps</label> : <input type='text' name='ntp_server' id='ip_slis' value='$ntpserv' /> 370 </li> 371 <li>Partitionnement :<br /> 372 <ol> 373 <li><input type='radio' name='fdisk' id='fdisk0' value='0' onclick=\"alert('Attention, toute autre installation sera supprimée');\" /><label for='fdisk0'>Installer Debian sur le disque dur entier dans une seule partition</label></li> 374 <!--<li><input type='radio' name='fdisk' id='fdisk2' value='2' oncheck=\"alert('Attention, toute autre installation sera supprimée');\" /><label for='fdisk2'>Installer Debian sur le disque dur entier dans deux partitions (/home séparé)</label></li>--> 375 <li><input type='radio' name='fdisk' id='fdisk1' value='1' /><label for='fdisk1'>Installer Debian sur une partition libre à côté de Windows</label></li> 376 </ol> 377 </li> 378 <li> 379 <label for='root_mdp'>Mot de passe de l'utilisateur root</label> : <input type='password' name='root_mdp' id='root_mdp' value='".$xppass."' /> <small>Par défaut, le mot de passe d'adminse3 sera utilisé</small> 380 </li> 381 <li> 382 <label for='newuser_name'>Nom du nouvel utilisateur</label> : <input type='text' name='newuser_name' id='newuser_name' value='enseignant' /><small> Utilisateur local non géré par le se3)</small><br /> 383 <label for='newuser_mdp'>Mot de passe du nouvel utilisateur</label> : <input type='password' name='newuser_mdp' id='newuser_mdp' value='enseignant' /> <small>Par défaut ce sera enseignant</small> 384 </li> 385 <!--<li> 386 <label for='grub_mdp'>Mot de passe Grub</label> : <input type='password' name='grub_mdp' id='grub_mdp' value='' /> <small>(Uniquement pour installation sur partition libre)</small> 387 </li>--> 388 </ul> 389 390 <p>Pour la ou les machines sélectionnées: <br>\n 391 <table border='0'> 392 393 <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 394 <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 395 <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 396 <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 397 </table>\n 398 399 400 "; 401 $content .="<p align='center'><input type=\"submit\" name=\"validation_parametres\" value=\"Valider\" /></p>\n 402 </form>\n 403 404 405 <p><i>NOTES:</i></p>\n 406 <ul>\n 407 408 <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 409 </ul>\n 410 411 412 "; 413 return $content; 414 } 415 416 /** 417 418 * ecriture des fichiers pressed en fction des infos précendentes 419 * @Parametres $id_machine 420 * @Return 421 */ 422 423 424 function valid_dist ($id_machine) 425 { 426 echo "<h2>Validation des paramètres du lancement de l'installation</h2>\n"; 427 428 //debug_var(); 429 //while read A;do B=$(echo "$A"|cut -d"'" -f2);echo "\$$B=isset($A) ? $A : 'on';";done < liste_champs.txt 430 //while read A;do B=$(echo "$A"|cut -d"'" -f2);echo "$B=\$$B";done < liste_champs.txt 431 432 //echo "$_POST[arch]"; 433 434 //========================= 435 // Extraction de paramètres nécessaires par la suite 436 $query = "SELECT * from params where name='xppass' OR name='se3_domain' OR name='se3ip'"; 437 $result = mysql_query($query); 438 while($resultat = mysql_fetch_assoc($result)) 439 { 440 $infos[$resultat['name']] = $resultat['value']; 441 } 442 $xppass = $infos['xppass']; 443 $domaine_local = $infos['se3_domain']; 444 $se3ip = $infos['se3ip']; 445 //========================= 446 447 //========================= 448 // Mirroir 449 $mirroir=isset($_POST['mirroir']) ? explode('/',$_POST['mirroir']) : explode('/','ftp.fr.debian.org/debian'); 450 $mirror['hostname'] = $mirroir[0]; 451 //$mirror['directory'] = $mirroir[1]; 452 $mirror['directory'] = "/depot/debian"; 453 //========================= 454 455 //========================= 456 // Architecture 457 $arch = isset($_POST['arch']) ? $_POST['arch'] : 'i386'; 458 //========================= 459 460 //========================= 461 // environnement de bureau 462 $envbur = isset($_POST['envbur']) ? $_POST['envbur'] : 'xfce'; 463 //========================= 464 465 //========================= 466 // Partitionnement 467 $fdisk=isset($_POST['fdisk']) ? $_POST['fdisk'] : 1; // Au cas où l'admin a désactivé Javascript, on installe dans une partition libre ... 468 //========================= 469 470 //========================= 471 // Serveur de temps NTP 472 473 $ntpserv = isset($_POST['ntpserv']) ? $_POST['ntpserv'] : 'ntp.ac-creteil.fr'; 474 475 //$sql="SELECT value FROM params WHERE name='dhcp_ntp';"; 476 //$res=mysql_query($sql); 477 //if(mysql_num_rows($res)>0) { 478 // $lig=mysql_fetch_object($res); 479 // if($lig->value!="") {$dhcp_ntp=$lig->value;} 480 // // Il faudrait contrôler que l'adresse est valide, non? 481 //} 482 //========================= 483 484 //========================= 485 // Mot de passe root 486 487 $root_pass=isset($_POST['root_mdp']) ? crypt($_POST['root_mdp']) : crypt($xppass); 488 //========================= 489 490 491 //========================= 492 // Nouvel utilisateur 493 $newuser_name=isset($_POST['newuser_name']) ? $_POST['newuser_name'] : "enseignant"; 494 $newuser_pass=isset($_POST['newuser_mdp']) ? crypt($_POST['newuser_mdp']) : crypt(enseignant); 495 //========================= 496 497 //========================= 498 // Mot de passe grub 499 $grub_pass=isset($_POST['grub_mdp']) ? crypt($_POST['grub_mdp']) : crypt($xppass); 500 //========================= 501 502 503 //========================= 504 // Serveur TFTP 505 $dhcp_tftp_server=$_SERVER["SERVER_ADDR"]; 506 507 508 //========================= 509 // rECUP VARIABLES WAKE ET SHUTDOWN 510 $wake=$_POST["wake"]; 511 512 $shutdown_reboot=$_POST["shutdown_reboot"]; 513 514 515 516 $sql="SELECT value FROM params WHERE name='dhcp_tftp_server';"; 517 $res=mysql_query($sql); 518 if(mysql_num_rows($res)>0) { 519 $lig=mysql_fetch_object($res); 520 if($lig->value!="") {$dhcp_tftp_server=$lig->value;} 521 // Il faudrait contrôler que l'adresse est valide, non? 522 } 523 //========================= 524 525 echo "<p>"; 526 527 for($i=0;$i<count($id_machine);$i++) { 528 $sql="SELECT * FROM se3_dhcp WHERE id='".$id_machine[$i]."';"; 529 $res=mysql_query($sql); 530 if(mysql_num_rows($res)==0) { 531 echo "<span style='color:red;'>La machine d'identifiant $id_machine[$i] n'existe pas dans 'se3_dhcp'.</span><br />\n"; 532 } 533 else { 534 535 $lig=mysql_fetch_object($res); 536 $nom_machine=$lig->name; 537 538 // On écrit le fichier preseed dans le bon dossier 539 $dossier_preseed="/var/www/se3/tmp/"; 540 //$dossier_unattend_txt="/var/www/preseeds"; 541 $fu=fopen($dossier_preseed.$nom_machine."_preseed.cfg","w+"); 542 if(!$fu) { 543 echo "<p>ERREUR lors de la création de ".$dossier_preseed."/".$nom_machine."_preseed.cfg</p>\n"; 544 include ("pdp.inc.php"); 545 die(); 546 } 547 fwrite($fu,"########## 548 #### Fichier de réponses pour l'installation de Debian Wheezy 549 550 ############# 551 # langue et pays 552 d-i localechooser/shortlist select FR 553 d-i debian-installer/locale string fr_FR.UTF-8 554 d-i debian-installer/language string fr 555 d-i debian-installer/country string FR 556 557 # clavier 558 d-i console-keymaps-at/keymap select fr-latin9 559 d-i debian-installer/keymap string fr-latin9 560 d-i console-setup/modelcode string pc105 561 d-i console-setup/layoutcode string fr 562 563 564 ### 2. Configuration du réseau avec le serveur DHCP du SE3 565 ############# 566 # choix automatique de l'interface 567 d-i netcfg/choose_interface select auto 568 569 # À décommenter quand le serveur dhcp est lent et que l'installateur s'arrête pour l'attendre 570 d-i netcfg/dhcp_timeout string 60 571 572 # Si pour le réseau ou pour un autre matériel vous avez besoin d'un microprogramme 573 # ( firmware ) non libre, vous pouvez forcer l'installateur à le télécharger, 574 # en évitant la demande de confirmation. 575 d-i hw-detect/load_firmware boolean true 576 577 578 ### 3. Configuration du mirroir : utilisation du mirroir local se3 (apt-cacher-ng) 579 ############# 580 d-i mirror/country string manual 581 d-i mirror/http/hostname string $se3ip:9999 582 d-i mirror/http/directory string /debian 583 d-i mirror/http/proxy string 584 585 586 587 ### 4. Configuration du fuseau horaire : serveur de temps du Slis 588 ############# 589 # réglage de l'horloge matérielle sur UTC et du fuseau horaire 590 d-i clock-setup/utc boolean true 591 d-i time/zone string Europe/Paris 592 593 # autorisation de l'utilisation de NTP pour régler l'horloge pendant l'installation avec le serveur ntp du Slis 594 d-i clock-setup/ntp boolean true 595 d-i clock-setup/ntp-server string $ntpserv 596 597 ### 5. Partitionnement du disque dur 598 #############\n"); 599 600 if($fdisk==0) { 601 // On ecrase tout ! 602 // une root 15/20Go , une swap qq go au max et une sauvegarde pour le reste... 603 604 fwrite($fu,"d-i partman-auto/automatically_partition string regular 605 d-i partman-auto/select_disk select /dev/discs/disc0/disc 606 d-i partman-auto/method string regular 607 d-i partman-lvm/confirm boolean true 608 d-i partman-auto/purge_lvm_from_device boolean true 609 d-i partman-auto/expert_recipe_file string /hd-media/recipe 610 d-i partman-auto/expert_recipe string \ 611 cl-recette :: \ 612 10000 15000 20000 ext4 \ 613 \$primary{ } \$bootable{ } \ 614 method{ format } format{ } \ 615 use_filesystem{ } filesystem{ ext4 } \ 616 mountpoint{ / } \ 617 . \ 618 100% 200% 400% linux-swap \ 619 \$primary{ } \ 620 method{ swap } format{ } \ 621 . \ 622 15000 20000 400000 ext4 \ 623 \$primary{ } \ 624 method{ format } format{ } \ 625 use_filesystem{ } filesystem{ ext4 } \ 626 mountpoint{ /sav } \ 627 . 628 d-i partman-auto/choose_recipe select cl-recette 629 d-i partman-partitioning/confirm_write_new_label boolean true 630 d-i partman/alignment select cylinder 631 d-i partman/confirm boolean true 632 d-i partman/choose_partition select Finish partitioning and write changes to disk 633 d-i partman/confirm boolean true 634 d-i partman/confirm_nooverwrite boolean true"); 635 } else { 636 // on installe sur un espace libre pré-existant 637 fwrite($fu,"d-i partman-auto/init_automatically_partition select Assisté - utiliser le plus grand espace disponible 638 639 d-i partman-auto/choose_recipe select atomic 640 641 642 # choix du format ext4 643 d-i partman/default_filesystem string ext4 644 645 # partitionnement automatique sans demander de confirmation 646 d-i partman/confirm_write_new_label boolean true 647 d-i partman/choose_partition select finish 648 d-i partman/confirm boolean true 649 d-i partman/confirm_nooverwrite boolean true"); 650 651 652 } 653 fwrite($fu," 654 ### 6. Configuration des comptes Root et utilisateur 655 ############## Création du compte root (false => non, true => oui) 656 d-i passwd/root-login boolean true 657 658 d-i passwd/root-password-crypted password ".$root_pass." 659 660 # Création d'un compte utilisateur normal. 661 d-i passwd/user-fullname string ".$newuser_name." 662 d-i passwd/username string ".$newuser_name." 663 664 d-i passwd/user-password-crypted password ".$newuser_pass." 665 666 667 ### 7. Configuration d'Apt 668 # le fichier /etc/apt/sources.list sera reconfiguré après l'installation 669 # à l'aide d'un script de post-installation 670 ############# 671 # Vous pouvez installer des logiciels des distributions non-free et contrib. 672 d-i apt-setup/non-free boolean true 673 d-i apt-setup/contrib boolean true 674 675 # Décommentez cette ligne si vous n'utilisez pas de miroir sur le réseau. 676 #d-i apt-setup/use_mirror boolean false 677 678 # Choisissez les services de mise à jour et les miroirs à utiliser. 679 # Les valeurs ci-après sont les valeurs par défaut : 680 d-i apt-setup/services-select multiselect security 681 # d-i apt-setup/security_host string security.debian.org 682 d-i apt-setup/security_host string $se3ip:9999/security.debian.org 683 684 685 686 687 ### 8. Choix des paquets 688 #############"); 689 // 690 //Pour le moment xfce uniquement mais il faudrait proposer gnome et lxde 691 692 693 # choix du paquet gnome-desktop 694 #tasksel tasksel/first multiselect gnome-desktop 695 # installation d'un serveur ssh (administration distante de la machine) 696 #d-i pkgsel/include string openssh-server 697 if($envbur=="gnome") 698 { 699 fwrite($fu," 700 # choix du paquet gnome 701 tasksel tasksel/first multiselect desktop, print-server 702 tasksel tasksel/desktop multiselect gnome 703 # installation d'un serveur ssh (administration distante de la machine) 704 d-i pkgsel/include string openssh-server ldap-utils zip unzip tree screen vim vlc ssmtp ntp iceweasel iceweasel-l10n-fr xterm"); 705 } else 706 {if($envbur=="xfce") 707 { 708 fwrite($fu," 709 # choix du paquet xfce 710 tasksel tasksel/first multiselect desktop, print-server 711 tasksel tasksel/desktop multiselect xfce 712 # installation d'un serveur ssh (administration distante de la machine) 713 d-i pkgsel/include string openssh-server ldap-utils zip unzip tree screen vim vlc ssmtp ntp iceweasel iceweasel-l10n-fr xterm"); 714 } else 715 { if($envbur=="lxde") 716 {fwrite($fu," 717 # choix du paquet lxde 718 tasksel tasksel/first multiselect desktop, print-server 719 tasksel tasksel/desktop multiselect lxde 720 # installation d'un serveur ssh (administration distante de la machine) 721 d-i pkgsel/include string openssh-server ldap-utils zip unzip tree screen vim vlc ssmtp ntp gdm3 iceweasel iceweasel-l10n-fr xterm "); 722 } else 723 { if($envbur=="kde") 724 {fwrite($fu," 725 # choix du paquet kde problème de kdm à résoudre 726 #tasksel tasksel/first multiselect standard, print-server 727 tasksel tasksel/desktop multiselect kde 728 # installation d'un serveur ssh (administration distante de la machine) 729 d-i pkgsel/include string openssh-server ldap-utils zip unzip tree screen vim vlc ssmtp ntp gdm3 iceweasel iceweasel-l10n-fr xterm"); 730 } 731 } 732 } 733 } 734 735 fwrite($fu," 736 # Sélection du pack de langues 737 d-i pkgsel/language-packs multiselect fr, en, es, de 738 # Gestion des mises à jour avec 3 possibilités prédéfinies : 739 # - \"none\" => pas de mise à jour automatique 740 # - \"unattended-upgrades\" => installe les mises à jour de sécurité automatiquement 741 # - \"landscape\" => manage system with Landscape 742 d-i pkgsel/update-policy select unattended-upgrades 743 744 # Ne pas envoyer de rapport d'installation 745 popularity-contest popularity-contest/participate boolean false 746 747 748 ### 9. Installation du programme d'amorçage GRUB 749 ############# 750 # Installation automatique sur le MBR si aucun autre système n'est détecté 751 d-i grub-installer/only_debian boolean true 752 753 # S'il reconnaît un système d'exploitation, vous en serez informé 754 # et l'installateur configurera Grub pour pouvoir démarrer aussi bien ce système que Debian 755 d-i grub-installer/with_other_os boolean true 756 757 # Mot de passe optionnel pour Grub, en clair... 758 #d-i grub-installer/password password r00tme 759 #d-i grub-installer/password-again password r00tme 760 # ... ou chiffré sans confirmation avec MD5 hash, voir grub-md5-crypt(8) 761 # pour le chiffrage, utiliser la commande suivante dans une console 762 # printf \"uSerpass\" | mkpasswd -s -m md5\n"); 763 764 // A faire !!! 765 if($fdisk==10) 766 fwrite($fu,"#"); 767 fwrite($fu,"d-i grub-installer/password-crypted password ".$grub_pass."\n"); 768 fwrite($fu," 769 ### 10. Configuration de X (gestion de l'affichage) 770 ############# 771 # Détection automatique du moniteur. 772 xserver-xorg xserver-xorg/autodetect_monitor boolean true 773 xserver-xorg xserver-xorg/config/monitor/selection-method \ 774 select medium 775 xserver-xorg xserver-xorg/config/monitor/mode-list \ 776 select 1024x768 @ 60 Hz 777 778 779 ### 11. Exécution d'une commande avant la fin de l'installation 780 # Cette commande est exécutée juste avant que l'installation ne se termine, 781 # quand le répertoire /target est encore utilisable. 782 ############# 783 # À décommenter pour que le script post_installation.sh soit lancé au 1er redémarrage de la machine 784 # il faudra rajouter à la fin du script la suppression de ce fichier? 785 d-i preseed/late_command string wget http://$se3ip/install/post-install_debian_wheezy.sh; \ 786 wget http://$se3ip/install/params.sh; \ 787 wget http://$se3ip/install/mesapplis-debian.txt; \ 788 wget http://$se3ip/install/mesapplis-debian-$envbur.txt; \ 789 wget http://$se3ip/install/bashrc; \ 790 wget http://$se3ip/install/inittab; \ 791 chmod +x ./post-install_debian_wheezy.sh ./params.sh; \ 792 mkdir /target/root/bin; \ 793 cp params.sh post-install_debian_wheezy.sh mesapplis-debian.txt /target/root/bin/; \ 794 cp mesapplis-debian-$envbur.txt /target/root/bin/mesapplis-debian-eb.txt; \ 795 cp bashrc /target/root/.bashrc; \ 796 cp /target/etc/inittab /target/root/bin/inittab.orig; \ 797 cp inittab /target/etc/; \ 798 in-target update-rc.d gdm3 remove; \ 799 in-target update-rc.d lightdm remove; \ 800 cp /target/etc/inittab /target/root/bin/ 801 802 803 ### 12. Fin de l'installation 804 d-i finish-install/reboot_in_progress note\n"); 805 806 fclose($fu); 807 #Copie du fichier dans /var/www/se3/tmp/ accessible depuis l'url http://se3ip:909/tmp/ 808 //shell_exec("/bin/cp ".$dossier_unattend_txt.$nom_machine."_preseed.cfg /var/www/se3/tmp/"); 809 } 810 } 811 812 echo "<p>Génération des fichiers dans /tftpboot/pxelinux.cfg/ pour l'installation automatique<br />\n"; 813 814 // BOUCLE SUR LA LISTE DES $id_machine[$i] 815 816 // Numéro de l'opération de remontée de rapport: 817 $num_op=get_free_se3_action_tftp_num_op(); 818 for($i=0;$i<count($id_machine);$i++) { 819 $sql="SELECT * FROM se3_dhcp WHERE id='".$id_machine[$i]."';"; 820 $res=mysql_query($sql); 821 if(mysql_num_rows($res)==0) { 822 echo "<span style='color:red;'>La machine d'identifiant $id_machine[$i] n'existe pas dans 'se3_dhcp'.</span><br />\n"; 823 } 824 else { 825 $temoin_erreur="n"; 826 827 $lig=mysql_fetch_object($res); 828 $mac_machine=$lig->mac; 829 $nom_machine=$lig->name; 830 $ip_machine=$lig->ip; 831 //Ajouter ici le domaine local et l'url du preseed à passer à pxe_gen_cfg_debian.sh 832 // domaine fait au début du script 833 $url_du_preseed="http://".$se3ip.":909/tmp/".$nom_machine."_preseed.cfg"; 834 835 echo "Génération pour $nom_machine : "; 836 837 $corrige_mac=strtolower(strtr($mac_machine,":","-")); 838 839 $chemin="/usr/share/se3/scripts"; 840 $resultat=exec("$chemin/pxe_gen_cfg.sh 'install_linux' '$corrige_mac' '$ip_machine' '$nom_machine' '$url_du_preseed' '$arch'", $retour); 841 842 if(count($retour)>0){ 843 echo "<span style='color:red;'>ECHEC de la génération du fichier</span><br />\n"; 844 for($j=0;$j<count($retour);$j++){ 845 echo "$retour[$j]<br />\n"; 846 } 847 $temoin_erreur="y"; 848 } 849 else { 850 $sql="DELETE FROM se3_tftp_action WHERE id='$id_machine[$i]';"; 851 $suppr=mysql_query($sql); 852 853 $timestamp=time(); 854 $sql="INSERT INTO se3_tftp_action SET id='$id_machine[$i]', 855 mac='$mac_machine', 856 name='$nom_machine', 857 date='$timestamp', 858 type='auto_linux', 859 num_op='$num_op', 860 infos='';"; 861 $insert=mysql_query($sql); 862 if(!$insert) { 863 echo "<span style='color:red;'>ECHEC de l'enregistrement dans 'se3_tftp_action'</span><br />\n"; 864 $temoin_erreur="y"; 865 } 866 867 if($temoin_erreur!="y") { 868 echo "<span style='color:green;'>OK</span>\n"; 869 echo " <span id='wake_shutdown_or_reboot_$i'></span>"; 870 871 echo "<script type='text/javascript'> 872 // <![CDATA[ 873 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'}); 874 //]]> 875 </script>\n"; 876 877 878 echo "<br />\n"; 879 } 880 } 881 } 882 } 883 884 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 885 // POUVOIR TAGUER DANS LA TABLE se3_dhcp LES MACHINES QUI PEUVENT BOOTER EN PXE 886 // Ajouter un champ? 887 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 888 889 890 // On n'affiche le fichier que pour le dernier (à titre d'info): 891 if(isset($corrige_mac)) { 892 $fich=fopen("/tftpboot/pxelinux.cfg/01-$corrige_mac","r"); 893 if($fich) { 894 echo "<p>Pour information, voici le contenu du fichier généré:<br />\n"; 895 echo "<pre style='border:1px solid black; color:green;'>"; 896 while(!feof($fich)) { 897 $ligne=fgets($fich,4096); 898 echo htmlentities($ligne); 899 } 900 echo "</pre>\n"; 901 fclose($fich); 902 } 903 else { 904 echo "<p style='color:red;'>Il n'a pas été possible d'ouvrir le fichier /tftpboot/pxelinux.cfg/01-$corrige_mac</p>\n"; 905 } 906 } 907 908 } 909 910 ?>
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 |