\n";
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 restauration
\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 à restaurer.
\n";
echo "Retour au choix du/des parc(s).
\n";
include ("pdp.inc.php");
exit();
}
echo "\n";
echo "\n";
//======================================================
$temoin_svg_existantes=0;
$chaine_tab="Liste des sauvegardes existantes:
\n";
$chaine_tab.="\n";
$chaine_tab.="\n";
$chaine_tab.="Id | \n";
$chaine_tab.="Nom | \n";
$chaine_tab.="Partition | \n";
$chaine_tab.="Sauvegarde | \n";
$chaine_tab.="Date | \n";
$chaine_tab.="Descriptif | \n";
$chaine_tab.="
\n";
for($i=0;$i";
$res=mysql_query($sql);
$sql="SELECT * FROM se3_tftp_sauvegardes WHERE id='".$id_machine[$i]."' ORDER BY date DESC;";
//echo "$sql
";
$res=mysql_query($sql);
if(mysql_num_rows($res)>0) {
while($lig=mysql_fetch_object($res)) {
$chaine_tab.="\n";
$chaine_tab.="$lig->id | \n";
$chaine_tab.="$lig->name | \n";
$chaine_tab.="$lig->partition | \n";
$chaine_tab.="$lig->image | \n";
$chaine_tab.="".mysql_date_to_fr_date($lig->date)." | \n";
$chaine_tab.="$lig->descriptif | \n";
$chaine_tab.="
\n";
$temoin_svg_existantes++;
}
}
}
$chaine_tab.="
\n";
$chaine_tab.="
\n";
if($temoin_svg_existantes>0) {
echo $chaine_tab;
}
//======================================================
echo "NOTES:
\n";
echo "\n";
echo "- Ce choix nécessite une partition de sauvegarde sur la machine.
\n";
echo "- Si le nom de l'image est laissé vide, c'est la sauvegarde la plus récente tagguée 'SUCCES' qui est utilisée.
C'est-à-dire qu'il doit exister un fichier NOM_SAUVEGARDE.SUCCES.txt
Les sauvegardes sont recherchées dans un dossier /oscar/ à la racine de la partition (si le nom de l'image est laissé vide). \n";
echo "- Il faudra stocker dans une table les informations sur les sauvegardes effectuées/trouvées pour pouvoir ne proposer ici que des choix valides.
\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 la restauration 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 restauration
\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";
$sauvegarde_pref=crob_setParam('pref_distrib_svgrest', $distrib, 'Distrib preferee pour les sauvegardes et restaurations');
$temoin_sysresccd=check_sysresccd_files();
if($temoin_sysresccd=="y") {
echo "\n";
echo "Génération du fichier dans /tftpboot/pxelinux.cfg/ pour la restauration.
\n";
// BOUCLE SUR LA LISTE DES $id_machine[$i]
// Numéro de l'opération de sauvegarde:
$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 'restaure' '$corrige_mac' '$ip_machine' '$nom_machine' '$nom_image' '$src_part' '$dest_part' '$auto_reboot' '$delais_reboot'", $retour);
$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=$src_part dest_part=$dest_part auto_reboot=$auto_reboot delais_reboot=$delais_reboot'", $retour);
$info_src_part=$src_part;
}
else {
//$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' '$corrige_mac' '$ip_machine' '$nom_machine' '$nom_image' '$src_part' '$dest_part' '$auto_reboot' '$delais_reboot'", $retour);
//$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=$src_part dest_part=$dest_part auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour);
if($type_src_part=='smb') {
//$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=smb:$src_compte:$src_mdp@$src_srv:$src_partage:$src_sous_dossier dest_part=$dest_part type_svg=$type_svg auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour);
$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=smb:$src_compte:$src_mdp@$src_srv:$src_partage:$src_sous_dossier dest_part=$dest_part auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour);
$info_src_part="smb:$src_compte:XXXXXXXX@$src_srv:$src_partage:$src_sous_dossier";
}
else {
//$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=$src_part dest_part=$dest_part type_svg=$type_svg auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour);
$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=$src_part dest_part=$dest_part auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour);
$info_src_part=$src_part;
}
}
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='restauration',
num_op='$num_op',
infos='nom_image=$nom_image|src_part=$info_src_part|dest_part=$dest_part|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+");
$timestamp_limit=time()+4*3600;
//fwrite($fich,"/usr/share/se3/scripts/recup_rapport.php '$id_machine[$i]' '$ip_machine' 'restauration' '$timestamp_limit'");
if($distrib=='slitaz') {
$mode_restauration="restauration";
}
else {
$mode_restauration="restauration_sysresccd";
}
fwrite($fich,"sudo /usr/share/se3/scripts/recup_rapport.php '$id_machine[$i]' '$ip_machine' '$mode_restauration' '$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);
if($retour) {
echo "ECHEC de la planification de la tâche.
\n";
for($j=0;$j\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");
?>