\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_machine=isset($_POST['id_machine']) ? $_POST['id_machine'] : (isset($_GET['id_machine']) ? $_GET['id_machine'] : NULL); $parametrage_action=isset($_POST['parametrage_action']) ? $_POST['parametrage_action'] : (isset($_GET['parametrage_action']) ? $_GET['parametrage_action'] : NULL); $distrib=isset($_POST['distrib']) ? $_POST['distrib'] : "slitaz"; $sysresccd_kernel=isset($_POST['sysresccd_kernel']) ? $_POST['sysresccd_kernel'] : "rescue32"; // Création de la table dès que possible: creation_tftp_tables(); // Paramètres SliTaz: /* $nom_image=isset($_POST['nom_image']) ? $_POST['nom_image'] : (isset($_GET['nom_image']) ? $_GET['nom_image'] : NULL); $src_part=isset($_POST['src_part']) ? $_POST['src_part'] : (isset($_GET['src_part']) ? $_GET['src_part'] : NULL); $dest_part=isset($_POST['dest_part']) ? $_POST['dest_part'] : (isset($_GET['dest_part']) ? $_GET['dest_part'] : NULL); */ $auto_reboot=isset($_POST['auto_reboot']) ? $_POST['auto_reboot'] : (isset($_GET['auto_reboot']) ? $_GET['auto_reboot'] : NULL); $delais_reboot=isset($_POST['delais_reboot']) ? $_POST['delais_reboot'] : (isset($_GET['delais_reboot']) ? $_GET['delais_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); echo "

".gettext("Action rapport 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(); } } $temoin_fichiers_requis="y"; $chemin_tftpboot="/tftpboot"; $tab_udpcast_file=array("bzImage", "rootfs.gz"); for($loop=0;$loop".$chemin_tftpboot."/".$tab_udpcast_file[$loop]." est absent.
\n"; echo "Effectuez le telechargement SliTaz en Configurer le module TFTP
\n"; $temoin_fichiers_requis="n"; } } if($temoin_fichiers_requis=="n") { echo "

ABANDON : Un ou des fichiers requis sont manquants.

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

Cette page doit vous permettre de programmer une récupération d'informations sur les machines choisies pour connaître les partitions, les sauvegardes présentes,...

\n"; 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"; // 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 à l'index.

\n"; } else { if(!isset($_POST['parametrage_action'])){ echo "
\n"; echo "\n"; $max_eff_parc=0; 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"; 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"; //dernier rapport $sql="SELECT * FROM se3_tftp_rapports WHERE name='".$mp[$loop]."' ORDER BY date DESC LIMIT 1;"; $res_rapport_tftp=mysql_query($sql); if(mysql_num_rows($res_rapport_tftp)>0) { $lig=mysql_fetch_object($res_rapport_tftp); echo "\n"; } else { echo "\n"; } // Action programmée echo "\n"; echo "\n"; } } echo "
NomEtatSessionConfig DHCPDernier RapportSauvegardeRapport
\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 "
"; echo "id\" target='_blank'>".$lig->date."\n"; $st="$lig->statut"; if($st=="SUCCES") { $cl="green"; } else { $cl="red"; } echo ""."$lig->statut".""; echo "".gettext("Aucun rapport")."\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 de la remontée de rapport

\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 programmer une remontée de rapport.

\n"; echo "

Retour au choix du/des parc(s).

\n"; include ("pdp.inc.php"); exit(); } echo "
\n"; echo "\n"; // Liste des parcs: for($i=0;$i\n"; } // Liste des machines sur lesquelles lancer la sauvegarde: $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; echo "

Choisissez les paramètres pour la remontée de rapport:
\n"; $temoin_sysresccd=check_sysresccd_files(); if($temoin_sysresccd=="y") { // Il faut aussi le noyau et l'initram.igz dans /tftpboot, echo "
\n"; 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 "Utiliser le noyau : "; echo "\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "
\n"; } else { echo "\n"; } 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 "
Nom de la sauvegarde: \n"; echo "\n"; echo "
Partition à sauvegarder: \n"; echo "\n"; echo "
Partition de stockage: \n"; echo "ou à défaut W$ après la partition système) est bien la partition de stockage.')")."\">\n"; echo "
Url authorized_keys : \n"; echo "\n"; echo "\n"; echo "\n"; echo "
Rebooter en fin de rapport: \n"; echo "\n"; echo "
Eteindre en fin de rapport: \n"; echo "\n"; echo "
Ne pas rebooter ni éteindre la machine
en fin de rapport:
\n"; echo "\n"; echo "
\n"; echo "Délai avant reboot/arrêt:\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 "
\n"; echo "

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

NOTES:

\n"; echo "
    \n"; //echo "
  • Ce choix nécessite une partition de sauvegarde sur la machine.
  • \n"; echo "
  • Attention: Le délai avant reboot ajouté au temps de l'opération lancée doit dépasser la périodicité du script controle_actions_tftp.sh en crontab.
    Ce délai doit aussi permettre de récupérer en http://IP_CLIENT/~hacker/Public/*.txt des informations sur le succès ou l'échec de l'opération.
    Une tâche cron se charge d'effectuer le 'wget' sur les infos, puis le remplissage d'une table MySQL.
    La tâche cron est lancée toutes les 60s.
  • \n"; echo "
  • 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"; echo "
\n"; } else { echo "

Validation des paramètres de la récupération de rapports

\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'); } 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"; */ echo "\n"; echo "\n"; echo "\n"; echo "\n"; //if($auto_reboot=='y') { if(($auto_reboot=='y')||($auto_reboot=='halt')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } echo "
Nom de l'image: \n"; if($nom_image=="") {echo "Nom généré automatiquement lors de la sauvegarde.";} else {echo $nom_image;} echo "
Partition à sauvegarder: \n"; if($src_part=="auto") {echo "Détectée automatiquement lors de la sauvegarde.";} else {echo $src_part;} echo "
Partition de stockage de la sauvegarde: \n"; if($dest_part=="auto") {echo "Détectée automatiquement lors de la sauvegarde.";} else {echo $dest_part;} echo "
Rebooter en fin d'opération: \n"; echo $auto_reboot; echo "
Délai avant reboot: \n"; echo "$delais_reboot s"; echo "
\n"; echo "

Génération du fichier dans /tftpboot/pxelinux.cfg/ pour la remontée de rapports.
\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;$i"; $res=mysql_query($sql); if(mysql_num_rows($res)==0) { echo "La 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; 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"; if($distrib=='slitaz') { $ajout_kernel=""; } else { $ajout_kernel="|kernel=$sysresccd_kernel"; } if($distrib=='slitaz') { //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'rapport' '$corrige_mac' '$ip_machine' '$nom_machine' '$auto_reboot' '$delais_reboot'", $retour); $resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'rapport' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine auto_reboot=$auto_reboot delais_reboot=$delais_reboot'", $retour); } else { //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_rapport' '$corrige_mac' '$ip_machine' '$nom_machine' '$auto_reboot' '$delais_reboot'", $retour); $resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_rapport' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour); } if(count($retour)>0){ //echo "

"; //echo "Il semble que la génération du fichier ait échoué...
\n"; echo "ECHEC de la génération du fichier
\n"; for($j=0;$j\n"; } $temoin_erreur="y"; //echo "

\n"; } 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='rapport', num_op='$num_op', infos='auto_reboot=$auto_reboot|delais_reboot=${delais_reboot}${ajout_kernel}';"; $insert=mysql_query($sql); if(!$insert) { echo "ECHEC de l'enregistrement dans 'se3_tftp_action'
\n"; $temoin_erreur="y"; } // Génération du lanceur de récupération: //$dossier="/var/se3/tmp/tftp/$id_machine[$i]"; $dossier="/etc/se3/www-tools/tftp/$id_machine[$i]"; if(!file_exists($dossier)) { mkdir($dossier,0700);} $lanceur_recup="$dossier/lanceur_recup_rapport_action_tftp.sh"; $fich=fopen($lanceur_recup,"w+"); // On donne 4H pour que la récup soit effectuée: $timestamp_limit=time()+4*3600; //fwrite($fich,"/usr/share/se3/scripts/recup_rapport.php '$id_machine[$i]' '$ip_machine' 'rapport' '$timestamp_limit'"); if($distrib=='slitaz') { $mode_rapport="rapport"; } else { $mode_rapport="rapport_sysresccd"; } fwrite($fich,"sudo /usr/share/se3/scripts/recup_rapport.php '$id_machine[$i]' '$ip_machine' '$mode_rapport' '$timestamp_limit'"); fclose($fich); chmod($lanceur_recup,0750); // Ménage dans les tâches précédentes @exec("sudo /usr/share/se3/scripts/se3_tftp_menage_atq.sh $id_machine[$i]",$retour); // Planification de la tâche //@exec("at -f $lanceur_recup now + 1 minute 2>/dev/null",$retour); @exec("at -f $lanceur_recup now + 1 minute 2>$dossier/at.txt",$retour); //passthru("at -f $lanceur_recup now + 1 minute",$retour); if($retour) { echo "ECHEC de la planification de la tâche.
\n"; for($j=0;$j\n";} //echo "$retour
\n"; $temoin_erreur="y"; } /* // Avec ça on arrive à récupérer l'info: // -warning: commands will be executed using /bin/sh - // -job 1572 at 2008-03-01 15:13 - // Mais une fois le at repoussé, ce n'est plus www-se3, mais root qui en est proprio... if(file_exists("$dossier/at.txt")) { $fp=fopen("$dossier/at.txt","r"); while(!feof($fp)) { $ligne=fgets($fp,4096); echo "

-".$ligne."-

"; } fclose($fp); } */ /* $fp=popen("at -f $lanceur_recup now + 1 minute","r"); while(!feof($fp)) { $ligne=fgets($fp,4096); echo "

-".$ligne."-

"; } fclose($fp); */ if($temoin_erreur=="n") { //echo "OK
\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-$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 "

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"); ?>