Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
backuppc [Le 26/10/2017, 14:24] 0ol [Ajouter la machine à sauvegarder à la liste.] |
backuppc [Le 07/10/2019, 14:58] L'Africain [Installation] |
||
---|---|---|---|
Ligne 54: | Ligne 54: | ||
=== Ajout de l'utilisateur dans le groupe backuppc :=== | === Ajout de l'utilisateur dans le groupe backuppc :=== | ||
- | Pour démarrer backuppc, il faut ajouter l'utilisateur de la session dans le groupe backuppc. Pour cela, il faut exécuter la ligne de commande suivante : | + | Pour démarrer backuppc, il faut ajouter l'utilisateur de la session dans le groupe backuppc. Pour cela, il faut exécuter la ligne de commande suivante : <code>sudo adduser [MON_USER] backuppc</code> |
- | + | ||
- | <code>sudo adduser [MON_USER] backuppc</code> | + | |
=== Ajout du fichier apache.conf === | === Ajout du fichier apache.conf === | ||
- | Comme l'installation ne copie pas le /etc/backuppc/apache.conf sur le serveur apache2. Il faut le faire soit même en copiant le fichier dans le répertoire /etc/apache2/conf-available/ avant de rendre actif le site: | + | Comme l'installation ne copie pas le **/etc/backuppc/apache.conf** sur le serveur apache2, il faut le faire soi-même en copiant le fichier dans le répertoire **/etc/apache2/site-available/** avant de rendre actif le site, pour cela utilisez la commande suivante : <code>sudo cp /etc/backuppc/apache.conf /etc/apache2/site-available/backuppc.conf</code> |
- | * Copie du fichier .conf dans /etc/apache2/conf-available/ | + | Puis activez le site : <code>sudo a2ensite backuppc.conf</code> |
- | <code>sudo cp /etc/backuppc/apache.conf /etc/apache2/conf-available/backuppc.conf</code> | + | |
- | * Activation du site | + | |
- | sudo a2ensite backuppc.conf | + | |
| | ||
<note> | <note> | ||
Ligne 445: | Ligne 440: | ||
Pour parer à cela, vous êtes invité à lire le dernier message de [[http://forum.ubuntu-fr.org/viewtopic.php?pid=2988204#p2988204|cette discussion]]</note> | Pour parer à cela, vous êtes invité à lire le dernier message de [[http://forum.ubuntu-fr.org/viewtopic.php?pid=2988204#p2988204|cette discussion]]</note> | ||
- | == autre exemple de fichier **wol.sh** qui conserve l'état précédent == | + | == autre exemple de fichiers **wol.sh** et **shutdown.sh** améliorés qui conservent l'état précédent == |
+ | Pour utiliser ces scripts, veuillez mettre le paramètre **UserCmdCheckStatus** à **1** dans la configuration, ou ajoutez cette ligne au fichier **/etc/backuppc/config.pl**: | ||
+ | <file>$Conf{UserCmdCheckStatus} = '1';</file> | ||
+ | ceci permet de dire à Backuppc de prendre en compte le code d'erreur des scripts de réveil/extinction. | ||
<file bash wol.sh> | <file bash wol.sh> | ||
#!/bin/bash | #!/bin/bash | ||
+ | |||
declare -i z | declare -i z | ||
z=0 | z=0 | ||
i=0 | i=0 | ||
filename=/var/lib/backuppc/$1.laststate | filename=/var/lib/backuppc/$1.laststate | ||
+ | echo "Starting wake on lan script" | ||
echo "Filename=$filename" | echo "Filename=$filename" | ||
cnt=$(ping -c 1 $1 | awk -F, '/received/{print $2*1}') | cnt=$(ping -c 1 $1 | awk -F, '/received/{print $2*1}') | ||
+ | |||
echo "Count ping to host $1 = $cnt" | echo "Count ping to host $1 = $cnt" | ||
+ | |||
if [ $cnt -eq 0 ]; then | if [ $cnt -eq 0 ]; then | ||
- | echo $cnt > $filename | + | echo $cnt > $filename |
- | echo "Send WOL to $1 and wait 1 minutes" | + | |
- | sudo /usr/bin/etherwake -i em1 $1 | + | # Time to wait for machine to boot in minutes |
- | sleep 1m | + | # Use value given as argument |
- | while [ $i = 0 -a $z -lt 15 ] | + | if [ -n "$2" ] && [ "$2" -eq "$2" ] 2>/dev/null; then |
- | do | + | min=$2 |
- | count=$(ping -c 5 $1 | awk -F, '/received/{print $2*1}') | + | else |
- | if [ $count -eq 0 ]; then | + | echo " Second argument given is not a valid number! : $2" |
- | echo "$1 is down" | + | echo " Using default value: 2 minutes" |
- | else | + | min=2 |
- | i=1 | + | fi |
- | fi | + | m=$min"m" |
- | sleep 10s | + | |
- | z=z+1 | + | echo "Send WOL to $1 and wait $min minutes" |
- | done | + | sudo /usr/sbin/etherwake -i enp5s0 $1 |
+ | sleep $m | ||
+ | while [ $i = 0 -a $z -lt 18 ] | ||
+ | do | ||
+ | count=$(ping -c 5 $1 | awk -F, '/received/{print $2*1}') | ||
+ | if [ $count -eq 0 ]; then | ||
+ | echo "$1 is down" | ||
+ | if [ $z -eq 17 ]; then | ||
+ | echo "$1 not up after `expr $min + 3` minutes... exiting" | ||
+ | exit 1 | ||
+ | fi | ||
+ | else | ||
+ | i=1 | ||
+ | echo "$1 is up" | ||
+ | exit 0 | ||
+ | fi | ||
+ | sleep 10s | ||
+ | z=z+1 | ||
+ | done | ||
else | else | ||
- | echo $cnt > $filename | + | echo $cnt > $filename |
+ | exit 0 | ||
fi</file> | fi</file> | ||
+ | __**Explication:**__ Ce script prend deux arguments: le nom d'hôte de la machine en premier et un nombre en deuxième (correspondant au nombre de minutes à attendre une fois que la commande etherwake est executée). | ||
+ | * le script exécute la commande etherwake sur la machine spécifiée | ||
+ | * puis, la boucle while teste si la machine répond au ping | ||
+ | * après le nombre de minutes spécifiées en second argument, si la machine est en ligne, la sauvegarde est effectuée. Si la machine ne répond pas, le script attend encore 3 minutes supplémentaires | ||
+ | * si après les 3 minutes supplémentaires la machine ne répond toujours pas, le script s'arrête et renvoi un code d'erreur, qui est ensuite interprêté par backuppc | ||
- | == et le fichier **shutdown.sh** qui prend en compte l'état précédent == | + | <note>Cette commande :<file>sudo /usr/sbin/etherwake -i enp5s0 $1</file>peut varier selon les machines. Vous devrez peut-être l'adapter à votre configuration.\\ |
+ | Ici 'enp5s0' est l'interface par laquelle est envoyée le paquet magique via ethernet. $1 est la variable du nom d'hôte (ne doit pas être modifiée). | ||
+ | </note> | ||
+ | |||
+ | Ainsi pour utiliser ce script il faut ajouter ce paramètre à la configuration: | ||
+ | <file>$Conf{DumpPreUserCmd} = '/etc/backuppc/wol.sh $host 3';</file> | ||
+ | Cette commande envoi le paquet magique et attend ensuite 3 minutes (à adapter selon vos besoins) le réveil de la machine (si rien n'est donné en second argument, le script utilise la valeur de 2 minutes par défaut). | ||
<file bash shutdown.sh> | <file bash shutdown.sh> | ||
#!/bin/bash | #!/bin/bash | ||
- | filename=/var/lib/backuppc/$1.laststate | + | # Backuppc user script |
- | echo "Filename=$filename" | + | |
- | declare -i laststate | + | if [ "$#" != 2 ]; then |
- | read laststate < $filename | + | echo |
- | echo "Last State Host $1 = $laststate" | + | echo "The BackupPC user script takes two arguments:" |
- | if [ $(date +%k) -lt 07 -o $(date +%k ) -gt 22 ] | + | echo " First: a host name ( with a corresponding /etc/hosts entry )" |
+ | echo " Second: - either a number corresponding to the output of the backup process (0 = failed / 1 = success)" | ||
+ | echo " - OR -f to force shutdown a host" | ||
+ | echo | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | # Array of computers, in the form: [hostname]='Username%Password' | ||
+ | # these must be Administrator's accounts | ||
+ | # Modify these according to your needs | ||
+ | declare -A names | ||
+ | names=( | ||
+ | [hostname1]='adminuser1%password1' | ||
+ | [hostname2]='adminuser2%password2' | ||
+ | [hostname3]='adminuser3%password3' | ||
+ | ) | ||
+ | |||
+ | for i in "${!names[@]}" | ||
+ | do | ||
+ | if [ $i = $1 ]; then | ||
+ | host_name=$i | ||
+ | upwd=${names[$i]} | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | # Exit if no corresponding host name found | ||
+ | [ "$host_name" = "" ] && echo "Host unknown!" && exit 1 | ||
+ | |||
+ | # To stop a pc, if -f argument given ( wol script wasn't used and there is no host file ) | ||
+ | if [ "$2" = "-f" ] | ||
then | then | ||
- | if [ $2 != 1 ] | + | /usr/bin/net rpc SHUTDOWN -f -I $host_name -U "$upwd" -t 1 |
- | then | + | exit 0 |
- | if [ $laststate != 1 ] | + | fi |
- | then | + | |
- | echo "Sent SHUTDOWN to host $1" | + | # File to record the host status |
- | /usr/bin/net rpc SHUTDOWN -f -I $1 -U 'Administrateur%motdepasse' -t 30 | + | filename=/var/lib/backuppc/$host_name.laststate |
- | else | + | if [ -f $filename ] |
- | echo "SHUTDOWN not sent to $1 cause Host already UP before" | + | then |
- | #echo sauvegarde terminé avec succès. | smbclient -M $1 -U 'Administrateur%motdepasse' | + | echo "Filename=$filename" |
- | fi | + | declare -i laststate |
- | fi | + | read laststate < $filename |
+ | echo "Last State Host $host_name = $laststate" | ||
else | else | ||
- | if [ $2 = 1 ] | + | echo "Missing host file!" |
- | then | + | exit 1 |
- | echo "Sauvegarde $1 OK" | + | |
- | #echo sauvegarde terminé avec succès. | smbclient -M $1 -U 'Administrateur%motdepasse' | + | |
- | fi | + | |
- | if [ $laststate = 0 ] | + | |
- | then | + | |
- | echo "Sent SHUTDOWN to host $1" | + | |
- | /usr/bin/net rpc SHUTDOWN -f -I $1 -U 'Administrateur%motdepasse' -t 30 | + | |
- | fi | + | |
fi | fi | ||
- | echo "Delete $filename" | ||
- | unlink $filename</file> | ||
+ | # Actions after backup | ||
+ | if [ $2 = 1 ] # Successfull backup | ||
+ | then | ||
+ | echo "Backup of $host_name OK" | ||
+ | if [ $laststate = 0 ] | ||
+ | then | ||
+ | # Last state off, send shutdown | ||
+ | echo "Sent SHUTDOWN to host $host_name" | ||
+ | /usr/bin/net rpc SHUTDOWN -f -I $host_name -U "$upwd" -t 30 | ||
+ | else | ||
+ | # Last state : up | ||
+ | echo "SHUTDOWN not sent to $host_name cause Host already UP before" | ||
+ | fi | ||
+ | elif [ $2 = 0 ] # backup error | ||
+ | then | ||
+ | echo "Problem during backup of $host_name" | ||
+ | # Only shutdown after unsuccesfull backup during out of office hours | ||
+ | #if [ $(date +%k) -lt 07 -o $(date +%k ) -gt 22 ] | ||
+ | #then | ||
+ | #/usr/bin/net rpc SHUTDOWN -f -I $host_name -U "$upwd" -t 30 | ||
+ | #fi | ||
+ | fi | ||
+ | |||
+ | if [ -f $filename ] | ||
+ | then | ||
+ | echo "Delete $filename" | ||
+ | unlink $filename | ||
+ | fi</file> | ||
+ | |||
+ | __**Explication:**__ Ce script prend deux arguments: le nom d'hôte de la machine en premier et le code de résultat du backup en deuxième (0 = échec / 1 = succès). | ||
+ | * si le backup est réussi: si la machine était précédemment éteinte, le script exécute la commande d'arrêt avec les paramètres nom d'utilisateur/ mot de passe tels qu'enregistrés dans le script | ||
+ | * si la machine était allumée avant, la commande d'arrêt, n'est pas envoyée | ||
+ | * si le second argument est '-f' (pour forcer), la machine correspondante est arrêtée quel que soit l'état précédent | ||
+ | |||
+ | Ainsi pour utiliser ce script il faut ajouter ce paramètre à la configuration: | ||
+ | <file>$Conf{DumpPostUserCmd} = '/etc/backuppc/shutdown.sh $host $xferOK';</file> | ||
+ | |||
+ | <note>Cette commande :<file>/etc/backuppc/shutdown.sh $host -f</file>peut être utilisé en ligne de commande directement pour éteindre une machine en dehors de backuppc.</note> | ||
==== Configuration de backuppc pour utiliser les scripts ==== | ==== Configuration de backuppc pour utiliser les scripts ==== | ||
Ligne 572: | Ligne 662: | ||
----- | ----- | ||
- | // Contributeurs : [[:utilisateurs:Cyprien]],wouldsmina, [[:utilisateurs:naoli]], snoopysnoopy [[:utilisateurs:Ool]], gg [[:utilisateurs:gfontaniere]] // | + | // Contributeurs : [[:utilisateurs:Cyprien]],wouldsmina, [[:utilisateurs:naoli]], snoopysnoopy [[:utilisateurs:Ool]], gg [[:utilisateurs:gfontaniere]], mathieuc // |