# SliTaz package receipt.

PACKAGE="boxbackup-server"
VERSION="0.11.1"
CATEGORY="network"
SHORT_DESC="Server for the BoxBackup on-line backup system"
MAINTAINER="domcox@users.sourceforge.net"
DEPENDS="db libedit openssl perl zlib gcc-lib-base"
BUILD_DEPENDS="db-dev libedit-dev openssl-dev zlib-dev"
SOURCE="boxbackup"
TARBALL="$SOURCE-$VERSION.tgz"
WEB_SITE="http://www.boxbackup.org/"
# stable
# WGET_URL="$SF_MIRROR/$SOURCE/$TARBALL"
WGET_URL="http://www.boxbackup.org/svn/box/packages/$TARBALL"
TAGS="backup automatic server network"

# Configuration variables
HOSTNAME=`ifconfig | awk -F ":" '/cast/ {print substr($2,0, index($2," ")-1) }'`
CONF_DIR="/etc/box"
DATA_DIR="/var/lib/bbstored"
CA_DIR="${CONF_DIR}/ca"
BBUSER="bbstored"

# Rules to configure and make the package.
compile_rules()
{
	cd $src
	./configure --prefix=/usr $CONFIGURE_ARGS &&
	make -j1 && {
		mkdir -p $DESTDIR
		cp -a parcels/boxbackup-${VERSION}-backup-client-linux-gnu $DESTDIR
		cp -a parcels/boxbackup-${VERSION}-backup-server-linux-gnu $DESTDIR
		rm -f $DESTDIR/boxbackup-${VERSION}-backup-server-linux-gnu/*.*
	}
}

# Rules to gen a SliTaz package suitable for Tazpkg.
genpkg_rules()
{
	mkdir -p $fs/usr/bin
	cp -a $_pkg/boxbackup-${VERSION}-backup-server-linux-gnu/bb* $fs/usr/bin
	cp -a $_pkg/boxbackup-${VERSION}-backup-server-linux-gnu/ra* $fs/usr/bin
	mkdir -p $fs/etc/init.d
	cp -a $stuff/bbstored $fs/etc/init.d
}


# Pre and post install commands for Tazpkg.

pre_install()
{
	# Stop daemon
	if [ -e /var/run/bbstored.pid ]; then
		/etc/init.d/bbstored stop
	fi
}

post_install()
{
	# adduser BBUSER if needed
	if  ! grep -q $BBUSER $1/etc/passwd; then
		echo -n "Adding user '$BBUSER'..."
		echo $BBUSER':x:505:505:BoxBackup Network Backup:/dev/null:/bin/false' >> $1/etc/passwd
		echo $BBUSER':!:14013:0:99999:7:::' >> $1/etc/shadow
		echo $BBUSER':x:505:' >> $1/etc/group
		echo $BBUSER':!::' >> $1/etc/gshadow
		status
	fi

	# Create config is needed
	if [ ! -e $CONF_DIR ]; then
		mkdir -p $CONF_DIR && chown $BBUSER $CONF_DIR && chmod 700 $CONF_DIR
	fi

	if [ ! -e $DATA_DIR/backup ]; then
		# Creating backup dir
		echo -n "Creating backup directory..."
		mkdir -p $DATA_DIR/backup && chown -R $BBUSER $DATA_DIR && chmod -R 700 $DATA_DIR
		status
	fi

	if [ ! -e $CONF_DIR/raidfile.conf ]; then
		# RAID Setup
		echo -n "Disabling deprecated userland RAID..."
		/usr/bin/raidfile-config $CONF_DIR 2048 $DATA_DIR 2>1 > /dev/null
		status
		chown -R $BBUSER $CONF_DIR/raidfile.conf && chmod 700 -R $CONF_DIR/raidfile.conf
	fi

	if [ ! -e $CONF_DIR/bbstored.conf ]; then
		# Setting hostname
		echo -n "Setting hostname... "
		if [ `hostname -f 2>1 > /dev/null;echo $?` -eq 0 ]; then
		HOSTNAME=`hostname -f`
		fi
		if [ -z $HOSTNAME ]; then
			HOSTNAME="127.0.0.1"
		fi
		echo $HOSTNAME

		# Setting up the CA environment
		echo -n "Creating certificates..."
		/usr/bin/bbstored-certs $CA_DIR init 2>1 > /dev/null
		status

		# Generate server certificate request
		echo -n "Generate server certificate request..."
		bbstored-config $CONF_DIR $HOSTNAME $BBUSER 2>1 > /dev/null
		status

		# Sign the server certificate
		echo -n "Sign the server certificate..."
		openssl x509 -req -sha1 -extensions usr_crt \
			-in $CONF_DIR/$BBUSER/${HOSTNAME}-csr.pem \
			-CA $CA_DIR/roots/serverCA.pem \
			-CAkey $CA_DIR/keys/serverRootKey.pem \
			-out $CA_DIR/servers/${HOSTNAME}-cert.pem \
			-days 5000 2>1 > /dev/null
		status

		# Preparing the server certificates
		echo -n "Installing server certificate..."
	    cp -a $CA_DIR/servers/${HOSTNAME}-cert.pem $CONF_DIR/$BBUSER
		status
		echo -n "Installing client certificate..."
		cp -a $CA_DIR/roots/clientCA.pem $CONF_DIR/$BBUSER
		status

		# Securing $CONF_DIR
		chown -R $BBUSER $CONF_DIR/bbstored* && chmod 700 -R $CONF_DIR/bbstored*
	fi

	if [ -e $CA_DIR ]; then
		# Warning
		echo
		echo "IMPORTANT NOTE:"
		echo "--------------"
		echo "The certificate authority directory $CA_DIR is intended to be"
		echo "moved to another system. It should not be kept on the backup server"
		echo "to limit the impact of a server compromise."
	fi
}

# Pre and post remove commands for Tazpkg

pre_remove()
{
	/etc/init.d/bbstored stop
}

post_remove()
{
	if  grep -q $BBUSER $1/etc/passwd; then
		echo -n "Removing $BBUSER user..."
		deluser bbstored
		status
	fi
	# Delete data
	if [ -e $DATA_DIR ]; then
		echo -n "Removing all backup data..."
		rm -r $DATA_DIR
		status
	fi
	# Delete bbstored conf files
	if [ -e $CONF_DIR/bbstored.conf ]; then
		echo -n "Removing config files..."
		rm -rf $CONF_DIR/bbstored
		rm -f $CONF_DIR/raidfile.conf
		rm -f $CONF_DIR/bbstored.conf
		status
	fi
	# Delete certificates
	if [ -e $CA_DIR ]; then
		echo -n "Removing certificates..."
        rm -r $CA_DIR
		status
    fi
	# Delete $CONF_DIR (if empty)
	if [ `ls -lA $CONF_DIR | wc -l` -eq 0 ]; then
		echo -n "Removing $CONF_DIR..."
		rm -r $CONF_DIR
		status
	fi
	# Delete PID, sock files
	rm -f /var/run/bbstored.*
}