Archives pour la catégorie ‘Sauvegarde’

Rsync : copie SSH avec sudo préalable

root@dst:~# cat /etc/sudoers.d/common
user   ALL=(ALL:ALL) NOPASSWD:ALL
root@src:~# rsync -e "ssh" --rsync-path "sudo rsync" user@dst:/etc

Xen : sauvegarde d’un VM Windows par LVM + clonage NTFS

root@xen:~# apt-get install ntfsprogs kpartx

Sauvegarde

root@xen:~# lvcreate -s -L1G -nvm_backup /dev/vg/xen_vm
root@xen:~# kpartx -a /dev/vg/xen_vm_backup
root@xen:~# ls -l /dev/mapper/vg-xen_vm_backup*
lrwxrwxrwx 1 root root      7 Oct 24 12:21 /dev/mapper/vg-xen_vm_backup -> ../dm-6
lrwxrwxrwx 1 root root      7 Oct 24 12:22 /dev/mapper/vg-xen_vm_backup1 -> ../dm-9
root@xen:~# ntfsclone -s -o vm-20121024.img /dev/mapper/vg-xen_vm_backup1
root@xen:~# lvdisplay vg/xen_vm > vm-20121024.txt
root@xen:~# kpartx -d /dev/vg/xen_vm_backup
root@xen:~# lvremove vg/xen_vm_backup

Restauration

root@xen:~# kpartx -a /dev/vg/xen_vm
root@xen:~# ntfsclone -r -O /dev/mapper/vg-xen_vm vm-20121024.img
root@xen:~# kpartx -d /dev/vg/xen_vm

BackupPC : script de suppression des backups

#!/bin/sh
#
#this script contributed by Matthias Meyer
#note that if your $Topdir seems to be wrong (because it is empty), the script will ask you
#the new location.
#
#10/2009 JJK: Modified by Jeffrey J. Kosowsky
#    add --nightly
#    check if user eguals root or backuppc
#11/2009 MMT: Modified by Matthias Meyer
#    add --remove
#
#10/2010 MMT: Modified by Matthias Meyer
#    check /etc/backuppc as well as /etc/BackupPC
#
#07/2012 HB: Modified by Boris HUISGEN
#    fix run_BackupPC_nightly to detect install/bin directories

usage="\
Usage: $0 [-c <client> [-d <backupnumber> -b <before data> -r [-f]] | [-l]] | [-n]

Delete specified client backups.

Options:
-c <client>    - client machine for which the backup was made
-d <number>    - number of Backup which should be deleted
-b <date>    - delete all backups before this date (YYYY-MM-DD)
-r        - remove the entire client
-f        - force to run Backuppc_nightly so the space got free afterwards
-n        - only run Backuppc_nightly
-l        - list the backups which made for <client>
-n        - Just run BackupPC_nightly (even if no backups deleted)
-h        - this help
"
declare -i len        # try "typeset" instead declare if you have problems
declare TopDir LogDir    # directories, evaluated by /etc/backuppc/config.pl
declare configDir

function run_BackupPC_nightly ()
{
installdir=`grep $Conf{InstallDir} $configDir/config.pl | awk '{print $3}'`
len=${#installdir}-3
installdir=${installdir:1:len}
path=$installdir/bin
if [ ! -e $path/BackupPC_serverMesg ]; then path="/usr/share/BackupPC/bin"; fi
echo "Running BackupPC_nightly..."
$path/BackupPC_serverMesg BackupPC_nightly run
$path/BackupPC_serverMesg log I honestly apologize for the inconvenience
echo `date "+%Y-%m-%d %T"` BackupPC_deleteBackup BackupPC_nightly politely scheduled via daemon >> $LogDir/LOG
}

#JJK: NOTE NFS shares may only be accessible by 'backuppc' (not even by root if not 'no_root_squash') so run as user 'backuppc'
[ "`id -un`" != "backuppc" -a "`id -un`" != "root" ] && echo "Must be either 'root' or 'backuppc' to run" && exit
[ "`id -un`" != "backuppc" ] && exec su backuppc -s /bin/bash -c "$0 $*"

while test $# -gt 0; do
case "$1" in
-c | --client )
shift; client=`echo $1 | tr "[:upper:]" "[:lower:]"`; shift;;
-b | --before )
shift; bDate=$1; shift;;
-d | --delete )
shift; bNumber=$1; shift;;
-r | --remove )
entire="true"; shift;;
-f | --force )
nightly="true"; shift;;
-n | --nightly )
nightlyonly="true"; shift;;
-l | --list )
list="true"; shift;;
* | -h | --help)
echo "$usage"
exit 0
;;
esac
done

if [ -z $nightlyonly ] && ( [ -z "$client" ] || [ -z $list ] && [ -z $bNumber ] && [ -z $bDate ] && [ -z $entire ] )
then
echo "$usage"
exit 0
fi

if [ -e /etc/backuppc/config.pl ]; then configDir="/etc/backuppc"
elif [ -e /etc/BackupPC/config.pl ]; then configDir="/etc/BackupPC"
else
echo "BackupPCs config.pl not found"
exit 1
fi

TopDir=`grep '^\$Conf{TopDir}' $configDir/config.pl | awk '{print $3}'`
len=${#TopDir}-3
TopDir=${TopDir:1:len}

ls $TopDir/pc > /dev/null 2>&1
while [ $? != 0 ]
do
read -p "examined $TopDir seems wrong. What is TopDir ? " TopDir
ls $TopDir/pc > /dev/null 2>&1
done

LogDir=`grep '^\$Conf{LogDir}' $configDir/config.pl | awk '{print $3}'`
len=${#LogDir}-3
LogDir=${LogDir:1:len}
if [ ! -e $LogDir/LOG ]; then LogDir="$TopDir/log"; fi

if [ ! -z $nightlyonly ]
then
run_BackupPC_nightly
exit 0
elif [ ! -z $entire ]
then
# the entire host should be removed. Therefore we will remove him
# from the host list as well as his client configuration
while read CLine
do
host=`echo $CLine | awk '{print $1}' | tr "[:upper:]" "[:lower:]"`
if [ "$host" != "$client" ]
then
echo "$CLine" >> $configDir/hosts.new
fi
done < $configDir/hosts
chown --reference=$configDir/hosts $configDir/hosts.new
chmod --reference=$configDir/hosts $configDir/hosts.new
mv $configDir/hosts.new $configDir/hosts > /dev/null 2>&1
rm -f $configDir/$client.pl* > /dev/null 2>&1
fi

ls $TopDir/pc/$client > /dev/null 2>&1
if [ $? != 0 ]
then
echo "$client have no backups"
exit 1
fi

if [ ! -z $list ]
then
while read CLine
do
BackupNumber=`echo $CLine | awk '{print $1}'`
BackupType=`echo $CLine | awk '{print $2}'`
BackupTime=`stat -c "%y" $TopDir/pc/$client/$BackupNumber/backupInfo | awk '{print $1}'`
echo "BackupNumber $BackupNumber - $BackupType-Backup from $BackupTime"
done < $TopDir/pc/$client/backups
exit 0
fi

if [ ! -z $bNumber ] && [ ! -e $TopDir/pc/$client/$bNumber ]
then
echo "Backup Number $bNumber does not exist for client $client"
exit 1
fi

if [ -z $entire ] && [ -e $TopDir/pc/$client/backups ]
then
delete2full="false"
rm -f $TopDir/pc/$client/backups.new > /dev/null 2>&1
touch $TopDir/pc/$client/backups.new
while read CLine
do
BackupNumber=`echo $CLine | awk '{print $1}'`
BackupTime=`stat -c "%y" $TopDir/pc/$client/$BackupNumber/backupInfo | awk '{print $1}'`
BackupType=`echo $CLine | awk '{print $2}'`
if [ $BackupType == "full" ]
then
delete2full="false"
fi
if [ "$BackupTime" \< "$bDate" ] || [ $BackupNumber == "$bNumber" ] || [ $delete2full == "true" ]
then
if [ $BackupType == "full" ]
then
if [ $delete2full == "false" ]
then
delete2full="true"
else
delete2full="false"
fi
fi
bNumber=$BackupNumber
echo "remove $TopDir/pc/$client/$bNumber"
rm -fr $TopDir/pc/$client/$bNumber > /dev/null 2>&1
rm -f $TopDir/pc/$client/XferLOG.$bNumber > /dev/null 2>&1
rm -f $TopDir/pc/$client/XferLOG.$bNumber.z > /dev/null 2>&1
echo "`date +\"%Y-%m-%d %T\"` BackupPC_deleteBackup $TopDir/pc/$client/$bNumber deleted" >> $LogDir/LOG
echo "`date +\"%Y-%m-%d %T\"` BackupPC_deleteBackup remove backup $bNumber" >> $TopDir/pc/$client/LOG.`date +%m%Y`
fi
if [ "$BackupNumber" != "$bNumber" ]
then
echo "$CLine" >> $TopDir/pc/$client/backups.new
fi
done < $TopDir/pc/$client/backups
chown --reference=$TopDir/pc/$client/backups $TopDir/pc/$client/backups.new > /dev/null 2>&1
chmod --reference=$TopDir/pc/$client/backups $TopDir/pc/$client/backups.new > /dev/null 2>&1
mv $TopDir/pc/$client/backups.new $TopDir/pc/$client/backups > /dev/null 2>&1
echo "`date +\"%Y-%m-%d %T\"` BackupPC_deleteBackup $TopDir/pc/$client/backups updated" >> $LogDir/LOG
elif [ ! -z $entire ]
then
rm -fr $TopDir/pc/$client > /dev/null 2>&1
echo "`date +\"%Y-%m-%d %T\"` BackupPC_deleteBackup $TopDir/pc/$client entirely removed" >> $LogDir/LOG
fi
if [ ! -z $nightly ]
then
run_BackupPC_nightly
fi

exit $?

Exemple de suppression de la sauvegarde n°400 du client host1 avec nettoyage du pool :

carl # ./BackupPC_delete -c host1 -d 400 -f

BackupPC : script de génération d’un rapport d’audit

Le script a pour but de générer un rapport quotidien listant l’ensemble des fichiers ajoutés et modifiés suite au précédent job de sauvegarde d’un client BackupPC. L’exécution de ce script est évidemment à planifier quotidiennement.

# more BackupPC_auditReport
#!/bin/bash
#
# Boris HUISGEN
#
# This script will send a audit report log of the last client backup
#

BACKUPPC_CLIENT="server.my.domain"         # client hostname/IP address
BACKUPPC_LOGDIR=/home/backuppc/pc/server   # BackupPC log directory
BACKUPPC_BINDIR=/usr/local/BackupPC/bin    # BackupPC bin directory
MAIL=1                                     # enable/disable mail report
MAIL_TO="admin@my.domain"                  # mail to address
MAIL_CC="toto@my.domain"                   # mail cc addresses (comma list)

#
# script
#

XFER_PID="$1"                        # custom XFER PID

if [ ! -d $BACKUPPC_LOGDIR ]; then
   exit;
fi

CURRENT_DIR=$(pwd)

cd $BACKUPPC_LOGDIR

if [ -z "$XFER_PID" ]; then
   XFER_PID=$(find . -mindepth 1  -maxdepth 1 -type d | cut -d'/' -f2 | sort -nr | head -1)
fi

XFERLOG="$BACKUPPC_LOGDIR/XferLOG.$XFER_PID.z"

echo "Checking $XFERLOG..." > /tmp/report_$BACKUPPC_CLIENT
echo "" >> /tmp/report_$BACKUPPC_CLIENT

$BACKUPPC_BINDIR/BackupPC_zcat $XFERLOG | \
grep -e 'create  ' | grep -e '.*\.php' -e '.*\.html' | \
grep -v -i -e '.*/cache/.*' -e '.*templates_c/.*' \
>> /tmp/report_$BACKUPPC_CLIENT

if [ $MAIL -eq "1" ] ; then
   if [ -z $MAIL_CC ]; then
      cat /tmp/report_$BACKUPPC_CLIENT | mail -s '[backuppc] Audit report for '$BACKUPPC_CLIENT $MAIL_TO
   else
      cat /tmp/report_$BACKUPPC_CLIENT | mail -s '[backuppc] Audit report for '$BACKUPPC_CLIENT -c $MAIL_CC $MAIL_TO
   fi
else
   cat /tmp/report_$BACKUPPC_CLIENT
fi

rm /tmp/report_$BACKUPPC_CLIENT
cd $CURRENT_DIR

OpenVZ : script de sauvegarde des CT

Voici le script que j’utilise pour dumper quotidiennement l’ensemble de mes CT OpenVZ. Outre les options de dump habituelles, il  est possible de préciser le nombre de dumps à conserver localement sur le HN et d’activer une copie des dumps par rsync sur un serveur distant, en vue de constituer un historique plus conséquent. Il est possible de limiter le débit I/O de génération des dumps (I/O disque) tout comme pour la copie (I/O réseau) afin d’éviter une perturbation conséquente de votre serveur.

Bref, c’est simple et efficace, donc à placer en cron très rapidement !

#!/bin/bash
#
# vzbackup.sh
#
# Boris HUISGEN <bhuisgen@hbis.fr>
#

PATH=$PATH:/usr/sbin

# backup settings

VZDUMP_DIR="/home/backup/vz"    # backup directory
VZDUMP_MODE="snapshot"          # dump mode (stop/suspend/snapshot)
VZDUMP_COMPRESS="yes"           # compress dump files (yes/no)
VZDUMP_MAXFILES="3"             # maximum backups per CT to keep in local
VZDUMP_BWLIMIT="0"              # limit I/O bandwith (unit kbytes/s, 0 to disable)
VZDUMP_EXTRA_OPTIONS=""         # extra options (man vzdump)

# remote copy settings

RSYNC_ENABLE="yes"              # copy backup directory to remote server (yes/no)
RSYNC_HOST="backup.my.domain"   # remote server host
RSYNC_USER="root"               # remote server user
RSYNC_DIR="/home/backup/mcbain" # remote server directory
RSYNC_DELETE="no"               # delete old backups on remote server (set to no to keep a remote historic)
RSYNC_BWLIMIT="0"               # limit I/O bandwith (unit kbytes/s, 0 to disable)
RSYNC_EXTRA_OPTIONS=""          # extra options (man rsync)

#
# DO NOT MODIFY AFTER THIS LINE !!!
#

VZLIST="$(which vzlist)"
VZDUMP="$(which vzdump)"
VZDUMP_OPTIONS="--stdexcludes"

RSYNC="$(which rsync)"
RSYNC_OPTIONS="-avz"

function log {
 echo "[" `date "+%Y-%m-%d %H:%M:%S"` "] $1"
}

# create backup directory
if [ ! -d $VZDUMP_DIR ]
then
 mkdir -p $VZDUMP_DIR;
fi

# set vzdump options
VZDUMP_OPTIONS="$VZDUMP_OPTIONS --$VZDUMP_MODE"

if [ $VZDUMP_COMPRESS = "yes" ]
then
 VZDUMP_OPTIONS="$VZDUMP_OPTIONS --compress"
fi

VZDUMP_OPTIONS="$VZDUMP_OPTIONS --maxfiles $VZDUMP_MAXFILES"

if [ $VZDUMP_BWLIMIT -gt "0" ]
then
 VZDUMP_OPTIONS="$VZDUMP_OPTIONS --bwlimit $VZDUMP_BWLIMIT"
fi

if [ -z $VZDUMP_EXTRA_OPTIONS ]
then
 VZDUMP_OPTIONS="$VZDUMP_OPTIONS $VZDUMP_EXTRA_OPTIONS"
fi

# set rsync options
if [ $RSYNC_DELETE = "yes" ]
then
 RSYNC_OPTIONS="$RSYNC_OPTIONS --delete"
fi

if [ $RSYNC_BWLIMIT -gt "0" ]
then
 RSYNC_OPTIONS="$RSYNC_OPTIONS --bwlimit=$RSYNC_BWLIMIT"fi
fi

if [ -z $RSYNC_EXTRA_OPTIONS ]
then
 RSYNC_OPTIONS="$RSYNC_OPTIONS $RSYNC_EXTRA_OPTIONS"
fi

# dump all CT
for CT in `$VZLIST -Ho veid`; do
 log "Starting backup of CT $CT..."

 # create CT directory
 VZDUMP_SUBDIR="$VZDUMP_DIR/$CT"
 if [ ! -d $VZDUMP_SUBDIR ]
 then
  mkdir $VZDUMP_SUBDIR
 fi

 # start vzdump
 $VZDUMP $VZDUMP_OPTIONS --dumpdir=$VZDUMP_SUBDIR $CT

 log "Backup done."
done

# copy backup directory to remote server
if [ $RSYNC_ENABLE = "yes" ]
then
 log "Synchronizing to remote server..."

 # start rsync
 $RSYNC $RSYNC_OPTIONS $VZDUMP_DIR/ $RSYNC_USER@$RSYNC_HOST:$RSYNC_DIR/

 log "Synchronization done."
fi

# end of script

Voici un exemple de sortie :

# ./vzbackup.sh
Starting backup of CT 101...
INFO: starting new backup job: vzdump --stdexcludes --snapshot --compress --maxfiles 4 --dumpdir=/home/backup/vz/101 101
INFO: Starting Backup of VM 101 (openvz)
INFO: CTID 101 exist mounted running
INFO: status = CTID 101 exist mounted running
INFO: backup mode: snapshot
INFO: ionice priority: 7
INFO: creating lvm snapshot of /dev/mapper/openvz-vz ('/dev/openvz/vzsnap-mcbain-0')
INFO:   Logical volume "vzsnap-mcbain-0" created
INFO: creating archive '/home/backup/vz/101/vzdump-openvz-101-2011_02_16-17_42_01.tgz'
INFO: Total bytes written: 2044569600 (2.0GiB, 8.9MiB/s)
INFO: archive file size: 1016MB
INFO:   Logical volume "vzsnap-mcbain-0" successfully removed
INFO: Finished Backup of VM 101 (00:05:24)
INFO: Backup job finished successfuly
Backup done.
Synchronizing to remote server...
sending incremental file list
101/
101/vzdump-openvz-101-2011_02_16-17_42_01.log
101/vzdump-openvz-101-2011_02_16-17_42_01.tgz
Synchronization done.

BackupPC : sauvegarder le serveur localhost

Si vous souhaitez sauvegarder les données locales de votre serveur BackupPC (localhost), il faut effectuer une configuration spécifique afin d’éviter le chiffrement inutile par SSH. Je vous fais part des paramètres que j’ai spécifié sur mon serveur BackupPC (qui est également mon poste de travail) :

$Conf{ClientNameAlias} = '127.0.0.1';
$Conf{XferMethod} = 'rsync';
$Conf{RsyncClientCmd} = '$rsyncPath $argList+';
$Conf{RsyncClientRestoreCmd} = '$rsyncPath $argList+';
$Conf{RsyncShareName} = [
  '/Users/bhuisgen/'
];

Les temps de sauvegarde/restauration devraient d’ailleurs être améliorés.

BackupPC : installation sous Mac OS X

J’ai installé le système de backup BackupPC sur mon Mac Mini, afin de sauvegarder facilement des serveurs distants. Voici donc la procédure complète d’installation de BackupPC sous Mac OS X, avec un serveur Web Nginx et support CGI / Perl. En fin d’article, je vous fais part d’une idée de configuration possible pour le stockage sur un disque dur externe / clé USB.

Je vous renvoie en premier lieu à mes articles précédents :

Les modules Perl Compress::zlib et File::RsyncP sont à installer, comme toujours par MacPorts :

sudo port install p5-compress-zlib
sudo port install p5-file-rsyncp

Au niveau des scripts de démarrage de BackupPC, pkill et cie sera nécessaire :

sudo port install proctools

Je vais effectuer l’installation de BackupPC dans /opt/local pour rester dans l’esprit MacPorts :

cd /opt/local/src
tar xzf BackupPC.tar.gz
sudo perl configure.pl
--> Full path to existing main config.pl []?
--> Are these paths correct? [y]?
--> BackupPC will run on host [bhuisgen.local]?
--> Install directory (full path) [/usr/local/BackupPC]? /opt/local/share/backuppc
--> Data directory (full path) [/data/BackupPC]? /Volumes/WORK/backup/backuppc
--> Compression level [3]?
--> Apache image directory (full path) []? /opt/local/www/backuppc/images
--> URL for image directory (omit http://host; starts with '/') []? /backuppc/images
--> CGI bin directory (full path) []? /opt/local/www/backuppc

L’installation effectue la copie des fichiers de configuration dans /etc. Cà ne me va pas du tout et les majuscules dans les répertoires je déteste ; donc fix direct :

sudo mv BackupPC/ /opt/local/etc/backuppc
sudo mv /var/log/BackupPC/ /opt/local/var/log/backuppc
sudo chown root:admin /opt/local/etc/backuppc
sudo chown root:admin /opt/local/var/log/backuppc/

Il faut ensuite modifier le fichier /opt/local/share/backuppc/lib/BackupPC/Lib.pm pour lui préciser les répertoires /opt/local/etc/backuppc et /opt/local/var/log/backuppc car les répertoires sont codés en dur (pas bien bouh) :

--- Lib.pm.old  2009-04-10 00:56:46.000000000 +0200
+++ Lib.pm      2009-04-10 00:57:33.000000000 +0200
@@ -128,8 +128,8 @@
             useFHS     => $useFHS,
             TopDir     => $topDir,
             InstallDir => $installDir,
-            ConfDir    => $confDir eq "" ? '/etc/BackupPC' : $confDir,
-            LogDir     => '/var/log/BackupPC',
+            ConfDir    => $confDir eq "" ? '/opt/local/etc/backuppc' : $confDir,
+            LogDir     => '/opt/local/var/log/backuppc',

Dans le fichier principal de configuration /opt/local/etc/backuppc/config.pl, il faut également modifier les répertoires :

$Conf{TopDir}      = '/Volumes/WORK/backup/backuppc';
$Conf{ConfDir}     = '/opt/local/etc/backuppc';
$Conf{LogDir}      = '/opt/local/var/log/backuppc';
$Conf{InstallDir}  = '/opt/local/share/backuppc';
$Conf{CgiDir}      = '/opt/local/www/backuppc';

Vérifiez également que root est bien l’utilisateur exécutant le démon BackupPC :

$Conf{BackupPCUser} = 'root';

Remarque : vous pouvez autrement laisser l’utilisateur backuppc, mais il faut le créer et modifier en conséquence le script de démarrage du démon (sans compter la partie CGI).

Ensuite, j’autorise par défaut tous les droits d’administration :

$Conf{CgiAdminUserGroup} = '';
$Conf{CgiAdminUsers}     = '*';

La configuration est à présent terminée. A présent un petit lien symbolique qui simplifie l’accès web :

$ cd /opt/local/www/backuppc
$ sudo ln -s ./BackupPC_Admin index.cgi

Il reste à créer le script de démarrage de BackupPC. J’ai donc fait un wrapper et un script launchd s’appuyant sur daemondo de MacPorts :

$ cd /opt/local/etc/LaunchDaemons/fr.hbis.backuppc
$ more backuppc.wrapper
#!/bin/sh
#
# daemondo support script for BackupPC
#
# Boris HUISGEN <bhuisgen@hbis.fr>
#

# backuppc directory, needed to pkill
BACKUPPC_DIR="/opt/local/share/backuppc/"
# command to start daemon
CMD="/opt/local/bin/perl /opt/local/share/backuppc/bin/BackupPC"

#
# Init
#
prefix=/opt/local

#
# Start
#

Start()
{
 $CMD
}

#
# Stop
#

Stop()
{
 pkill -f $BACKUPPC_DIR
}

#
# Restart
#

Restart()
{
 Stop
 Start
}

#
# Run
#

Run()
{
 case $1 in
 start  ) Start   ;;
 stop   ) Stop    ;;
 restart) Restart ;;
 *      ) echo "$0: unknown argument: $1";;
 esac
}

#
# Run a phase based on the selector
#
Run $1
$ more fr.hbis.backuppc.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Debug</key>
   <false/>
   <key>Label</key>
   <string>fr.hbis.backuppc</string>
   <key>OnDemand</key>
   <false/>
   <key>ProgramArguments</key>
   <array>
      <string>/opt/local/bin/daemondo</string>
      <string>--label=backuppc</string>
      <string>--start-cmd</string>
      <string>/opt/local/etc/LaunchDaemons/org.macports.backuppc/backuppc.wrapper</string>
      <string>start</string>
      <string>;</string>
      <string>--stop-cmd</string>
      <string>/opt/local/etc/LaunchDaemons/org.macports.backuppc/backuppc.wrapper</string>
      <string>stop</string>
      <string>;</string>
      <string>--restart-cmd</string>
      <string>/opt/local/etc/LaunchDaemons/orgs.macports.backuppc/backuppc.wrapper</string>
      <string>restart</string>
      <string>;</string>
      <string>--pid=none</string>
   </array>
   <key>RunAtLoad</key>
   <false/>
</dict>
</plist>

On référence le script pour démarrer BackupPC :

$ sudo launchctl load -w fr.hbis.backuppc.plist

Si tout est OK, http://localhost/backuppc/ doit vous afficher l’interface de gestion de BackupPC. Il vous reste à configurer les serveurs à sauvegarder, partie hosts. Le reste peut se faire avec la documentation accessible depuis l’interface.

Dans le cas de sauvegardes manuelles sur un volume externe, launchd peut détecter le montage de périphérique et lancer un script particulier. Cette fonctionnalité peut être utilisée pour détecter la présence effective de votre volume externe (pour ma part /Volumes/WORK) et lancer un job manuel de backup de vos serveurs gràce à /opt/local/share/backuppc/bin/BackupPC_serverMesg. Je pense que je vous ferai un article d’ici peu avec les scripts adéquats…

Haut de page