\n"; /* echo "\n"; */ // CSS pour mes tableaux: echo "\n"; if ((is_admin("system_is_admin",$login)=="Y")||(ldap_get_right("parc_can_clone",$login)=="Y")) { // Choix des parcs: $parc=isset($_POST['parc']) ? $_POST['parc'] : (isset($_GET['parc']) ? $_GET['parc'] : NULL); // Choix des machines: $id_emetteur=isset($_POST['id_emetteur']) ? $_POST['id_emetteur'] : (isset($_GET['id_emetteur']) ? $_GET['id_emetteur'] : NULL); $id_recepteur=isset($_POST['id_recepteur']) ? $_POST['id_recepteur'] : (isset($_GET['id_recepteur']) ? $_GET['id_recepteur'] : NULL); // Création de la table dès que possible: creation_tftp_tables(); // Paramètres pour UdpCast $disk=isset($_POST['disk']) ? $_POST['disk'] : (isset($_GET['disk']) ? $_GET['disk'] : NULL); $compr=isset($_POST['compr']) ? $_POST['compr'] : (isset($_GET['compr']) ? $_GET['compr'] : NULL); $port=isset($_POST['port']) ? $_POST['port'] : (isset($_GET['port']) ? $_GET['port'] : NULL); $enableDiskmodule=isset($_POST['enableDiskmodule']) ? $_POST['enableDiskmodule'] : (isset($_GET['enableDiskmodule']) ? $_GET['enableDiskmodule'] : NULL); $diskmodule=isset($_POST['diskmodule']) ? $_POST['diskmodule'] : (isset($_GET['diskmodule']) ? $_GET['diskmodule'] : NULL); $netmodule=isset($_POST['netmodule']) ? $_POST['netmodule'] : (isset($_GET['netmodule']) ? $_GET['netmodule'] : NULL); $min_receivers=isset($_POST['min_receivers']) ? $_POST['min_receivers'] : (isset($_GET['min_receivers']) ? $_GET['min_receivers'] : NULL); $max_wait=isset($_POST['max_wait']) ? $_POST['max_wait'] : (isset($_GET['max_wait']) ? $_GET['max_wait'] : NULL); $min_wait=isset($_POST['min_wait']) ? $_POST['min_wait'] : (isset($_GET['min_wait']) ? $_GET['min_wait'] : NULL); $start_timeout=isset($_POST['start_timeout']) ? $_POST['start_timeout'] : (isset($_GET['start_timeout']) ? $_GET['start_timeout'] : NULL); $auto_reboot=isset($_POST['auto_reboot']) ? $_POST['auto_reboot'] : (isset($_GET['auto_reboot']) ? $_GET['auto_reboot'] : NULL); // Paramètres concernant l'action immédiate sur les machines choisies: $wake=isset($_POST['wake']) ? $_POST['wake'] : (isset($_GET['wake']) ? $_GET['wake'] : "n"); $shutdown_reboot=isset($_POST['shutdown_reboot']) ? $_POST['shutdown_reboot'] : (isset($_GET['shutdown_reboot']) ? $_GET['shutdown_reboot'] : NULL); $pref_distrib_clonage=crob_getParam('pref_distrib_clonage'); if(($pref_distrib_clonage=='udpcast')||($pref_distrib_clonage=='sysresccd')) {$valeur_par_defaut=$pref_distrib_clonage;} else {$valeur_par_defaut="udpcast";} $distrib=isset($_POST['distrib']) ? $_POST['distrib'] : $valeur_par_defaut; $type_os=isset($_POST['type_os']) ? $_POST['type_os'] : "xp"; $sysresccd_kernel=isset($_POST['sysresccd_kernel']) ? $_POST['sysresccd_kernel'] : "rescue32"; $pref_ntfsclone_udpcast=crob_getParam('pref_ntfsclone_udpcast'); if(($pref_ntfsclone_udpcast=='y')||($pref_ntfsclone_udpcast=='n')) {$valeur_par_defaut=$pref_ntfsclone_udpcast;} else {$valeur_par_defaut="n";} $ntfsclone_udpcast=isset($_POST['ntfsclone_udpcast']) ? $_POST['ntfsclone_udpcast'] : $valeur_par_defaut; $pref_clonage_compression=crob_getParam('pref_clonage_compression'); if(($pref_clonage_compression=='')||(!in_array($pref_clonage_compression,array('none','gzip','lzop','pbzip2')))) {$pref_clonage_compression='lzop';} $pref_clonage_max_wait=crob_getParam('pref_clonage_max_wait'); if($pref_clonage_max_wait=='') {$pref_clonage_max_wait=15;} $pref_clonage_min_wait=crob_getParam('pref_clonage_min_wait'); if($pref_clonage_min_wait=='') {$pref_clonage_min_wait=10;} $pref_clonage_start_timeout=crob_getParam('pref_clonage_start_timeout'); if($pref_clonage_start_timeout=='') {$pref_clonage_start_timeout=20;} echo "

".gettext("Action clonage TFTP")."

\n"; $restriction_parcs="n"; if(is_admin("system_is_admin",$login)!="Y") { $restriction_parcs="y"; $tab_delegated_parcs=list_delegated_parcs($login); if(count($tab_delegated_parcs)==0) { echo "

Aucun parc ne vous a été délégué.

\n"; include ("pdp.inc.php"); die(); } } $msg_fichiers_manquants=""; $temoin_fichiers_requis="y"; $chemin_tftpboot="/tftpboot"; $tab_udpcast_file=array("vmlu26", "udprd", "vmlu26.old", "udprd.old"); for($loop=0;$loop
\n"; $msg_fichiers_manquants.="Vous devriez effectuer le telechargement udpcast en Configurer le module TFTP
\n"; $temoin_fichiers_requis="n"; } } if($msg_fichiers_manquants!="") { $msg_fichiers_manquants.="

Vous ne pourrez pas effectuer le clonage avec la mini-distribution Linux UdpCast sans d'abord télécharger les fichiers manquants.

"; } $temoin_sysresccd=check_sysresccd_files(); if($temoin_sysresccd=="y") { $msg_fichiers_manquants.="

Vous pourrez effectuer le clonage avec la distribution SysRescCD.

"; $temoin_fichiers_requis="y"; } else { $msg_fichiers_manquants.="SysRescCD est absente.
Cette distribution permet de cloner avec une meilleure reconnaissance matérielle qu'UdpCast seul.
Vous devriez en effectuer le téléchargement via Configurer le module TFTP.

\n"; } if($msg_fichiers_manquants!="") { echo $msg_fichiers_manquants; } if($temoin_fichiers_requis=="n") { echo "

ABANDON : Un ou des fichiers requis sont manquants.

\n"; include ("pdp.inc.php"); die(); } if(!isset($parc)){ echo "

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"; } if(($restriction_parcs=="n")||(in_array($list_parcs[$loop]["cn"], $tab_delegated_parcs))) { echo "\n"; echo "
\n"; } } echo "
\n"; echo "

\n"; echo "
\n"; echo "\n"; //echo "

Retour au choix du/des parc(s).

\n"; echo "

ATTENTION : Pour le bon fonctionnement du clonage, il est indispensable que les postes (l'emetteur au moins) soient configurés pour booter en priorité sur le réseau (BIOS : boot PXE (network) avant disque dur).
Sinon, quand le poste emetteur va redémarrer pour le clonage (*), il risque de redémarrer sous Window$ au lieu de démarrer en PXE.

Et si vous lancez manuellement le clonage ensuite, le poste emetteur aura déjà réintégré le domaine et repris son nom initial. Vous clonerez alors toutes les machines sous ce même nom et elles n'intègreront pas le domaine sous leur nom propre.

(*) Le poste emetteur reboote plusieurs fois dans l'opération (il doit quitter le domaine (un reboot),
prendre le nom temporaire 'clone' (encore un reboot)
et ensuite seulement rebooter sur le réseau pour procéder au clonage
)

\n"; } else { if(!isset($id_emetteur)) { echo "
\n"; echo "

Choisissez l'émetteur.

\n"; $tab_detect_doublons=array(); $tab_infos_doublons=array(); for($i=0;$iParc $parc[$i]\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"; 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=""; $mp_curr=search_machines2("(&(cn=$mpenc)(objectClass=ipHost))","computers"); if(in_array($mp_curr[0]["macAddress"],$tab_detect_doublons)) { $temoin_check='n'; $tab_infos_doublons[$mp_curr[0]["macAddress"]].=", ".$mpenc; } else { $temoin_check='y'; $tab_detect_doublons[]=$mp_curr[0]["macAddress"]; $tab_infos_doublons[$mp_curr[0]["macAddress"]]=$mpenc; } 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 de l'émetteur UDPCAST: echo "\n"; // Action programmée echo "\n"; echo "\n"; } flush(); } echo "
NomEtatSessionConfig DHCPEmetteurActions programmées
".$mp[$loop].""; 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"]."';"; //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"; echo "\n"; // On affiche quand même la case à cocher parce qu'il se peut que la case soit désactivée si l'identifiant est absent de la table se3_dhcp if($temoin_check=='n') { //echo "\"La"; 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"; } echo "

\n"; echo "\n"; } elseif(!isset($id_recepteur)){ // Ajout keyser test emetteur bien allume echo "
\n"; $sql="SELECT * FROM se3_dhcp WHERE id='$id_emetteur';"; $res=mysql_query($sql); $lig=mysql_fetch_object($res); echo "

Emetteur: $lig->name (id:$id_emetteur)

\n"; echo "\n"; exec("/usr/share/se3/sbin/tcpcheck 2 $lig->ip:445 | grep alive",$arrval,$return_value); if ($return_value == "1") { echo "

Attention, clonage impossible. La machine $lig->name est injoignable ou protégée par un pare-feu :

\n "; echo "

Retour au choix du/des parc(s).

\n"; include ("pdp.inc.php"); exit(); } echo "

Choisissez les récepteurs.

\n"; $max_eff_parc=0; $tab_detect_doublons=array(); $tab_infos_doublons=array(); for($i=0;$iParc $parc[$i]\n"; echo "\n"; $mp=gof_members($parc[$i],"parcs",1); $nombre_machine=count($mp); sort($mp); //echo "\$id_emetteur=$id_emetteur
\n"; //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=""; $mp_curr=search_machines2("(&(cn=$mpenc)(objectClass=ipHost))","computers"); if(in_array($mp_curr[0]["macAddress"],$tab_detect_doublons)) { $temoin_check='n'; $tab_infos_doublons[$mp_curr[0]["macAddress"]].=", ".$mpenc; } else { $temoin_check='y'; $tab_detect_doublons[]=$mp_curr[0]["macAddress"]; $tab_infos_doublons[$mp_curr[0]["macAddress"]]=$mpenc; } 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 récepteurs UDPCAST: echo "\n"; // Action programmée echo "\n"; echo "\n"; flush(); } } echo "
NomEtatSessionConfig DHCPRécepteursRécepteurs
\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"]."';"; //echo "$sql
\n"; $res=mysql_query($sql); if(mysql_num_rows($res)>0) { $lig=mysql_fetch_object($res); $id_machine=$lig->id; //echo "\$id_machine=$id_machine
\n"; //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!=""){ if($id_machine!=$id_emetteur){ //if($temoin_check=='y') { echo "\n"; //echo "\n"; //} //else { // On affiche quand même la case à cocher parce qu'il se peut que la case soit désactivée si l'identifiant est absent de la table se3_dhcp if($temoin_check=='n') { //echo "\"La"; echo "\n"; } } else{ echo "Emetteur\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"; } else { $validation_parametres=isset($_POST['validation_parametres']) ? $_POST['validation_parametres'] : (isset($_GET['validation_parametres']) ? $_GET['validation_parametres'] : NULL); if(!isset($validation_parametres)) { echo "

Paramétrage du clonage

\n"; //$nombre_machines=count($id_machine); //if($nombre_machines==0){ if((!isset($id_emetteur))||(count($id_recepteur)==0)) { echo "

ERREUR: Il faut choisir au moins un émetteur et un récepteur.

\n"; echo "

Retour au choix des machines à cloner.

\n"; echo "

Retour au choix du/des parc(s).

\n"; include ("pdp.inc.php"); exit(); } echo "
\n"; // Liste des parcs: for($i=0;$i\n"; } // Infos sur l'émetteur: $sql="SELECT * FROM se3_dhcp WHERE id='$id_emetteur';"; $res=mysql_query($sql); $lig=mysql_fetch_object($res); echo "

Emetteur: $lig->name (id:$id_emetteur)

\n"; echo "\n"; // Liste des machines récepteurs: $chaine=""; $tab_dedoublonnage=array(); for($i=0;$i"; $res=mysql_query($sql); if(mysql_num_rows($res)>0) { $lig=mysql_fetch_object($res); if(!in_array($lig->name,$tab_dedoublonnage)) { if($i>0) {$chaine.=", ";} $chaine.=$lig->name; echo "\n"; $tab_dedoublonnage[]=$lig->name; } } } //if(count($id_recepteur)>1){$s="s";}else{$s="";} if(count($tab_dedoublonnage)>1){$s="s";}else{$s="";} echo "

Machine$s clonée$s: $chaine

\n"; echo "

Choisissez les paramètres de clonage:

\n"; $temoin_sysresccd=check_sysresccd_files(); if($temoin_sysresccd=="y") { // Il faut aussi le noyau et l'initram.igz dans /tftpboot, echo "

"; $temoin_fichiers_udpcast="y"; $chemin_tftpboot="/tftpboot"; $tab_udpcast_file=array("vmlu26", "udprd", "vmlu26.old", "udprd.old"); for($loop=0;$loop
\n"; } else { $pref_distrib_clonage="y"; } echo " (plus long à booter et 300Mo de RAM minimum, mais meilleure détection des pilotes)\n"; //echo "
\n"; echo "

\n"; echo "
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "Utiliser le noyau : "; echo "\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "
\n"; $srcd_scripts_vers=crob_getParam('srcd_scripts_vers'); if(($srcd_scripts_vers!='')&&($srcd_scripts_vers>=20110406)) { echo "

"; echo "
\n"; echo " (experimental)
\n"; echo "

\n"; } else { echo "\n"; } echo "
\n"; } else { echo "

SysRescCD est absent (c'est pourtant le choix recommandé).
Vous pouvez provoquer le téléchargement dans le menu Serveur TFTP/Configurer le module.
A défaut, UdpCast seul sera utilisé.

\n"; echo "\n"; } echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; // A FAIRE: Relever les clonage en attente (possible) ou en cours (pas possible en l'état) pour ne pas proposer le même port... $sql="SELECT DISTINCT infos FROM se3_tftp_action WHERE type='udpcast_emetteur';"; $res_infos=mysql_query($sql); if(mysql_num_rows($res_infos)>0) { $tab_ports=array(); while($lig_infos=mysql_fetch_object($res_infos)){ $tmp_tab=decoupe_infos($lig_infos->infos); if(isset($tmp_tab['port'])) {$tab_ports[]=$tmp_tab['port'];} } //sort($tab_ports); for($i=9002;$i<64000;$i+=2) { if(!in_array($i,$tab_ports)){$port=$i;break;} } } else { $port=9002; } echo "\n"; echo "\n"; echo "\n"; echo "\n"; if(($temoin_sysresccd=="y")&&(crob_getParam('srcd_scripts_vers')>='20110910')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; /* echo "\n"; */ echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; /* # --start-timeout sec # receiver aborts at start if it doesn't see a sender within this many seconds. Furthermore, the sender needs to start transmission of data within this delay. Once transmission is started, the timeout no longer applies. */ echo "
Type du système à cloner: "; echo "
\n"; echo "\n"; echo "
Périphérique à cloner: "; echo "
\n"; echo "Habituellement: hda1 ou sda1 pour la première partition
\n"; echo "et hda ou sda pour le disque complet.
\n"; echo "

Avec le choix ntfsclone+udpcast :
"; echo "Pour le clonage de seven 64bits choisir seven64 (seules les partitions NTFS sont clonées)
"; echo "Pour cloner Seven (64 ou non) et une partition Linux derrière, choisir seven64_linux (*)
"; echo "Pour cloner (par exemple) les partitions sda1, sda2 et sda5, choisir sda1_sda2_sda5 (taper le nom des partitions séparées d'un tiret bas _).
Avec le choix ntfsclone+udpcast, les partitions ntfs sont clonées avec ntfsclone+udpcast et les autres partitions sont clonées avec udpcast seul."; echo "

Compression: "; echo "
\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "
Port: "; echo "
\n"; //echo "Attention: A l'heure actuelle, aucun test n'est fait sur les clonages programmés concernant le port utilisé.
Il ne faut pas qu'un autre clonage se déroule simultanément avec le même port.
Remarque: Le port doit être pair.\n"; echo "Attention: Aucun test n'est réalisé sur les clonages en cours concernant le port utilisé.
Seuls sont testés les clonages programmés, mais non encore amorcés.
Il ne faut pas qu'un autre clonage se déroule simultanément avec le même port.
Remarque: Le port doit être pair.\n"; echo "
Module Disk: \n"; echo " \n"; $tab_pilote=array(); $chaine_pilote=""; $sql="SELECT valeur FROM se3_tftp_infos WHERE id='$id_emetteur' AND nom='storage_driver';"; $test_driver_emetteur=mysql_query($sql); if(mysql_num_rows($test_driver_emetteur)>0) { $chaine_pilote.="
\n"; $chaine_pilote.="Pilote(s) relevé(s) lors d'un précédent rapport : "; $cpt_pilote=0; while($lig_pilote=mysql_fetch_object($test_driver_emetteur)) { if($cpt_pilote>0) {$chaine_pilote.=", ";} $chaine_pilote.=$lig_pilote->valeur; $tab_pilote[]=strtolower($lig_pilote->valeur); $cpt_pilote++; } } echo "\n"; echo $chaine_pilote; echo "
Pilote réseau: \n"; $tab_pilote=array(); $chaine_pilote=""; $sql="SELECT valeur FROM se3_tftp_infos WHERE id='$id_emetteur' AND nom='network_driver';"; $test_driver_emetteur=mysql_query($sql); if(mysql_num_rows($test_driver_emetteur)>0) { $chaine_pilote.="
\n"; $chaine_pilote.="Pilote(s) relevé(s) lors d'un précédent rapport : "; $cpt_pilote=0; while($lig_pilote=mysql_fetch_object($test_driver_emetteur)) { if($cpt_pilote>0) {$chaine_pilote.=", ";} $chaine_pilote.=$lig_pilote->valeur; $tab_pilote[]=strtolower($lig_pilote->valeur); $cpt_pilote++; } } echo "\n"; echo $chaine_pilote; echo "
DHCP: \n"; echo " Ne pas prendre l'IP via DHCP mais directement depuis le /tftpboot/pxelinux.cfg/01-<MAC>\n"; echo "
Url authorized_keys : \n"; echo "\n"; echo "\n"; echo "\n"; echo "
Rebooter en fin de clonage: \n"; echo "
\n"; echo "
\n"; echo "\n"; echo "
Pour la ou les machines sélectionnées: \n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
Paramètres spécifiques à l'émetteur
Nombre (min) de clients à attendre: \n"; echo "\n"; echo "
\n"; echo "Vous pouvez par exemple annoncer 10 récepteurs minimum alors que vous souhaitez en cloner 12.
"; echo "Dans ce cas, vous acceptez que deux récepteurs manquent dans le clonage, mais pas plus.
"; echo "
\n"; echo "Lorsque le compte est atteint, le clonage démarre aussitôt le délais ci-dessous écoulé.
"; echo "
Ou(mettre 0 ou vide pour l'option à ne pas retenir;
si aucun des deux champs n'est vidé l'option ci-dessus l'emporte
)
Délais minimum avant le démarrage:\n"; echo " minutes.\n"; echo "
\n"; echo "Si vous fixez un nombre de récepteurs inférieur au nombre max de clients pouvant être clonés, ce délais permettra d'attendre les récepteurs au-delà pendant cette durée.\n"; echo "
Si un ou des clients
font défaut,
démarrer après:
\n"; echo " minutes.\n"; echo "
\n"; echo "Néanmoins, le clonage ne démarre que si un client au moins est présent.\n"; echo "
Paramètres spécifiques au(x) récepteur(s)
Abandonner après: \n"; //echo " minutes si le clonage ne démarre pas.\n"; echo " minutes si le clonage ne démarre pas.\n"; echo "
\n"; echo "Veillez à ce que le timeout soit supérieur à la valeur 'max-wait' spécifiée pour l'émetteur.\n"; echo "
\n"; echo "\n"; echo "\n"; echo "

\n"; echo "

Attention ! si l'emetteur ne reboote pas tout seul en administrateur local, ouvrez une session administrateur local et lancez c:\\netinst\\shutdown.cmd

\n"; echo "\n"; echo "\n"; } else { echo "

Validation des paramètres du clonage

\n"; $opt_url_authorized_keys=""; if((isset($_POST['prendre_en_compte_url_authorized_keys']))&&(isset($_POST['url_authorized_keys']))&&($_POST['url_authorized_keys']!='')&&(preg_replace('|[A-Za-z0-9/:_\.\-]|','',$_POST['url_authorized_keys'])=='')) { $opt_url_authorized_keys="url_authorized_keys=".$_POST['url_authorized_keys']; crob_setParam('url_authorized_keys',$_POST['url_authorized_keys'],'Url fichier authorized_keys pour acces ssh aux clients TFTP'); } //=================================== // Contrôle des variables: $tab_compr=array('none','gzip','lzop','pbzip2'); if(!in_array($compr,$tab_compr)){$compr='lzop';} if((strlen(preg_replace("/[0-9]/","",$port)!=0))||($port=='')) {$port=9002;} if(!isset($enableDiskmodule)){ $enableDiskmodule="no"; } elseif($enableDiskmodule!="yes"){ $enableDiskmodule="no"; } if(($auto_reboot!="always")&&($auto_reboot!="success")){$auto_reboot="never";} //=================================== $sauvegarde_pref=crob_setParam('pref_distrib_clonage', $distrib, 'Distrib preferee pour le clonage'); $sauvegarde_pref=crob_setParam('pref_ntfsclone_udpcast', $ntfsclone_udpcast, 'Utilisation de ntfsclone+udpcast pour le clonage'); $sauvegarde_pref=crob_setParam('pref_clonage_max_wait', $max_wait, 'Clonage: Valeur max d attente du serveur'); $sauvegarde_pref=crob_setParam('pref_clonage_min_wait', $min_wait, 'Clonage: Valeur min d attente du serveur'); $sauvegarde_pref=crob_setParam('pref_clonage_start_timeout', $start_timeout, 'Clonage: Valeur max d attente des recepteurs'); $sauvegarde_pref=crob_setParam('pref_clonage_compression', $compr, 'Clonage: Mode de compression prefere'); echo "

Rappel des paramètres:

\n"; $temoin_sysresccd=check_sysresccd_files(); if($temoin_sysresccd=="y") { echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; } else { echo "\n"; echo "
Distribution linux à utiliser: \n"; echo $distrib; if($distrib=='sysresccd') { echo " (noyau $sysresccd_kernel)"; } echo "\n"; echo "
\n"; } echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; if($distrib=='udpcast') { echo "\n"; echo "\n"; echo "\n"; echo "\n"; if($enableDiskmodule=="yes") { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } echo "\n"; echo "\n"; echo "\n"; echo "\n"; } echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
Partition/disque à cloner: \n"; echo $disk; echo "
Compression: \n"; echo $compr; echo "
Port: \n"; echo $port; echo "
Charger un module disque: \n"; echo $enableDiskmodule; echo "
Module disque: \n"; echo $diskmodule; echo "
Module réseau: \n"; echo $netmodule; echo "
Port: \n"; echo $port; echo "
Rebooter en fin de restauration: \n"; if($auto_reboot=="always") { echo "Toujours"; } elseif($auto_reboot=="success") { echo "En cas de succès"; } elseif($auto_reboot=="never") { echo "Jamais (reboot manuel)"; } echo "
\n"; //============================= // On recupere l'interface reseau pour pouvoir par la suite trouver le masque de sous-reseau depuis le script pxe_gen_cfg.sh $sql="SELECT * FROM params WHERE name='dhcp_iface';"; $res=mysql_query($sql); if(mysql_num_rows($res)>0) { $lig=mysql_fetch_object($res); //echo "dhcp_iface=".$lig->value."
"; $dhcp_iface=$lig->value; } $dhcp=isset($_POST['dhcp']) ? $_POST['dhcp'] : "yes"; //============================= //==================================================== $sql="SELECT * FROM se3_dhcp WHERE id='$id_emetteur';"; $res=mysql_query($sql); $lig=mysql_fetch_object($res); //echo "

Emetteur: $lig->name ($id_emetteur)

\n"; /* //$udpcparam="--max-wait=".$max_wait."--min-receivers=".$min_receivers; $sec_max_wait=$max_wait*60; //$udpcparam="--max-wait=".$sec_max_wait."--min-receivers=".$min_receivers; $udpcparam="--max-wait=".$sec_max_wait."|--min-receivers=".$min_receivers; // Je ne parviens pas à renseigner correctement le /udpcfg.txt avec les infos passées par la boot_cmdline // Je ne m'en sors qu'avec un seul paramètre en udpcparam if(($min_receivers!=0)&&($min_receivers!='')) { $udpcparam="--min-receivers=".$min_receivers; } elseif(($max_wait!=0)&&($max_wait!='')) { $sec_max_wait=$max_wait*60; $udpcparam="--max-wait=".$sec_max_wait; } */ $sec_max_wait=$max_wait*60; $sec_min_wait=$min_wait*60; $udpcparam="--max-wait=".$sec_max_wait." --min-wait=".$sec_min_wait." --min-receivers=".$min_receivers; $udpcparam_temp=strtr($udpcparam," ","_"); // Pour passer la récupération de variable dans pxe_gen_cfg.sh, l'espace dans le contenu de la variable pose un pb. On remplace par un _ et on fait la correction inverse dans pxe_gen_cfg.sh $mac_machine=$lig->mac; $nom_machine=$lig->name; $ip_machine=$lig->ip; $corrige_mac=strtolower(strtr($mac_machine,":","-")); if($restriction_parcs=="y") { $temoin_erreur='y'; for($loop=0; $loopLa machine $nom_machine ne vous est pas déléguée

\n"; } else { // Nettoyage de scories d'autres programmations: if(file_exists("/tftpboot/pxelinux.cfg/01-".$corrige_mac)) { echo "

Suppression d'une programmation précédente pour $nom_machine
\n"; //unlink("/tftpboot/pxelinux.cfg/01-".$corrige_mac); $resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'menage_tftpboot_pxelinux_cfg' 'mac=$corrige_mac'", $retour); if(count($retour)>0){ for($j=0;$j\n"; } } echo "

\n"; } for($i=0;$i"; $res_client=mysql_query($sql); if(mysql_num_rows($res_client)==0) { echo "

"; echo "La machine d'identifiant $id_recepteur[$i] n'existe pas dans 'se3_dhcp'.
\n"; echo "

\n"; } else { $temoin_erreur_client="n"; $lig_client=mysql_fetch_object($res_client); $mac_machine_client=$lig_client->mac; $nom_machine_client=$lig_client->name; $ip_machine_client=$lig_client->ip; if($restriction_parcs=="y") { $temoin_erreur_client='y'; for($loop=0; $loopLa machine $nom_machine_client ne vous est pas déléguée

\n"; } else { $corrige_mac_client=strtolower(strtr($mac_machine_client,":","-")); if(file_exists("/tftpboot/pxelinux.cfg/01-".$corrige_mac_client)) { echo "

Suppression d'une programmation précédente pour $nom_machine_client
\n"; //unlink("/tftpboot/pxelinux.cfg/01-".$corrige_mac); $resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'menage_tftpboot_pxelinux_cfg' 'mac=$corrige_mac_client'", $retour); if(count($retour)>0){ for($j=0;$j\n"; } } echo "

\n"; } } } } flush(); $temoin_erreur="n"; $num_op=get_free_se3_action_tftp_num_op(); $id_microtime=preg_replace('/[^0-9]/','_',microtime()); $chemin="/usr/share/se3/scripts"; if($type_os=='xp') { echo "

Rappel : Il faut que les postes émetteur et récepteur(s) bootent en priorité sur le réseau (PXE) pour que le redémarrage se fasse sur ".$distrib." et que le clonage s'ensuive.

\n"; echo "

Informations sur la suite : Le poste émetteur va être sorti du domaine, renommé en 'clone' et préparé pour une réintégration après clonage,...
\n"; echo "L'opération prend couramment 5 minutes avant que la préparation soit effectuée et que la fin de la présente page HTML s'affiche.
\n"; echo "Soyez patient...

\n"; flush(); // on lance la preparation du poste emetteur $resultat=system("/usr/bin/sudo /usr/share/se3/scripts/integreDomaine.sh clone clone $ip_machine $nom_machine adminse3 $xppass > /dev/null", $retint); if ($retint) { echo "ECHEC de la preparation du poste
\n"; $temoin_erreur="y"; } else { echo "on attend le rapport de fin de la preparation
"; $sql="SELECT COUNT(*) FROM se3_tftp_rapports WHERE id='$id_emetteur' AND tache='preparation' AND statut='SUCCES' AND date>(now()-100);"; $num=0; $incr=0; while ($num==0) { $count=mysql_query($sql); $num=mysql_result($count, 0); echo "."; sleep(10); if ($incr++==60) { echo "
Probleme : pas de rapport remonte pour la preparation du clonage. Si le poste emetteur n'a pas reboote en adminstrateur local, relancez le clonage, connectez vous en administrateur local et lancez netinst\\shutdown.cmd"; $temoin_erreur="y"; break; } } if ("$temoin_erreur"=="n"){ echo "
preparation reussie
"; } } } if($distrib=='slitaz') { $ajout_kernel=""; } else { $ajout_kernel="|kernel=$sysresccd_kernel"; } } if ("$temoin_erreur"=="n") { echo "

Génération des fichiers dans /tftpboot/pxelinux.cfg/ pour l'émetteur.
\n"; echo "

Emetteur: $lig->name ($id_emetteur): \n"; if($distrib=='udpcast') { //$resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'udpcast_emetteur' '$corrige_mac' '$ip_machine' '$nom_machine' '$compr' '$port' '$enableDiskmodule' '$diskmodule' '$netmodule' '$disk' '$auto_reboot' '$udpcparam' '$urlse3' '$num_op' '$dhcp' '$dhcp_iface'", $retour); $resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'udpcast_emetteur' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine compr=$compr port=$port enableDiskmodule=$enableDiskmodule diskmodule=$diskmodule netmodule=$netmodule disk=$disk auto_reboot=$auto_reboot udpcparam=$udpcparam_temp urlse3=$urlse3 num_op=$num_op dhcp=$dhcp dhcp_iface=$dhcp_iface'", $retour); } else { //$resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_udpcast_emetteur' '$corrige_mac' '$ip_machine' '$nom_machine' '$compr' '$port' '$enableDiskmodule' '$diskmodule' '$netmodule' '$disk' '$auto_reboot' '$udpcparam' '$urlse3' '$num_op' '$dhcp' '$dhcp_iface'", $retour); if($ntfsclone_udpcast=='y') { $resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_ntfsclone_udpcast_emetteur' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine compr=$compr port=$port enableDiskmodule=$enableDiskmodule diskmodule=$diskmodule netmodule=$netmodule disk=$disk auto_reboot=$auto_reboot udpcparam=$udpcparam_temp urlse3=$urlse3 num_op=$num_op dhcp=$dhcp dhcp_iface=$dhcp_iface kernel=$sysresccd_kernel id_microtime=$id_microtime $opt_url_authorized_keys'", $retour); } else { $resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_udpcast_emetteur' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine compr=$compr port=$port enableDiskmodule=$enableDiskmodule diskmodule=$diskmodule netmodule=$netmodule disk=$disk auto_reboot=$auto_reboot udpcparam=$udpcparam_temp urlse3=$urlse3 num_op=$num_op dhcp=$dhcp dhcp_iface=$dhcp_iface kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour); } } if(count($retour)>0){ echo "ECHEC de la génération du fichier
\n"; for($j=0;$j\n"; } $temoin_erreur="y"; } else { // Numéro de l'opération de sauvegarde: //$num_op=get_free_se3_action_tftp_num_op(); $sql="UPDATE se3_tftp_rapports SET statut='VALIDE' WHERE id='$id_emetteur' AND tache='preparation' AND statut='SUCCES';"; $upd=mysql_query($sql); $sql="DELETE FROM se3_tftp_action WHERE id='$id_emetteur';"; $suppr=mysql_query($sql); $timestamp=time(); $sql="INSERT INTO se3_tftp_action SET id='$id_emetteur', mac='$mac_machine', name='$nom_machine', date='$timestamp', type='udpcast_emetteur', num_op='$num_op', infos='compr=$compr|disk=$disk|port=$port|enableDiskmodule=$enableDiskmodule|diskmodule=$diskmodule|netmodule=$netmodule|auto_reboot=$auto_reboot|udpcparam=${udpcparam}${ajout_kernel}';"; $insert=mysql_query($sql); if(!$insert) { echo "ECHEC de l'enregistrement dans 'se3_tftp_action'
\n"; $temoin_erreur="y"; } if($temoin_erreur=="n") { echo "OK\n"; // Application de l'action choisie: echo " "; echo "\n"; echo "
\n"; } } } //==================================================== if($temoin_erreur=="y") { echo "

La mise en place a échoué pour l'emetteur.
On abandonne avant de générer les fichiers pour les émetteurs.

\n et on retablit la configuration initiale"; system("/usr/bin/sudo /usr/share/se3/scripts/integreDomaine.sh ldap $nom_machine $ip_machine $mac_machine > /dev/null"); include ("pdp.inc.php"); exit(); } // On n'affiche le fichier que pour le dernier (à titre d'info): if(isset($corrige_mac)) { //$fich=fopen("/tftpboot/pxelinux.cfg/01-$lig1->mac","r"); $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"; } } //==================================================== echo "

Génération des fichiers dans /tftpboot/pxelinux.cfg/ pour les récepteurs.
\n"; //$udpcparam="--start-timeout=".$start_timeout; $sec_start_timeout=$start_timeout*60; //$udpcparam="--start-timeout=".$sec_start_timeout; //$sec_max_wait=$max_wait*60; //$udpcparam="--start-timeout=".$sec_start_timeout." --max-wait=".$sec_max_wait." --min-wait=".$sec_min_wait; $udpcparam="--start-timeout=".$sec_start_timeout; $udpcparam_temp=strtr($udpcparam," ","_"); // Pour passer la récupération de variable dans pxe_gen_cfg.sh, l'espace dans le contenu de la variable pose un pb. On remplace par un _ et on fait la correction inverse dans pxe_gen_cfg.sh // BOUCLE SUR LA LISTE DES $id_recepteur[$i] for($i=0;$i"; $res=mysql_query($sql); if(mysql_num_rows($res)==0) { echo "La machine d'identifiant $id_recepteur[$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; if($restriction_parcs=="y") { $temoin_erreur='y'; for($loop=0; $loopLa machine $nom_machine ne vous est pas déléguée

\n"; } else { echo "Génération pour $nom_machine: "; $corrige_mac=strtolower(strtr($mac_machine,":","-")); $chemin="/usr/share/se3/scripts"; //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'udpcast_recepteur' '$corrige_mac' '$ip_machine' '$nom_machine' '$compr' '$port' '$enableDiskmodule' '$diskmodule' '$netmodule' '$disk' '$auto_reboot' '$udpcparam' '$urlse3' '$num_op'", $retour); if($distrib=='udpcast') { //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'udpcast_recepteur' '$corrige_mac' '$ip_machine' '$nom_machine' '$compr' '$port' '$enableDiskmodule' '$diskmodule' '$netmodule' '$disk' '$auto_reboot' '$udpcparam' '$urlse3' '$num_op' '$dhcp' '$dhcp_iface'", $retour); $resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'udpcast_recepteur' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine compr=$compr port=$port enableDiskmodule=$enableDiskmodule diskmodule=$diskmodule netmodule=$netmodule disk=$disk auto_reboot=$auto_reboot udpcparam=$udpcparam_temp urlse3=$urlse3 num_op=$num_op dhcp=$dhcp dhcp_iface=$dhcp_iface'", $retour); } else { //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_udpcast_recepteur' '$corrige_mac' '$ip_machine' '$nom_machine' '$compr' '$port' '$enableDiskmodule' '$diskmodule' '$netmodule' '$disk' '$auto_reboot' '$udpcparam' '$urlse3' '$num_op' '$dhcp' '$dhcp_iface'", $retour); if($ntfsclone_udpcast=='y') { $resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_ntfsclone_udpcast_recepteur' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine compr=$compr port=$port enableDiskmodule=$enableDiskmodule diskmodule=$diskmodule netmodule=$netmodule disk=$disk auto_reboot=$auto_reboot udpcparam=$udpcparam_temp urlse3=$urlse3 num_op=$num_op dhcp=$dhcp dhcp_iface=$dhcp_iface kernel=$sysresccd_kernel id_microtime=$id_microtime $opt_url_authorized_keys'", $retour); } else { $resultat.=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_udpcast_recepteur' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine compr=$compr port=$port enableDiskmodule=$enableDiskmodule diskmodule=$diskmodule netmodule=$netmodule disk=$disk auto_reboot=$auto_reboot udpcparam=$udpcparam_temp urlse3=$urlse3 num_op=$num_op dhcp=$dhcp dhcp_iface=$dhcp_iface kernel=$sysresccd_kernel $opt_url_authorized_keys'", $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_recepteur[$i]';"; $suppr=mysql_query($sql); $timestamp=time(); $sql="INSERT INTO se3_tftp_action SET id='$id_recepteur[$i]', mac='$mac_machine', name='$nom_machine', date='$timestamp', type='udpcast_recepteur', num_op='$num_op', infos='compr=$compr|disk=$disk|port=$port|enableDiskmodule=$enableDiskmodule|diskmodule=$diskmodule|netmodule=$netmodule|auto_reboot=$auto_reboot|udpcparam=${udpcparam}${ajout_kernel}';"; $insert=mysql_query($sql); if(!$insert) { echo "ECHEC de l'enregistrement dans 'se3_tftp_action'
\n"; $temoin_erreur="y"; } if($temoin_erreur=="n") { echo "OK\n"; // Application de l'action choisie: 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"; } } } } echo "

Retour au choix du/des parc(s).

\n"; } } else { print (gettext("Vous n'avez pas les droits nécessaires pour ouvrir cette page...")); } // Footer include ("pdp.inc.php"); ?>