Choisissez un ou des parcs:

\n"; $list_parcs=search_machines("objectclass=groupOfNames","parcs"); if ( count($list_parcs)==0) { echo "

"; echo gettext("Il n'existe aucun parc. Vous devez d'abord créer un parc"); include ("pdp.inc.php"); exit; } sort($list_parcs); echo "
\n"; echo "\n"; // Affichage des parcs sur 3/4 colonnes $nb_parcs_par_colonne=round(count($list_parcs)/3); echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
     \n"; for ($loop=0; $loop < count($list_parcs); $loop++) { if(($loop>0)&&(round($loop/$nb_parcs_par_colonne)==$loop/$nb_parcs_par_colonne)){ echo "\n"; } echo "\n"; echo "
\n"; } echo "
\n"; echo "

\n"; echo "
\n"; //return $parc; //echo "

Retour à l'index.

\n"; } /** * Retourne la liste des machines du ou des parcs dans un tableau * @Parametres $parc * @Return */ function params_action ($parc) { echo "
\n"; echo "\n"; $max_eff_parc=0; for($i=0;$iParc $parc[$i]\n"; echo "\n"; echo "\n"; $mp=gof_members($parc[$i],"parcs",1); $nombre_machine=count($mp); sort($mp); //echo "\n"; echo "
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; //echo "\n"; echo "\n"; echo "\n"; echo "\n"; for ($loop=0; $loop < count($mp); $loop++) { $mpenc=urlencode($mp[$loop]); // Test si on a une imprimante ou une machine $resultat=search_imprimantes("printer-name=$mpenc","printers"); $suisje_printer="non"; for ($loopp=0; $loopp < count($resultat); $loopp++) { if ($mpenc==$resultat[$loopp]['printer-name']) { $suisje_printer="yes"; continue; } } if($suisje_printer=="non") { // Réinitialisation: $id_machine=""; echo "\n"; echo "\n"; // Etat: allumé ou éteint echo "\n"; // Session: ouverte ou pas... sous quelle identité echo "\n"; // Etat config DHCP: // Par la suite il ne faudra pas prendre les IP dans l'annuaire, // mais dans la config DHCP parce que ce sont ces IP qui seront attribuées lors du boot PXE echo "\n"; // Sélection des machines à sauvegarder: echo "\n"; // Action programmée echo "\n"; echo "\n"; } } echo "
NomEtatSessionConfig DHCPSauvegardeInstall ".$os." Linux
\n"; echo "\"Tout\n"; echo " / \"Tout\n"; echo "
Actions programmées
".$mp[$loop].""; $mp_curr=search_machines2("(&(cn=$mpenc)(objectClass=ipHost))","computers"); if ($mp_curr[0]["ipHostNumber"]) { $iphost=$mp_curr[0]["ipHostNumber"]; echo "
Patientez
\n"; echo "\n"; } echo "
\n"; echo "
Patientez
\n"; echo "\n"; echo "
\n"; //$mp_curr=search_machines("(&(cn=$mpenc)(objectClass=ipHost))","computers"); if ($mp_curr[0]["macAddress"]) { $sql="SELECT * FROM se3_dhcp WHERE mac='".$mp_curr[0]["macAddress"]."';"; // mp_curr[0]["macAddress"] correspond à une adresse mac recherchée dans l'annuaire LDAP. // 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: // source /usr/share/se3/sbin/variables_admin_ldap.sh // ldapdelete -x -D $ROOTDN -w $PASSDN cn=NOM_MACHINE,ou=Computers,$BASEDN // Et se reconnecter une fois sur la machine pour que le connexion.pl renseigne une nouvelle entrée cn=NOM_MACHINE //echo "$sql
"; $res=mysql_query($sql); if(mysql_num_rows($res)>0) { $lig=mysql_fetch_object($res); $id_machine=$lig->id; //echo $lig->ip; echo "\"$lig-ip\" title=\"$lig->ip\" />"; } else { echo "\"Pas"; } } else { echo "\"Pas"; } echo "
\n"; /* foreach($mp_curr[0] as $champ => $valeur) { echo "\$mp_curr[0]['$champ']=$valeur
"; } */ if($id_machine!=""){ echo "\n"; } else { echo "\"Il"; } echo "
\n"; if($id_machine!=""){ $sql="SELECT * FROM se3_tftp_action WHERE id='".$id_machine."';"; $res=mysql_query($sql); if(mysql_num_rows($res)>0) { $lig=mysql_fetch_object($res); echo "$lig->type programmé(e)"; } else { echo "\"Pas"; } } echo "
\n"; if($max_eff_parc<$loop) {$max_eff_parc=$loop;} } echo "\n"; echo "

\n"; echo "\n"; } /** * effectue le parametrage de l'installation * @Parametres $parc,$os,$id_machine,$se3ip,$ntpserv,$xppass * @Return */ function choix_params_dist ($parc,$os,$id_machine,$se3ip,$ntpserv,$xppass) { echo "

Paramétrage du lancement de l'installation

\n"; $nombre_machines=count($id_machine); if($nombre_machines==0){ echo "

ERREUR: Il faut choisir au moins une machine.

\n"; echo "

Retour au choix des machines sur lesquelles installer Debian..

\n"; echo "

Retour au choix du/des parc(s).

\n"; include ("pdp.inc.php"); exit(); } echo "
\n"; echo "\n"; echo "\n"; //echo "\n"; // Liste des parcs: for($i=0;$i\n"; //echo "parcs : $parc[$i]"; } // Liste des machines sur lesquelles lancer l'install: $chaine=""; for($i=0;$i0) {$chaine.=", ";} $sql="SELECT * FROM se3_dhcp WHERE id='".$id_machine[$i]."';"; //echo "$sql
"; $res=mysql_query($sql); if(mysql_num_rows($res)>0) { $lig=mysql_fetch_object($res); $chaine.=$lig->name; echo "\n"; } } if(count($id_machine)>1){$s="s";}else{$s="";} echo "

Machine$s concernée$s: $chaine

\n"; // Date pour le nom de l'image à générer: $aujourdhui = getdate(); $mois_se3 = sprintf("%02d",$aujourdhui['mon']); $jour_se3 = sprintf("%02d",$aujourdhui['mday']); $annee_se3 = $aujourdhui['year']; $heure_se3 = sprintf("%02d",$aujourdhui['hours']); $minute_se3 = sprintf("%02d",$aujourdhui['minutes']); $seconde_se3 = sprintf("%02d",$aujourdhui['seconds']); $date_se3=$annee_se3.$mois_se3.$jour_se3; // ip du serveur de temps (on suppose que la passerelle est aussi le serveur de temps) et mdp adminse3 //$query = "SELECT * from params where name REGEXP 'dhcp_ntp' OR name REGEXP'xppass' "; //$result = mysql_query($query); //while($resultat = mysql_fetch_assoc($result)) //{ // $infos[$resultat['name']] = $resultat['value']; //} //$ntp_server = $infos['dhcp_ntp']; // $xppass = $infos['xppass']; $content .= "

Choisissez les paramètres pour le lancement de l'installation:
\n

  • :
    On utilisera le se3 et son service apt-cacher
  • Choix de la distribution :
    "; // :
    $content .= " :
    "; // :
    $content .= "
  • Architecture :
  • Environnement de bureau :
  • :
  • Partitionnement :
  • : Par défaut, le mot de passe d'adminse3 sera utilisé
  • : Utilisateur local non géré par le se3)
    : Par défaut ce sera enseignant

Pour la ou les machines sélectionnées:
\n \n \n \n \n
\n "; $content .="

\n \n

NOTES:

\n
    \n
  • 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 (ou au moins s'éveiller (wol) en bootant sur le réseau).
    Dans le cas contraire, vous devrez passer sur les postes et presser F12 pour choisir de booter en PXE.
  • \n
\n "; return $content; } /** * ecriture des fichiers pressed en fction des infos précendentes * @Parametres $id_machine * @Return */ function valid_dist ($id_machine) { echo "

Validation des paramètres du lancement de l'installation

\n"; //debug_var(); //while read A;do B=$(echo "$A"|cut -d"'" -f2);echo "\$$B=isset($A) ? $A : 'on';";done < liste_champs.txt //while read A;do B=$(echo "$A"|cut -d"'" -f2);echo "$B=\$$B";done < liste_champs.txt //echo "$_POST[arch]"; //========================= // Extraction de paramètres nécessaires par la suite $query = "SELECT * from params where name='xppass' OR name='se3_domain' OR name='se3ip'"; $result = mysql_query($query); while($resultat = mysql_fetch_assoc($result)) { $infos[$resultat['name']] = $resultat['value']; } $xppass = $infos['xppass']; $domaine_local = $infos['se3_domain']; $se3ip = $infos['se3ip']; //========================= //========================= // Mirroir $mirroir=isset($_POST['mirroir']) ? explode('/',$_POST['mirroir']) : explode('/','ftp.fr.debian.org/debian'); $mirror['hostname'] = $mirroir[0]; //$mirror['directory'] = $mirroir[1]; $mirror['directory'] = "/depot/debian"; //========================= //========================= // Architecture $arch = isset($_POST['arch']) ? $_POST['arch'] : 'i386'; //========================= //========================= // environnement de bureau $envbur = isset($_POST['envbur']) ? $_POST['envbur'] : 'xfce'; //========================= //========================= // Partitionnement $fdisk=isset($_POST['fdisk']) ? $_POST['fdisk'] : 1; // Au cas où l'admin a désactivé Javascript, on installe dans une partition libre ... //========================= //========================= // Serveur de temps NTP $ntpserv = isset($_POST['ntpserv']) ? $_POST['ntpserv'] : 'ntp.ac-creteil.fr'; //$sql="SELECT value FROM params WHERE name='dhcp_ntp';"; //$res=mysql_query($sql); //if(mysql_num_rows($res)>0) { // $lig=mysql_fetch_object($res); // if($lig->value!="") {$dhcp_ntp=$lig->value;} // // Il faudrait contrôler que l'adresse est valide, non? //} //========================= //========================= // Mot de passe root $root_pass=isset($_POST['root_mdp']) ? crypt($_POST['root_mdp']) : crypt($xppass); //========================= //========================= // Nouvel utilisateur $newuser_name=isset($_POST['newuser_name']) ? $_POST['newuser_name'] : "enseignant"; $newuser_pass=isset($_POST['newuser_mdp']) ? crypt($_POST['newuser_mdp']) : crypt(enseignant); //========================= //========================= // Mot de passe grub $grub_pass=isset($_POST['grub_mdp']) ? crypt($_POST['grub_mdp']) : crypt($xppass); //========================= //========================= // Serveur TFTP $dhcp_tftp_server=$_SERVER["SERVER_ADDR"]; //========================= // rECUP VARIABLES WAKE ET SHUTDOWN $wake=$_POST["wake"]; $shutdown_reboot=$_POST["shutdown_reboot"]; $sql="SELECT value FROM params WHERE name='dhcp_tftp_server';"; $res=mysql_query($sql); if(mysql_num_rows($res)>0) { $lig=mysql_fetch_object($res); if($lig->value!="") {$dhcp_tftp_server=$lig->value;} // Il faudrait contrôler que l'adresse est valide, non? } //========================= echo "

"; for($i=0;$iLa machine d'identifiant $id_machine[$i] n'existe pas dans 'se3_dhcp'.
\n"; } else { $lig=mysql_fetch_object($res); $nom_machine=$lig->name; // On écrit le fichier preseed dans le bon dossier $dossier_preseed="/var/www/se3/tmp/"; //$dossier_unattend_txt="/var/www/preseeds"; $fu=fopen($dossier_preseed.$nom_machine."_preseed.cfg","w+"); if(!$fu) { echo "

ERREUR lors de la création de ".$dossier_preseed."/".$nom_machine."_preseed.cfg

\n"; include ("pdp.inc.php"); die(); } fwrite($fu,"########## #### Fichier de réponses pour l'installation de Debian Wheezy ############# # langue et pays d-i localechooser/shortlist select FR d-i debian-installer/locale string fr_FR.UTF-8 d-i debian-installer/language string fr d-i debian-installer/country string FR # clavier d-i console-keymaps-at/keymap select fr-latin9 d-i debian-installer/keymap string fr-latin9 d-i console-setup/modelcode string pc105 d-i console-setup/layoutcode string fr ### 2. Configuration du réseau avec le serveur DHCP du SE3 ############# # choix automatique de l'interface d-i netcfg/choose_interface select auto # À décommenter quand le serveur dhcp est lent et que l'installateur s'arrête pour l'attendre d-i netcfg/dhcp_timeout string 60 # Si pour le réseau ou pour un autre matériel vous avez besoin d'un microprogramme # ( firmware ) non libre, vous pouvez forcer l'installateur à le télécharger, # en évitant la demande de confirmation. d-i hw-detect/load_firmware boolean true ### 3. Configuration du mirroir : utilisation du mirroir local se3 (apt-cacher-ng) ############# d-i mirror/country string manual d-i mirror/http/hostname string $se3ip:9999 d-i mirror/http/directory string /debian d-i mirror/http/proxy string ### 4. Configuration du fuseau horaire : serveur de temps du Slis ############# # réglage de l'horloge matérielle sur UTC et du fuseau horaire d-i clock-setup/utc boolean true d-i time/zone string Europe/Paris # autorisation de l'utilisation de NTP pour régler l'horloge pendant l'installation avec le serveur ntp du Slis d-i clock-setup/ntp boolean true d-i clock-setup/ntp-server string $ntpserv ### 5. Partitionnement du disque dur #############\n"); if($fdisk==0) { // On ecrase tout ! // une root 15/20Go , une swap qq go au max et une sauvegarde pour le reste... fwrite($fu,"d-i partman-auto/automatically_partition string regular d-i partman-auto/select_disk select /dev/discs/disc0/disc d-i partman-auto/method string regular d-i partman-lvm/confirm boolean true d-i partman-auto/purge_lvm_from_device boolean true d-i partman-auto/expert_recipe_file string /hd-media/recipe d-i partman-auto/expert_recipe string \ cl-recette :: \ 10000 15000 20000 ext4 \ \$primary{ } \$bootable{ } \ method{ format } format{ } \ use_filesystem{ } filesystem{ ext4 } \ mountpoint{ / } \ . \ 100% 200% 400% linux-swap \ \$primary{ } \ method{ swap } format{ } \ . \ 15000 20000 400000 ext4 \ \$primary{ } \ method{ format } format{ } \ use_filesystem{ } filesystem{ ext4 } \ mountpoint{ /sav } \ . d-i partman-auto/choose_recipe select cl-recette d-i partman-partitioning/confirm_write_new_label boolean true d-i partman/alignment select cylinder d-i partman/confirm boolean true d-i partman/choose_partition select Finish partitioning and write changes to disk d-i partman/confirm boolean true d-i partman/confirm_nooverwrite boolean true"); } else { // on installe sur un espace libre pré-existant fwrite($fu,"d-i partman-auto/init_automatically_partition select Assisté - utiliser le plus grand espace disponible d-i partman-auto/choose_recipe select atomic # choix du format ext4 d-i partman/default_filesystem string ext4 # partitionnement automatique sans demander de confirmation d-i partman/confirm_write_new_label boolean true d-i partman/choose_partition select finish d-i partman/confirm boolean true d-i partman/confirm_nooverwrite boolean true"); } fwrite($fu," ### 6. Configuration des comptes Root et utilisateur ############## Création du compte root (false => non, true => oui) d-i passwd/root-login boolean true d-i passwd/root-password-crypted password ".$root_pass." # Création d'un compte utilisateur normal. d-i passwd/user-fullname string ".$newuser_name." d-i passwd/username string ".$newuser_name." d-i passwd/user-password-crypted password ".$newuser_pass." ### 7. Configuration d'Apt # le fichier /etc/apt/sources.list sera reconfiguré après l'installation # à l'aide d'un script de post-installation ############# # Vous pouvez installer des logiciels des distributions non-free et contrib. d-i apt-setup/non-free boolean true d-i apt-setup/contrib boolean true # Décommentez cette ligne si vous n'utilisez pas de miroir sur le réseau. #d-i apt-setup/use_mirror boolean false # Choisissez les services de mise à jour et les miroirs à utiliser. # Les valeurs ci-après sont les valeurs par défaut : d-i apt-setup/services-select multiselect security # d-i apt-setup/security_host string security.debian.org d-i apt-setup/security_host string $se3ip:9999/security.debian.org ### 8. Choix des paquets #############"); // //Pour le moment xfce uniquement mais il faudrait proposer gnome et lxde # choix du paquet gnome-desktop #tasksel tasksel/first multiselect gnome-desktop # installation d'un serveur ssh (administration distante de la machine) #d-i pkgsel/include string openssh-server if($envbur=="gnome") { fwrite($fu," # choix du paquet gnome tasksel tasksel/first multiselect desktop, print-server tasksel tasksel/desktop multiselect gnome # installation d'un serveur ssh (administration distante de la machine) d-i pkgsel/include string openssh-server ldap-utils zip unzip tree screen vim vlc ssmtp ntp iceweasel iceweasel-l10n-fr xterm"); } else {if($envbur=="xfce") { fwrite($fu," # choix du paquet xfce tasksel tasksel/first multiselect desktop, print-server tasksel tasksel/desktop multiselect xfce # installation d'un serveur ssh (administration distante de la machine) d-i pkgsel/include string openssh-server ldap-utils zip unzip tree screen vim vlc ssmtp ntp iceweasel iceweasel-l10n-fr xterm"); } else { if($envbur=="lxde") {fwrite($fu," # choix du paquet lxde tasksel tasksel/first multiselect desktop, print-server tasksel tasksel/desktop multiselect lxde # installation d'un serveur ssh (administration distante de la machine) d-i pkgsel/include string openssh-server ldap-utils zip unzip tree screen vim vlc ssmtp ntp gdm3 iceweasel iceweasel-l10n-fr xterm "); } else { if($envbur=="kde") {fwrite($fu," # choix du paquet kde problème de kdm à résoudre #tasksel tasksel/first multiselect standard, print-server tasksel tasksel/desktop multiselect kde # installation d'un serveur ssh (administration distante de la machine) d-i pkgsel/include string openssh-server ldap-utils zip unzip tree screen vim vlc ssmtp ntp gdm3 iceweasel iceweasel-l10n-fr xterm"); } } } } fwrite($fu," # Sélection du pack de langues d-i pkgsel/language-packs multiselect fr, en, es, de # Gestion des mises à jour avec 3 possibilités prédéfinies : # - \"none\" => pas de mise à jour automatique # - \"unattended-upgrades\" => installe les mises à jour de sécurité automatiquement # - \"landscape\" => manage system with Landscape d-i pkgsel/update-policy select unattended-upgrades # Ne pas envoyer de rapport d'installation popularity-contest popularity-contest/participate boolean false ### 9. Installation du programme d'amorçage GRUB ############# # Installation automatique sur le MBR si aucun autre système n'est détecté d-i grub-installer/only_debian boolean true # S'il reconnaît un système d'exploitation, vous en serez informé # et l'installateur configurera Grub pour pouvoir démarrer aussi bien ce système que Debian d-i grub-installer/with_other_os boolean true # Mot de passe optionnel pour Grub, en clair... #d-i grub-installer/password password r00tme #d-i grub-installer/password-again password r00tme # ... ou chiffré sans confirmation avec MD5 hash, voir grub-md5-crypt(8) # pour le chiffrage, utiliser la commande suivante dans une console # printf \"uSerpass\" | mkpasswd -s -m md5\n"); // A faire !!! if($fdisk==10) fwrite($fu,"#"); fwrite($fu,"d-i grub-installer/password-crypted password ".$grub_pass."\n"); fwrite($fu," ### 10. Configuration de X (gestion de l'affichage) ############# # Détection automatique du moniteur. xserver-xorg xserver-xorg/autodetect_monitor boolean true xserver-xorg xserver-xorg/config/monitor/selection-method \ select medium xserver-xorg xserver-xorg/config/monitor/mode-list \ select 1024x768 @ 60 Hz ### 11. Exécution d'une commande avant la fin de l'installation # Cette commande est exécutée juste avant que l'installation ne se termine, # quand le répertoire /target est encore utilisable. ############# # À décommenter pour que le script post_installation.sh soit lancé au 1er redémarrage de la machine # il faudra rajouter à la fin du script la suppression de ce fichier? d-i preseed/late_command string wget http://$se3ip/install/post-install_debian_wheezy.sh; \ wget http://$se3ip/install/params.sh; \ wget http://$se3ip/install/mesapplis-debian.txt; \ wget http://$se3ip/install/mesapplis-debian-$envbur.txt; \ wget http://$se3ip/install/bashrc; \ wget http://$se3ip/install/inittab; \ chmod +x ./post-install_debian_wheezy.sh ./params.sh; \ mkdir /target/root/bin; \ cp params.sh post-install_debian_wheezy.sh mesapplis-debian.txt /target/root/bin/; \ cp mesapplis-debian-$envbur.txt /target/root/bin/mesapplis-debian-eb.txt; \ cp bashrc /target/root/.bashrc; \ cp /target/etc/inittab /target/root/bin/inittab.orig; \ cp inittab /target/etc/; \ in-target update-rc.d gdm3 remove; \ in-target update-rc.d lightdm remove; \ cp /target/etc/inittab /target/root/bin/ ### 12. Fin de l'installation d-i finish-install/reboot_in_progress note\n"); fclose($fu); #Copie du fichier dans /var/www/se3/tmp/ accessible depuis l'url http://se3ip:909/tmp/ //shell_exec("/bin/cp ".$dossier_unattend_txt.$nom_machine."_preseed.cfg /var/www/se3/tmp/"); } } echo "

Génération des fichiers dans /tftpboot/pxelinux.cfg/ pour l'installation automatique
\n"; // BOUCLE SUR LA LISTE DES $id_machine[$i] // Numéro de l'opération de remontée de rapport: $num_op=get_free_se3_action_tftp_num_op(); for($i=0;$iLa machine d'identifiant $id_machine[$i] n'existe pas dans 'se3_dhcp'.
\n"; } else { $temoin_erreur="n"; $lig=mysql_fetch_object($res); $mac_machine=$lig->mac; $nom_machine=$lig->name; $ip_machine=$lig->ip; //Ajouter ici le domaine local et l'url du preseed à passer à pxe_gen_cfg_debian.sh // domaine fait au début du script $url_du_preseed="http://".$se3ip.":909/tmp/".$nom_machine."_preseed.cfg"; echo "Génération pour $nom_machine : "; $corrige_mac=strtolower(strtr($mac_machine,":","-")); $chemin="/usr/share/se3/scripts"; $resultat=exec("$chemin/pxe_gen_cfg.sh 'install_linux' '$corrige_mac' '$ip_machine' '$nom_machine' '$url_du_preseed' '$arch'", $retour); if(count($retour)>0){ echo "ECHEC de la génération du fichier
\n"; for($j=0;$j\n"; } $temoin_erreur="y"; } else { $sql="DELETE FROM se3_tftp_action WHERE id='$id_machine[$i]';"; $suppr=mysql_query($sql); $timestamp=time(); $sql="INSERT INTO se3_tftp_action SET id='$id_machine[$i]', mac='$mac_machine', name='$nom_machine', date='$timestamp', type='auto_linux', num_op='$num_op', infos='';"; $insert=mysql_query($sql); if(!$insert) { echo "ECHEC de l'enregistrement dans 'se3_tftp_action'
\n"; $temoin_erreur="y"; } if($temoin_erreur!="y") { echo "OK\n"; echo " "; echo "\n"; echo "
\n"; } } } } // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- // POUVOIR TAGUER DANS LA TABLE se3_dhcp LES MACHINES QUI PEUVENT BOOTER EN PXE // Ajouter un champ? // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- // On n'affiche le fichier que pour le dernier (à titre d'info): if(isset($corrige_mac)) { $fich=fopen("/tftpboot/pxelinux.cfg/01-$corrige_mac","r"); if($fich) { echo "

Pour information, voici le contenu du fichier généré:
\n"; echo "

";
		while(!feof($fich)) {
			$ligne=fgets($fich,4096);
			echo htmlentities($ligne);
		}
		echo "
\n"; fclose($fich); } else { echo "

Il n'a pas été possible d'ouvrir le fichier /tftpboot/pxelinux.cfg/01-$corrige_mac

\n"; } } } ?>