aboutsummaryrefslogtreecommitdiff
path: root/network/tnfsd/tnfsd.SlackBuild
blob: 5b9195ea801c26eb54580b01af74116fc7ce0630 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/bin/bash

# Slackware build script for tnfsd

# Written by B. Watson (urchlay@slackware.uk)

# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.

# 20220818 bkw: BUILD=2
# - remove TCP support entirely. it's incomplete & thoroughly broken.
# - mention UDP port 16384 in slack-desc.

# Note to self: tnfs-perl/tnfsd.pl looks interesting, but it lacks
# the ability to chroot and set a new user ID. Leave it out of
# the package. The tnfs-fuseclient/ is empty except a README, and
# tnfsd.test/ looks like an ancient version from 2010.

cd $(dirname $0) ; CWD=$(pwd)

PRGNAM=tnfsd
VERSION=${VERSION:-20201019}
BUILD=${BUILD:-2}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}

SRCNAM="spectranet"
SRCVER="TNFSD-$( echo $VERSION | sed 's,\(....\)\(..\)\(..\),\1-\2-\3,' )"

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) ARCH=i586 ;;
    arm*) ARCH=arm ;;
       *) ARCH=$( uname -m ) ;;
  esac
fi

if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
  echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
  exit 0
fi

uid_gid_err() {
  cat <<EOF
Before running this SlackBuild, you must create the tnfsd user and
the tnfsd and tnfs-files groups. Use these commands:

  groupadd -g 375 tnfsd
  groupadd -g 376 tnfs-files
  useradd -u 375 -d /var/tnfs -c "TNFS Daemon User" \
          -M -g tnfsd tnfsd -s /bin/false
EOF
  exit 1
}

chkgrp() {
  getent group "$1"  &>/dev/null || uid_gid_err
}

chkuser() {
  getent passwd "$1" &>/dev/null || uid_gid_err
}

chkgrp  tnfsd
chkgrp  tnfs-files
chkuser tnfsd

TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

if [ "$ARCH" = "i586" ]; then
  SLKCFLAGS="-O2 -march=i586 -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 $SRCNAM-$SRCVER
tar xvf $CWD/$SRCNAM-$SRCVER.tar.gz --wildcards '*/tnfs/*'
cd $SRCNAM-$SRCVER
chown -R root:root .
find -L .  -perm /111 -a \! -perm 755 -a -exec chmod 755 {} \+ -o \
        \! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} \+

# 20220818 bkw: After messing with this for a while, I've discovered
# that TCP *just doesn't work*. It'll listen and accept TCP
# connections, but it never actually *does* anything with data
# received via TCP (reads and discards it). Also, it never notices
# when a TCP connection is closed, instead getting stuck in an
# infinite loop eating 100% of one core... and logging massive
# amounts of debug messages to stdout (like 2-3GB per minute). Since
# it's non-functional anyway, this patch just dikes out TCP support
# completely. So far as I know, there are no TNFS clients which use
# TCP anyway.

patch -p1 < $CWD/remove_broken_tcp_support.diff

cd tnfs
rm -f tnfsd/bin/* # guarantee we don't use prebuilt binary!

[ "${USAGELOG:-yes}" = "yes" ] && SLKCFLAGS+=" -DUSAGELOG"
sed -i "s,-Wall,& $SLKCFLAGS," tnfsd/Makefile
make -C tnfsd OS=LINUX

PKGDOC=$PKG/usr/doc/$PRGNAM-$VERSION
PKGBIN=$PKG/usr/bin
PKGMAN1=$PKG/usr/man/man1
PKGRCD=$PKG/etc/rc.d
PKGVAR=$PKG/var/tnfs
mkdir -p $PKGDOC $PKGBIN $PKGMAN1 $PKGRCD $PKGVAR
install -s -m0755 tnfsd/bin/tnfsd $PKGBIN/tnfsd
cp -a *.md *.txt $PKGDOC
cat $CWD/$PRGNAM.SlackBuild > $PKGDOC/$PRGNAM.SlackBuild

mkdir -p $PKGVAR
chown root:tnfs-files $PKGVAR
chmod 1775 $PKGVAR

# upstream license only exists in C comments, so I included this:
cat $CWD/COPYING > $PKGDOC/COPYING

# man page written for this SlackBuild.
gzip -9c < $CWD/$PRGNAM.1 > $PKGMAN1/$PRGNAM.1.gz

install -oroot -groot -m0755 $CWD/rc.$PRGNAM $PKGRCD/rc.$PRGNAM.new

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