An installer for the DC hubsoft PtokaX. https://code.ivysaur.me/ptokaxinst
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

174 lines
3.0 KiB

#!/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">.+</HubAddress">0.0.0.0</' cfg/Settings.xml
mkdir service
touch service/stdout
touch service/stderr
}
genpass() {
dd if=/dev/urandom bs=12 count=1 | base64
}
create_user() {
useradd "$GENERATE_USERNAME" -p $(genpass)
}
create_dir() {
mkdir -p "$INSTALL_DIR"
chown "${GENERATE_USERNAME}:${GENERATE_USERNAME}" "$INSTALL_DIR"
chmod 750 "$INSTALL_DIR"
}
allow_bind() {
mkdir -p /etc/authbind/byport
touch /etc/authbind/byport/411
chown "${GENERATE_USERNAME}:root" /etc/authbind/byport/411
chmod 700 /etc/authbind/byport/411
}
build_init_script() {
cat <<EOF
#!/bin/bash
### BEGIN INIT INFO
# Provides: ptokax
# Required-Start: \$network \$named \$local_fs \$remote_fs
# Required-Stop: \$network \$named \$local_fs \$remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: PtokaX
# Description: PtokaX
### END INIT INFO
. /lib/lsb/init-functions
case "\$1" in
start)
su "$GENERATE_USERNAME" \\
-c 'cd "$INSTALL_DIR" && authbind ./PtokaX' \\
>"${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