initial commit of file from CVS for smeserver-BackupPC on Sat Sep 7 20:10:07 AEST 2024

This commit is contained in:
Trevor Batley 2024-09-07 20:10:07 +10:00
parent 2bf47720f7
commit 26a891845f
51 changed files with 2421 additions and 2 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
*.rpm
*.log
*spec-20*
*.tar.xz

21
Makefile Normal file
View File

@ -0,0 +1,21 @@
# Makefile for source rpm: smeserver-BackupPC
# $Id: Makefile,v 1.1 2020/10/26 14:35:58 brianr Exp $
NAME := smeserver-BackupPC
SPECFILE = $(firstword $(wildcard *.spec))
define find-makefile-common
for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
endef
MAKEFILE_COMMON := $(shell $(find-makefile-common))
ifeq ($(MAKEFILE_COMMON),)
# attept a checkout
define checkout-makefile-common
test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2
endef
MAKEFILE_COMMON := $(shell $(checkout-makefile-common))
endif
include $(MAKEFILE_COMMON)

View File

@ -1,3 +1,18 @@
# smeserver-BackupPC
# <img src="https://www.koozali.org/images/koozali/Logo/Png/Koozali_logo_2016.png" width="25%" vertical="auto" style="vertical-align:bottom"> smeserver-BackupPC
SMEServer Koozali developed git repo for smeserver-BackupPC smecontribs
## Wiki
<br />https://wiki.koozali.org/BackupPC
<br />https://wiki.koozali.org/BackupPC/fr
<br />https://wiki.koozali.org/BackupPC-4.2
<br />https://wiki.koozali.org/SME-101.09:_Supplément:_SME_&_BackupPC-4.2
## Bugzilla
Show list of outstanding bugs: [here](https://bugs.koozali.org/buglist.cgi?component=smeserver-BackupPC&product=SME%20Contribs&query_format=advanced&limit=0&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=CONFIRMED)
## Description
<br />*This description has been generated by an LLM AI system and cannot be relied on to be fully correct.*
*Once it has been checked, then this comment will be deleted*
<br />

View File

@ -0,0 +1,48 @@
#!/usr/bin/perl -w
use esmith::Build::CreateLinks qw(:all);
# Start and stop links
service_link_enhanced("backuppc", "S98", "7");
service_link_enhanced("backuppc", "K10", "6");
service_link_enhanced("backuppc", "K10", "0");
service_link_enhanced("backuppc", "K10", "1");
service_link_enhanced("httpd-bkpc", "S86", "7");
service_link_enhanced("httpd-bkpc", "K15", "6");
service_link_enhanced("httpd-bkpc", "K15", "0");
service_link_enhanced("httpd-bkpc", "K15", "1");
safe_symlink("../daemontools" , 'root/etc/rc.d/init.d/supervise/httpd-bkpc');
safe_symlink("/var/service/httpd-bkpc" , 'root/service/httpd-bkpc');
# Panel links
panel_link("backuppc", 'manager');
# Various symlinks
# Event symlinks
my $event = 'backuppc-update';
templates2events("/etc/httpd/conf/httpd.conf", $event);
templates2events("/etc/sudoers", $event);
templates2events("/etc/httpd/bkpc-conf/httpd.conf", qw(backuppc-update bootstrap-console-save));
event_link("backuppc-checkupgrade", $event, "20");
event_link("backuppc-genkey", $event, "10");
event_link("backuppc-checkupgrade", "post-upgrade", "91");
event_link("backuppc-genkey", "post-upgrade", "90");
safe_symlink("restart", "root/etc/e-smith/events/$event/services2adjust/backuppc");
safe_symlink("sigusr1", "root/etc/e-smith/events/$event/services2adjust/httpd-e-smith");
safe_symlink("sigusr1", "root/etc/e-smith/events/$event/services2adjust/httpd-bkpc");
safe_symlink("sigusr1", "root/etc/e-smith/events/logrotate/services2adjust/httpd-bkpc");
# Create needed empty files
safe_touch("root/etc/e-smith/events/logrotate/logfiles2timestamp/var/log/httpd/bkpc_access_log");
safe_touch("root/etc/e-smith/events/logrotate/logfiles2timestamp/var/log/httpd/bkpc_error_log");
safe_touch("root/var/service/httpd-bkpc/down");

1
contriborbase Normal file
View File

@ -0,0 +1 @@
contribs10

66
createlinks Normal file
View File

@ -0,0 +1,66 @@
#!/usr/bin/perl -w
use esmith::Build::CreateLinks qw(:all);
# Start and stop links - SME9
#service_link_enhanced("backuppc", "S98", "7");
#service_link_enhanced("backuppc", "K10", "6");
#service_link_enhanced("backuppc", "K10", "0");
#service_link_enhanced("backuppc", "K10", "1");
#service_link_enhanced("httpd-bkpc", "S86", "7");
#service_link_enhanced("httpd-bkpc", "K15", "6");
#service_link_enhanced("httpd-bkpc", "K15", "0");
#service_link_enhanced("httpd-bkpc", "K15", "1");
#safe_symlink("../daemontools" , 'root/etc/rc.d/init.d/supervise/httpd-bkpc');
#safe_symlink("/var/service/httpd-bkpc" , 'root/service/httpd-bkpc');
# Panel links
panel_link("backuppc", 'manager');
# Various symlinks
# Event symlinks
# our event specific for updating with yum without reboot
$event = 'smeserver-BackupPC-update'; #Must match rpm name
foreach my $file (qw(/etc/systemd/system-preset/49-koozali.preset
/etc/httpd/conf/httpd.conf
/etc/sudoers
/etc/httpd/bkpc-conf/httpd.conf
/etc/updatedb.conf
))
{
templates2events( $file, $event );
}
#action needed in case we have a systemd unit
event_link("systemd-default", $event, "10");
event_link("systemd-reload", $event, "50");
#action specific to this package
event_link("backuppc-checkupgrade", $event, "20");
event_link("backuppc-genkey", $event, "10");
event_link("backuppc-checkupgrade", "post-upgrade", "91");
event_link("backuppc-genkey", "post-upgrade", "90");
#services we need to restart
#safe_symlink("restart", "root/etc/e-smith/events/$event/services2adjust/backuppc");
safe_symlink("restart", "root/etc/e-smith/events/$event/services2adjust/httpd-e-smith");
safe_symlink("restart", "root/etc/e-smith/events/$event/services2adjust/httpd-bkpc");
safe_symlink("restart", "root/etc/e-smith/events/logrotate/services2adjust/httpd-bkpc");
# Create needed empty files
safe_touch("root/etc/e-smith/events/logrotate/logfiles2timestamp/var/log/httpd/bkpc_access_log");
safe_touch("root/etc/e-smith/events/logrotate/logfiles2timestamp/var/log/httpd/bkpc_error_log");
safe_touch("root/var/service/httpd-bkpc/down");
use esmith::Build::Backup qw(:all);
backup_includes("smeserver-BackupPC", qw(
/etc/BackupPC
));
# warning this could be a symlink to an external drive
# also this will not backup the whole backups, but who would do that by default ?
# /var/lib/BackupPC

View File

@ -0,0 +1,40 @@
# Destination directory, where the archive will be created
destination = /tmp/
# Split size in MBytes. If different from 0, the archive will be cut at this size
split = 0
# Compression. Can be gzip, bzip2 or none
compress = gzip
# Encryption of the archives, using OpenSSL
# You can put here the name of the cipher you want to use
# To obtain a list of available cipher, run the command
# man enc
# eg: cipher = aes-256-cbc
# If encryption is turned on, .enc will be appended
# At the end of the archive's name.
# To be able tu use this archive talter, you'll have to
# decrypt it using the same key
# cat archive.tar.gz.enc | openssl enc aes-256-cbc -d -pass file:/etc/BackupPC/archive.key > archive.tar.gz
cipher = off
# The key file to use to encrypt the archive
# You should backup this key somewhere. If you lost it
# your archives will be unusuable
key = /etc/BackupPC/archive.key
# The backup number to archive, -1 means the last one
backupNum = -1
# The share to archive
share = '*'
# The amount of parity (using par2)
parity = 0
# The hosts to archive, separate them with a space eg: localhost server1 server2
hosts = localhost
# The user who will receive the log of the archive, you can set a email address out of the server if you want
sendMailTo = admin

View File

@ -0,0 +1,17 @@
# Destination directory, where the pool will be copied
destination = /tmp/
# The source directory, the topdir of the data
source = /var/lib/BackupPC
# Compression used for the "pc" archive. Can be gzip, bzip2 or none
compress = gzip
# If you want to extract the "pc" archive on the destination, can be set to 'yes' or 'no'
extract = yes
# Stop BackupPC daemon. You should let this to 'yes' unless you use something like LVM snapshots
stop = yes
# The user who will receive the log of the archive, you can set a email address out of the server if you want
sendMailTo = admin

View File

@ -0,0 +1,32 @@
$Conf{RsyncShareName} = [
'/'
];
$Conf{BackupFilesExclude} = {
'/' => [
'/var/lib/BackupPC',
'/proc',
'/tmp',
'/sys',
'/dev',
'/boot',
'/mnt',
'/media',
'/selinux',
'/aquota.*',
'/lost+found',
'/initrd',
'/var/tmp',
'/var/lib/mysql'
]
};
$Conf{DumpPreUserCmd} = '/usr/bin/sudo /usr/share/BackupPC/bin/BackupPC_SME_pre-backup';
$Conf{XferMethod} = 'rsync';
$Conf{RsyncClientCmd} = '/usr/bin/sudo $rsyncPath $argList+';
$Conf{RsyncClientRestoreCmd} = '/usr/bin/sudo $rsyncPath $argList+';
$Conf{ClientNameAlias} = '127.0.0.1';
$Conf{BackupsDisable} = 1;
$Conf{RsyncSshArgs} = [
'-e',
'/usr/bin/sudo -p'
];

View File

@ -0,0 +1,26 @@
$Conf{RsyncShareName} = [
'/'
];
$Conf{BackupFilesExclude} = {
'/' => [
'/var/lib/BackupPC/',
'/proc',
'/tmp',
'/sys',
'/dev',
'/boot',
'/mnt',
'/media',
'/selinux',
'/aquota.*',
'/lost+found',
'/initrd',
'/var/tmp',
'/var/lib/mysql',
'/var/spool/squid'
]
};
$Conf{DumpPreUserCmd} = '$sshPath -l root $host /sbin/e-smith/signal-event pre-backup';
$Conf{XferMethod} = 'rsync';
$Conf{BackupsDisable} = 1;

View File

@ -0,0 +1,38 @@
$Conf{ClientCharset} = 'cp1252';
$Conf{RsyncShareName} = [
'cDrive'
];
$Conf{RsyncdPasswd} = 'secret';
$Conf{RsyncdUserName} = 'backuppc';
$Conf{XferMethod} = 'rsyncd';
$Conf{BackupFilesExclude} = {
'*' => [
'*/hiberfil.sys',
'*/pagefile.sys',
'*/WUTemp',
'*/RECYCLER',
'*/UsrClass.dat',
'*/UsrClass.dat.LOG',
'*/NTUSER.DAT',
'*/NTUSER.DAT.LOG',
'*/Temporary?Internet?Files/*',
'*/Documents?and?Settings/*/Recent',
'*/Cache',
'*/parent.lock',
'*/Thumbs.db',
'*/IconCache.db',
'*/System?Volume?Information',
'*/Temp/*',
'*.tmp',
'*.bak',
'*/WINDOWS/system32/config/SYSTEM',
'*/WINDOWS/system32/config/SOFTWARE',
'*/WINDOWS/system32/config/SECURITY',
'*/WINDOWS/system32/config/SECURITY.LOG',
'*/WINDOWS/system32/config/SAM',
'*/WINDOWS/system32/config/SAM.LOG',
'*/WINDOWS/system32/config/DEFAULT',
]
};
$Conf{BackupsDisable} = 1;

View File

@ -0,0 +1,41 @@
# The host you to send archives to
remoteHost = remote.host.com
# The remote user to use for the ssh connection
remoteUser = root
# Destination directory, where the archive will be created
remoteDir = /tmp/
# Compression. Can be gzip, bzip2 or none
compress = gzip
# Encryption of the archives, using OpenSSL
# You can put here the name of the cipher you want to use
# To obtain a list of available cipher, run the command
# man enc
# eg: cipher = aes-256-cbc
# If encryption is turned on, .enc will be appended
# At the end of the archive's name.
# To be able tu use this archive talter, you'll have to
# decrypt it using the same key
# cat archive.tar.gz.enc | openssl enc aes-256-cbc -d -pass file:/etc/BackupPC/archive.key > archive.tar.gz
cipher = off
# The key file to use to encrypt the archive
# You should backup this key somewhere. If you lost it
# your archives will be unusuable
key = /etc/BackupPC/archive.key
# The backup number to archive, -1 means the last one
backupNum = -1
# The share to archive
share = '*'
# The hoststo archive, separate them with a space eg: localhost server1 server2
hosts = localhost
# The user who will receive the log of the archive, you can set a email address out of the server if you want
sendMailTo = admin

View File

@ -0,0 +1,23 @@
# The host you to send the pool to
remoteHost = remote.host.com
# The remote user to use for the ssh connection
remoteUser = root
# Destination directory, where the archive will be created
remoteDir = /tmp/
# The source directory, the topdir of the data
source = /var/lib/BackupPC
# Compression used for the "pc" archive. Can be gzip, bzip2 or none
compress = gzip
# If you want to extract the "pc" archive on the destination, can be set to 'yes' or 'no'
extract = yes
# Stop BackupPC daemon. You should let this to 'yes' unless you use something like LVM snapshots
stop = yes
# The user who will receive the log of the archive, you can set a email address out of the server if you want
sendMailTo = admin

View File

@ -0,0 +1,40 @@
# The device you want to use, where the archive will be created
device = /dev/sdc1
# Split size in MBytes. If different from 0, the archive will be cut at this size
split = 0
# Compression. Can be gzip, bzip2 or none
compress = gzip
# Encryption of the archives, using OpenSSL
# You can put here the name of the cipher you want to use
# To obtain a list of available cipher, run the command
# man enc
# eg: cipher = aes-256-cbc
# If encryption is turned on, .enc will be appended
# At the end of the archive's name.
# To be able tu use this archive talter, you'll have to
# decrypt it using the same key
# cat archive.tar.gz.enc | openssl enc aes-256-cbc -d -pass file:/etc/BackupPC/archive.key > archive.tar.gz
cipher = off
# The key file to use to encrypt the archive
# You should backup this key somewhere. If you lost it
# your archives will be unusuable
key = /etc/BackupPC/archive.key
# The backup number to archive, -1 means the last one
backupNum = -1
# The share to archive
share = '*'
# The amount of parity (using par2)
parity = 0
# The hoststo archive, separate them with a space eg: localhost server1 server2
hosts = localhost
# The user who will receive the log of the archive, you can set a email address out of the server if you want
sendMailTo = admin

View File

@ -0,0 +1,18 @@
# The device you want to use, where the archive will be created
device = /dev/sdc1
# Compression to use for the "pc" archive. Can be gzip, bzip2 or none
compress = gzip
# The source directory, the topdir of the data
source = /var/lib/BackupPC
# If you want to extract the "pc" archive on the destination, can be set to 'yes' or 'no'
extract = yes
# Stop BackupPC daemon. You should let this to 'yes' unless you use something like LVM snapshots
stop = yes
# The user who will receive the log of the archive, you can set a email address out of the server if you want
sendMailTo = admin

View File

@ -0,0 +1 @@
system

View File

@ -0,0 +1 @@
enabled

View File

@ -0,0 +1 @@
enabled

View File

@ -0,0 +1 @@
/usr/bin/rsync,/bin/gtar

View File

@ -0,0 +1 @@
service

View File

@ -0,0 +1 @@
950

View File

@ -0,0 +1 @@
enabled

View File

@ -0,0 +1 @@
service

View File

@ -0,0 +1,55 @@
#!/bin/bash
# We may need to update some configuration if we have upgraded from smeserver-backuppc.fws
if [ -e /etc/BackupPC/config.pl ]; then
# The new URL for backuppc images is /BackupPC/images
sed -i 's|^\$Conf{CgiImageDirURL} .*|$Conf{CgiImageDirURL} = "/BackupPC/images";|' /etc/BackupPC/config.pl
# Update paths
sed -i 's|/opt/backuppc/files|/var/lib/BackupPC|' /etc/BackupPC/config.pl
sed -i 's|/usr/local/BackupPC|/usr/share/BackupPC|' /etc/BackupPC/config.pl
sed -i 's|/opt/backuppc/cgi-bin|/usr/share/BackupPC/sbin|' /etc/BackupPC/config.pl
sed -i 's|/opt/backuppc/images|/usr/share/BackupPC/html|' /etc/BackupPC/config.pl
# Update the admin user and the user whi receives the alerts
sed -i "s|$Conf{CgiAdminUsers} = '';|$Conf{CgiAdminUsers} = 'admin';|" /etc/BackupPC/config.pl
sed -i "s|$Conf{EMailAdminUserName} = 'backuppc';|$Conf{EMailAdminUserName} = 'admin';|" /etc/BackupPC/config.pl
# Update the CgiURL
SystemName=$(/sbin/e-smith/db configuration get SystemName)
DomainName=$(/sbin/e-smith/db configuration get DomainName)
sed -i "s|$Conf{CgiURL} = 'http://localhost/.*|$Conf{CgiURL} = 'https://$SystemName.$DomainName/BackupPC';|" /etc/BackupPC/config.pl
# If par2 is not present, then put /bin/true in the config file to prevent an error
if [ ! -x /usr/local/bin/par2 ]; then
sed -i 's|^$Conf{ParPath} .*|$Conf{ParPath} = "/bin/true";|' /etc/BackupPC/config.pl
fi
fi
# Same for localhost.pl, the default config in previous release
if [ -e /etc/BackupPC/pc/localhost.pl ]; then
sed -i "s|$Conf{DumpPreUserCmd} = '/usr/bin/sudo /usr/local/BackupPC/bin/BackupPC_SME_pre-backup';|$Conf{DumpPreUserCmd} = '/usr/bin/sudo /usr/share/BackupPC/bin/BackupPC_SME_pre-backup';|" /etc/BackupPC/pc/localhost.pl
fi
# Add the example configs
EX=$(/sbin/e-smith/db configuration getprop backuppc examples)
if [ $EX == 'enabled' ]; then
if [ $(grep -c windows-template /etc/BackupPC/hosts) -lt 1 ]; then
echo "windows-template 0 admin" >> /etc/BackupPC/hosts
fi
if [ $(grep -c localserver-template /etc/BackupPC/hosts) -lt 1 ]; then
echo "localserver-template 0 admin" >> /etc/BackupPC/hosts
fi
if [ $(grep -c smeserver-template /etc/BackupPC/hosts) -lt 1 ]; then
echo "smeserver-template 0 admin" >> /etc/BackupPC/hosts
fi
fi
# Ensure permissions are ok
chown -R backuppc:backuppc /etc/BackupPC/
chown -R backuppc:backuppc /var/log/BackupPC/
find /etc/BackupPC/ -type f -exec chmod 640 {} \;

View File

@ -0,0 +1,33 @@
#!/usr/bin/perl -w
# Generate a keyfile for archives encryption
my $keyfile = '/etc/BackupPC/archive.key';
if (! -e $keyfile){
use MIME::Base64 qw(encode_base64);
my $key = "not set due to error";
if ( open( RANDOM, "/dev/urandom" ) ){
my $buf;
# 57 bytes is a full line of Base64 coding, and contains
# 456 bits of randomness - given a perfectly random /dev/random
if ( read( RANDOM, $buf, 57 ) != 57 )
{
warn("Short read from /dev/random: $!");
}
else
{
$key = encode_base64($buf);
chomp $key;
}
close RANDOM;
}
else
{
warn "Could not open /dev/urandom: $!";
}
open( KEYFILE, ">$keyfile") || warn "Could not open $keyfile: $!";
print KEYFILE $key;
close KEYFILE;
}

View File

@ -0,0 +1,23 @@
{
#---------------------------------------------------------------------
# Grab ValidFrom access list property of httpd-admin
# SSL enabled virtual hosts should only allow access from IP's in
# this list, as well as local networks.
#---------------------------------------------------------------------
use esmith::NetworksDB;
my $ndb = esmith::NetworksDB->open_ro();
my @localAccess = $ndb->local_access_spec();
my $validFrom = ${'httpd-admin'}{'ValidFrom'};
if ($validFrom)
{
push @localAccess, split /,/, $validFrom;
}
$localAccess .= join ' ',
map { s:/255.255.255.255::; $_ }
@localAccess;
"";
}

View File

@ -0,0 +1,8 @@
{
$OUT .= "LoadModule auth_tkt_module modules/mod_auth_tkt.so\n";
my $secret = ${'httpd-admin'}{TKTAuthSecret} || "34322500-7330-4400-423A-3A00434F5245";
$OUT .= "TKTAuthSecret \"$secret\"\n";
$OUT .= "TKTAuthDigestType SHA256\n";
}

View File

@ -0,0 +1,153 @@
{
my $port = ${'httpd-bkpc'}{TCPPort} || '950';
$OUT .= "Listen 127.0.0.1:$port\n";
$OUT .= <<HERE;
HostnameLookups off
ServerAdmin admin@$DomainName
ServerRoot /etc/httpd
ServerTokens ProductOnly
User backuppc
Group backuppc
ErrorLog /var/log/httpd/bkpc_error_log
LogLevel warn
HERE
foreach (qw(
env
log_config
mime
negotiation
status
info
include
autoindex
dir
asis
imap
imagemap
actions
userdir
proxy
proxy_http
alias
rewrite
access
authz_host
authz_user
auth
auth_anon
auth_digest
expires
headers
usertrack
setenvif
ssl
cgi
mpm_prefork
unixd
access_compat
authn_core
authz_core
))
{
next unless -f "/usr/lib/httpd/modules/mod_${_}.so" ||
-f "/usr/lib64/httpd/modules/mod_${_}.so";
$OUT .= "LoadModule ${_}_module modules/mod_${_}.so\n";
}
$OUT .=<<"HERE";
PidFile /var/run/httpd-bkpc.pid
ScoreBoardFile /var/run/httpd-bkpc.scoreboard
UseCanonicalName off
LogFormat "%h %l %u %t \\"%r\\" %>s %b" common
LogFormat "%{User-agent}i" agent
CustomLog /var/log/httpd/bkpc_access_log common
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MaxClients 150
MaxRequestsPerChild 100
ServerName www.$DomainName
MinSpareServers 1
MaxSpareServers 5
StartServers 1
Timeout 300
DefaultIcon /icons/unknown.gif
DirectoryIndex index.htm index.html index.php index.cgi
IndexOptions FancyIndexing VersionSort NameWidth=*
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
AccessFileName .htaccess
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/*
TypesConfig /etc/mime.types
AddEncoding x-compress Z
AddEncoding x-gzip gz
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^^
AddLanguage en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it
LanguagePriority en fr de
AddType text/html .shtml
AddType application/x-pkcs7-crl .crl
AddType application/x-x509-ca-cert .crt
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
AddHandler cgi-script .cgi
AddHandler server-parsed .shtml
AddHandler imap-file map
DocumentRoot /usr/share/BackupPC/html
HERE
}

View File

@ -0,0 +1,11 @@
# First, we configure the "default" to be a very restrictive set of
# permissions.
<Directory />
Options None
AllowOverride None
Require all denied
</Directory>

View File

@ -0,0 +1,31 @@
Alias /BackupPC/images /usr/share/BackupPC/html/
ScriptAlias /BackupPC /usr/share/BackupPC/sbin/BackupPC_Admin
<Directory /usr/share/BackupPC/html/>
Options None
AllowOverride None
Require ip 127.0.0.1
</Directory>
<Directory /usr/share/BackupPC/sbin/>
Options ExecCGI
AllowOverride None
AuthName "BackupPC"
AuthType Basic
TKTAuthLoginURL /server-common/cgi-bin/login
{
my $ManagerTimeout = ${'httpd-admin'}{ManagerTimeout} || "30m";
$OUT = " TKTAuthTimeout $ManagerTimeout\n";
my $Cookie = ${'httpd-admin'}{Cookie} || "disabled";
$OUT .= " TKTAuthCookieExpires $ManagerTimeout\n" if "$Cookie" eq "enabled";
my $ManagerTimeoutReset = ${'httpd-admin'}{ManagerTimeoutReset} || "0.66";
$OUT .= " TKTAuthTimeoutRefresh $ManagerTimeoutReset\n";
}
<RequireAll>
Require valid-user
Require ip 127.0.0.1
</RequireAll>
</Directory>

View File

@ -0,0 +1,29 @@
{
# vim: ft=perl:
$haveSSL = (exists ${modSSL}{status} and ${modSSL}{status} eq "enabled") ? 'yes' : 'no';
$OUT = '';
if ((${'backuppc'}{'status'} || 'disabled') eq 'enabled' &&
(${'httpd-bkpc'}{'status'} || 'disabled') eq 'enabled'){
$OUT .= " RewriteRule ^/backuppc(/.*|\$) https://%{HTTP_HOST}/BackupPC\$1 [L,R]\n";
if (($port eq "80") && ($haveSSL eq 'yes')){
$OUT .= " RewriteRule ^/BackupPC(/.*|\$) https://%{HTTP_HOST}/BackupPC\$1 [L,R]\n";
}
else{
$OUT .= " ProxyPass /BackupPC http://127.0.0.1:${'httpd-bkpc'}{TCPPort}/BackupPC\n";
$OUT .= " ProxyPassReverse /BackupPC http://127.0.0.1:${'httpd-bkpc'}{TCPPort}/BackupPC\n";
}
$OUT .=<<"HERE";
<Location /BackupPC>
SSLRequireSSL on
Require ip $localAccess $externalSSLAccess
</Location>
HERE
}
}

View File

@ -0,0 +1,7 @@
{
$OUT .= "Cmnd_Alias BACKUPPC_CMD = /usr/share/BackupPC/bin/BackupPC_SME_pre-backup, /etc/rc.d/init.d/backuppc *";
foreach( split( /[;,]/,( $backuppc{'sudo'} || '' ) ) ){
$OUT .= ", $_";
}
}

View File

@ -0,0 +1 @@
backuppc ALL=(root) NOPASSWD: BACKUPPC_CMD

View File

@ -0,0 +1,4 @@
{
$PRUNEPATHS .= " /var/lib/BackupPC ";
$OUT ="";
}

View File

@ -0,0 +1,32 @@
#!/usr/bin/perl
#----------------------------------------------------------------------
# heading : Administration
# description : BackupPC
# navigation : 4000 4200
#----------------------------------------------------------------------
use strict;
use CGI':all';
use CGI::Carp qw(fatalsToBrowser);
BEGIN
{
$ENV {'PATH'} = '/bin:/usr/bin:/sbin';
$ENV {'SHELL'} = '/bin/bash';
delete $ENV {'ENV'};
}
my $q = new CGI;
my $content="0; url=https://".$ENV {'HTTP_X_FORWARDED_HOST'}."/BackupPC";
$q->default_dtd('-//W3C//DTD XHTML 1.0 Transitional//EN');
print $q->header ('text/html');
print $q->start_html (-head=>meta({-http_equiv=>'refresh', -content=>$content}));
print $q->end_html;

View File

@ -0,0 +1,187 @@
#------------------------------------------------------------
# !!DO NOT MODIFY THIS FILE!!
#
# Manual changes will be lost when this file is regenerated.
#
# Please read the developer's guide, which is available
# at http://www.contribs.org/development/
#
# Copyright (C) 1999-2006 Mitel Networks Corporation
#------------------------------------------------------------
LoadModule auth_tkt_module modules/mod_auth_tkt.so
TKTAuthSecret "1234"
Listen 127.0.0.1:950
HostnameLookups off
ServerAdmin admin
ServerRoot /etc/httpd
ServerTokens ProductOnly
User backuppc
Group backuppc
ErrorLog /var/log/httpd/bkpc_error_log
LogLevel warn
LoadModule env_module modules/mod_env.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule status_module modules/mod_status.so
LoadModule info_module modules/mod_info.so
LoadModule include_module modules/mod_include.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule asis_module modules/mod_asis.so
LoadModule imap_module modules/mod_imap.so
LoadModule actions_module modules/mod_actions.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule access_module modules/mod_access.so
LoadModule auth_module modules/mod_auth.so
LoadModule auth_anon_module modules/mod_auth_anon.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule : modules/mod_authz_core.so
PidFile /var/run/httpd-bkpc.pid
ScoreBoardFile /var/run/httpd-bkpc.scoreboard
UseCanonicalName off
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{User-agent}i" agent
CustomLog /var/log/httpd/bkpc_access_log common
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MaxClients 150
MaxRequestsPerChild 100
ServerName www.domain.tld
MinSpareServers 1
MaxSpareServers 5
StartServers 1
Timeout 300
DefaultIcon /icons/unknown.gif
DirectoryIndex index.htm index.html index.php index.cgi
IndexOptions FancyIndexing VersionSort NameWidth=*
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
AccessFileName .htaccess
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/*
DefaultType text/plain
TypesConfig /etc/mime.types
AddEncoding x-compress Z
AddEncoding x-gzip gz
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^^
AddLanguage en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it
LanguagePriority en fr de
AddType text/html .shtml
AddType application/x-pkcs7-crl .crl
AddType application/x-x509-ca-cert .crt
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
AddHandler cgi-script .cgi
AddHandler server-parsed .shtml
AddHandler imap-file map
DocumentRoot /usr/share/BackupPC/html
# First, we configure the "default" to be a very restrictive set of
# permissions.
<Directory />
Options None
AllowOverride None
Require all denied
</Directory>
Alias /BackupPC/images /usr/share/BackupPC/html/
ScriptAlias /BackupPC /usr/share/BackupPC/sbin/BackupPC_Admin
<Directory /usr/share/BackupPC/html/>
Options None
AllowOverride None
Require ip 127.0.0.1
</Directory>
<Directory /usr/share/BackupPC/sbin/>
Options ExecCGI
AllowOverride None
AuthName "BackupPC"
AuthType Basic
TKTAuthLoginURL /server-common/cgi-bin/login
SetEnv IMGHDR_SRC "/server-common/server-manager.jpg"
<RequireAll>
Require valid-user
Require ip 127.0.0.1
</RequireAll>
</Directory>

View File

@ -0,0 +1,12 @@
[Unit]
Description=BackupPC web page
After=network.target
[Service]
Type=forking
#PIDFile=/run/bandwidthd.pid
ExecStart=/var/service/httpd-bkpc/run
[Install]
WantedBy=sme-server.target

View File

@ -0,0 +1,67 @@
#!/usr/bin/perl
# Author: Daniel Berteaud (daniel@firewall-services.com)
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
use lib "/usr/share/BackupPC/lib";
use BackupPC::SMEarchive;
use strict;
my $logFile = '/tmp/'.genRandName ();
# Sortie erreur standard=fichier de log
open (STDERR, ">$logFile");
my $today = `$path{date} +%F-%kh%M`;
my $check = 1;
# on inscrit la date en haut du fichier log
print STDERR "Starting archive: ".`$path{date}`."\n";
my %opts=();
my %params=(
'destination'=>"/tmp/",
'split'=>"0",
'compress'=>"gzip",
'cipher'=>'off',
'key'=>'/etc/BackupPC/archive.key',
'backupNum'=>"-1",
'share'=>"*",
'parity'=>'0',
'hosts'=>'localhost',
'sendMailTo'=>'admin',
'configFile'=>'/etc/BackupPC/localArchive.conf');
# On lance la récupération des paramètre qui retourne le fichier de config à utiliser
$params{configFile} = init($params{configFile});
%params = readConf(\%params);
print STDERR "\nYou have requested to archive these hosts: $params{hosts} to this destination: $params{destination}\n\n";
localArchive($params{hosts},$params{backupNum},$params{share},$params{compress},$params{split},$params{cipher},$params{key},$params{destination});
print STDERR "\n\nArchive finished: ".`$path{date}`."\n";
my $log = `$path{cat} $logFile`;
sendMail($params{sendMailTo},'localArchive',$log);
mvLog('localArchive',$logFile,$today);
exit(0);

View File

@ -0,0 +1,80 @@
#!/usr/bin/perl
# Author: Daniel Berteaud (daniel@firewall-services.com)
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
use lib "/usr/share/BackupPC/lib";
use BackupPC::SMEarchive;
use BackupPC::SMEcopyPool;
use strict;
my $logFile = '/tmp/'.genRandName ();
my $rsyncLog = '/tmp/'.genRandName ();
my $check = 1;
# Sortie erreur standard=fichier de log
open (STDERR, ">$logFile");
my $today = `$path{date} +%F-%kh%M`;
# on inscrit la date en haut du fichier log
print STDERR "Starting pool copy: ".`$path{date}`."\n";
my %opts=();
my %params=(
'destination'=>"/tmp/",
'source'=>'/var/lib/BackupPC/',
'compress'=>"gzip",
'extract'=>"yes",
'stop'=>"yes",
'sendMailTo'=>'admin',
'configFile'=>'/etc/BackupPC/localCopyPool.conf');
# On lance la récupération des paramètres qui retourne le fichier de config à utiliser
$params{configFile} = init($params{configFile});
%params = readConf(\%params);
print STDERR "You have requested to copy all your backups ($params{source}) to this destination: $params{destination}\n\n";
$check = verifTree($params{source});
if ($check eq 1){
if ($params{stop} eq 'yes'){
stopBackupPC();
}
copyPool($params{source},$params{destination},$logFile,$rsyncLog);
localCopyPC($params{source},$params{destination},$params{compress},$params{extract},$logFile);
if ($params{stop} eq 'yes'){
startBackupPC();
}
}
else{
print STDERR "\naborting, the source directory is probably not the good one\n\n";
}
print STDERR "\n\nCopy finished: ".`$path{date}`."\n";
my $log = `$path{cat} $logFile`;
sendMail($params{sendMailTo},'localCopyPool',$log);
mvLog('localCopyPool',$logFile,$today);
exit(0);

View File

@ -0,0 +1,13 @@
#!/bin/bash
HOME=/root
PATH=/usr/bin:$PATH
# Backup config and log on the dedicated hard drive
mkdir -p /var/lib/BackupPC/etc
rsync -ahq --del /etc/BackupPC/ /var/lib/BackupPC/etc/
mkdir -p /var/lib/BackupPC/log
rsync -ahq --del /var/log/BackupPC /var/lib/BackupPC/log/
# Run a standard signal-event pre-backup
/sbin/e-smith/signal-event pre-backup

View File

@ -0,0 +1,67 @@
#!/usr/bin/perl
# Author: Daniel Berteaud (daniel@firewall-services.com)
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
use lib "/usr/share/BackupPC/lib";
use BackupPC::SMEarchive;
use strict;
my $logFile = '/tmp/'.genRandName ();
# Sortie erreur standard=fichier de log
open (STDERR, ">$logFile");
my $today = `$path{date} +%F-%kh%M`;
my $check = 1;
# on inscrit la date en haut du fichier log
print STDERR "Starting archive: ".`$path{date}`."\n";
my %opts=();
my %params=(
'remoteHost'=>"remote_host.com",
'remoteUser'=>"backuppc",
'remoteDir'=>"/tmp/",
'compress'=>"gzip",
'cipher'=>'off',
'key'=>'/etc/BackupPC/archive.key',
'backupNum'=>"-1",
'share'=>"*",
'hosts'=>'localhost',
'sendMailTo'=>'admin',
'configFile'=>'/etc/BackupPC/remoteArchive.conf');
# On lance la récupération des paramètre qui retourne le fichier de config à utiliser
$params{configFile} = init($params{configFile});
%params = readConf(\%params);
print STDERR "\nYou have requested to archive these hosts: $params{hosts} to this destination: $params{remoteUser}\@$params{remoteHost}:/$params{remoteDir}\n\n";
remoteArchive($params{remoteHost},$params{remoteUser},$params{remoteDir},$params{hosts},$params{backupNum},$params{share},$params{compress},$params{cipher},$params{key});
print STDERR "\n\nArchive finished: ".`$path{date}`."\n";
my $log = `$path{cat} $logFile`;
sendMail($params{sendMailTo},'remoteArchive',$log);
mvLog('remoteArchive',$logFile,$today);
exit(0);

View File

@ -0,0 +1,84 @@
#!/usr/bin/perl
# Author: Daniel Berteaud (daniel@firewall-services.com)
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
use lib "/usr/share/BackupPC/lib";
use BackupPC::SMEarchive;
use BackupPC::SMEcopyPool;
use strict;
my $logFile = '/tmp/'.genRandName ();
my $rsyncLog = '/tmp/'.genRandName ();
my $check = 1;
# Sortie erreur standard=fichier de log
open (STDERR, ">$logFile");
my $today = `$path{date} +%F-%kh%M`;
# on inscrit la date en haut du fichier log
print STDERR "Starting pool copy: ".`$path{date}`."\n";
my %opts=();
my %params=(
'remoteHost'=>"remote_host.com",
'remoteUser'=>"backuppc",
'remoteDir'=>"/tmp/",
'source'=>'/var/lib/BackupPC/',
'compress'=>"gzip",
'extract'=>"yes",
'stop'=>"yes",
'sendMailTo'=>'admin',
'configFile'=>'/etc/BackupPC/remoteCopyPool.conf');
# On lance la récupération des paramètres qui retourne le fichier de config à utiliser
$params{configFile} = init($params{configFile});
%params = readConf(\%params);
print STDERR "You have requested to copy all your backups ($params{source}) to this destination: $params{remoteUser}\@$params{remoteHost}:$params{remoteDir}\n\n";
$check = verifTree($params{source});
if ($check eq 1){
if ($params{stop} eq 'yes'){
stopBackupPC();
}
copyPool($params{source},"$params{remoteUser}\@$params{remoteHost}:$params{remoteDir}",$logFile,$rsyncLog);
remoteCopyPC($params{source},$params{remoteHost},$params{remoteUser},$params{remoteDir},$params{compress},$params{extract},$logFile);
if ($params{stop} eq 'yes'){
startBackupPC();
}
}
else{
print STDERR "\naborting, the source directory is probably not the good one\n\n";
}
print STDERR "\n\nCopy finished: ".`$path{date}`."\n";
my $log = `$path{cat} $logFile`;
sendMail($params{sendMailTo},'remoteCopyPool',$log);
mvLog('remoteCopyPool',$logFile,$today);
exit(0);

View File

@ -0,0 +1,85 @@
#!/usr/bin/perl
# Author: Daniel Berteaud (daniel@firewall-services.com)
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
use lib "/usr/share/BackupPC/lib";
use BackupPC::SMEarchive;
#use Getopt::Std;
use strict;
my $logFile = '/tmp/'.genRandName ();
# Sortie erreur standard=fichier de log
open (STDERR, ">$logFile");
my $today = `$path{date} +%F-%kh%M`;
my $check = 1;
# on inscrit la date en haut du fichier log
print STDERR "Starting archive: ".`$path{date}`."\n";
my %opts=();
my %params=(
'split'=>"0",
'compress'=>"/bin/gzip",
'cipher'=>'off',
'key'=>'/etc/BackupPC/archive.key',
'backupNum'=>"-1",
'share'=>"*",
'hosts'=>'localhost',
'sendMailTo'=>'admin',
'device'=>'/dev/sdc1',
'configFile'=>'/etc/BackupPC/usbArchive.conf');
# On définit un nom aléatoire pour le point de montage
$params{destination} = '/var/lib/BackupPC/'.genRandName();
# On lance la récupération des paramètre qui retourne le fichier de config à utiliser
$params{configFile} = init($params{configFile});
%params = readConf(\%params);
print STDERR "\nYou have requested to archive these hosts: $params{hosts} to this destination: $params{destination}\n\n";
$check = mountUsb($params{destination},$params{device});
if ($check eq 1){
localArchive($params{hosts},$params{backupNum},$params{share},$params{compress},$params{split},$params{cipher},$params{key},$params{destination});
}
else{
print STDERR "\n\nAborting, an error occured while mounting the removable device $params{device} on $params{destination}\n\n";
}
$check = umountUsb($params{destination},$params{device});
if ($check = 1){
print STDERR "\numounting $params{device}: [ OK ]\n";
}
else{
print STDERR "\nan error occured while unmounting the device $params{device} from $params{destination}\n";
}
print STDERR "\n\nArchive finished: ".`$path{date}`."\n";
my $log = `$path{cat} $logFile`;
sendMail($params{sendMailTo},'usbArchive',$log);
mvLog('usbArchive',$logFile,$today);
exit(0);

View File

@ -0,0 +1,93 @@
#!/usr/bin/perl
# Author: Daniel Berteaud (daniel@firewall-services.com)
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
use lib "/usr/share/BackupPC/lib";
use BackupPC::SMEarchive;
use BackupPC::SMEcopyPool;
use strict;
my $logFile = '/tmp/'.genRandName ();
my $rsyncLog = '/tmp/'.genRandName ();
my $check = 1;
# Sortie erreur standard=fichier de log
open (STDERR, ">$logFile");
my $today = `$path{date} +%F-%kh%M`;
# on inscrit la date en haut du fichier log
print STDERR "Starting pool copy: ".`$path{date}`."\n";
my %opts=();
my %params=(
'device'=>'/dev/sdc1',
'source'=>'/var/lib/BackupPC',
'compress'=>"none",
'extract'=>"yes",
'stop'=>"yes",
'sendMailTo'=>'admin',
'configFile'=>'/etc/BackupPC/usbCopyPool.conf');
# On définit un nom aléatoire pour le point de montage
$params{destination} = '/var/lib/BackupPC/'.genRandName();
# On lance la récupération des paramètres qui retourne le fichier de config à utiliser
$params{configFile} = init($params{configFile});
%params = readConf(\%params);
print STDERR "You have requested to copy all your backups ($params{source}) to this destination: $params{device}\n\n";
$check = (verifTree($params{source}) && mountUsb($params{destination},$params{device}));;
if ($check eq 1){
if ($params{stop} eq 'yes'){
stopBackupPC();
}
copyPool($params{source},$params{destination},$logFile,$rsyncLog);
localCopyPC($params{source},$params{destination},$params{compress},$params{extract},$logFile);
if ($params{stop} eq 'yes'){
startBackupPC();
}
}
else{
print STDERR "\naborting, the source directory is probably not the good one, or an error occured while mounting $params{device} on $params{destination}\n\n";
}
$check = umountUsb($params{destination},$params{device});
if ($check = 1){
print STDERR "\numounting $params{device}: [ OK ]\n";
}
else{
print STDERR "\nan error occured while unmounting the device $params{device} from $params{destination}\n";
}
print STDERR "\n\nCopy finished: ".`$path{date}`."\n";
my $log = `$path{cat} $logFile`;
sendMail($params{sendMailTo},'usbCopyPool',$log);
mvLog('usblCopyPool',$logFile,$today);
exit(0);

View File

@ -0,0 +1,301 @@
# Author: Daniel Berteaud (daniel@firewall-services.com)
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
package BackupPC::SMEarchive;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(%path %opts &checkExec &checkDest &init &readConf &logAndPerform &sendMail &genRandName &mvLog &localArchive &mountUsb &umountUsb &remoteArchive);
use strict;
use Mail::Send;
use Getopt::Std;
our %path=();
$path{backuppcBin} = '/usr/share/BackupPC/bin/';
$path{split} = '/usr/bin/split';
$path{date} = '/bin/date';
$path{rm} = '/bin/rm';
$path{rmdir} = '/bin/rmdir';
$path{cat} = '/bin/cat';
$path{mkdir} = '/bin/mkdir';
$path{par2} = '/bin/ping';
$path{ssh} = '/usr/bin/ssh';
$path{mount} = '/bin/mount';
$path{umount} = '/bin/umount';
$path{grep} = '/bin/grep';
$path{wc} = '/usr/bin/wc';
$path{sudo} = '/usr/bin/sudo';
$path{gzip} = '/bin/gzip';
$path{bzip2} = ( -x '/usr/bin/pbzip2' ) ? '/usr/bin/pbzip2' : '/usr/bin/bzip2';
$path{rsync} = '/usr/bin/rsync';
$path{tar} = '/bin/tar';
$path{openssl} = '/usr/bin/openssl';
$path{nice} = '/bin/nice';
sub checkExec{
# On vérifie que les executables sont bien executables
my $ok = 1;
foreach (keys %path){
if (!-x $path{$_}){$ok = 0;}
}
return $ok;
}
sub checkDest{
# On vérifie les droits d'écriture sur la destination
my ($destination) = @_;
my $ok = 0;
logAndPerform("$path{mkdir} $destination") if (!-d $destination);
if ((-w $destination) && (-d $destination)){$ok = 1;}
return $ok;
}
# Fonciton qui récupère les arguments, et remplace le fichier de conf si spécifié
sub init{
my ($configFile) = @_;
my %opts;
getopts ("hf:", \%opts) || help();
$opts{h} = '0' if (! defined $opts{h});
if (defined $opts{f}){
if (-e $opts{f}){
print STDERR "using $opts{f} as config file instead of default\n";
$configFile = $opts{f};
}
else{
print STDERR "\nIgnoring specified config file $opts{f} because this file doesn't exist. Using default one\n";
}
}
help () if ($opts{h});
return $configFile;
}
sub help(){
print <<EOF;
usage: $0 [-h] [-f config]
options:
-h print this help
-f config use config instead of default one.
EOF
exit(1);
}
# Fonction qui parse le fichier de config
sub readConf($){
my $hRef = shift;
my %params;
foreach my $key ( keys %$hRef){
$params{$key} = $hRef->{$key};
}
open (PARAMS,"< $params{configFile}") || die "erreur a l'ouverture de $params{configFile}\n";
my @params_lus=<PARAMS>;
close PARAMS;
print STDERR "Parsing config file\n\n";
foreach (@params_lus){
foreach my $key (keys(%params)){
# valeur = partie droite de la ligne contenant $key dans le fichier
if ($_ =~ /\s*$key\s*=\s*(.*)/){
$params{$key} = $1;
print STDERR "key=\"$key\", value=\"$params{$key}\"\n";
}
}
}
print STDERR "\n\n";
return (%params);
}
# Fonction qui log les commandes et qui les éxecute
sub logAndPerform($){
my ($cmd) = @_;
print STDERR "\nexecuting command\n$cmd\n\n";
system($cmd);
}
# Fonction qui envoie le mail contenant le log
sub sendMail($$$){
my ($sendMailTo,$about,$content) = @_;
my $mail = new Mail::Send;
$mail->to("$sendMailTo");
$mail->set("From","BackupPC");
$mail->subject("$about");
my $body = $mail->open;
print $body $content;
$body->close;
}
# fonction qui génère un nom aléatoire pour les fichiers temporaires
sub genRandName (){
my @c=("A".."Z","a".."z",0..9);
my $randomName = join("",@c[map{rand @c}(1..8)]);
return $randomName;
}
# fonction qui déplace le fichier de log au bon endroit
sub mvLog($$$){
my ($type,$file,$today) = @_;
if (! -d "/var/log/BackupPC/$type/"){
logAndPerform("$path{mkdir} -p /var/log/BackupPC/$type/");
}
my $content = `$path{cat} $file`;
open(LOGFILE, "> /var/log/BackupPC/$type/$today");
print LOGFILE $content;
close LOGFILE;
system("$path{rm} -f $file");
}
sub localArchive($$$$$$$$){
my ($hosts,$backupNum,$share,$compress,$split,$cipher,$key,$destination) = @_;
my $check = 1;
my $extension = 'tar';
# on fixe l'extension de l'archive en fonction de la compression utilisée
if ($compress eq 'gzip'){$extension = 'tar.gz';}
elsif ($compress eq 'bzip2'){$extension = 'tar.bz2';}
else{$extension = 'tar';}
if (! checkExec()){
print STDERR "\nError, one of the needed executable is not executable\n";
$check = 0;
}
if (! checkDest($destination)){
print STDERR "\nError, $destination is not writable\n";
$check = 0;
}
#if (! checkHosts($params{checkHosts}){
# print STDERR "\nError, $hosts is not a valid list of hosts\n";
# $check = 0;
#}
if ($check eq 1){
my @hosts = split(/\s/,$hosts);
# On supprime toutes les archives existantes sur la destination pour éviter la fragmentation
logAndPerform("$path{rm} -f $destination/*.$extension");
foreach my $host (@hosts){
my $cmd = "$path{backuppcBin}/BackupPC_tarCreate -t -h $host -n $backupNum -s $share . ";
if (($compress eq 'gzip') || ($compress eq 'bzip2')){
$cmd .= "| $path{nice} -n 10 $path{$compress} -c ";
}
if (($cipher ne 'off') && (-e $key)){
$cmd .= "| $path{nice} -n 10 $path{openssl} enc -$cipher -salt -pass file:$key";
$extension .= '.enc';
}
if ($split eq '0'){
$cmd .= "> $destination/$host.$backupNum.$extension";
}
else{
$cmd .= "| $path{split} - -b $split"."m"."$destination/$host.$backupNum.$extension.";
}
logAndPerform($cmd);
}
}
else{
print STDERR "\nFatal error, aborting\n";
}
}
sub mountUsb($$){
my ($destination,$device) = @_;
my $ok = 0;
if (!-e $destination){
logAndPerform("$path{mkdir} -p $destination");
}
if (!-e $destination){
print STDERR "\n\n$destination doesn't exist and cannot be created\n\n";
}
else{
logAndPerform("$path{sudo} $path{mount} $device $destination");
$ok = `$path{mount} | $path{grep} $destination | $path{wc} -l`;
chomp($ok);
}
return $ok;
}
sub umountUsb($$){
my ($destination,$device) = @_;
my $ok = 0;
my $isMounted = `$path{mount} | $path{grep} $destination | $path{wc} -l`;
chomp($isMounted);
if ($isMounted eq '1'){
print STDERR "\n$device seems to be mounted, lets umount it\n";
logAndPerform("$path{sudo} $path{umount} -f $destination");
}
else{
print STDERR "\n\nError: $device seems to be already unmounted\n\n";
}
$isMounted = `$path{mount} | $path{grep} $destination | $path{wc} -l`;
chomp($isMounted);
if ($isMounted eq '1'){
print STDERR "\nError: $device seems to be buzy, lets try to umount it lazily\n";
logAndPerform("$path{sudo} $path{umount} -fl $destination");
}
$isMounted = `$path{mount} | $path{grep} $destination | $path{wc} -l`;
chomp($isMounted);
if ($isMounted eq '1'){
print STDERR "\nError: $device seems to be buzy, lazy umount has failed\n";
}
if ($isMounted eq '0'){
logAndPerform("$path{rmdir} $destination");
}
$isMounted = `$path{mount} | $path{grep} $destination | $path{wc} -l`;
chomp($isMounted);
if ($isMounted eq '0'){
$ok = 1;
}
return $ok;
}
sub remoteArchive($$$$$$$$$){
my ($remoteHost,$remoteUser,$remoteDir,$hosts,$backupNum,$share,$compress,$cipher,$key) = @_;
my $check = 1;
my $extension = 'tar';
# on fixe l'extension de l'archive en fonction de la compression utilisée
if ($compress eq 'gzip'){$extension = 'tar.gz';}
elsif ($compress eq 'bzip2'){$extension = 'tar.bz2';}
else{$extension = 'tar';}
if (! checkExec()){
print STDERR "\nError, one of the needed executable is not executable\n";
$check = 0;
}
if ($check eq 1){
my @hosts = split(/\s/,$hosts);
foreach my $host (@hosts){
my $cmd = "$path{backuppcBin}/BackupPC_tarCreate -t -h $host -n $backupNum -s $share . ";
if (($compress eq 'gzip') || ($compress eq 'bzip2')){
$cmd .= "| $path{$compress} -c ";
}
if (($cipher ne 'off') && (-e $key)){
$cmd .= "| $path{openssl} enc -$cipher -salt -pass file:$key";
$extension .= '.enc';
}
$cmd .= " | $path{ssh} -l $remoteUser $remoteHost \"(cd $remoteDir && $path{cat} > $remoteDir/$host.$backupNum.$extension)\"";
logAndPerform($cmd);
}
}
else{
print STDERR "\nFatal error, aborting\n";
}
}
1;

View File

@ -0,0 +1,176 @@
# Author: Daniel Berteaud (daniel@firewall-services.com)
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
package BackupPC::SMEcopyPool;
use lib "/usr/share/BackupPC/lib";
use BackupPC::SMEarchive;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(&verifTree &stopBackupPC &startBackupPC &copyPool &localCopyPC &remoteCopyPC);
# Fonction qui vérifie (grossièrement) l'arborescence de la source pour la copie de pool
sub verifTree($){
my ($source) = @_;
print STDERR "\ntesting $source\n";
my $ok = 1;
foreach ("$source","$source/pc","$source/pool","$source/cpool"){
if (!-d "$_"){
print STDERR "$_ is not a valid directory, aborting\n";
$ok = 0;
}
}
return $ok;
}
# Fonction qui arrête le service BackupPC
sub stopBackupPC(){
if (-e '/var/log/BackupPC/BackupPC.pid'){
$pid = `$path{cat} /var/log/BackupPC/BackupPC.pid`;
print STDERR "BackupPC is running (pid=$pid), you have requested to stop it\n";
logAndPerform("$path{sudo} /etc/rc.d/init.d/backuppc stop");
}
elsif ((! -e '/var/log/BackupPC/BackupPC.pid') && ($stop eq 'yes')){
print STDERR "\nYou have requested to stop BackupPC daemon but it seems that it's not running\n";
}
}
# Fonction qui démarre le service BackupPC
sub startBackupPC(){
if (! -e '/var/log/BackupPC/BackupPC.pid'){
print STDERR "\n\nrestarting BackupPC deamon\n\n";
logAndPerform("$path{sudo} /etc/rc.d/init.d/backuppc start");
}
}
# Fonction qui copie les données de backuppc sous forme brut
# Ne copie pas le répertoire pc/ (pb de hardlinks, gérés à part)
# Peut être utilisée pour une copie local ou distante
sub copyPool($$$$){
my ($source,$destination,$logFile,$rsyncLog) = @_;
# Si /etc/BackupPC exist, on le sauvegarde dans $params{source}/etc
if(-d '/etc/BackupPC'){
logAndPerform("$path{mkdir} -p $source/etc") if (!-d "$source/etc");
logAndPerform("$path{rsync} -ah --del --stats /etc/BackupPC/ $source/etc/ > $rsyncLog");
print STDERR `$path{cat} $rsyncLog`;
}
# idem pour les logs
if(-d '/var/log/BackupPC'){
logAndPerform("$path{mkdir} -p $source/log") if (!-d "$source/log");
logAndPerform("$path{rsync} -ah --del --stats /var/log/BackupPC/ $source/log/ > $rsyncLog");
print STDERR `$path{cat} $rsyncLog`;
}
# commande qui sync en non récursif pour créer les rep nécessaires
logAndPerform("$path{rsync} -qlptgoDHhd --stats --del $source/ $destination/ > $rsyncLog");
print STDERR `$path{cat} $rsyncLog`;
# la commande suivante sync tout sauf les rep pc, pool et cpool (pour éviter de saturer la ram)
logAndPerform("$path{rsync} -ah --del --stats --exclude=cpool/ --exclude=pool/ --exclude=pc/ $source/ $destination/ > $rsyncLog");
print STDERR `$path{cat} $rsyncLog`;
# Maintenant, on sync le rep pool
logAndPerform("$path{rsync} -ah --del --stats $source/pool/ $destination/pool/ > $rsyncLog");
print STDERR `$path{cat} $rsyncLog`;
# Puis le cpool
logAndPerform("$path{rsync} -ah --del --stats $source/cpool/ $destination/cpool/ > $rsyncLog");
print STDERR `$path{cat} $rsyncLog`;
}
# Fonction qui copie le répertoire pc/ vers un rep local (en utilisant BackupPC_tarPCCopy)
sub localCopyPC($$$$$){
my ($source,$destination,$compress,$extract,$logFile) = @_;
my $archName = 'pc.tar';
my $cmd = ();
my @pipe = ();
my $tarOpts = 'xPf';
my $main = '';
# on vide le répertoire "pc"
if ($destination ne ''){
logAndPerform("$path{rm} -Rf $destination/pc/*");
}
push(@pipe,"$path{backuppcBin}/BackupPC_tarPCCopy $source/pc/ |");
if ($compress eq 'gzip'){
push (@pipe," $path{gzip} -c |");
$archName = "pc.tar.gz";
$tarOpts = 'xPzf';
}
elsif ($compress eq 'bzip2'){
push (@pipe," $path{bzip2} -c |");
$archName = "pc.tar.bz2";
$tarOpts = 'xPjf';
}
if ($extract eq 'yes'){
push (@pipe,"(cd $destination/pc/ && $path{tar} $tarOpts -)");
}
else{
push (@pipe,"$path{cat} > $destination/pc/$archName");
}
foreach (@pipe){
$main = $main.$_;
}
logAndPerform($main);
}
# Fonciton qui copie le rep pc/ sur une machine distante (toujours en utilisant BackuPPC_tarPCCopy)
sub remoteCopyPC($$$$$$$){
my ($source,$remoteHost,$remoteUser,$remoteDir,$compress,$extract,$logFile) = @_;
my $archName = 'pc.tar';
my $cmd = ();
my @pipe = ();
my $tarOpts = 'xPf';
my $main = '';
# on vide le répertoire "pc"
if ($remoteDir ne ''){
logAndPerform("$path{ssh} -l $remoteUser $remoteHost \"$path{rm} -Rf $remoteDir/pc/*\"");
}
push(@pipe,"$path{backuppcBin}/BackupPC_tarPCCopy $source/pc/ |");
if ($compress eq 'gzip'){
push (@pipe," $path{gzip} -c |");
$archName = "pc.tar.gz";
$tarOpts = 'xPzf';
}
elsif ($compress eq 'bzip2'){
push (@pipe," $path{bzip2} -c |");
$archName = "pc.tar.bz2";
$tarOpts = 'xPjf';
}
if ($extract eq 'yes'){
push (@pipe,"$path{ssh} -l $remoteUser $remoteHost \"(cd $remoteDir/pc/ && $path{tar} $tarOpts -)\"");
}
else{
push (@pipe,"$path{ssh} -l $remoteUser $remoteHost \"$path{cat} > $remoteDir/pc/$archName\"");
}
foreach (@pipe){
$main = $main.$_;
}
logAndPerform($main);
}
1;

View File

@ -0,0 +1,104 @@
package SrvMngr::Controller::Backuppc;
#----------------------------------------------------------------------
# heading : Administration
# description : BackupPC
# navigation : 4000 4200
#----------------------------------------------------------------------
# name : backuppc, method : get, url : /backuppc, ctlact : Backuppc#main
# routes : end
use strict;
use warnings;
use Mojo::Base 'Mojolicious::Controller';
use utf8;
use Locale::gettext;
use SrvMngr::I18N;
use SrvMngr qw(theme_list init_session ip_number_or_blank);
use Quota;
use esmith::ConfigDB;
use esmith::AccountsDB;
use esmith::util;
use File::Basename;
use File::Find;
use File::Path qw(make_path remove_tree);
use esmith::Backup;
use esmith::BackupHistoryDB;
use esmith::util;
use esmith::lockfile;
use constant DEBUG => $ENV{MOJO_SMANAGER_DEBUG} || 0;
our $cdb = esmith::ConfigDB->open || die "Couldn't open config db";
our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
sub main {
my $c = shift;
$c->app->log->info($c->log_req);
#my $modul = get_backuppc( $c );
my $url = "https://".$c->session->{'SystemName'}.".".$c->session->{"DomainName"}."/BackupPC";
#my $url = 'https://sme10.thereadclan.me.uk/BackupPC';
$c->stash(url => $url );
$c->render(template => 'backuppc');
}
sub get_backuppc {
my ($c) = @_;
my $tx = $c->tx;
my $req = $tx->req;
# 3 env variables for durep.cgi
#$ENV{'SCRIPT_NAME'} = 'durep';
#$ENV{'REQUEST_METHOD'} = $req->method;
#$ENV{'QUERY_STRING'} = $req->url->query->to_string;
my $res = `https:////sme10.thereadclan.me.uk//BackupPC`;
my $res = `/usr/share/BackupPC/sbin/BackupPC_Admin`; #
my $step = 0; my $out;
my @lines = split /\n/, $res;
# remove except 'body'
foreach my $line (@lines) {
if ( $line =~ m|<body>| ) {
$step = 1;
} elsif ( $line =~ m|</body>| ) {
$step = 2;
} elsif ( $step == 1 ) {
$out .= $line;
}
}
return $out;
}
#sub main {
# my $c = shift;
# $c->app->log->info($c->log_req);
# BEGIN
# {
# $ENV {'PATH'} = '/bin:/usr/bin:/sbin';
# $ENV {'SHELL'} = '/bin/bash';
# delete $ENV {'ENV'};
# }
#$c = $c->redirect_to("https://".$ENV {'HTTP_X_FORWARDED_HOST'}."/BackupPC");
# $c = $c->redirect_to("https://sme10.thereadclan.me.uk//BackupPC");
#}
1;

View File

@ -0,0 +1,26 @@
% layout 'default', title => 'Sme server 2 - BackupPC';
% content_for 'head_contrib' => begin
%end
% content_for 'module' => begin
% if ($config->{debug} == 1) {
<p>
%= dumper stash 'url'
</p>
% }
<div id="central">
% if ( stash 'error' ) {
<br><div class=sme-error>
%= $c->render_to_string(inline => stash 'error')
</div>
%}
<iframe src="<%= $url %>" title="Backup PC" width="100%" height="1000px"></iframe>
%#= $c->render_to_string(inline => $modul)
</div>
% end

View File

@ -0,0 +1,27 @@
#!/bin/sh
#----------------------------------------------------------------------
# copyright (C) 2005 Mitel Networks Corporation
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Technical support for this program is available from Mitel Networks
# Please visit our web site www.mitel.com/sme/ for details.
#----------------------------------------------------------------------
exec \
/usr/local/bin/setuidgid smelog \
/usr/local/bin/multilog t s5000000 \
/var/log/httpd-bkpc

View File

@ -0,0 +1,12 @@
#!/bin/sh
#----------------------------------------------------------------------
# copyright (C) 1999-2004 Mitel Networks Corporation
#----------------------------------------------------------------------
config=/etc/httpd/bkpc-conf/httpd.conf
[ -e $config ] || exit 1
exec 2>&1
exec chpst -P /usr/sbin/httpd -f $config -D FOREGROUND&

260
smeserver-BackupPC.spec Normal file
View File

@ -0,0 +1,260 @@
# $Id: smeserver-BackupPC.spec,v 1.16 2023/02/11 09:01:47 terryfage Exp $
# Authority: vip-ire
# Name: Daniel Berteaud
Name: smeserver-BackupPC
Version: 0.2
Release: 16%{?dist}
Summary: BackupPC integration into SME server
Group: Applications/System
License: GPL
URL: http://backuppc.sourceforge.net/
Source: %{name}-%{version}.tar.xz
BuildRoot: %{_tmppath}/%{name}-%{version}
BuildArch: noarch
BuildRequires: e-smith-devtools
Requires: mod_auth_tkt
Requires: BackupPC >= 4.0.0
Requires: smeserver-remoteuseraccess
Requires: openssl
#Requires: e-smith-manager >= 2.8.0
Requires: e-smith-apache >= 2.6.0-19
AutoReqProv: no
#Conflicts: smeserver-backuppc.fws
Obsoletes: smeserver-backuppc.fws
%description
BackupPC is a high-performance, enterprise-grade system for backing up Linux
and WinXX PCs and laptops to a server's disk. BackupPC is highly configurable
and easy to install and maintain.
This package contains specific configuration for SME server
#----------------------------------------------------
#%package -n smeserver-BackupPC4
#Summary: BackupPC 4 integration into SME server
#Group: Email
#Requires: BackupPC4
#Conflicts: smeserver-BackupPC
#%description -n smeserver-BackupPC4
#BackupPC is a high-performance, enterprise-grade system for backing up Linux
#and WinXX PCs and laptops to a server's disk. BackupPC is highly configurable
#and easy to install and maintain.
#This package contains specific configuration for SME server
#----------------------------------------------------
%changelog
* Sat Sep 07 2024 cvs2git.sh aka Brian Read <brianr@koozali.org> 0.2-16.sme
- Roll up patches and move to git repo [SME: 12338]
* Sat Sep 07 2024 BogusDateBot
- Eliminated rpmbuild "bogus date" warnings due to inconsistent weekday,
by assuming the date is correct and changing the weekday.
* Sat Feb 11 2023 Zsolt Vasarhelyi <vasarhelyizsolt@hotmail.com> 0.2-15.sme
- expand-updatedb-conf patch [SME: 10513]
* Fri Feb 10 2023 Zsolt Vasarhelyi <vasarhelyizsolt@hotmail.com> 0.2-14.sme
- $Conf{TopDir} not in locate configuration's PRUNEPATHS [SME: 10513]
* Sun Jul 31 2022 Jean-Philippe Pialasse <tests@pialasse.com> 0.2-13.sme
- update to httpd 2.4 syntax [SME: 12036]
including Requires, and bkpc-conf
* Sat Jul 30 2022 Brian Read <brianr@bjsystems.co.uk> 0.2-12.sme
- Re-build and link to latest devtools [SME: 11997]
* Mon Jul 25 2022 Zsolt Vasarhelyi <vasarhelyizsolt@hotmail.com> 0.2-11.sme
- update to httpd 2.4 syntax [SME: 12036]
* Thu Jul 21 2022 Jean-Philippe Pialasse <tests@pialasse.com> 0.2-10.sme
- add configuration to core backup [SME: 12000]
- Re-build and link to latest devtools deprecated use of DefaultType [SME: 11875]
* Fri Oct 01 2021 Brian Read <brianr@bjsystems.co.uk> 0.2-9.sme
- Add in code for SM2 panel using iframe - note: Authentication not sorted [SME: 11701]
* Fri Apr 02 2021 Jean-Philippe Pialasse <tests@pialasse.com> 0.2-8.sme
- allow localhost SME backup without SSH, but sudo [SME: 10884]
* Wed Jan 27 2021 Brian Read <brianr@bjsystems.co.uk> 0.2-7.sme
- Get-httpd-bkpc-task-running [SME: 11055]
* Mon Jan 11 2021 Brian Read <brianr@bjsystems.co.uk> 0.2-6.sme
- Update createlinks for systemd according to [SME: 10959][SME: 11055]
* Fri Nov 27 2020 Brian Read <brianr@bjsystems.co.uk> 0.2-5.sme
- Add in extra Loadmodules to httpd.conf [SME: 11055]
* Tue Oct 27 2020 John Crisp <jcrisp@safeandsoundit.co.uk> 0.2-4.sme
- Initial build for SME v10 [SME:11055]
- Hard work done by Brian Read
- Remove v3 option and revert to just smeserver-BackupPC
* Mon Nov 25 2019 Jean-Philipe Pialasse <tests@pialasse.com> 0.2-3.sme
- initial build to install BackupPC4fix [SME: 10514]
* Wed May 03 2017 Jean-Philipe Pialasse <tests@pialasse.com> 0.2-2.sme
- update TKT auth parameter for SME 9.2 update [SME: 10266]
* Tue Nov 12 2013 Daniel B. <daniel@firewall-services.com> 0.2-1.sme
- Rebuild for SME9
* Mon Nov 29 2010 Daniel B. <daniel@firewall-services.com> 0.1-12.sme
- Support pbzip2 for archiving
- Use nice to reduce the priority of compression
* Tue Jun 16 2009 Daniel B. <daniel@firewall-services.com> [0.1-11]
- Remove double quotes when calling signal-event with ssh [SME: 5302]
* Fri May 29 2009 Daniel B. <daniel@firewall-services.com> [0.1-10]
- Call signal-event with it full path in smeserver-template.pl [SME: 5302]
* Tue May 12 2009 Daniel B. <daniel@firewall-services.com> [0.1-9]
- Add optionnal encryption of archives generated with BackupPC_SME_localArchive
BackupPC_SME_usbArchive and BackupPC_SME_remoteArchive using openssl
- Generate a key and save it in /etc/BackupPC/archive.key
- Fixe permission restriction on /etc/BackupPC/*
* Thu May 07 2009 Daniel B. <daniel@firewall-services.com> [0.1-8]
- Link backuppc-checkupgrade script in post-upgrade event
so the contrib is correctly configured without running backuppc-update
event [SME: 5221]
* Tue May 05 2009 Daniel B. <daniel@firewall-services.com> [0.1-7]
- Fixe permissions on /etc/BackupPC/pc
* Mon Mar 23 2009 Daniel B. <daniel@firewall-services.com> [0.1-6]
- modify default httpd conf (cleanup) to use the new paths
- Add quotes in share names for *Archive.conf files
- Enhance provided template
* Wed Mar 18 2009 Daniel B. <daniel@firewall-services.com> [0.1-5]
- Enhance sudoers templates
* Mon Feb 23 2009 Daniel B. <daniel@firewall-services.com> [0.1-4]
- Fix logrotate issue (send a sigusr1 signal to httpd-bkpc)
* Tue Jan 20 2009 Daniel B. <daniel@firewall-services.com> [0.1-3]
- Update Exclude path for smeserver config example
* Thu Dec 11 2008 Daniel B. <daniel@firewall-services.com> [0.1-2]
- Revert config and logs paths to their default location
- Expand-templates during bootrape-console-save instead of post-upgrade
- Remove sudoers templates.metadata to prevent conflict, added smeserver-remoteuseraccess
as a dependency
* Thu Nov 13 2008 Daniel B. <daniel@firewall-services.com> [0.1-1]
- Fix logrotate issue
* Thu Aug 14 2008 Daniel B. <daniel@firewall-services.com> [0.1-0]
- Adapted to work with 3.1.0
- Split smeserver specific stuff in a separate srpm
- Remove pre-compiled binaries from the srpm (par2cmdline must be downloaded separatly if needed)
- A dedicated httpd instance is used (running under backuppc user). This increase security as
user www no longer has access to backuppc data.
- Authentication is integrated with the server-manager (no need to login two times now)
- Added some config example (with backups disabled). These can be used as templates for other hosts
- Some corrections in backup export scripts (*copyPool scipts still need to be re-written
to be more reliable, maybe with dump/restore, or dd, and with built-in support for LVM snapshots)
* Thu May 10 2007 Daniel Berteaud <daniel@firewall-services.com>
- [3.0-1]
- corrected default config for localhost (excluding by default /opt/backuppc and /selinux)
- improvement of the rpm scriplets
- start and stop script linked to e-smith-service
- scripts for offline backups
- par2 included
* Tue Jan 30 2007 Daniel Berteaud <daniel@firewall-services.com>
- [3.0-0]
- rpm package
- script BackupPC_SME_remoteBackup to remotly backup the pool (to another UNIX host)
%prep
%setup -q -n %{name}-%{version}
%build
perl createlinks
%install
%{__mkdir} -p $RPM_BUILD_ROOT/var/service/httpd-bkpc/supervise
%{__mkdir} -p $RPM_BUILD_ROOT/var/service/httpd-bkpc/log/supervise
%{__mkdir} -p $RPM_BUILD_ROOT/var/log/httpd-bkpc
(cd root ; /usr/bin/find . -depth -print | /bin/cpio -dump $RPM_BUILD_ROOT)
/bin/rm -f %{name}-%{version}-filelist
/sbin/e-smith/genfilelist $RPM_BUILD_ROOT \
--file "/usr/share/BackupPC/bin/BackupPC_SME_pre-backup" "attr(0755,root,root) %config(noreplace)" \
--file "/usr/share/BackupPC/bin/BackupPC_SME_usbArchive" "attr(0755,root,root)" \
--file "/usr/share/BackupPC/bin/BackupPC_SME_usbCopyPool" "attr(0755,root,root)" \
--file "/usr/share/BackupPC/bin/BackupPC_SME_localArchive" "attr(0755,root,root)" \
--file "/usr/share/BackupPC/bin/BackupPC_SME_localCopyPool" "attr(0755,root,root)" \
--file "/usr/share/BackupPC/bin/BackupPC_SME_remoteArchive" "attr(0755,root,root)" \
--file "/usr/share/BackupPC/bin/BackupPC_SME_remoteCopyPool" "attr(0755,root,root)" \
--file "/etc/BackupPC/pc/localserver-template.pl2" "attr(640,backuppc,backuppc) %config(noreplace)" \
--file "/etc/BackupPC/pc/smeserver-template.pl2" "attr(640,backuppc,backuppc) %config(noreplace)" \
--file "/etc/BackupPC/pc/windows-template.pl" "attr(640,backuppc,backuppc) %config(noreplace)" \
--file "/etc/BackupPC/usbArchive.conf" "attr(640,backuppc,backuppc) %config(noreplace)" \
--file "/etc/BackupPC/usbCopyPool.conf" "attr(640,backuppc,backuppc) %config(noreplace)" \
--file "/etc/BackupPC/localArchive.conf" "attr(640,backuppc,backuppc) %config(noreplace)" \
--file "/etc/BackupPC/localCopyPool.conf" "attr(640,backuppc,backuppc) %config(noreplace)" \
--file "/etc/BackupPC/remoteArchive.conf" "attr(640,backuppc,backuppc) %config(noreplace)" \
--file "/etc/BackupPC/remoteCopyPool.conf" "attr(640,backuppc,backuppc) %config(noreplace)" \
--dir "/etc/BackupPC/pc" "attr(750,backuppc,backuppc)" \
--dir "/var/service/httpd-bkpc" "attr(01755,root,root)" \
--file "/var/service/httpd-bkpc/run" "attr(0700,root,root)" \
--dir "/var/service/httpd-bkpc/supervise" "attr(0700,root,root)" \
--dir "/var/service/httpd-bkpc/log" "attr(0755,root,root)" \
--file "/var/service/httpd-bkpc/log/run" "attr(0755,root,root)" \
--dir "/var/service/httpd-bkpc/log/supervise" "attr(0700,root,root)" \
--dir "/var/log/httpd-bkpc" "attr(0750,smelog,smelog)" \
--ignoredir "/root/var/" \
--ignoredir "/usr/share/BackupPC" \
--ignoredir "/usr/share/BackupPC/lib" \
--ignoredir "/usr/share/BackupPC/lib/BackupPC" \
--ignoredir "/etc/BackupPC" \
--ignoredir "/etc/httpd" \
> %{name}-%{version}-filelist
%clean
rm -rf $RPM_BUILD_ROOT
%files -f %{name}-%{version}-filelist
%defattr(-,root,root,-)
#%files -n smeserver-BackupPC4 -f %{name}-%{version}-filelist
#%defattr(-,root,root,-)
%pre
#%{_sbindir}/useradd -c "BackupPC User" -m -d /home/e-smith/files/users/backuppc -r -s /sbin/nologin backuppc >& /dev/null || :
%{_sbindir}/usermod -m -d /var/lib/BackupPC backuppc >& /dev/null || :
%post
systemctl enable backuppc
systemctl start backuppc
%preun
# Disable services, and stop them
if [ $1 = 0 ]; then # Uninstall only, not upgrade
db configuration setprop backuppc status disabled >& /dev/null || :
db configuration setprop httpd-bkpc status disabled >& /dev/null || :
service backuppc stop >& /dev/null || :
fi
true