Jacques Foucry bio photo

Jacques Foucry

IT, râleur et faiseur de pain

Email



Si vous avez un serveur un tant soit peu important avec plusieurs utilisateurs, il est fort probable que vous utilisiez OpenDirectory. Vous avez même sans doute remarqué, dans Server Admin, rubrique OpenDirectory, outils Archives, qu’il est possible de faire une archive de votre OpenDirectory et même de faire la restauration d’une telle sauvegarde.

Seulement, voilà, combien d’entre vous passe une fois par semaine sur cette interface pour faire une archive ? Levez la main… Oui… peu en réalité. Nous sommes tous d’accord, nous avons autre chose à faire… et pas de stagiaire sous la main. Nous allons donc utiliser les possibilités Unixienne de Mac OS X Server en scriptant la génération de cette archive.

Le script, explication de texte

Le script que je vous propose est relativement complet. Il commence par vérifier que c’est bien root qui lance le script. Il vérifie ensuite que la destination de vos sauvegardes existe et si ce n’est pas le cas crée le répertoire.

#!/bin/sh
LOGS="/tmp/logs.txt"
COMMANDS="/tmp/sacommands.txt"
LOCATION=/Backup</p>
if [ `whoami` != 'root' ]
then
    echo "This script must be run by root. Use sudo"
    exit 1
fi
if [ ! -d $LOCATION ]
then
    mkdir $LOCATION
fi 

Le script par lui même commence. Tout d’abord en recherchant les archives de plus de 7 jours et en les supprimant, grâce à notre amie la commande find.

find $LOCATION/odbackup* -mtime +6 -exec rm -rf {} ;

Nous allons créer un fichier temporaire dont le nom et le chemin ont été définis plus haut dans la variable COMMAND. Nous changeons également temporairement le UMASK pour être sûrs que ce fichier ne sera lu que par root.

(umask 077 ; touch /tmp/sacommands.txt)

Définition de la variable FILE, qui contient le nom du fichier de sauvegarde (odbackup- suivit de la date et de l’heure). Ensuite nous allons envoyer dans notre fichier $COMMAND, les trois lignes qui font nous permettre de faire la sauvegarde.

FILE=odbackup-`date "+%Y%m%d%H%M%S"`
echo "dirserv:backupArchiveParams:archivePassword = OD_PASS" > $COMMANDS
echo "dirserv:backupArchiveParams:archivePath = $LOCATION/$FILE" >> $COMMANDS
echo "dirserv:command = backupArchive" >> $COMMANDS

La première ligne définit le mot de passe de votre archive. Celui-ci peut être vide. La deuxième indique le chemin et le nom du fichier de sauvegarde, et la troisième est la commande de sauvegarde elle-même.

Cette série de ligne est ensuite envoyée (par le jeu des redirections POSIX) vers la version en ligne de commande de ServerAdmin

# /usr/sbin/serveradmin command < $COMMANDS

Dans la variable ret se trouve le résultat de cette commande. La suite du script ne fait qu’envoyer un mail indiquant la réussite ou l’échec de l’opération.

ret=$?
echo "To: admin@foucry.net" > $LOGS
echo "From: Server Daily Report <admin@leopardserver.foucry.net>" >> $LOGS
echo "Subject: Daily ODM Backup Report" - `date` >> $LOGS
if [ $ret -eq 0 ]
then
    echo "The Open Directory Master at `hostname` has been successfully backed up. It's location is $LOCATION/$FILE and will be available for seven days.
After seven days, the archive will be deleted." >> $LOGS
else
    echo "The Opend Directory Master at `hostname` has NOT been SUCCESSFULLY backed up. Please do a manual backup using Server Admin application." >> $LOGS
fi
cat $LOGS | sendmail -f admin@foucry.net -t

Pour finir, les fichiers $COMMAND et $LOGS sont supprimés.

# rm $LOGS
# rm $COMMANDS

Sauvegarder le script où bon vous semble. Chez moi, il est dans /usr/local/bin et s’appelle odbackup.sh.

Changez le propriétaire en root et changez les droits pour autoriser l’exécution par le propriétaire.

# chown root odbackup.sh
# chmod u+x,go-x odbackup.sh

Lancement automatique

Il nous reste à préparer le lancement automatique de notre script. Nous allons utiliser launchd. Vous pouvez utiliser l’application Lingon pour réaliser le fichier de paramètre.

Nous devons faire un User Daemon. Faites en sorte qu’il soit lancé à une périodicité qui vous convienne.

Une fois le fichier launchd enregistré dans /Library/LaunchDaemons, vous devez vous arranger pour que celui-ci soit pris en compte.

Comme Lingon vous le suggère, vous pourriez redémarrer votre serveur OpenDirectory en pleine journée et vous attirer les foudres de vos utilisateurs et de vos chefs. Nous allons, une fois de plus, utiliser la ligne de commande.

La commande launchctl nous permet d’avoir des informations sur les éléments qui sont pris en charge par launchd.

# sudo launchctl list | grep backup
-       0       com.apple.backupd
-       0       com.apple.backupd-wake
-       0       com.apple.backupd-auto
-       0       com.apple.backupd-attach
-       0       net.foucry.backup

Plusieurs informations apparaissent sur divers backups lancés par launchd, mais rien sur celui que nous venons de préparer. Il faut demander à launchd de lire le fichier de configuration.

# sudo launchclt load /Library/LaunchDaemons/fichier_de_definition

Une fois le fichier de définition lu, vous devriez voir les informations sur votre backup d’OpenDirectory.

# sudo launchctl list | grep backup
-       0       net.foucry.backup_OD
-       0       com.apple.backupd
-       0       com.apple.backupd-wake
-       0       com.apple.backupd-auto
-       0       com.apple.backupd-attach
-       0       net.foucry.backup

Billet Précédent


Laisser un commentaire

Les commentaires sont soumis à modération.