BackupPc è sicuramente una comoda soluzione per fare il backup di più macchine in rete.
Al momento in cui scrivo, CentOS non prevede un pacchetto all’interno della propria distribuzione, rendendo l’uso del software non proprio agevole. Per questo motivo ho deciso di scrivere questa breve guida che spiega come installare e configurare il software.
Come sempre, prima di partire è bene disabilitare temporaneamente SELinux ed Iptables. Questi verranno riabilitati alla fine dell’installazione:
/usr/sbin/service iptables stop bash: /usr/sbin/service: No such file or directory [root@francesca /]# /sbin/service iptables stop Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: filter [ OK ] Unloading iptables modules: [ OK ]
Come dicevamo prima, non potendo usare il repository di default, dovremo utilizzarne uno esterno:
yum install backuppc Loaded plugins: fastestmirror, priorities Loading mirror speeds from cached hostfile ... Setting up Install Process No package backuppc available. Nothing to do
Abbiamo dunque bisogno di un repository di test. Istruzioni su come attivare repository esterni alla distribuzione sono disponibili qui.
Se avete seguito le istruzioni relative ai repository riportate nell’articolo, potrete installare backuppc tramite il comando:
yum --enablerepo=c5-testing install backuppc mod_perl httpd
Il comando provvederà ad installare anche eventuali dipendenze:
Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: backuppc i386 3.1.0-1.el5.centos c5-testing 667 k Installing for dependencies: perl-Archive-Zip noarch 1.16-1.2.1 base 138 k perl-Class-Singleton i386 1.03-1.2.el5.rf rpmforge 14 k perl-Compress-Raw-Bzip2 i386 2.021-1.el5.rf rpmforge 108 k perl-Compress-Raw-Zlib i386 2.021-1.el5.rf rpmforge 169 k perl-DateTime i386 0.4305-1.el5.rf rpmforge 134 k perl-DateTime-Format-Mail noarch 0.3001-1.el5.rf rpmforge 25 k perl-DateTime-Format-W3CDTF noarch 0.04-1.el5.rf rpmforge 16 k perl-DateTime-Locale noarch 0.4001-1.el5.rf rpmforge 1.7 M perl-DateTime-TimeZone i386 0.46-1.el5.rf rpmforge 361 k perl-File-RsyncP i386 0.68-1.el5.rf rpmforge 179 k perl-HTML-Parser i386 3.55-1.fc6 base 92 k perl-HTML-Tagset noarch 3.10-2.1.1 base 15 k perl-IO-Compress noarch 2.021-1.el5.rf rpmforge 238 k perl-List-MoreUtils i386 0.25.1-1.el5.rf rpmforge 104 k perl-Params-Validate i386 0.91-1.el5.rf rpmforge 104 k perl-Time-modules noarch 2006.0814-1.el5.rf rpmforge 38 k perl-XML-Parser i386 2.34-6.1.2.2.1 base 210 k perl-XML-RSS noarch 1.45-1.el5.rf rpmforge 62 k perl-libwww-perl noarch 5.805-1.1.1 base 376 k Transaction Summary ================================================================================ Install 20 Package(s) Update 0 Package(s) Remove 0 Package(s) Total download size: 4.7 M
Configurare il frontend
Ora è la volta di Apache che verrà utilizzato come frontend per la gestione dei backup. Seguendo l’HOW-TO riportato sul sito di CentOS la configurazione sarà modificata per consentire l’esecuzione di Apache come utente diverso.
A mio parere questo potrebbe avere implicazioni non trascurabili sulla sicurezza e sull’assetto della distribuzione, senza considerare il fatto che Apache verrebbe dedicato interamente al backup.
Preferisco invece eseguire una seconda istanza del webserver con i soli plug-in necessari a far giare BackupPC. Per questo motivo copiamo il file di configurazione esistente in un nuovo file:
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/backuppc_httpd.conf
modificando i paramentri essenziali:
PidFile run/backuppc_httpd.pid Listen 81 User backuppc #Allow from all
Possiamo inoltre disabilitare tutti i plug-in che non sono necessari al frontend. Per comodità riporto un file di configurazione utile come esempio:
ServerTokens OS
ServerRoot "/etc/httpd"
PidFile run/httpd_backuppc.pid
Timeout 120
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
Include conf.d/perl.conf
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
Listen 81
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
#LoadModule ldap_module modules/mod_ldap.so
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
#LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule info_module modules/mod_info.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so
#ExtendedStatus On
User backuppc
Group apache
ServerAdmin root@localhost
#ServerName www.example.com:80
UseCanonicalName Off
#DocumentRoot "/var/www/html"
DocumentRoot "/var/lib/backuppc"
Options FollowSymLinks
AllowOverride None
UserDir disable
#UserDir public_html
DirectoryIndex index.html index.html.var
AccessFileName .htaccess
Order allow,deny
Deny from all
TypesConfig /etc/mime.types
DefaultType text/plain
# MIMEMagicFile /usr/share/magic.mime
MIMEMagicFile conf/magic
HostnameLookups Off
ErrorLog logs/backuppc_error_log
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog logs/backuppc_access_log combined
ServerSignature On
Alias /icons/ "/var/www/icons/"
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
# Location of the WebDAV lock database.
DAVLockDB /var/lib/dav/lockdb
IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif
#AddDescription "GZIP compressed document" .gz
#AddDescription "tar archive" .tar
#AddDescription "GZIP compressed tar archive" .tgz
ReadmeName README.html
HeaderName HEADER.html
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
AddLanguage ca .ca
AddLanguage cs .cz .cs
AddLanguage da .dk
AddLanguage de .de
AddLanguage el .el
AddLanguage en .en
AddLanguage eo .eo
AddLanguage es .es
AddLanguage et .et
AddLanguage fr .fr
AddLanguage he .he
AddLanguage hr .hr
AddLanguage it .it
AddLanguage ja .ja
AddLanguage ko .ko
AddLanguage ltz .ltz
AddLanguage nl .nl
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddLanguage pt .pt
AddLanguage pt-BR .pt-br
AddLanguage ru .ru
AddLanguage sv .sv
AddLanguage zh-CN .zh-cn
AddLanguage zh-TW .zh-tw
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
ForceLanguagePriority Prefer Fallback
AddDefaultCharset UTF-8
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddHandler type-map var
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
Alias /error/ "/var/www/error/"
AllowOverride None
Options IncludesNoExec
AddOutputFilter Includes html
AddHandler type-map var
Order allow,deny
Allow from all
LanguagePriority en es de fr
ForceLanguagePriority Prefer Fallback
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
alias /backuppc /usr/share/backuppc
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI
Order deny,allow
Deny from all
Allow from 192.168.0
Allow from 127.0.0.1
AuthName "Backup Admin"
AuthType Basic
AuthUserFile /var/lib/backuppc/passwd/htpasswd
Require valid-user
Per verificare che il file sia formalmente valido possiamo eseguire un test preliminare:
/usr/sbin/httpd -f /etc/httpd/conf/backuppc_httpd.conf -t Syntax OK
Prima di provare il servizio impostiamo una password per l’accesso al frontend:
htpasswd -c /var/lib/backuppc/passwd/htpasswd backup_manager New password: your_password Re-type new password: your_password Adding password for user backup_manager
Arriva ora il momento di avviare una seconda instanza di Apache per verificare che tutto sia in ordine:
/usr/sbin/httpd -f /etc/httpd/conf/backuppc_httpd.conf -k start
Se tutto funziona correttamente possiamo procedere con le opportune modifiche necessarie a far partire il servizio all’avvio del sistema. Anche in questo caso faremo una copia del file utilizzato dal webserver:
cp /etc/init.d/httpd /etc/init.d/backuppc_httpd
Anche in questo caso per comodità riporto un esempio:
#!/bin/bash
#
# backuppc_httpd Startup script for the Apache HTTP Server (BackupPC)
#
# chkconfig: - 90 34
# description: BackupPC stand alone web server
# Source function library.
if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 0
fi
# Avoid using root's TMPDIR
unset TMPDIR
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 1
RETVAL=0
start() {
KIND="BackupPC Web Server"
echo -n $"Starting service: "
/usr/sbin/httpd -f /etc/httpd/conf/backuppc_httpd.conf -k start && echo "OK" || echo "Error"
RETVAL=0
echo
return
}
stop() {
KIND="BackupPC Web Server"
echo -n $"Shutting down services: "
/usr/sbin/httpd -f /etc/httpd/conf/backuppc_httpd.conf -k stop && echo "OK" || echo "Error"
RETVAL=0
echo
return
}
restart() {
stop
sleep 5
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
Useremo chkconfig per rendere il servizio attivo all’avvio:
/sbin/chkconfig backuppc_httpd --add /sbin/chkconfig --level 2345 backuppc_httpd on
Configurare BackupPC
Finito con il frontend passiamo a personalizzare il file /etc/BackupPC/config.pl che contiene i parametri necessari al backup. L’articolo si occupa di spiegare come configuare CentOS per la corretta esecuzione del pacchetto. Per maggiori informazioni è necessario seguire l’help online.
Una modifca importante da fare però riguarda la necessità di dover dare all’utente backuppc l’accesso all’intero file system tramite il comando tar altrimenti non sarà possibile procedere con il backup completo del sistema. Editiamo il file /etc/sudoers impostando i seguenti parametri:
#Defaults requiretty Defaults !lecture backuppc ALL=NOPASSWD:/bin/gtar,/bin/tar
Come abbiamo già fatto per il frontend, possiamo abilitare l’avvio automatico del servizio tramite chkconfig:
chkconfig backuppc on
Prima di concludere
Al momento in cui scrivo questo articolo, esiste un piccolo baco facile da risolvere. Se per caso i link alla documentazione in linea non dovessero funzionare, potete eseguire i seguenti comandi per ripristinarli:
mkdir /usr/doc ln -s /usr/share/doc/backuppc*/BackupPC.html /usr/doc/BackupPC.html
Alla prossima.
0 Comments.