Compare commits

...

No commits in common. "0.15.0-1" and "master" have entirely different histories.

54 changed files with 614 additions and 242 deletions

View File

@ -1,5 +1,5 @@
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -46,7 +46,6 @@ builddep:
prep: clean-tmp
cd $(SOURCESDIR) && tar czf $(SOURCETARBALL) \
config \
force-attr \
main \
COPYING \
Makefile
@ -83,11 +82,11 @@ check-activate:
clean-tmp:
rm -rf $(BUILDDIR)
rm -rf $(BUILDROOTDIR)
rm -rf $(SOURCETARBALL)
rm -f $(SOURCETARBALL)
clean-pkg:
rm -rf $(RPMSDIR)
rm -rf $(SRPMSDIR)
clean: clean-tmp clean-pkg
rm -f $(SOURCESDIR)/$(NAME)-*.tar.gz

View File

@ -1,2 +1,33 @@
# kf2-srv
Killing Floor 2 server tool for RHEL/CentOS 8
# KF2-SRV
*Killing Floor 2 server tool for RHEL8/CentOS8*
[![build release](https://github.com/GenZmeY/KF2-SRV/workflows/build%20release/badge.svg)](https://github.com/GenZmeY/KF2-SRV/actions?query=workflow%3A%22build+release%22)
[![tests (master)](https://github.com/GenZmeY/KF2-SRV/workflows/tests%20(master)/badge.svg?branch=master)](https://github.com/GenZmeY/KF2-SRV/actions?query=workflow%3A%22tests+%28master%29%22)
[![GitHub release](https://img.shields.io/github/v/release/genzmey/KF2-SRV)](https://github.com/genzmey/KF2-SRV/releases/latest)
[![GitHub Release Date](https://img.shields.io/github/release-date/genzmey/KF2-SRV)](https://github.com/genzmey/KF2-SRV/releases/latest)
![GitHub](https://img.shields.io/github/license/genzmey/KF2-SRV)
# Warning
There is not and most likely never will be a detailed manual. If you don't have sufficient knowledge of Linux in general and CentOS in particular, as well as the ability to learn unknown tools, you probably shouldn't use this.
# Usage
You can find actual rpm packages here(\*): https://github.com/GenZmeY/KF2-SRV/releases
And dependencies here: https://cloud.genzmey.su/index.php/s/3GiwtDpkNyCarXc
Basic usage information: https://github.com/GenZmeY/KF2-SRV/blob/master/SOURCES/README
\* inotify-tools requirement can be ignored
- Install packages `steamcmd-2018.01.05-5.el8.x86_64.rpm`, `multini-0.4.3-1.el8.x86_64.rpm`, `kf2-srv-0.18.1-1.el8.noarch.rpm`
- `kf2-srv game update` or `kf2-srv-beta game update`
- use `kf2-srv --help` or `kf2-srv <COMMAND> --help` to see the actions available to you and decide what to do next
**Filesystem:**
configs: `/etc/kf2-srv/`
game server: `/usr/games/kf2-srv`
game server (beta): `/usr/games/kf2-srv-beta`
cache: `/var/cache/kf2-srv`
logs: `/var/log/kf2-srv`
logs (beta): `/var/logs/kf2-srv`
# License
[GNU GPLv3](LICENSE)

View File

@ -1,5 +1,5 @@
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -43,6 +43,7 @@ DATADIR = $(DESTDIR)$(PREFIX)/share
SCRIPTDIR = $(DATADIR)/$(NAME)
SCRIPTGRPDIR = $(SCRIPTDIR)/cmdgrp
SCRIPTLIBDIR = $(SCRIPTDIR)/lib
SCRIPTPATCHDIR = $(SCRIPTDIR)/patch
LICENSEDIR = $(DATADIR)/licenses/$(NAME)
KF2MAINDIR = $(GAMEDIR)/$(NAME)
KF2BETADIR = $(GAMEDIR)/$(NAME)-beta
@ -60,36 +61,35 @@ build:
cp -r $(SOURCEDIR)/main $(RELEASEDIR)
cp -r $(SOURCEDIR)/config $(RELEASEDIR)
cp -r $(SOURCEDIR)/force-attr $(RELEASEDIR)
find $(RELEASEDIR) -type f -exec sed -i 's|:DEFINE_PREFIX:|$(PREFIX)|g;' {} \;
fake-systemd-build:
find $(SOURCEDIR)/main -type f -name '*.service' -exec cp -f {} $(RELEASEDIR)/{} \;
find $(SOURCEDIR)/force-attr -type f -name '*.service' -exec cp -f {} $(RELEASEDIR)/{} \;
find $(RELEASEDIR) -type f -exec sed -i 's|:DEFINE_PREFIX:|$(DESTDIR)$(PREFIX)|g;' {} \;
find $(RELEASEDIR) -type f -exec sed -i -r 's|ExecStart=.+KFGameSteamServer.bin.x86_64|ExecStart=/bin/bash|g;' {} \;
find $(RELEASEDIR) -type f -exec sed -i -r 's|ExecStart=.+KFGameSteamServer.bin.x86_64.*|ExecStart=/bin/bash|g;' {} \;
filesystem:
test -d '$(CONFDIR)' || install -m 775 -d '$(CONFDIR)'
test -d '$(INSTMAINDIR)' || install -m 775 -d '$(INSTMAINDIR)'
test -d '$(INSTBETADIR)' || install -m 775 -d '$(INSTBETADIR)'
test -d '$(MAPCYCLEDIR)' || install -m 775 -d '$(MAPCYCLEDIR)'
test -d '$(CACHEDIR)' || install -m 775 -d '$(CACHEDIR)'
test -d '$(BINDIR)' || install -m 755 -d '$(BINDIR)'
test -d '$(SBINDIR)' || install -m 755 -d '$(SBINDIR)'
test -d '$(KF2MAINDIR)' || install -m 775 -d '$(KF2MAINDIR)'
test -d '$(KF2BETADIR)' || install -m 775 -d '$(KF2BETADIR)'
test -d '$(LICENSEDIR)' || install -m 755 -d '$(LICENSEDIR)'
test -d '$(MAINLOGDIR)' || install -m 770 -d '$(MAINLOGDIR)'
test -d '$(BETALOGDIR)' || install -m 770 -d '$(BETALOGDIR)'
test -d '$(UNITDIR)' || install -m 755 -d '$(UNITDIR)'
test -d '$(FIREWALLDDIR)' || install -m 755 -d '$(FIREWALLDDIR)'
test -d '$(LOGROTATEDIR)' || install -m 755 -d '$(LOGROTATEDIR)'
test -d '$(RSYSLOGDIR)' || install -m 755 -d '$(RSYSLOGDIR)'
test -d '$(SCRIPTGRPDIR)' || install -m 755 -d '$(SCRIPTGRPDIR)'
test -d '$(SCRIPTLIBDIR)' || install -m 755 -d '$(SCRIPTLIBDIR)'
test -d '$(BASHCOMPDIR)' || install -m 755 -d '$(BASHCOMPDIR)'
test -d '$(CONFDIR)' || install -m 775 -d '$(CONFDIR)'
test -d '$(INSTMAINDIR)' || install -m 775 -d '$(INSTMAINDIR)'
test -d '$(INSTBETADIR)' || install -m 775 -d '$(INSTBETADIR)'
test -d '$(MAPCYCLEDIR)' || install -m 775 -d '$(MAPCYCLEDIR)'
test -d '$(CACHEDIR)' || install -m 775 -d '$(CACHEDIR)'
test -d '$(BINDIR)' || install -m 755 -d '$(BINDIR)'
test -d '$(SBINDIR)' || install -m 755 -d '$(SBINDIR)'
test -d '$(KF2MAINDIR)' || install -m 775 -d '$(KF2MAINDIR)'
test -d '$(KF2BETADIR)' || install -m 775 -d '$(KF2BETADIR)'
test -d '$(LICENSEDIR)' || install -m 755 -d '$(LICENSEDIR)'
test -d '$(MAINLOGDIR)' || install -m 770 -d '$(MAINLOGDIR)'
test -d '$(BETALOGDIR)' || install -m 770 -d '$(BETALOGDIR)'
test -d '$(UNITDIR)' || install -m 755 -d '$(UNITDIR)'
test -d '$(FIREWALLDDIR)' || install -m 755 -d '$(FIREWALLDDIR)'
test -d '$(LOGROTATEDIR)' || install -m 755 -d '$(LOGROTATEDIR)'
test -d '$(RSYSLOGDIR)' || install -m 755 -d '$(RSYSLOGDIR)'
test -d '$(SCRIPTGRPDIR)' || install -m 755 -d '$(SCRIPTGRPDIR)'
test -d '$(SCRIPTLIBDIR)' || install -m 755 -d '$(SCRIPTLIBDIR)'
test -d '$(SCRIPTPATCHDIR)' || install -m 755 -d '$(SCRIPTPATCHDIR)'
test -d '$(BASHCOMPDIR)' || install -m 755 -d '$(BASHCOMPDIR)'
install: filesystem build
install -m 755 $(RELEASEDIR)/main/$(NAME) $(BINDIR)
@ -112,7 +112,9 @@ install: filesystem build
install -m 644 $(RELEASEDIR)/main/lib/* $(SCRIPTLIBDIR)
install -m 644 $(RELEASEDIR)/main/systemd/$(NAME)@.service $(UNITDIR)
install -m 644 $(RELEASEDIR)/main/systemd/$(NAME)-orig@.service $(UNITDIR)
install -m 644 $(RELEASEDIR)/main/systemd/$(NAME)-beta@.service $(UNITDIR)
install -m 644 $(RELEASEDIR)/main/systemd/$(NAME)-beta-orig@.service $(UNITDIR)
install -m 644 $(RELEASEDIR)/main/systemd/$(NAME)-beta-update.service $(UNITDIR)
install -m 644 $(RELEASEDIR)/main/systemd/$(NAME)-beta-update.timer $(UNITDIR)
install -m 644 $(RELEASEDIR)/main/systemd/$(NAME)-update.service $(UNITDIR)
@ -122,9 +124,6 @@ install: filesystem build
install -m 644 $(RELEASEDIR)/main/logrotate/$(NAME) $(LOGROTATEDIR)
install -m 644 $(RELEASEDIR)/main/rsyslog/$(NAME).conf $(RSYSLOGDIR)
install -m 755 $(RELEASEDIR)/force-attr/$(NAME)-force-attr $(SBINDIR)
install -m 644 $(RELEASEDIR)/force-attr/systemd/$(NAME)-force-attr.service $(UNITDIR)
install -m 640 $(RELEASEDIR)/config/bot.conf $(CONFDIR)
install -m 644 $(RELEASEDIR)/config/instance.conf.template $(CONFDIR)
install -m 644 $(RELEASEDIR)/config/$(NAME).conf $(CONFDIR)
@ -138,7 +137,9 @@ uninstall:
rm -f $(BINDIR)/$(NAME)-beta
rm -f $(UNITDIR)/$(NAME)@.service
rm -f $(UNITDIR)/$(NAME)-orig@.service
rm -f $(UNITDIR)/$(NAME)-beta@.service
rm -f $(UNITDIR)/$(NAME)-beta-orig@.service
rm -f $(UNITDIR)/$(NAME)-beta-update.service
rm -f $(UNITDIR)/$(NAME)-beta-update.timer
rm -f $(UNITDIR)/$(NAME)-update.service
@ -148,9 +149,6 @@ uninstall:
rm -f $(LOGROTATEDIR)/$(NAME)
rm -f $(RSYSLOGDIR)/$(NAME).conf
rm -f $(SBINDIR)/$(NAME)-force-attr
rm -f $(UNITDIR)/$(NAME)-force-attr.service
rm -rf $(LICENSEDIR)
rm -rf $(KF2MAINDIR)
rm -rf $(KF2BETADIR)
@ -160,16 +158,16 @@ test: fake-systemd-build
$(XMLCHECK) $(RELEASEDIR)/main/firewalld/$(NAME).xml
$(SYSTEMDCHECK) $(RELEASEDIR)/main/systemd/$(NAME)@.service
$(SYSTEMDCHECK) $(RELEASEDIR)/main/systemd/$(NAME)-orig@.service
$(SYSTEMDCHECK) $(RELEASEDIR)/main/systemd/$(NAME)-beta@.service
$(SYSTEMDCHECK) $(RELEASEDIR)/main/systemd/$(NAME)-beta-orig@.service
$(SYSTEMDCHECK) $(RELEASEDIR)/main/systemd/$(NAME)-beta-update.service
$(SYSTEMDCHECK) $(RELEASEDIR)/main/systemd/$(NAME)-beta-update.timer
$(SYSTEMDCHECK) $(RELEASEDIR)/main/systemd/$(NAME)-update.service
$(SYSTEMDCHECK) $(RELEASEDIR)/main/systemd/$(NAME)-update.timer
$(SYSTEMDCHECK) $(RELEASEDIR)/force-attr/systemd/$(NAME)-force-attr.service
$(BASHCHECK) $(RELEASEDIR)/main/$(NAME)
$(BASHCHECK) $(RELEASEDIR)/main/$(NAME)-beta
$(BASHCHECK) $(RELEASEDIR)/force-attr/$(NAME)-force-attr
$(BASHCHECK) $(RELEASEDIR)/main/cmdgrp/ban/list
$(BASHCHECK) $(RELEASEDIR)/main/cmdgrp/ban/add
@ -196,6 +194,8 @@ test: fake-systemd-build
$(BASHCHECK) $(RELEASEDIR)/main/cmdgrp/workshop/add
$(BASHCHECK) $(RELEASEDIR)/main/cmdgrp/workshop/delete
$(BASHCHECK) $(RELEASEDIR)/main/cmdgrp/workshop/sync
$(BASHCHECK) $(RELEASEDIR)/main/cmdgrp/log/cat
$(BASHCHECK) $(RELEASEDIR)/main/cmdgrp/log/tail
$(BASHCHECK) $(RELEASEDIR)/main/lib/ban.lib
$(BASHCHECK) $(RELEASEDIR)/main/lib/game.lib
@ -205,6 +205,7 @@ test: fake-systemd-build
$(BASHCHECK) $(RELEASEDIR)/main/lib/playerids.lib
$(BASHCHECK) $(RELEASEDIR)/main/lib/webadmin.lib
$(BASHCHECK) $(RELEASEDIR)/main/lib/workshop.lib
$(BASHCHECK) $(RELEASEDIR)/main/lib/log.lib
$(BASHCHECK) $(RELEASEDIR)/main/bash_completion/$(NAME)

67
SOURCES/README Normal file
View File

@ -0,0 +1,67 @@
kf2-srv
Command line tool for managing a set of Killing Floor 2 servers.
Usage: kf2-srv <group> <command> [<args>]
kf2-srv ban add <id>...
Add the specified user(s) to the blocklist
kf2-srv ban delete <id>...
remove the specified user(s) from the blocklist
kf2-srv ban list
Show the list of blocked users
kf2-srv ban sync
Sync blocklist for all servers
kf2-srv game fix-permissions [<instance>...]
Correct ini files permissions for the specified instance
kf2-srv game run [<args>...]
Start the server with the specified parameters
kf2-srv game update
Install or update the server
kf2-srv game validate
Check the integrity of files, update them if necessary
kf2-srv instance add <name>...
Create a new server instance(s) with the specified name(s)
kf2-srv instance chat <message> [<instance>...]
Send message to specified server instance(s)
kf2-srv instance delete [<instance>...]
Delete the specified server instance(s)
kf2-srv instance disable [<instance>...]
Disable autostart for specified server instance(s)
kf2-srv instance enable [<instance>...]
Enable autostart for specified server instance(s)
kf2-srv instance list [<instance>...]
Show status of the specified server instance(s)
kf2-srv instance restart [<instance>...]
Restart the specified server instance(s)
kf2-srv instance start [<instance>...]
Start the specified server instance(s)
kf2-srv instance stop [<instance>...]
Stop the specified server instance(s)
kf2-srv log cat [<instance>...]
Print in stdout full log of specified server instance(s)
kf2-srv log tail [<instance>...]
Print in stdout tail log of specified server instance(s) in real time
kf2-srv maprotate load [<instance>...]
Load map rotation for specified server instance(s)
kf2-srv maprotate save [<instance>...]
Save map rotation for specified server instance(s)
kf2-srv password admin <password> [<instance>...]
Set a admin password for the specified server instance(s)
kf2-srv password game <password> [<instance>...]
Set a game password for the specified server instance(s)
kf2-srv workshop add <workshop_id>...
Add specified resource(s) from steam workshop
kf2-srv workshop delete [<workshop_id>...]
Delete specified steam workshop resource(s)
kf2-srv workshop list
Show the list of steam workshop resources
kf2-srv workshop sync
Sync steam workshop resources between all server instances
Use --help as an argument for information on a specific group or command

View File

@ -25,10 +25,10 @@ MutNames['KFMutator.KFMutator_MaxPlayersV2']='MaxPlayers'
MutNames['ClassicScoreboard.ClassicSCMut']='ClassicSC'
MutNames['ZedCustom.ZedCustomMut']='ZedVarients'
# These parameters are used when creating new instances.
# In order for the parameters to be applied to the files that the working server creates, the "kf2-srv-force-attr.service" must be active.
ForceIniPermissions=664
ForceLogPermissions=644
ForceIniGroup=steam
ForceLogGroup=steam
# These parameters are used when creating new instances and in the command "kf2-srv game fix-permissions"
IniPermissions=664
IniGroup=steam
# if true all steamclient.so will be replaced by symlinks to:
# /usr/games/steamcmd/linux64/steamclient.so
FixSteamclientLib=True

View File

@ -1,18 +0,0 @@
[Unit]
Description=kf2-srv force attr service
[Service]
Type=simple
StandardOutput=null
StandardError=null
ExecStart=:DEFINE_PREFIX:/sbin/kf2-srv-force-attr
Restart=always
NoNewPrivileges=yes
PrivateTmp=true
PrivateDevices=true
ProtectHome=true
ProtectSystem=true
[Install]
WantedBy=multi-user.target

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -19,36 +19,33 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
function _kf2_srv_completions () # $1: BetaPostfix
function _kf2_srv_completions ()
{
local GrpDir=":DEFINE_PREFIX:/share/kf2-srv/cmdgrp"
local InsDir="/etc/kf2-srv/instances${BetaPostfix}"
local KF2Srv=":DEFINE_PREFIX:/bin/kf2-srv${BetaPostfix}"
function groups_list ()
{
find "$GrpDir" \
-mindepth 1 \
-maxdepth 1 \
-type d \
find "$GrpDir" \
-mindepth 1 \
-maxdepth 1 \
-type d \
-printf "%f\n"
}
function commands_list () # $1: Command group
{
find "$GrpDir/$1" \
-mindepth 1 \
-maxdepth 1 \
-type f \
test -d "$GrpDir/$1" && \
find "$GrpDir/$1" \
-mindepth 1 \
-maxdepth 1 \
-type f \
-printf "%f\n"
}
function instances_list ()
{
find "$InsDir" \
-mindepth 1 \
-maxdepth 1 \
-type d \
find "$InsDir" \
-mindepth 1 \
-maxdepth 1 \
-type d \
-printf "%f\n"
}
@ -88,11 +85,24 @@ function _kf2_srv_completions () # $1: BetaPostfix
return 0
}
function _kf2_srv_beta_completions ()
function _kf2_srv_main_completions ()
{
_kf2_srv_completions "-beta"
local GrpDir=":DEFINE_PREFIX:/share/kf2-srv/cmdgrp"
local InsDir="/etc/kf2-srv/instances"
local KF2Srv=":DEFINE_PREFIX:/bin/kf2-srv"
_kf2_srv_completions
}
complete -F _kf2_srv_completions kf2-srv
function _kf2_srv_beta_completions ()
{
local GrpDir=":DEFINE_PREFIX:/share/kf2-srv/cmdgrp"
local InsDir="/etc/kf2-srv/instances-beta"
local KF2Srv=":DEFINE_PREFIX:/bin/kf2-srv-beta"
_kf2_srv_completions
}
complete -F _kf2_srv_main_completions kf2-srv
complete -F _kf2_srv_beta_completions kf2-srv-beta

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -35,7 +35,8 @@ function cmd_info ()
function cmd_help ()
{
echo "TODO: description"
echo "Id can be SteamID3, SteamID64 or a link to a user profile."
echo "EGS players are not supported."
}
function cmd_main () # $*: ban list

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -30,12 +30,13 @@ function cmd_usage ()
function cmd_info ()
{
echo "remove the specified user(s) from the blocklist"
echo "Remove the specified user(s) from the blocklist"
}
function cmd_help ()
{
echo "TODO: description"
echo "Id can be SteamID3, SteamID64 or a link to a user profile."
echo "EGS players are not supported."
}
function cmd_main () # $*: ban list

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -33,10 +33,10 @@ function cmd_info ()
echo "Show the list of blocked users"
}
function cmd_help ()
{
echo "TODO: description"
}
#function cmd_help ()
#{
# echo ""
#}
function cmd_main ()
{

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -33,10 +33,10 @@ function cmd_info ()
echo "Sync blocklist for all servers"
}
function cmd_help ()
{
echo "TODO: description"
}
#function cmd_help ()
#{
# echo ""
#}
function cmd_main ()
{

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -35,7 +35,10 @@ function cmd_info ()
function cmd_help ()
{
echo "TODO: description"
echo "By default, all files created by the kf2 server"
echo "have 600 permissions, which can be inconvenient."
echo "This command fixes the permissions and groups of"
echo "all ini files to the values specified in kf2-srv.conf"
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help ()
{
echo "TODO: description"
echo "Run the server binary directly, without systemd or anything else."
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -35,7 +35,8 @@ function cmd_info ()
function cmd_help ()
{
echo "TODO: description"
echo "Stops all running server instances, installs updates (if any)"
echo "When finished, starts all enabled instances."
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -35,7 +35,8 @@ function cmd_info ()
function cmd_help ()
{
echo "TODO: description"
echo "Stops all running server instances, validate server files."
echo "When finished, starts all enabled instances."
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help ()
{
echo "TODO: description"
echo "Name(s) must not contain spaces."
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -30,12 +30,12 @@ function cmd_usage ()
function cmd_info ()
{
echo "Send message to specified server instances"
echo "Send message to specified server instance(s)"
}
function cmd_help ()
{
echo "TODO: description"
echo "If instance is not specified, sends a message to all running servers."
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -19,8 +19,8 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
cmd_need_superuser () { false ;}
cmd_need_steamuser () { true ;}
cmd_need_superuser () { true ;}
cmd_need_steamuser () { false ;}
cmd_need_installed_server () { false ;}
function cmd_usage ()
@ -30,12 +30,12 @@ function cmd_usage ()
function cmd_info ()
{
echo "Delete the specified server instances"
echo "Delete the specified server instance(s)"
}
function cmd_help ()
{
echo "TODO: description"
echo "If instance is not specified, deletes all server instances."
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -30,12 +30,12 @@ function cmd_usage ()
function cmd_info ()
{
echo "Disable specified server instance(s)"
echo "Disable autostart for specified server instance(s)"
}
function cmd_help ()
{
echo "TODO: description"
echo "If instance is not specified, disable autostart for all instances."
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -30,12 +30,12 @@ function cmd_usage ()
function cmd_info ()
{
echo "Enable specified server instance(s)"
echo "Enable autostart for specified server instance(s)"
}
function cmd_help ()
{
echo "TODO: description"
echo "If instance is not specified, disable autostart for all instances."
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help ()
{
echo "TODO: description"
echo "If instance is not specified, displays the status of all instances."
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help ()
{
echo "TODO: description"
echo "If instance is not specified, restarts all enabled instances."
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help ()
{
echo "TODO: description"
echo "If instance is not specified, starts all enabled instances."
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help ()
{
echo "TODO: description"
echo "If instance is not specified, stops all instances."
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -19,25 +19,29 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
declare -A ModeNames MutNames
cmd_need_superuser () { false ;}
cmd_need_steamuser () { false ;}
cmd_need_installed_server () { true ;}
source "/etc/kf2-srv/kf2-srv.conf"
function cmd_usage ()
{
echo "[<instance>...]"
}
DirLog="/var/log/kf2-srv"
DirLogBeta="/var/log/kf2-srv-beta"
DirInstances="/etc/kf2-srv/instances"
DirInstancesBeta="/etc/kf2-srv/instances-beta"
function cmd_info ()
{
echo "Print in stdout full log of specified server instance(s)"
}
/usr/bin/inotifywait -qmr -e create -e moved_to --format %w%f \
"$DirLog" "$DirLogBeta" "$DirInstances" "$DirInstancesBeta" | \
while read File
do
if echo "$File" | grep -Piq "\.log$"; then
chmod "$ForceLogPermissions" "$File"
chown :"$ForceLogGroup" "$File"
elif echo "$File" | grep -Piq "\.ini$"; then
chmod "$ForceIniPermissions" "$File"
chown :"$ForceIniGroup" "$File"
fi
done
function cmd_help ()
{
echo "If instance is not specified, prints the log of all instances."
}
function cmd_main ()
{
include "$LibDir/log.lib"
log_cat "$@"
}

View File

@ -0,0 +1,47 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
#
# kf2-srv is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
cmd_need_superuser () { false ;}
cmd_need_steamuser () { false ;}
cmd_need_installed_server () { true ;}
function cmd_usage ()
{
echo "[<instance>...]"
}
function cmd_info ()
{
echo "Print in stdout tail log of specified server instance(s) in real time"
}
function cmd_help ()
{
echo "If instance is not specified, prints the log of all instances in real time."
}
function cmd_main ()
{
include "$LibDir/log.lib"
log_tail "$@"
}

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help ()
{
echo "TODO: description"
echo "If instance is not specified, load map rotation for all instances."
}
function cmd_main () # $*: Instance[s]

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help ()
{
echo "TODO: description"
echo "If instance is not specified, save map rotation for all instances."
}
function cmd_main () # $*: Instance[s]

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -35,7 +35,9 @@ function cmd_info ()
function cmd_help ()
{
echo "TODO: description"
echo "If instance is not specified, set a admin password for all instances."
echo "To remove a password, use an empty password as an argument,"
echo "example: ${ScriptFullname}${KF2POSTFIX} password admin '' test_instance"
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -35,7 +35,9 @@ function cmd_info ()
function cmd_help ()
{
echo "TODO: description"
echo "If instance is not specified, set a game password for all instances."
echo "To remove a password, use an empty password as an argument,"
echo "example: ${ScriptFullname}${KF2POSTFIX} password game '' test_instance"
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -25,7 +25,7 @@ cmd_need_installed_server () { false ;}
function cmd_usage ()
{
echo "[<workshop_id>...]"
echo "<workshop_id>..."
}
function cmd_info ()
@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help ()
{
echo "TODO: description"
echo "workshop_id can be a resource ID or a link to a resource in workshop."
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help ()
{
echo "TODO: description"
echo "workshop_id can be a resource ID or a link to a resource in workshop."
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -33,10 +33,10 @@ function cmd_info ()
echo "Show the list of steam workshop resources"
}
function cmd_help ()
{
echo "TODO: description"
}
#function cmd_help ()
#{
# echo ""
#}
function cmd_main ()
{

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -30,12 +30,13 @@ function cmd_usage ()
function cmd_info ()
{
echo "Sync steamorkshop resources between all server instances"
echo "Sync steam workshop resources between all server instances"
}
function cmd_help ()
{
echo "TODO: description"
echo "In addition to synchronization, adds loaded maps and mutators to KFGame.ini."
echo "This command works for stopped server instances only."
}
function cmd_main ()

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -25,9 +25,11 @@ readonly ScriptVersion=$(rpm -q --queryformat '%{VERSION}' "$ScriptName")
readonly GrpDir=":DEFINE_PREFIX:/share/kf2-srv/cmdgrp"
readonly LibDir=":DEFINE_PREFIX:/share/kf2-srv/lib"
readonly PatchDir=":DEFINE_PREFIX:/share/kf2-srv/patch"
readonly InstallDir=":DEFINE_PREFIX:/games/kf2-srv${KF2POSTFIX}"
readonly AppBin="$InstallDir/Binaries/Win64/KFGameSteamServer.bin.x86_64"
readonly AppBinOrig="${AppBin}.orig"
readonly DefaultConfigDir="$InstallDir/KFGame/Config"
readonly DefaultDownloadDir="$InstallDir/Binaries/Win64/steamapps/workshop"
@ -43,7 +45,7 @@ readonly InstanceConfigTemplate="/etc/kf2-srv/instance.conf.template"
readonly AppServerNum="232130"
readonly AppClientNum="232090"
readonly StrangeConstUID="17825793"
readonly SteamConstB='17825793'
readonly ServerBotLogin="srvbot"
declare -a DiffNames
@ -67,7 +69,7 @@ function run_as_steamuser () # $@: command
shift 3; cmd_main "$@"
elif [[ -n $(groups "$(whoami)" | grep -Fo 'wheel') ]] || [[ "$(whoami)" == "root" ]]; then
export INC_LIBS=""
sudo -u "$SteamUser" "$@"
sudo -iu "$SteamUser" "$@"
else
echo "You must be a $SteamUser, root or sudo-user to run this command."
fi
@ -79,7 +81,7 @@ function run_as_root () # $@: command
shift 3; cmd_main "$@"
elif [[ -n $(groups "$(whoami)" | grep -Fo 'wheel') ]]; then
export INC_LIBS=""
sudo "$@"
sudo -i "$@"
else
echo "You must be root or sudo-user to run this command."
fi
@ -197,10 +199,22 @@ elif [[ -d "$GroupPathname" ]]; then
shift
source "$CommandPathName"
if is_help "$1"; then
if function_exists "cmd_help"; then
cmd_help
else
if ! function_exists "cmd_usage" \
&& ! function_exists "cmd_info" \
&& ! function_exists "cmd_help"; then
echo "No help page for this command."
else
if function_exists "cmd_usage"; then
echo "usage: $(cmd_usage)"
echo
fi
if function_exists "cmd_info"; then
cmd_info
echo
fi
if function_exists "cmd_help"; then
cmd_help
fi
fi
elif is_usage "$1"; then
if function_exists "cmd_usage"; then

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -108,7 +108,7 @@ function ban_ID3 () # $1: ID3
do
(
local Config="$InstanceConfigDir/$Instance/LinuxServer-KFGame.ini"
local BanStr="(Uid=(A=$ID3,B=$StrangeConstUID))"
local BanStr="(Uid=(A=$ID3,B=$SteamConstB))"
local Service=$(service_name "$Instance")
if ! multini -gq "$Config" "Engine.AccessControl" "BannedIDs" "$BanStr"; then
echo "Add ban $ID3 to $Instance"
@ -137,7 +137,7 @@ function unban_ID3 () # $1: ID3
do
(
local Config="$InstanceConfigDir/$Instance/LinuxServer-KFGame.ini"
local BanStr="(Uid=(A=$ID3,B=$StrangeConstUID))"
local BanStr="(Uid=(A=$ID3,B=$SteamConstB))"
local Service=$(service_name "$Instance")
if systemctl -q is-active $Service ; then
local PlainID=0

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -39,7 +39,7 @@ function fix_ini_permissions () # $1: Dir
find "$1" \( -type l -o -type f \) -name '*.ini' | \
xargs --max-procs=$(nproc) -I {} \
sh -c "chmod $ForceIniPermissions {}; chown $SteamUser:$ForceIniGroup {}"
sh -c "chmod $IniPermissions {}; chown $SteamUser:$IniGroup {}"
}
function game_run () # $@: Game args
@ -60,6 +60,7 @@ function game_update ()
elif updates_aviable; then
instance_stop
steamcmd +login $SteamLogin +force_install_dir $InstallDir +app_update $AppServerNum $BetaArg +exit
apply_patch
instance_start
else
echo "Server is up to date"
@ -95,8 +96,10 @@ function game_validate ()
local BetaArg="-beta preview"
fi
instance_stop
remove_symlink_steamclient_so
steamcmd +login $SteamLogin +force_install_dir $InstallDir +app_update $AppServerNum $BetaArg validate +exit
fix_steamclient_so
apply_patch
create_symlink_steamclient_so
instance_start
}
@ -105,6 +108,8 @@ function first_install ()
include /etc/steamcmd/steamcmd.conf
include /etc/kf2-srv/bot.conf
remove_symlink_steamclient_so
if ! steamcmd +login $SteamLogin +force_install_dir $InstallDir +app_update $AppServerNum $BetaArg validate +exit; then
echo "Errors during installation - exit"
exit 1
@ -197,9 +202,10 @@ function first_install ()
killall -KILL KFGameSteamServer.bin.x86_64; sleep 1
create_cache
fix_steamclient_so
create_symlink_steamclient_so
ln -s "$InstanceConfigDir" "$DefaultConfigDir/instances"
make_default_instance
apply_patch
echo "KF2 succesfully installed"
}
@ -238,14 +244,30 @@ function create_cache ()
fi
}
function fix_steamclient_so ()
function remove_symlink_steamclient_so ()
{
rm -f "$InstallDir/linux64/steamclient.so"
rm -f "$InstallDir/steamclient.so"
rm -f "$InstallDir/Binaries/Win64/lib64/steamclient.so"
ln -s "/usr/games/steamcmd/linux64/steamclient.so" "$InstallDir/linux64/steamclient.so"
ln -s "/usr/games/steamcmd/linux64/steamclient.so" "$InstallDir/steamclient.so"
ln -s "/usr/games/steamcmd/linux64/steamclient.so" "$InstallDir/Binaries/Win64/lib64/steamclient.so"
include /etc/kf2-srv/kf2-srv.conf
if echo "$FixSteamclientLib" | grep -qiF 'true'; then
rm -f "$InstallDir/linux64/steamclient.so"
rm -f "$InstallDir/steamclient.so"
rm -f "$InstallDir/Binaries/Win64/lib64/steamclient.so"
else
test -L "$InstallDir/linux64/steamclient.so" && rm -f "$InstallDir/linux64/steamclient.so"
test -L "$InstallDir/steamclient.so" && rm -f "$InstallDir/steamclient.so"
test -L "$InstallDir/Binaries/Win64/lib64/steamclient.so" && rm -f "$InstallDir/Binaries/Win64/lib64/steamclient.so"
fi
}
function create_symlink_steamclient_so ()
{
include /etc/kf2-srv/kf2-srv.conf
if echo "$FixSteamclientLib" | grep -qiF 'true'; then
ln -s "/usr/games/steamcmd/linux64/steamclient.so" "$InstallDir/linux64/steamclient.so"
ln -s "/usr/games/steamcmd/linux64/steamclient.so" "$InstallDir/steamclient.so"
ln -s "/usr/games/steamcmd/linux64/steamclient.so" "$InstallDir/Binaries/Win64/lib64/steamclient.so"
fi
}
function make_default_instance () # $1: Dir
@ -255,9 +277,9 @@ function make_default_instance () # $1: Dir
local InstanceDir="$InstanceConfigDir/default"
install -d -g "$SteamUser" -o "$ForceIniGroup" -m 775 "$InstanceDir"
install -d -g "$SteamUser" -o "$ForceIniGroup" -m 775 "$InstanceDir/LinuxServer"
install -g "$SteamUser" -o "$ForceIniGroup" -m $ForceIniPermissions "$InstanceConfigTemplate" "$InstanceDir/instance.conf"
install -d -g "$SteamUser" -o "$IniGroup" -m 775 "$InstanceDir"
install -d -g "$SteamUser" -o "$IniGroup" -m 775 "$InstanceDir/LinuxServer"
install -g "$SteamUser" -o "$IniGroup" -m $IniPermissions "$InstanceConfigTemplate" "$InstanceDir/instance.conf"
ln -s "$DefaultConfigDir/KFAI.ini" "$InstanceDir/KFAI.ini"
ln -s "$DefaultConfigDir/KFWeb.ini" "$InstanceDir/KFWeb.ini"
ln -s "$DefaultConfigDir/KFWebAdmin.ini" "$InstanceDir/KFWebAdmin.ini"
@ -275,6 +297,15 @@ function make_default_instance () # $1: Dir
fix_ini_eol "$InstanceDir"
}
function apply_patch ()
{
if [[ -x "$PatchDir/kf2-ranked-patch" ]]; then
"$PatchDir/kf2-ranked-patch" "$AppBin" "$AppBinOrig"
chmod +x "$AppBin" "$AppBinOrig"
chown "$SteamUser:$SteamUser" "$AppBin" "$AppBinOrig"
fi
}
function fix_ini_eol () # $1: Dir
{
find "$1" \( -type l -o -type f \) -name '*.ini' | \

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -45,6 +45,21 @@ function service_name () # $*: Instance[s]
local Services=""
for Instance in $*
do
if multini -g "$InstanceConfigDir/$Instance/instance.conf" '' "UseOrigApp" 2> /dev/null | grep -Piqo '^True$' && test -x "$AppBinOrig"; then
Services+=" kf2-srv${KF2POSTFIX}-orig@$Instance.service"
else
Services+=" kf2-srv${KF2POSTFIX}@$Instance.service"
fi
done
echo "$Services"
}
function service_names () # $*: Instance[s]
{
local Services=""
for Instance in $*
do
Services+=" kf2-srv${KF2POSTFIX}-orig@$Instance.service"
Services+=" kf2-srv${KF2POSTFIX}@$Instance.service"
done
echo "$Services"
@ -90,8 +105,8 @@ function instance_add () # $*: InstanceName[s]
local InstanceDir="$InstanceConfigDir/$Instance"
local DirMode="-d -g $SteamUser -o $ForceIniGroup -m 775"
local FileMode=" -g $SteamUser -o $ForceIniGroup -m $ForceIniPermissions"
local DirMode="-d -g $SteamUser -o $IniGroup -m 775"
local FileMode=" -g $SteamUser -o $IniGroup -m $IniPermissions"
install $DirMode "$InstanceDir"
install $DirMode "$InstanceDir/LinuxServer"
@ -212,7 +227,7 @@ function instance_disable () # $*: [InstanceName[s]]
done
if [[ -n "$ToDisableInstanceList" ]]; then
systemctl disable $(service_name "$ToDisableInstanceList")
systemctl disable $(service_names "$ToDisableInstanceList")
else
echo "Nothing to do"
fi
@ -409,7 +424,7 @@ function instance_stop () # $*: [InstanceName[s]]
done
if [[ -n "$ToStopInstanceList" ]]; then
systemctl stop $(service_name "$ToStopInstanceList")
systemctl stop $(service_names "$ToStopInstanceList")
else
echo "Nothing to do"
fi

75
SOURCES/main/lib/log.lib Normal file
View File

@ -0,0 +1,75 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
#
# kf2-srv is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
function log_cat () # $*: InstanceName[s]
{
include "$LibDir/instance.lib"
local InstanceList="$*"
if [[ -z "$InstanceList" ]] ; then
InstanceList=$(show_instances)
fi
local Logs
for Instance in $InstanceList
do
if instance_exists "$Instance"; then
local Service=$(service_name "$Instance")
Logs+="-u $Service "
else
echo "Instance $Instance not exitst"
fi
done
if [[ -z "$Logs" ]]; then
echo "No logs available."
else
journalctl --no-pager $Logs
fi
}
function log_tail () # $*: InstanceName[s]
{
include "$LibDir/instance.lib"
local InstanceList="$*"
if [[ -z "$InstanceList" ]] ; then
InstanceList=$(show_instances)
fi
local Logs
for Instance in $InstanceList
do
if instance_exists "$Instance"; then
local Service=$(service_name "$Instance")
Logs+="-u $Service "
else
echo "Instance $Instance not exitst"
fi
done
if [[ -z "$Logs" ]]; then
echo "No logs available."
else
echo "Hint: use Ctrl+C to stop output"
journalctl --no-pager -f $Logs
fi
}

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.
@ -19,35 +19,42 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# conversion algorithm taken from here:
# https://github.com/noobient/killinuxfloor/blob/master/share/killinuxfloor
# thank bviktor for that :)
function steamID3_to_steamID64 () # $1: ID3
# WARNING:
# Conversion works correctly for positive A/B for EGS,
# but still gives incorrect results if there are negative ones
function steamID3_to_steamID64 () # $1: ID3 (A), $2: B
{
# steamID64 = "7656" + (steamID3 + 1197960265728)
ID64=$1
((ID64+=1197960265728))
ID64="7656${ID64}"
echo "$ID64"
local ID3="$1"
if [[ -z $2 ]]; then
local B="$SteamConstB"
else
local B="$2"
fi
# SteamID64=B*2^32+SteamID3
echo $(($B*(2**32)+$ID3))
}
function steamID64_to_steamID3 () # $1: ID4
function steamID64_to_steamID3 () # $1: ID64, $2: B
{
# steamID3 = substr(steamID64, 4) - 1197960265728
ID3=${1:4}
((ID3-=1197960265728))
echo "$ID3"
local ID64="$1"
if [[ -z $2 ]]; then
local B="$SteamConstB"
else
local B="$2"
fi
# SteamID3=SteamID64-B*2^32
echo $(($ID64-$B*(2**32)))
}
function any_to_ID3 () # $1: ID3/ID64/Url
{
if echo "$1" | grep -qP '^http.+'; then
local Xml=$(mktemp)
curl -ss "$1/?xml=1" > "$Xml"
local ID64=$(xmllint --xpath 'string(//steamID64/text())' "$Xml")
local ID64=$(curl -ss "$1/?xml=1" | xmllint --xpath 'string(//steamID64/text())' -)
local ID3=$(steamID64_to_steamID3 "$ID64")
rm -f "$Xml"
elif [[ $(echo "$1" | wc -m) -eq 18 ]] && echo "$1" | grep -qP '^76561[0-9]+' ; then
elif [[ $(echo "$1" | wc -m) -eq 18 ]] && echo "$1" | grep -qP '^7656[0-9]+' ; then
local ID3=$(steamID64_to_steamID3 "$1")
else
local ID3="$1"

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.

View File

@ -1,7 +1,7 @@
#!/bin/bash
# kf2-srv is a command line tool for managing a set of Killing Floor 2 servers.
# Copyright (C) 2019, 2020 GenZmeY
# Copyright (C) 2019-2021 GenZmeY
# mailto: genzmey@gmail.com
#
# This file is part of kf2-srv.

View File

@ -2,9 +2,12 @@ global(parser.permitSlashInProgramName="on")
template(name="DynFile" type="string" string="/var/log/%programname%.log")
# Change "UMask" in /usr/lib/systemd/system/rsyslog.service
# to make "FileCreateMode" and "Umask" work correctly for this config.
if ($programname startswith "kf2-srv") then
{
action(Type="omfile" DynaFile="DynFile" FileCreateMode="0640" Umask="0027" FileOwner="root" FileGroup="steam")
action(Type="omfile" DynaFile="DynFile" FileCreateMode="0644" Umask="0022" FileOwner="root" FileGroup="steam")
stop
}

View File

@ -0,0 +1,25 @@
[Unit]
Description=Killing Floor 2 Beta Server Daemon - %i
Conflicts=kf2-srv-beta@%i.service
After=network-online.target
Wants=network-online.target
[Service]
User=steam
Group=steam
Type=simple
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=kf2-srv-beta/%i
EnvironmentFile=/etc/kf2-srv/instances-beta/%i/instance.conf
ExecStart=:DEFINE_PREFIX:/games/kf2-srv-beta/Binaries/Win64/KFGameSteamServer.bin.x86_64.orig ${Map}?Difficulty=${Difficulty}?GameLength=${Length}?Game=${Game}?Mutator=${Mutators}?${Args} configsubdir=instances/%i -webadminport=${PortWeb} -queryport=${PortQuery} -port=${PortGame}
Restart=on-failure
NoNewPrivileges=yes
PrivateTmp=true
PrivateDevices=true
ProtectHome=true
ProtectSystem=false
[Install]
WantedBy=multi-user.target

View File

@ -1,6 +1,6 @@
[Unit]
Description=Killing Floor 2 Beta Server Daemon - %i
After=kf2-srv-force-attr.service
Conflicts=kf2-srv-beta-orig@%i.service
After=network-online.target
Wants=network-online.target
@ -13,7 +13,7 @@ StandardError=syslog
SyslogIdentifier=kf2-srv-beta/%i
EnvironmentFile=/etc/kf2-srv/instances-beta/%i/instance.conf
ExecStart=:DEFINE_PREFIX:/games/kf2-srv-beta/Binaries/Win64/KFGameSteamServer.bin.x86_64 ${Map}?Difficulty=${Difficulty}?GameLength=${Length}?Game=${Game}?Mutator=${Mutators}?${Args} configsubdir=instances/%i -webadminport=${PortWeb} -queryport=${PortQuery} -port=${PortGame}
Restart=always
Restart=on-failure
NoNewPrivileges=yes
PrivateTmp=true

View File

@ -0,0 +1,25 @@
[Unit]
Description=Killing Floor 2 Server Daemon - %i
Conflicts=kf2-srv@%i.service
After=network-online.target
Wants=network-online.target
[Service]
User=steam
Group=steam
Type=simple
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=kf2-srv/%i
EnvironmentFile=/etc/kf2-srv/instances/%i/instance.conf
ExecStart=:DEFINE_PREFIX:/games/kf2-srv/Binaries/Win64/KFGameSteamServer.bin.x86_64.orig ${Map}?Difficulty=${Difficulty}?GameLength=${Length}?Game=${Game}?Mutator=${Mutators}?${Args} configsubdir=instances/%i -webadminport=${PortWeb} -queryport=${PortQuery} -port=${PortGame}
Restart=on-failure
NoNewPrivileges=yes
PrivateTmp=true
PrivateDevices=true
ProtectHome=true
ProtectSystem=false
[Install]
WantedBy=multi-user.target

View File

@ -19,7 +19,7 @@ ExecStart=/bin/sleep 5m
ExecStart=:DEFINE_PREFIX:/bin/kf2-srv instance chat 'Server shutting down...'
ExecStart=/bin/sleep 5s
ExecStart=:DEFINE_PREFIX:/bin/kf2-srv instance update
ExecStart=:DEFINE_PREFIX:/bin/kf2-srv game update
PrivateTmp=true
PrivateDevices=true

View File

@ -1,6 +1,6 @@
[Unit]
Description=Killing Floor 2 Server Daemon - %i
After=kf2-srv-force-attr.service
Conflicts=kf2-srv-orig@%i.service
After=network-online.target
Wants=network-online.target
@ -13,7 +13,7 @@ StandardError=syslog
SyslogIdentifier=kf2-srv/%i
EnvironmentFile=/etc/kf2-srv/instances/%i/instance.conf
ExecStart=:DEFINE_PREFIX:/games/kf2-srv/Binaries/Win64/KFGameSteamServer.bin.x86_64 ${Map}?Difficulty=${Difficulty}?GameLength=${Length}?Game=${Game}?Mutator=${Mutators}?${Args} configsubdir=instances/%i -webadminport=${PortWeb} -queryport=${PortQuery} -port=${PortGame}
Restart=always
Restart=on-failure
NoNewPrivileges=yes
PrivateTmp=true

View File

@ -1,7 +1,7 @@
%global steamuser steam
Name: kf2-srv
Version: 0.15.0
Version: 0.18.1
Release: 1%{dist}
Summary: Killing Floor 2 server
Group: Amusements/Games
@ -68,13 +68,13 @@ rm -rf $RPM_BUILD_ROOT
%attr(0775,root,root) %dir %{_datadir}/%{name}/cmdgrp
%attr(0755,root,root) %dir %{_datadir}/%{name}/cmdgrp/*
%attr(0775,root,root) %dir %{_datadir}/%{name}/lib
%attr(0775,root,root) %dir %{_datadir}/%{name}/patch
%attr(0664,root,%{steamuser}) %config(noreplace) %{_sysconfdir}/%{name}/instance.conf.template
%attr(0664,root,%{steamuser}) %config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf
%attr(0640,root,%{steamuser}) %config(noreplace) %{_sysconfdir}/%{name}/bot.conf
%attr(0644,root,root) %config(noreplace) %{_prefix}/lib/firewalld/services/%{name}.xml
%attr(0755,root,root) %{_bindir}/%{name}
%attr(0755,root,root) %{_bindir}/%{name}-beta
%attr(0755,root,root) %{_sbindir}/%{name}-force-attr
%attr(0644,root,root) %{_unitdir}/*
%attr(0644,root,root) %doc %{_datadir}/licenses/%{name}/*
%attr(0644,root,root) %{_sysconfdir}/rsyslog.d/%{name}.conf
@ -101,6 +101,37 @@ if [[ $1 == 1 ]]; then # Install
fi
%changelog
* Tue Jun 22 2021 GenZmeY <genzmey@gmail.com> - 0.18.1-1
- fix "FixSteamclientLib" setting.
* Tue Jun 22 2021 GenZmeY <genzmey@gmail.com> - 0.18.0-1
- add FixSteamclientLib setting to config.
* Sat Feb 27 2021 GenZmeY <genzmey@gmail.com> - 0.17.1-1
- fix the start of the original app.
* Sun Feb 21 2021 GenZmeY <genzmey@gmail.com> - 0.17.0-1
- binary patching support.
* Mon Sep 21 2020 GenZmeY <genzmey@gmail.com> - 0.16.0-1
- remove force-attr daemon;
- log cmg group;
- command descriptions.
* Sat Aug 15 2020 GenZmeY <genzmey@gmail.com> - 0.15.4-1
- fixed broken update;
- replaced steamID3/steamID64 conversation algorithm.
* Sat Aug 15 2020 GenZmeY <genzmey@gmail.com> - 0.15.3-1
- fix 'find: Failed to restore initial working directory'.
* Sat Aug 15 2020 GenZmeY <genzmey@gmail.com> - 0.15.2-1
- fix bash completion for commands without parameters;
- fix bash completion for use not existing command group.
* Fri Aug 14 2020 GenZmeY <genzmey@gmail.com> - 0.15.1-1
- fix bash completion for kf2-srv-beta.
* Thu Aug 13 2020 GenZmeY <genzmey@gmail.com> - 0.15.0-1
- bash completion support.

11
TODO
View File

@ -1,11 +0,0 @@
- selinux
- sudo for steamuser
- kick by level
- man pages
- write help pages for each command
- check ban EGS players (mb bugs)
- ban history
- temporary ban
- generate unique password for server bot on install
- bash completion

4
TODO.md Normal file
View File

@ -0,0 +1,4 @@
# TODO:
- [ ] split source and rpmbuild
- [ ] add shellcheck
- [ ] webadmin patch