[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

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

   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&eacute; !" );
  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&eacute;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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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&eacute;cocher\" title=\"Tout d&eacute;cocher\" /></a>\n";
 128      echo "</th>\n";
 129      echo "<th>Actions programm&eacute;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&eacute;e\" title=\"Pas d'adresse IP attribu&eacute;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&eacute;(e)</a>";
 231                  }
 232                  else {
 233                      echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'action programm&eacute;e\" title=\"Pas d'action programm&eacute;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&eacute;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&eacute;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&eacute;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&eacute;e');\" /><label for='fdisk2'>Installer Debian sur le disque dur entier dans deux partitions (/home s&eacute;par&eacute;)</label></li>-->
 375      <li><input type='radio' name='fdisk' id='fdisk1' value='1' /><label for='fdisk1'>Installer Debian sur une partition libre à côt&eacute; 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&eacute;faut, le mot de passe d'adminse3 sera utilis&eacute;</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&eacute;r&eacute; 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&eacute;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&eacute;ration puisse être entièrement provoqu&eacute;e depuis le serveur, il faut que les postes clients soient configur&eacute;s pour booter en PXE (<i>ou au moins s'&eacute;veiller (wol) en bootant sur le r&eacute;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&egrave;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&eacute;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&eacute;n&eacute;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&eacute;n&eacute;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&eacute;n&eacute;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&eacute;n&eacute;r&eacute;:<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 &eacute;t&eacute; possible d'ouvrir le fichier /tftpboot/pxelinux.cfg/01-$corrige_mac</p>\n";
 905      }
 906  }
 907  
 908  }
 909  
 910  ?>


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