-
Notifications
You must be signed in to change notification settings - Fork 3.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Carsten Wolff <[email protected]> Reviewed-by: Rosen Penev <[email protected]>
- Loading branch information
Showing
6 changed files
with
310 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
# Copyright (C) 2018 OpenWrt | ||
# | ||
# Ideas used from the backuppc packaging in Debian GNU/Linux | ||
# | ||
|
||
include $(TOPDIR)/rules.mk | ||
|
||
PKG_NAME:=backuppc | ||
PKG_VERSION:=3.3.2 | ||
PKG_RELEASE:=1 | ||
|
||
PKG_SOURCE:=BackupPC-$(PKG_VERSION).tar.gz | ||
PKG_SOURCE_URL:=@SF/backuppc | ||
PKG_HASH:=fbade2c8d8039297e826a75d2c39d5ac9a6f66e0c84c0cf8c4cef0bcf64d2152 | ||
PKG_BUILD_DIR:=$(BUILD_DIR)/BackupPC-$(PKG_VERSION) | ||
|
||
PKG_MAINTAINER:=Carsten Wolff <[email protected]> | ||
PKG_LICENSE:=GPL-2.0-or-later | ||
PKG_LICENSE_FILES:=LICENSE | ||
|
||
include $(INCLUDE_DIR)/package.mk | ||
|
||
define Package/backuppc | ||
SECTION:=admin | ||
CATEGORY:=Administration | ||
TITLE:=high-performance, enterprise-grade system for backing up PCs | ||
URL:=https://sourceforge.net/projects/backuppc/ | ||
DEPENDS:=+perl +perl-www +perl-cgi +perlbase-digest +perlbase-compress +perlbase-archive +perlbase-data +perlbase-storable +perlbase-getopt +perl-file-rsyncp +openssh-client +tar +bzip2 +samba36-client +rsync +iputils-ping | ||
endef | ||
|
||
define Package/backuppc/description | ||
BackupPC is a disk based backup system featuring a clever pooling scheme and | ||
compression to minimize disk storage and disk I/O. It can use SMB, rsync or tar | ||
to access the clients without any additional client software and offers a | ||
powerful http/cgi user interface. | ||
endef | ||
|
||
define Build/Configure | ||
true | ||
endef | ||
|
||
define Build/Compile | ||
$(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_CPPFLAGS) $(TARGET_LDFLAGS) -Wall -o $(PKG_BUILD_DIR)/BackupPC_Admin ./files/setuidwrapper.c | ||
endef | ||
|
||
define Package/backuppc/install | ||
$(INSTALL_DIR) $(strip $(1))/etc/init.d | ||
$(INSTALL_BIN) ./files/backuppc.init $(strip $(1))/etc/init.d/backuppc | ||
cd $(PKG_BUILD_DIR) && ./configure.pl --batch --html-dir-url=/backuppc/ \ | ||
--html-dir=/www/backuppc/ --cgi-dir=/www/cgi-bin/ --no-fhs --uid-ignore \ | ||
--dest-dir=$(strip $(1)) --install-dir /usr/share/backuppc \ | ||
--hostname=XXXXXX --data-dir=/data/backuppc --log-dir=/data/backuppc/log \ | ||
--bin-path perl=/usr/bin/perl --bin-path tar=/bin/tar \ | ||
--bin-path smbclient=/usr/sbin/smbclient --bin-path nmblookup=/usr/sbin/nmblookup \ | ||
--bin-path rsync=/usr/bin/rsync --bin-path ping=/usr/bin/ping --bin-path df=/bin/df \ | ||
--bin-path ssh=/usr/bin/ssh --bin-path gzip=/bin/gzip \ | ||
--bin-path sendmail=/usr/sbin/sendmail --bin-path bzip2=/usr/bin/bzip2 | ||
$(INSTALL_DIR) $(strip $(1))/usr/share/backuppc/conf | ||
chmod 755 $(strip $(1))/data | ||
mv $(strip $(1))/data/backuppc/conf/config.pl $(strip $(1))/usr/share/backuppc/conf/config.pl | ||
patch --no-backup-if-mismatch $(strip $(1))/usr/share/backuppc/conf/config.pl ./files/fixup-config-pl.patch | ||
mv $(strip $(1))/www/cgi-bin/BackupPC_Admin $(strip $(1))/usr/share/backuppc/bin/BackupPC_Admin_real | ||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/BackupPC_Admin $(strip $(1))/www/cgi-bin/BackupPC_Admin | ||
$(INSTALL_DIR) $(strip $(1))/lib/upgrade/keep.d | ||
$(INSTALL_DATA) files/backuppc.upgrade $(strip $(1))/lib/upgrade/keep.d/backuppc | ||
endef | ||
|
||
$(eval $(call BuildPackage,backuppc)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
#!/bin/sh /etc/rc.common | ||
|
||
. /lib/functions.sh | ||
|
||
START=95 | ||
STOP=10 | ||
|
||
USE_PROCD=1 | ||
BACKUPPC_BIN="/usr/share/backuppc/bin/BackupPC" | ||
BACKUPPC_USER=backuppc | ||
|
||
# it would be better if it was possible to do this at install time, but we | ||
# can't, because in case of an openwrt image bundled with backuppc, all | ||
# ownerships other than root are lost. | ||
preconfigure() { | ||
# create backuppc group and user if needed | ||
if ! group_exists backuppc; then | ||
group_add backuppc 864 | ||
fi | ||
if ! user_exists backuppc; then | ||
user_add backuppc 864 864 "BackupPC user" /data/backuppc /bin/sh | ||
fi | ||
# install default config if none exists, yet | ||
if [ ! -e /data/backuppc/conf/config.pl ]; then | ||
cp /usr/share/backuppc/conf/config.pl /data/backuppc/conf/config.pl | ||
fi | ||
# ensure proper ownerships and rights | ||
chown backuppc:backuppc /data/backuppc /data/backuppc/* \ | ||
/www/cgi-bin/BackupPC_Admin | ||
chmod 750 /data/backuppc /data/backuppc/* | ||
chmod 755 /usr/share/backuppc/bin/BackupPC_Admin_real | ||
# The CGI needs to be world-executable, because uhttpd-cgi.c:386 checks | ||
# for exactly that. We don't want that, but can't avoid it, currently. | ||
chmod 6751 /www/cgi-bin/BackupPC_Admin | ||
chown -R :backuppc /data/backuppc/conf | ||
chmod 2770 /data/backuppc/conf | ||
# protect webinterface with a random password by default | ||
if [ -x /usr/sbin/uhttpd ] && ! grep -q backuppc /etc/httpd.conf >/dev/null 2>&1; then | ||
PASS=$(perl -e 'print map{("a".."z","A".."Z",0..9)[int(rand(62))]}(1..8)') | ||
PASSHASH=$(/usr/sbin/uhttpd -m "${PASS}") | ||
echo "/cgi-bin/BackupPC_Admin:backuppc:${PASSHASH}" >> /etc/httpd.conf | ||
uci set uhttpd.main.config=/etc/httpd.conf | ||
/etc/init.d/uhttpd restart | ||
# inform user | ||
echo | ||
echo "To protect access to the backuppc web interface, HTTP basic authentication in" | ||
echo "uhttpd for http://$(/sbin/uci get "system.@system[0].hostname")/cgi-bin/BackupPC_Admin has been configured:" | ||
echo "user: backuppc" | ||
echo "pass: ${PASS}" | ||
echo | ||
echo "It is also recommended to follow the steps in" | ||
echo "https://wiki.openwrt.org/doc/uci/uhttpd#securing_uhttpd" | ||
echo "to secure access to uhttpd." | ||
fi | ||
} | ||
|
||
start_service() { | ||
# don't run preconfigure steps if called during image build | ||
if [ -z "${IPKG_INSTROOT}" ]; then | ||
preconfigure | ||
fi | ||
procd_open_instance | ||
procd_set_param user $BACKUPPC_USER | ||
procd_set_param reload_signal 1 | ||
procd_set_param command $BACKUPPC_BIN | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
/etc/httpd.conf | ||
/data/backuppc/conf/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
--- config.pl 2018-03-11 09:30:28.000000000 +0100 | ||
+++ config.pl.new 2018-04-05 08:40:29.180000000 +0200 | ||
@@ -41,7 +41,10 @@ | ||
# | ||
# Host name on which the BackupPC server is running. | ||
# | ||
-$Conf{ServerHost} = 'XXXXXX'; | ||
+$ENV{'PATH'} = '/bin:/usr/bin'; | ||
+delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'}; | ||
+$Conf{ServerHost} = $ENV{'HOSTNAME'}; | ||
+chomp($Conf{ServerHost}); | ||
|
||
# | ||
# TCP port number on which the BackupPC server listens for and accepts | ||
@@ -223,7 +226,7 @@ | ||
# | ||
# Full path to various commands for archiving | ||
# | ||
-$Conf{SplitPath} = '/usr/bin/split'; | ||
+$Conf{SplitPath} = '/usr/bin/split' if ( -x '/usr/bin/split' ); | ||
$Conf{ParPath} = ''; | ||
$Conf{CatPath} = '/bin/cat'; | ||
$Conf{GzipPath} = '/bin/gzip'; | ||
@@ -1572,7 +1575,7 @@ | ||
# Full path for ssh. Security caution: normal users should not | ||
# allowed to write to this file or directory. | ||
# | ||
-$Conf{SshPath} = '/usr/bin/ssh'; | ||
+$Conf{SshPath} = '/usr/bin/ssh' if ( -x '/usr/bin/ssh' ); | ||
|
||
# | ||
# Full path for nmblookup. Security caution: normal users should not | ||
@@ -1874,7 +1877,7 @@ | ||
# Full path to the sendmail command. Security caution: normal users | ||
# should not allowed to write to this file or directory. | ||
# | ||
-$Conf{SendmailPath} = '/usr/sbin/sendmail'; | ||
+$Conf{SendmailPath} = '/usr/sbin/sendmail' if ( -x '/usr/sbin/sendmail' ); | ||
|
||
# | ||
# Minimum period between consecutive emails to a single user. | ||
@@ -2028,13 +2031,13 @@ | ||
# $Conf{CgiAdminUsers} = 'craig celia'; | ||
# --> administrative users are only craig and celia'. | ||
# | ||
-$Conf{CgiAdminUserGroup} = ''; | ||
-$Conf{CgiAdminUsers} = ''; | ||
+$Conf{CgiAdminUserGroup} = 'backuppc'; | ||
+$Conf{CgiAdminUsers} = 'backuppc'; | ||
|
||
# | ||
# URL of the BackupPC_Admin CGI script. Used for email messages. | ||
# | ||
-$Conf{CgiURL} = 'http://XXXXXX/cgi-bin//BackupPC_Admin'; | ||
+$Conf{CgiURL} = 'http://' . $Conf{ServerHost} . '/cgi-bin//BackupPC_Admin'; | ||
|
||
# | ||
# Language to use. See lib/BackupPC/Lang for the list of supported | ||
@@ -2076,7 +2079,7 @@ | ||
# dates (MM/DD), a value of 2 uses full YYYY-MM-DD format, and zero | ||
# for international dates (DD/MM). | ||
# | ||
-$Conf{CgiDateFormatMMDD} = 1; | ||
+$Conf{CgiDateFormatMMDD} = 2; | ||
|
||
# | ||
# If set, the complete list of hosts appears in the left navigation |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
#include <unistd.h> | ||
|
||
int main(int argc, char* argv[]) | ||
{ | ||
execv("/usr/share/backuppc/bin/BackupPC_Admin_real", argv); | ||
return 0; | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
--- a/bin/BackupPC_archive 2017-01-26 02:31:24.000000000 +0100 | ||
+++ b/bin/BackupPC_archive 2018-04-05 21:11:14.428000000 +0200 | ||
@@ -299,7 +299,7 @@ | ||
if ( $NeedPostCmd ) { | ||
UserCommandRun("ArchivePostUserCmd"); | ||
if ( $? && $Conf{UserCmdCheckStatus} ) { | ||
- $stat{hostError} = "RestorePreUserCmd returned error status $?"; | ||
+ $stat{hostError} = "ArchivePostUserCmd returned error status $?"; | ||
$stat{xferOK} = 0; | ||
} | ||
} | ||
--- a/bin/BackupPC_dump 2017-01-26 02:31:24.000000000 +0100 | ||
+++ b/bin/BackupPC_dump 2018-04-05 21:12:23.640000000 +0200 | ||
@@ -1067,7 +1067,7 @@ | ||
# Send ALRMs to BackupPC_tarExtract if we are using it | ||
# | ||
if ( $tarPid > 0 ) { | ||
- kill($bpc->sigName2num("ARLM"), $tarPid); | ||
+ kill($bpc->sigName2num("ALRM"), $tarPid); | ||
} | ||
|
||
# | ||
--- a/configure.pl 2017-01-26 02:31:24.000000000 +0100 | ||
+++ b/configure.pl 2018-04-05 21:39:24.668000000 +0200 | ||
@@ -333,7 +333,10 @@ | ||
$Conf{BackupPCUser} || "backuppc", | ||
"backuppc-user"); | ||
if ( $opts{"set-perms"} ) { | ||
- ($name, $passwd, $Uid, $Gid) = getpwnam($Conf{BackupPCUser}); | ||
+ #($name, $passwd, $Uid, $Gid) = getpwnam($Conf{BackupPCUser}); | ||
+ $name = 'backuppc'; | ||
+ $Uid=`id -u`; | ||
+ $Gid=`id -g`; | ||
last if ( $name ne "" ); | ||
print <<EOF; | ||
|
||
@@ -800,6 +803,7 @@ | ||
# | ||
# Figure out sensible arguments for the ping command | ||
# | ||
+$Conf{PingArgs} = '-c 1 $host'; | ||
if ( defined($Conf{PingArgs}) ) { | ||
$Conf{PingCmd} = '$pingPath ' . $Conf{PingArgs}; | ||
} elsif ( !defined($Conf{PingCmd}) ) { | ||
--- a/lib/BackupPC/CGI/View.pm 2017-01-26 02:31:24.000000000 +0100 | ||
+++ b/lib/BackupPC/CGI/View.pm 2018-04-05 21:46:22.664000000 +0200 | ||
@@ -46,7 +46,7 @@ | ||
my $compress = 0; | ||
my $fh; | ||
my $host = $In{host}; | ||
- my $num = $In{num}; | ||
+ my $num = ${EscHTML($In{num})}; | ||
my $type = $In{type}; | ||
my $linkHosts = 0; | ||
my($file, $comment); | ||
@@ -136,6 +136,10 @@ | ||
} | ||
$s =~ s/[\n\r]+//g; | ||
if ( $s =~ /smb: \\>/ | ||
+ || $s =~ /^tar:\d+\s/ | ||
+ || $s =~ /^ NTLMSSP_/ | ||
+ || $s =~ /^GENSEC backend / | ||
+ || $s =~ /^doing parameter / | ||
|| $s =~ /^\s*(\d+) \(\s*\d+\.\d kb\/s\) (.*)$/ | ||
|| $s =~ /^tar: dumped \d+ files/ | ||
|| $s =~ /^\s*added interface/i | ||
--- a/lib/BackupPC/Lib.pm 2017-01-26 02:31:24.000000000 +0100 | ||
+++ b/lib/BackupPC/Lib.pm 2018-04-05 21:48:38.048000000 +0200 | ||
@@ -512,7 +512,8 @@ | ||
} | ||
if ( $IODirentOk ) { | ||
@entries = sort({ $a->{inode} <=> $b->{inode} } readdirent($fh)); | ||
- map { $_->{type} = 0 + $_->{type} } @entries; # make type numeric | ||
+ #map { $_->{type} = 0 + $_->{type} } @entries; # make type numeric | ||
+ map { $_->{type} = 0 + $_->{type}; $_->{type} = undef if ($_->{type} eq BPC_DT_UNKNOWN); } @entries; # make type numeric, unset unknown types | ||
} else { | ||
@entries = map { { name => $_} } readdir($fh); | ||
} | ||
--- a/lib/BackupPC/Xfer/Smb.pm 2017-01-26 02:31:24.000000000 +0100 | ||
+++ b/lib/BackupPC/Xfer/Smb.pm 2018-04-05 21:57:16.616000000 +0200 | ||
@@ -219,7 +219,7 @@ | ||
# | ||
# MAKSYM 14082016: The next regex will never match on Samba-4.3, as | ||
# smbclient doesn't produce output required; keeping it for older Sambas | ||
- if ( /^\s*(-?\d+) \(\s*\d+[.,]\d kb\/s\) (.*)$/ ) { | ||
+ if ( /^\s*(-?\d+) \(\s*\d+[.,]\d kb\/s\) (.*)$/ || /^tar:(\d+)\s+\+\+\+ (.*)$/ ) { | ||
my $sambaFileSize = $1; | ||
my $pcFileName = $2; | ||
(my $fileName = $pcFileName) =~ s/\\/\//g; | ||
@@ -281,6 +281,9 @@ | ||
} elsif ( /smb: \\>/ | ||
|| /^\s*tar:\d+/ # MAKSYM 14082016: ignoring 2 more Samba-4.3 specific lines | ||
|| /^\s*WARNING:/i | ||
+ || /^ NTLMSSP_/ | ||
+ || /^GENSEC backend / | ||
+ || /^doing parameter / | ||
|| /^\s*added interface/i | ||
|| /^\s*tarmode is now/i | ||
|| /^\s*Total bytes written/i |