From c307650f720584677c21b0d311ff566df8b83dfc Mon Sep 17 00:00:00 2001 From: "B. Watson" <yalhcru@gmail.com> Date: Fri, 3 Aug 2018 05:57:19 +0700 Subject: network/ipxnet: Added (tunnel IPX over TCP/IP). Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org> --- network/ipxnet/README | 47 ++++++++++++++++++++ network/ipxnet/doinst.sh | 32 ++++++++++++++ network/ipxnet/git2tarxz.sh | 42 ++++++++++++++++++ network/ipxnet/ipxnet.SlackBuild | 94 ++++++++++++++++++++++++++++++++++++++++ network/ipxnet/ipxnet.info | 10 +++++ network/ipxnet/rc.ipxnet | 63 +++++++++++++++++++++++++++ network/ipxnet/rc.ipxnet.conf | 15 +++++++ network/ipxnet/slack-desc | 19 ++++++++ 8 files changed, 322 insertions(+) create mode 100644 network/ipxnet/README create mode 100644 network/ipxnet/doinst.sh create mode 100644 network/ipxnet/git2tarxz.sh create mode 100644 network/ipxnet/ipxnet.SlackBuild create mode 100644 network/ipxnet/ipxnet.info create mode 100644 network/ipxnet/rc.ipxnet create mode 100644 network/ipxnet/rc.ipxnet.conf create mode 100644 network/ipxnet/slack-desc (limited to 'network') diff --git a/network/ipxnet/README b/network/ipxnet/README new file mode 100644 index 0000000000..1b7786bbf5 --- /dev/null +++ b/network/ipxnet/README @@ -0,0 +1,47 @@ +ipxnet (tunnel IPX over TCP/IP) + +Host a standalone IPX network over tcp for old DOS games running in +dosbox. + +For more information, see "https://www.dosbox.com/wiki/connectivity". Note +that the "Start IPX server" step is unnecessary when using this build +of ipxnet. + +There are two use cases for ipxnet, with two separate executables: + +- Users start the daemon as needed, and kill it when they're done. For + this, there's no need for an init script. The executable for users is + called "ipxnet". It logs to standard output only, and doesn't detach + from the terminal. The officially assigned UDP port number can't be + used, as it's port 213 and normal users can't bind to ports below 1024. + +- Persistent daemon, that starts at boot and runs until shutdown. The + executable for this is "ipxnet-system", but you don't normally run it + directly. Instead, there's an init script. To make ipxnet start at boot: + + # chmod 755 /etc/rc.d/rc.ipxnet + +...then edit /etc/rc.d/rc.local and add: + + if [ -x /etc/rc.d/rc.ipxnet ]; then + /etc/rc.d/rc.ipxnet start + fi + +The default UDP port for ipxnet-system is 213. To change this, edit +/etc/rc.d/rc.ipxnet.conf, then run "/etc/rc.d/rc.ipxnet restart" if the +daemon is already running. + +The ipxnet-system log file is /var/log/ipxnet.log. It will not be +overwritten when the package is reinstalled. + +The ipxnet-system binary is installed setuid nobody and setgid nogroup +by default. If you want to change this, set IPXUSER and/or IPXGROUP +in the SlackBuild's environment. It's a bad idea to run this as root, +since it hasn't been audited for security. If you're really paranoid, +you probably will want to create a dedicated ipxnet user and group. + +ipxnet-system also has the cap_net_bind_service capability set, meaning +it must be installed on a filesystem that supports capabilities (this +includes but is not limited to ext2/3/4 and reiserfs v3). This is required +for it to run as "nobody" yet be able to bind to low-numbered ports, +and is a much safer alternative to running it as root. diff --git a/network/ipxnet/doinst.sh b/network/ipxnet/doinst.sh new file mode 100644 index 0000000000..5af0d51745 --- /dev/null +++ b/network/ipxnet/doinst.sh @@ -0,0 +1,32 @@ + +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + rm $NEW + fi +} + +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.ipxnet.new +config etc/rc.d/rc.ipxnet.conf.new + +# create log if missing, make sure ownership is correct. log +# will not be removed on package removal. +touch var/log/ipxnet.log +chown @IPXUSER@:@IPXGROUP@ var/log/ipxnet.log + +# 14.2 uses tar-1.15 for makepkg, can't handle capabilities, so: +[ -e /sbin/setcap] && /sbin/setcap cap_net_bind_service=epi usr/sbin/ipxnet-system diff --git a/network/ipxnet/git2tarxz.sh b/network/ipxnet/git2tarxz.sh new file mode 100644 index 0000000000..43de757147 --- /dev/null +++ b/network/ipxnet/git2tarxz.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Create source tarball from git repo, with generated version +# number. We don't include the git history in the tarball. + +# Note that this script doesn't need to be run as root. It does +# need to be able to write to the current directory it's run from. + +PRGNAM=ipxnet +CLONE_URL=https://github.com/intangir/$PRGNAM.git + +set -e + +GITDIR=$( mktemp -dt $PRGNAM.git.XXXXXX ) +rm -rf $GITDIR +git clone $CLONE_URL $GITDIR + +CWD="$( pwd )" +cd $GITDIR + +VERSION=$( git log --date=format:%Y%m%d --pretty=format:%cd.%h -n1 ) + +rm -rf .git +find . -name .gitignore -print0 | xargs -0 rm -f + +cd "$CWD" +rm -rf $PRGNAM-$VERSION $PRGNAM-$VERSION.tar.xz +mv $GITDIR $PRGNAM-$VERSION +tar cvfJ $PRGNAM-$VERSION.tar.xz $PRGNAM-$VERSION + +cat <<EOF + +Archive created: $PRGNAM-$VERSION.tar.xz + +Update $PRGNAM.info with: + +VERSION="$VERSION" +DOWNLOAD="http://urchlay.naptime.net/~urchlay/src/$PRGNAM-$VERSION.tar.xz" +MD5SUM="$( md5sum $PRGNAM-$VERSION.tar.xz | cut -d' ' -f1 )" + +Don't forget to upload the new source! +EOF diff --git a/network/ipxnet/ipxnet.SlackBuild b/network/ipxnet/ipxnet.SlackBuild new file mode 100644 index 0000000000..c6d4810cff --- /dev/null +++ b/network/ipxnet/ipxnet.SlackBuild @@ -0,0 +1,94 @@ +#!/bin/sh + +# Slackware build script for ipxnet + +# Written by B. Watson (yalhcru@gmail.com) + +# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details. + +# We install the binary setuid nobody/nogroup by default. +IPXUSER="${IPXUSER:-nobody}" +IPXGROUP="${IPXGROUP:-nogroup}" + +PRGNAM=ipxnet +VERSION=${VERSION:-20120808.0dce97e} +BUILD=${BUILD:-1} +TAG=${TAG:-_SBo} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +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 $PRGNAM-$VERSION +tar xvf $CWD/$PRGNAM-$VERSION.tar.xz +cd $PRGNAM-$VERSION +chown -R root:root . +chmod 644 * + +# We build 2 binaries: One with logging enabled, setuid nobody/nogroup, +# for persistent daemon (init script) use... and one that doesn't log +# to a file or daemonize (just prints to stdout), for normal users to +# start at will. + +# System version first: +sed -i "/#define *LOGNAME/s, \".*, \"/var/log/$PRGNAM.log\"," config.h +make CXXFLAGS="$SLKCFLAGS" LIBS="-lSDL_net -lSDL" +install -D -m6550 -o$IPXUSER -g$IPXGROUP -s $PRGNAM $PKG/usr/sbin/${PRGNAM}-system + +# Now the user one: +sed -i "/#define *LOG_TO_FILE/s,#define,#undef," config.h +make clean +make CXXFLAGS="$SLKCFLAGS" LIBS="-lSDL_net -lSDL" +install -D -m755 -oroot -groot -s $PRGNAM $PKG/usr/bin/$PRGNAM + +# Startup script. Not enabled by default (README explains what to do). +mkdir -p $PKG/etc/rc.d +cat $CWD/rc.$PRGNAM > $PKG/etc/rc.d/rc.$PRGNAM.new +cat $CWD/rc.$PRGNAM.conf > $PKG/etc/rc.d/rc.$PRGNAM.conf.new + +# doinst.sh installs blank log file, only need to include /var/log here. +mkdir -p $PKG/var/log + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a README.md $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +sed -e "s,@IPXUSER@,$IPXUSER,g" \ + -e "s,@IPXGROUP@,$IPXGROUP,g" \ + $CWD/doinst.sh > $PKG/install/doinst.sh + +# Our README includes init script instructions, include it. +cat $CWD/README > $PKG/install/README_SBo.txt + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/network/ipxnet/ipxnet.info b/network/ipxnet/ipxnet.info new file mode 100644 index 0000000000..c17a1eaea5 --- /dev/null +++ b/network/ipxnet/ipxnet.info @@ -0,0 +1,10 @@ +PRGNAM="ipxnet" +VERSION="20120808.0dce97e" +HOMEPAGE="https://github.com/intangir/ipxnet" +DOWNLOAD="http://urchlay.naptime.net/~urchlay/src/ipxnet-20120808.0dce97e.tar.xz" +MD5SUM="a6bebe9513240e145285e4526ea3114c" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="B. Watson" +EMAIL="yalhcru@gmail.com" diff --git a/network/ipxnet/rc.ipxnet b/network/ipxnet/rc.ipxnet new file mode 100644 index 0000000000..22733ce0e8 --- /dev/null +++ b/network/ipxnet/rc.ipxnet @@ -0,0 +1,63 @@ +#!/bin/sh + +# "Simple" init script for SBo ipxnet, by B. Watson <yalhcru@gmail.com>. If +# you need something fancier (multiple instances of ipxnet), feel free +# to implement it here and send me the updated script. I'll add it to +# the SBo build. + +# Note that ipxnet daemonizes itself immediately (before even checking if +# it got the right number of command line arguments) and doesn't create a +# PID file. Trying to capture the PID of the just-spawned ipxnet process +# in this script is problematic, so I didn't bother with a PID file. We +# can't even capture error messages (because it closed its stdout/stderr). + +# The default settings: +IPXPORT=19900 + +# If config file found, source it (can override IPXPORT) +[ -e /etc/rc.d/rc.ipxnet.conf ] && source /etc/rc.d/rc.ipxnet.conf + +ok_fail() { + if [ "$?" = "0" ]; then + echo "OK" + exit 0 + else + echo "FAIL" + exit 1 + fi +} + +# returns success if an ipxnet process is listening on our port. +is_running() { + lsof +c 0 -i 4UDP:$IPXPORT | grep -q ipxnet-system +} + +# ipxnet doesn't exit with error status if it fails to start. So we have +# to check whether it started or not... we wait up to 20 sec or so, then +# give up. +check_start() { + for i in 0.2 0.5 1 3 6 10; do + sleep $i + is_running && return 0 + done + return 1 +} + +case "${1:-start}" in + start) + echo -n "Starting ipxnet on UDP port $IPXPORT: " + if is_running; then + echo "Already running!" + exit 1 + fi + /usr/sbin/ipxnet-system $IPXPORT + check_start + ok_fail + ;; + + stop) echo -n "Stopping ipxnet: "; killall ipxnet-system ; ok_fail ;; + + restart) $0 stop ; sleep 1; exec $0 start ;; + + *) echo "Usage: $0 stop|stop|restart" +esac diff --git a/network/ipxnet/rc.ipxnet.conf b/network/ipxnet/rc.ipxnet.conf new file mode 100644 index 0000000000..bc9bfa34a0 --- /dev/null +++ b/network/ipxnet/rc.ipxnet.conf @@ -0,0 +1,15 @@ +# Config file for SBo ipxnet startup script, by B. Watson <yalhcru@gmail.com>. + +# ipxnet-system binary runs setuid nobody by default, but has the +# cap_net_bind_service capability set. This gives the ipxnet-system +# process the capability to open low-numbered ports (any port < 1024), +# which could be a security concern: if ipxnet can be exploited, the +# exploit code could listen on e.g. the ssh or http port. The alternative +# (running ipxnet with root privileges) is much worse though: the exploit +# code could do *anything* in that case. + +# The official assigned port number: +IPXPORT=213 + +# The port number from the DOSBox examples: +# IPXPORT=19900 diff --git a/network/ipxnet/slack-desc b/network/ipxnet/slack-desc new file mode 100644 index 0000000000..54274192e9 --- /dev/null +++ b/network/ipxnet/slack-desc @@ -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------------------------------------------------------| +ipxnet: ipxnet (tunnel IPX over TCP/IP) +ipxnet: +ipxnet: Host a standalone IPX network over tcp for old DOS games running +ipxnet: in dosbox. +ipxnet: +ipxnet: +ipxnet: +ipxnet: +ipxnet: +ipxnet: +ipxnet: -- cgit v1.2.3