office/taskd: Added (task server daemon).

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
Robert Allen 2014-09-05 22:51:11 +07:00 committed by Willy Sudiarto Raharjo
parent 169f8a4fae
commit ed16becd86
10 changed files with 478 additions and 0 deletions

25
office/taskd/README Normal file
View File

@ -0,0 +1,25 @@
Taskwarrior is an open-source cross platform command-line
task management tool. It allows you to capture, annotate,
manipulate and present your tasks, then sync them among
devices.
The taskd server is the component which supports
synchronization among task clients.
The task client application is also available on SBo.
Each may be built and run standalone so that there are
no hard buildtime or runtine dependencies between them.
It is recommended to create a non-priv'd user to run the
server, and it requires CA certs to operate, which may
be generated with included scripts.
Installation of this package provides a complete taskd
install from upstream source. You may proceed to configure
and operate it from the distribution documentation if you
like.
The additional README_SLACKWARE file provides notes for
getting things configured and working quickly on a Slackware
platform with a few extra pieces provided.

View File

@ -0,0 +1,192 @@
*** Running a taskd server under Slackware ***
Table of contents:
* Taskd configuration for Slackware
* Creating a taskd user and data directory
* Initializing the server
* Certificates and clients
* Starting the server
* Cautions and quirks...
See man taskd, /usr/doc/taskd-VERSION/doc/operation.txt
and man task-sync (from task) for full details of
what follows. In particular, read the operation.txt
document for a more complete overview.
Taskd configuration for Slackware
=================================
The taskd server is written to be cross-platform among
Unix-like OSs and leaves many setup and configuration
choices to the user. The provided man pages and text
guides are complete and helpful, but this SlackBuild
script adds a few details to make initial setup easier
on a Slackware system.
The added pieces are:
* Creation of a taskd user and group
* Creation of data directory - /var/lib/taskd
* A global path config file - /etc/taskddata
* Profile scripts - /etc/profile.d/taskddata.{sh,csh}
* A Slackware start script - /etc/rc.d/rc.taskd
If you build and install the package with this script, you
you will end with a complete taskd install just as provided
by the upstream sources. Simply ignore or remove the above
listed files and skip the following config steps, and you
may then configure and run the server according to your own
choices based on man taskd and the distribution docs.
If you continue, the following steps will get your taskd
server running quickly and safely based on the above
listed choices.
Create a taskd user and data directory
======================================
The server should be run as a non-priviledged user, and
the data paths should be owned by that user and not
accessible by others. You may use any UID/GID you choose,
those guaranteed not to conflict on a Slackware/SBo system
may be found here: http://www.slackbuilds.org/uid_gid.txt
To create the user account and data directory, execute the
following shell commands as root:
groupadd -g 290 taskd
useradd -g taskd -u 290 -d /var/lib/taskd taskd
mkdir -p /var/lib/taskd
chown taskd:taskd /var/lib/taskd
chmod 700 /var/lib/taskd
Initializing the server
=======================
You need to initialize the server as the taskd user,
AND the $TASKDDATA env variable must be set for that user,
so let's verify that first:
su - taskd
echo $TASKDDATA
If the value of $TASKDDATA is not the same as the data path
set above, check the following:
/etc/taskddata - Must export the variable when sourced
/etc/profile.d/taskddata.{sh,csh} - are executable
OR
/etc/profile - includes a line ". /etc/taskddata"
After you verify taskd user correctly sees $TASKDDATA...
taskd init --data $TASKDDATA
taskd config server localhost:53589
Change logs and PIDs from /tmp to data path
taskd config log $TASKDDATA/taskd.log
taskd config pid.file $TASKDDATA/taskd.pid
taskd config ip.log 1
We will allow all connections for now...
taskd config client.allow all
taskd config client.deny none
Certificates and clients
========================
The server needs a certificate, key and crl to operate.
See operation.txt and man taskd to set up your own certs,
the following uses locally created self-signed certs.
You will need to be root for this...
cd /usr/share/taskd-VERSION/pki
./generate
Once the various files are created, install them in $TASKDDATA:
cp client.cert.pem $TASKDDATA
cp server.cert.pem $TASKDDATA
cp server.key.pem $TASKDDATA
cp server.crl.pem $TASKDDATA
Configure the server to use them:
taskd config client.cert $TASKDDATA/client.cert.pem
taskd config server.cert $TASKDDATA/server.cert.pem
taskd config server.key $TASKDDATA/server.key.pem
taskd config server.crl $TASKDDATA/server.crl.pem
We are using self-signed certs at this point, so...
cp ca.cert.pem $TASKDDATA
taskd config ca.cert $TASKDDATA/ca.cert.pem
Now you must change ownership of these to taskd in the data
directory:
chown taskd:taskd /var/lib/taskd/*
The resultant client.cert.pem and client.key.pem files
are needed by the clients (see man task-sync from task).
This will get taskd working and is probably sufficient for local
use. You will want to use proper certificates and keys created
per-user for production use. See the accompanying docs for details.
See man taskd for creating and managing organizations, groups and
users on the server.
Starting the server
===================
To start/stop the taskd server:
chmod +x /etc/rc.d/rc.taskd
/etc/rc.d/rc.taskd start
/etc/rc.d/rc.taskd stop
See comments in /etc/rc.d/rc.taskd to auto-start at boot.
Cautions and quirks...
======================
Taskd is a new application and is not as mature as the task
client application. Although it has proven to be very stable in
operation, it has a few loose ends still when it comes to
admin of the server. Hopefully these will be cleaned up with
future releases!
A recurring theme in my own use has been that when creating
new organizations and users, I forget to su - taskd first and
perform the operation as root - and it succeeds! But taskd
creates the associated subdirectories and files with root
ownership and the server cannot use them!
Another is when changing server certs, I generate and copy
them in as root - the server will not start afterward.
The fix is easy in both cases...
chown -R taskd:taskd /var/lib/taskd
Just remember to perform all server admin as taskd, and when
something breaks - check ownerships first!
Another quirk is the start script - rc.taskd. I generated this
based on the distribution taskdctl script, so I'll share the
blame! It is not very robust when it encounters errors at startup
and will report "server started" under some conditions where the
server actually failed to start... use man taskd and test from
an su - taskd shell when getting the configs right.
Hopefully the server will catch the client soon in terms of
polish!
Enjoy!

28
office/taskd/doinst.sh Normal file
View File

@ -0,0 +1,28 @@
config() {
NEW="$1"
OLD="$(dirname $NEW)/$(basename $NEW .new)"
# If there's no config file by that name, mv it over:
if [ ! -r $OLD ]; then
mv $NEW $OLD
elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
# toss the redundant copy
rm $NEW
fi
# Otherwise, we leave the .new copy for the admin to consider...
}
preserve_perms() {
NEW="$1"
OLD="$(dirname $NEW)/$(basename $NEW .new)"
if [ -e $OLD ]; then
cp -a $OLD ${NEW}.incoming
cat $NEW > ${NEW}.incoming
mv ${NEW}.incoming $NEW
fi
config $NEW
}
preserve_perms etc/rc.d/rc.taskd.new
preserve_perms etc/profile.d/taskddata.sh.new
preserve_perms etc/profile.d/taskddata.csh.new
preserve_perms etc/taskddata.new

View File

@ -0,0 +1,13 @@
#!/bin/sh
#Global taskd data path config
#Must be sourced into taskd and admin user environments
#
#You may add the following line to /etc/profile
# . /etc/taskd_config
# OR
#chmod +x /etc/profile.d/taskddata.*
TASKDDATA=/var/lib/taskd
export TASKDDATA

View File

@ -0,0 +1,4 @@
#!/bin/csh
#Set data path for taskd server from global config
source /etc/taskddata

View File

@ -0,0 +1,4 @@
#!/bin/sh
#Set data path for taskd server from global config
. /etc/taskddata

View File

@ -0,0 +1,55 @@
--- src/taskdctl 2014-09-04 15:15:11.000000000 -0600
+++ rc.taskd 2014-09-05 00:58:33.000000000 -0600
@@ -26,13 +26,49 @@
##
################################################################################
+################################################################################
+# SLACKWARE STARTUP:
+#
+# Before this script may be run the following conditions must be met:
+#
+# A taskd user must exist
+# The data path must exist and be owned by the taskd user
+# The data path must be set in $TASKDDATA or in /etc/taskddata
+# The server must have been previously initialized by
+# taskd init --data $TASKDDATA
+#
+# Additional configuration parameters must be valid and CA installed
+#
+# See /usr/doc/taskd-VERSION/README_SLACKWARE and man taskd for details.
+#
+# To auto start taskd at boot add these lines to /etc/rc.d/rc.local
+# if [ -x /etc/rc.d/rc.taskd ]; then
+# /etc/rc.d/rc.taskd start
+# fi
+#
+# To stop taskd at shutdown add these lines to /etc/rc.d/rc.local_shutdown
+# if [ -x /etc/rc.d/rc.taskd ]; then
+# /etc/rc.d/rc.taskd stop
+# fi
+################################################################################
+
+#Initialize from global config for convenience - SlackBuild patch
+if [ -z $TASKDDATA ] && [ -f /etc/taskddata ] ; then
+ . /etc/taskddata
+fi
+
if [ -z $TASKDDATA ] ; then
- echo 'The TASKDDATA variable must be set.'
- exit
+ echo 'The TASKDDATA variable must be set.'
+ exit
fi
PIDFILE=$(taskd config --data $TASKDDATA | grep pid.file | awk '{print $2}')
-DAEMON="taskd server --data $TASKDDATA --daemon"
+DAEMON="taskd_ctl $TASKDDATA"
+
+taskd_ctl(){
+ EX="taskd server --data $1 --daemon"
+ su - taskd -c "$EX"
+}
ERROR=0
ARGV="$@"

19
office/taskd/slack-desc Normal file
View File

@ -0,0 +1,19 @@
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.
# Line up the first '|' above the ':' following the base package name, and
# the '|' on the right side marks the last column you can put a character in.
# You must make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
taskd: taskd (task server daemon)
taskd:
taskd: Taskwarrior is an open-source command-line task management tool.
taskd: It allows you to capture, annotate, manipulate and present tasks.
taskd:
taskd: taskd is an extension supporting client synchronization.
taskd:
taskd:
taskd:
taskd: Project home page - http://taskwarrior.org/
taskd:

View File

@ -0,0 +1,128 @@
#!/bin/sh
# Slackware build script for taskd
# Copyright 2014 Robert Allen
# All rights reserved, including Creator Endowed Unalienable Rights
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=taskd
VERSION=${VERSION:-1.0.0}
BUILD=${BUILD:-3}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i486 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
#Patch to use global path config and add startup comments for rc.taskd
patch -p0 <$CWD/rc.taskd.diff
chown -R root:root .
find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
-o -perm 511 \) -exec chmod 755 {} \; -o \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
mkdir -p build
cmake \
-DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
-DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DTASKD_BINDIR=bin \
-DTASKD_EXTDIR=libexec/taskd \
-DTASKD_DOCDIR=doc/$PRGNAM-$VERSION \
-DTASKD_MAN1DIR=man/man1 \
-DTASKD_MAN5DIR=man/man5 \
-DLIB_SUFFIX=${LIBDIRSUFFIX}
make
make install DESTDIR=$PKG
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
mkdir -p $PKG/etc/rc.d
mv $PKG/usr/bin/taskdctl $PKG/etc/rc.d/rc.taskd.new
chmod 644 $PKG/etc/rc.d/rc.taskd.new
mkdir -p $PKG/etc/profile.d
cat $CWD/profile/taskddata > $PKG/etc/taskddata.new
cat $CWD/profile/taskddata.sh > $PKG/etc/profile.d/taskddata.sh.new
cat $CWD/profile/taskddata.csh > $PKG/etc/profile.d/taskddata.csh.new
chmod 755 $PKG/etc/profile.d/*new
chmod 644 $PKG/etc/taskddata.new
# Compress man pages
find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
#Additional documents...
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/doc
cp -a doc/[a-z]*.txt $PKG/usr/doc/$PRGNAM-$VERSION/doc/.
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
cat $CWD/README > $PKG/usr/doc/$PRGNAM-$VERSION/README
cat $CWD/README_SLACKWARE > $PKG/usr/doc/$PRGNAM-$VERSION/README_SLACKWARE
#CA keys are required, pki provides tools for the task, and extra scripts
mkdir -p $PKG/usr/share/$PRGNAM-$VERSION
cp -ra pki $PKG/usr/share/$PRGNAM-$VERSION/.
cp -ra scripts $PKG/usr/share/$PRGNAM-$VERSION/.
cp -ra mon $PKG/usr/share/$PRGNAM-$VERSION/.
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

10
office/taskd/taskd.info Normal file
View File

@ -0,0 +1,10 @@
PRGNAM="taskd"
VERSION="1.0.0"
HOMEPAGE="http://taskwarrior.org"
DOWNLOAD="http://taskwarrior.org/download/taskd-1.0.0.tar.gz"
DOWNLOAD_x86_64=""
MD5SUM="1cead23539e36d5623cb3ca1225072c0"
MD5SUM_x86_64=""
REQUIRES=""
MAINTAINER="Robert Allen"
EMAIL="slacker@engineer.com"