Compare commits

...

18 Commits

Author SHA1 Message Date
5fa12d821b update spec for new version 2020-09-21 05:43:37 +03:00
ab8b757a8d command descriptions 2020-09-21 05:41:30 +03:00
31167e6f7a remove kf2-srv-force-attr 2020-09-09 14:17:46 +03:00
8f34f6fa95 feat: log cmd group 2020-09-09 14:06:35 +03:00
9865447789 fixed broken update. 2020-09-03 12:43:06 +03:00
dddab7f478 fixed failed instance stop 2020-08-20 00:13:31 +03:00
5630438624 refactor: replaced steamID3/steamID64 conversation algorithm 2020-08-17 01:12:51 +03:00
57006c867e fix 'find: Failed to restore initial working directory' 2020-08-15 15:32:10 +03:00
0f935c2faa fix: bashcomp
- fix bash completion for commands without parameters;
- fix bash completion for use not existing command group.
2020-08-15 15:05:37 +03:00
07043dd2b2 Merge branch 'master' of https://github.com/GenZmeY/kf2-srv 2020-08-14 15:04:08 +03:00
c1429905d9 day fix 2020-08-14 15:02:41 +03:00
878f1a1ab0 fix: bash completion for kf2-srv-beta. 2020-08-14 14:59:43 +03:00
1e610e9b9f Update README.md 2020-08-13 06:01:21 +03:00
bc2551bfa0 Update README.md 2020-08-13 05:59:24 +03:00
ea649350fc Update TODO 2020-08-13 05:51:28 +03:00
d56d4c27e8 Merge branch 'master' of https://github.com/GenZmeY/kf2-srv 2020-08-13 05:46:14 +03:00
fb516a4266 Update README.md 2020-08-10 14:50:22 +03:00
49995868dd Update README.md
- add badges (some badges will start working when the repository becomes public)
- readme template
2020-08-10 14:49:09 +03:00
43 changed files with 336 additions and 156 deletions

View File

@ -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,24 @@
# kf2-srv
Killing Floor 2 server tool for RHEL/CentOS 8
*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)
[![tests (dev)](https://github.com/GenZmeY/kf2-srv/workflows/tests%20(dev)/badge.svg?branch=dev)](https://github.com/GenZmeY/kf2-srv/actions?query=workflow%3A%22tests+%28dev%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)
# Features
...
# Build
...
# Install
...
# Usage
...
# License
![GitHub](https://img.shields.io/github/license/genzmey/kf2-srv)
...

View File

@ -60,13 +60,11 @@ 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;' {} \;
@ -122,9 +120,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)
@ -148,9 +143,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)
@ -165,11 +157,9 @@ test: fake-systemd-build
$(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 +186,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 +197,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)

View File

@ -25,10 +25,7 @@ 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

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

@ -19,12 +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/>.
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" \
@ -36,6 +32,7 @@ function _kf2_srv_completions () # $1: BetaPostfix
function commands_list () # $1: Command group
{
test -d "$GrpDir/$1" && \
find "$GrpDir/$1" \
-mindepth 1 \
-maxdepth 1 \
@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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, 2020 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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -43,7 +43,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 +67,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 +79,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 +197,22 @@ elif [[ -d "$GroupPathname" ]]; then
shift
source "$CommandPathName"
if is_help "$1"; then
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
else
echo "No help page for this command."
fi
fi
elif is_usage "$1"; then
if function_exists "cmd_usage"; then

View File

@ -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

@ -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
@ -255,9 +255,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"

View File

@ -90,8 +90,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"

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, 2020 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

@ -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

@ -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

@ -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,7 +1,7 @@
%global steamuser steam
Name: kf2-srv
Version: 0.15.0
Version: 0.16.0
Release: 1%{dist}
Summary: Killing Floor 2 server
Group: Amusements/Games
@ -74,7 +74,6 @@ rm -rf $RPM_BUILD_ROOT
%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 +100,25 @@ if [[ $1 == 1 ]]; then # Install
fi
%changelog
* 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.

1
TODO
View File

@ -7,5 +7,4 @@
- ban history
- temporary ban
- generate unique password for server bot on install
- bash completion