diff --git a/README.md b/README.md new file mode 100644 index 0000000..1a319a1 --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +# ptokaxinst + +![](https://img.shields.io/badge/written%20in-bash-blue) + +An installer for the DC hubsoft PtokaX. + +- Installs dependencies +- Downloads, patches, and compiles PtokaX source +- Sets up restricted user and init.d script + +Tested under Debian Wheezy (sysvinit) + +Tags: nmdc + + +## Download + +- [⬇️ ptokaxinst.sh](dist-archive/ptokaxinst.sh) *(3.03 KiB)* diff --git a/dist-archive/ptokaxinst.sh b/dist-archive/ptokaxinst.sh new file mode 100644 index 0000000..6a45e37 --- /dev/null +++ b/dist-archive/ptokaxinst.sh @@ -0,0 +1,174 @@ +#!/bin/bash + +set -e + +SOURCE_DOWNLOAD=http://www.ptokax.org/files/0.5.0.2-nix-src.tgz +SOURCE_MD5=897d9793554b7e85e3ca84d9781cb670 +INSTALL_DIR=/opt/PtokaX/ +GENERATE_USERNAME=ptokax + +fatal() { + echo "FATAL: $1" 1>&2 + exit 1 +} + +dependencies() { + # base64 and md5sum are in coreutils + for dep in build-essential wget liblua5.2 liblua5.2-dev zlib1g zlib1g-dev authbind procps ; do + if [[ $UID != 0 ]] ; then + fatal "Need root to install $dep" + fi + + if ! dpkg -s "$dep" > /dev/null 2>&1 ; then + apt-get -y install "$dep" + fi + done +} + +download() { + local dest=$(mktemp) + wget "$SOURCE_DOWNLOAD" -O "$dest" + + local got_hash=$(md5sum "$dest" | cut -d' ' -f1) + if [[ $got_hash != $SOURCE_MD5 ]] ; then + fatal "MD5 Mismatch" + fi + + mkdir -p "${INSTALL_DIR}" + + cd "${INSTALL_DIR}" + tar zxf "$dest" + + rm "$dest" + + mv PtokaX build + cd build + + sed -i 's/lua5.1/lua5.2/' makefile + sed -i 's/lua51/lua52/' makefile + + make -j4 + + rm -r core skein obj tinyxml ico + rm makefile compile.txt + + cd ../ + mv build/* . + rmdir build + + cp -R cfg.example cfg + sed -i 's/AutoRegister">1/AutoRegister">0/' cfg/Settings.xml + sed -i -r 's/HubAddress">.+0.0.0.0"${INSTALL_DIR}service/stdout" \\ + 2>"${INSTALL_DIR}service/stderr" \\ + & + exit 0 + ;; + restart|force-reload) + /etc/init.d/ptokax stop + /etc/init.d/ptokax start + exit 0 + ;; + stop) + pkill PtokaX + exit 0 + ;; + status) + pidof PtokaX >/dev/null + exit $? + ;; + *) + echo "Usage: /etc/init.d/ptokax {start|stop|restart|status}" + exit 2 + ;; +esac + +EOF +} + +install_init_script() { + build_init_script > /etc/init.d/ptokax + chown root:root /etc/init.d/ptokax + chmod 755 /etc/init.d/ptokax + + update-rc.d ptokax defaults +} + +main() { + + if [[ $USER == "root" ]] ; then + if [[ "$BASH_SOURCE" == "" ]] ; then + fatal "Running from pipe is unsupported" + fi + + dependencies + create_user + create_dir + + cat "$BASH_SOURCE" | su "$GENERATE_USERNAME" -c "bash -s" + + allow_bind + install_init_script + + service ptokax start + + elif [[ $USER == $GENERATE_USERNAME ]] ; then + + download + + else + fatal "Please run as root" + + fi + exit 0 +} + +main