Compare commits

...

27 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
ae1344286b feat: bash completion 2020-08-13 05:44:02 +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
8dc57a7cfa add test builddep 2020-08-10 14:27:46 +03:00
96cf5b8164 fix: build-release rpm path 2020-08-10 14:25:32 +03:00
dfa7fc5b23 builddep hotfix 2020-08-10 14:22:07 +03:00
e510c227f0 spec change 2020-08-10 14:16:53 +03:00
30d669ff06 Merge branch 'master' into dev 2020-08-10 14:13:57 +03:00
c19fdf0f6a feat: github-actions 2020-08-10 14:11:30 +03:00
5d2895871d feat: make test 2020-08-08 22:49:40 +03:00
ad30dfe034 more parallel actions 2020-08-08 08:28:44 +03:00
50 changed files with 590 additions and 140 deletions

52
.github/workflows/build-release.yml vendored Normal file
View File

@ -0,0 +1,52 @@
name: build release
on:
push:
tags:
- '[0-9]+.[0-9]+.[0-9]+-[0-9]+'
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
- name: build
uses: ./.github/workflows/docker
id: build
with:
target: 'all'
- name: create release
id: create_release
uses: actions/create-release@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: false
prerelease: false
- name: upload srpm
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: /home/runner/work/kf2-srv/kf2-srv/SRPMS/${{ steps.build.outputs.srpm_name }}
asset_name: ${{ steps.build.outputs.srpm_name }}
asset_content_type: application/gzip
- name: upload rpm
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: /home/runner/work/kf2-srv/kf2-srv/RPMS/noarch/${{ steps.build.outputs.rpm_name }}
asset_name: ${{ steps.build.outputs.rpm_name }}
asset_content_type: application/gzip

7
.github/workflows/docker/Dockerfile vendored Normal file
View File

@ -0,0 +1,7 @@
FROM centos:8
RUN dnf install -y rpmdevtools dnf-utils make
COPY * /
ENTRYPOINT ["/entrypoint.sh"]

22
.github/workflows/docker/action.yml vendored Normal file
View File

@ -0,0 +1,22 @@
name: 'make'
description: 'make <target>'
inputs:
target:
description: 'make <target>'
required: true
default: ''
outputs:
rpm_name:
description: 'rpm name'
srpm_name:
description: 'src.rpm name'
runs:
using: 'docker'
image: 'Dockerfile'
args:
- ${{ inputs.target }}

10
.github/workflows/docker/entrypoint.sh vendored Executable file
View File

@ -0,0 +1,10 @@
#!/bin/sh -l
make active && make builddep && make -j$(nproc) "$1"
RC=$?
echo "::set-output name=rpm_name::$(find /github/workspace/RPMS -type f -name '*.rpm' -printf '%f\n')"
echo "::set-output name=srpm_name::$(find /github/workspace/SRPMS -type f -name '*.src.rpm' -printf '%f\n')"
exit $RC

20
.github/workflows/tests-dev.yml vendored Normal file
View File

@ -0,0 +1,20 @@
name: tests (dev)
on:
push:
branches:
- dev
jobs:
tests:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
- name: run tests
uses: ./.github/workflows/docker
with:
target: 'test'

20
.github/workflows/tests-master.yml vendored Normal file
View File

@ -0,0 +1,20 @@
name: tests (master)
on:
push:
branches:
- master
jobs:
tests:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
- name: run tests
uses: ./.github/workflows/docker
with:
target: 'test'

View File

@ -34,16 +34,18 @@ SPEC := $(SPECSDIR)/$(NAME).spec
VERSION := $(shell grep -Fi 'Version:' $(SPEC) | awk '{ print $$2 }') VERSION := $(shell grep -Fi 'Version:' $(SPEC) | awk '{ print $$2 }')
SOURCETARBALL := $(SOURCESDIR)/$(NAME)-$(VERSION).tar.gz SOURCETARBALL := $(SOURCESDIR)/$(NAME)-$(VERSION).tar.gz
.PHONY: all prep rpm srpm activate active check-activate clean-tmp clean-pkg clean .PHONY: all prep rpm srpm activate active check-activate clean-tmp clean-pkg clean builddep test
all: check-activate prep all: check-activate prep
rpmbuild -ba $(SPEC) rpmbuild -ba $(SPEC)
$(MAKE) clean-tmp $(MAKE) clean-tmp
builddep:
dnf builddep -y $(SPEC)
prep: clean-tmp prep: clean-tmp
cd $(SOURCESDIR) && tar czf $(SOURCETARBALL) \ cd $(SOURCESDIR) && tar czf $(SOURCETARBALL) \
config \ config \
force-attr \
main \ main \
COPYING \ COPYING \
Makefile Makefile
@ -56,6 +58,10 @@ srpm: check-activate prep
rpmbuild -bs $(SPEC) rpmbuild -bs $(SPEC)
$(MAKE) clean-tmp $(MAKE) clean-tmp
test: check-activate prep
rpmbuild -bi $(SPEC)
$(MAKE) clean-tmp
active: activate active: activate
activate: activate:
@ -76,11 +82,11 @@ check-activate:
clean-tmp: clean-tmp:
rm -rf $(BUILDDIR) rm -rf $(BUILDDIR)
rm -rf $(BUILDROOTDIR) rm -rf $(BUILDROOTDIR)
rm -rf $(SOURCETARBALL) rm -f $(SOURCETARBALL)
clean-pkg: clean-pkg:
rm -rf $(RPMSDIR) rm -rf $(RPMSDIR)
rm -rf $(SRPMSDIR) rm -rf $(SRPMSDIR)
clean: clean-tmp clean-pkg clean: clean-tmp clean-pkg
rm -f $(SOURCESDIR)/$(NAME)-*.tar.gz

View File

@ -1,2 +1,24 @@
# kf2-srv # 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

@ -27,6 +27,7 @@ PREFIX = /usr/local
MAINLOGDIR = $(DESTDIR)/var/log/$(NAME) MAINLOGDIR = $(DESTDIR)/var/log/$(NAME)
BETALOGDIR = $(DESTDIR)/var/log/$(NAME)-beta BETALOGDIR = $(DESTDIR)/var/log/$(NAME)-beta
CONFDIR = $(DESTDIR)/etc/$(NAME) CONFDIR = $(DESTDIR)/etc/$(NAME)
BASHCOMPDIR = $(DESTDIR)/etc/bash_completion.d
INSTMAINDIR = $(CONFDIR)/instances INSTMAINDIR = $(CONFDIR)/instances
INSTBETADIR = $(CONFDIR)/instances-beta INSTBETADIR = $(CONFDIR)/instances-beta
MAPCYCLEDIR = $(CONFDIR)/mapcycles MAPCYCLEDIR = $(CONFDIR)/mapcycles
@ -59,13 +60,11 @@ build:
cp -r $(SOURCEDIR)/main $(RELEASEDIR) cp -r $(SOURCEDIR)/main $(RELEASEDIR)
cp -r $(SOURCEDIR)/config $(RELEASEDIR) cp -r $(SOURCEDIR)/config $(RELEASEDIR)
cp -r $(SOURCEDIR)/force-attr $(RELEASEDIR)
find $(RELEASEDIR) -type f -exec sed -i 's|:DEFINE_PREFIX:|$(PREFIX)|g;' {} \; find $(RELEASEDIR) -type f -exec sed -i 's|:DEFINE_PREFIX:|$(PREFIX)|g;' {} \;
fake-systemd-build: fake-systemd-build:
find $(SOURCEDIR)/main -type f -name '*.service' -exec cp -f {} $(RELEASEDIR)/{} \; 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 '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;' {} \;
@ -88,6 +87,7 @@ filesystem:
test -d '$(RSYSLOGDIR)' || install -m 755 -d '$(RSYSLOGDIR)' test -d '$(RSYSLOGDIR)' || install -m 755 -d '$(RSYSLOGDIR)'
test -d '$(SCRIPTGRPDIR)' || install -m 755 -d '$(SCRIPTGRPDIR)' test -d '$(SCRIPTGRPDIR)' || install -m 755 -d '$(SCRIPTGRPDIR)'
test -d '$(SCRIPTLIBDIR)' || install -m 755 -d '$(SCRIPTLIBDIR)' test -d '$(SCRIPTLIBDIR)' || install -m 755 -d '$(SCRIPTLIBDIR)'
test -d '$(BASHCOMPDIR)' || install -m 755 -d '$(BASHCOMPDIR)'
install: filesystem build install: filesystem build
install -m 755 $(RELEASEDIR)/main/$(NAME) $(BINDIR) install -m 755 $(RELEASEDIR)/main/$(NAME) $(BINDIR)
@ -120,15 +120,14 @@ install: filesystem build
install -m 644 $(RELEASEDIR)/main/logrotate/$(NAME) $(LOGROTATEDIR) install -m 644 $(RELEASEDIR)/main/logrotate/$(NAME) $(LOGROTATEDIR)
install -m 644 $(RELEASEDIR)/main/rsyslog/$(NAME).conf $(RSYSLOGDIR) 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 640 $(RELEASEDIR)/config/bot.conf $(CONFDIR)
install -m 644 $(RELEASEDIR)/config/instance.conf.template $(CONFDIR) install -m 644 $(RELEASEDIR)/config/instance.conf.template $(CONFDIR)
install -m 644 $(RELEASEDIR)/config/$(NAME).conf $(CONFDIR) install -m 644 $(RELEASEDIR)/config/$(NAME).conf $(CONFDIR)
install -m 644 $(SOURCEDIR)/COPYING $(LICENSEDIR) install -m 644 $(SOURCEDIR)/COPYING $(LICENSEDIR)
install -m 644 $(RELEASEDIR)/main/bash_completion/$(NAME) $(BASHCOMPDIR)
uninstall: uninstall:
rm -f $(BINDIR)/$(NAME) rm -f $(BINDIR)/$(NAME)
rm -f $(BINDIR)/$(NAME)-beta rm -f $(BINDIR)/$(NAME)-beta
@ -144,9 +143,6 @@ uninstall:
rm -f $(LOGROTATEDIR)/$(NAME) rm -f $(LOGROTATEDIR)/$(NAME)
rm -f $(RSYSLOGDIR)/$(NAME).conf rm -f $(RSYSLOGDIR)/$(NAME).conf
rm -f $(SBINDIR)/$(NAME)-force-attr
rm -f $(UNITDIR)/$(NAME)-force-attr.service
rm -rf $(LICENSEDIR) rm -rf $(LICENSEDIR)
rm -rf $(KF2MAINDIR) rm -rf $(KF2MAINDIR)
rm -rf $(KF2BETADIR) rm -rf $(KF2BETADIR)
@ -161,11 +157,9 @@ test: fake-systemd-build
$(SYSTEMDCHECK) $(RELEASEDIR)/main/systemd/$(NAME)-beta-update.timer $(SYSTEMDCHECK) $(RELEASEDIR)/main/systemd/$(NAME)-beta-update.timer
$(SYSTEMDCHECK) $(RELEASEDIR)/main/systemd/$(NAME)-update.service $(SYSTEMDCHECK) $(RELEASEDIR)/main/systemd/$(NAME)-update.service
$(SYSTEMDCHECK) $(RELEASEDIR)/main/systemd/$(NAME)-update.timer $(SYSTEMDCHECK) $(RELEASEDIR)/main/systemd/$(NAME)-update.timer
$(SYSTEMDCHECK) $(RELEASEDIR)/force-attr/systemd/$(NAME)-force-attr.service
$(BASHCHECK) $(RELEASEDIR)/main/$(NAME) $(BASHCHECK) $(RELEASEDIR)/main/$(NAME)
$(BASHCHECK) $(RELEASEDIR)/main/$(NAME)-beta $(BASHCHECK) $(RELEASEDIR)/main/$(NAME)-beta
$(BASHCHECK) $(RELEASEDIR)/force-attr/$(NAME)-force-attr
$(BASHCHECK) $(RELEASEDIR)/main/cmdgrp/ban/list $(BASHCHECK) $(RELEASEDIR)/main/cmdgrp/ban/list
$(BASHCHECK) $(RELEASEDIR)/main/cmdgrp/ban/add $(BASHCHECK) $(RELEASEDIR)/main/cmdgrp/ban/add
@ -192,6 +186,8 @@ test: fake-systemd-build
$(BASHCHECK) $(RELEASEDIR)/main/cmdgrp/workshop/add $(BASHCHECK) $(RELEASEDIR)/main/cmdgrp/workshop/add
$(BASHCHECK) $(RELEASEDIR)/main/cmdgrp/workshop/delete $(BASHCHECK) $(RELEASEDIR)/main/cmdgrp/workshop/delete
$(BASHCHECK) $(RELEASEDIR)/main/cmdgrp/workshop/sync $(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/ban.lib
$(BASHCHECK) $(RELEASEDIR)/main/lib/game.lib $(BASHCHECK) $(RELEASEDIR)/main/lib/game.lib
@ -201,6 +197,9 @@ test: fake-systemd-build
$(BASHCHECK) $(RELEASEDIR)/main/lib/playerids.lib $(BASHCHECK) $(RELEASEDIR)/main/lib/playerids.lib
$(BASHCHECK) $(RELEASEDIR)/main/lib/webadmin.lib $(BASHCHECK) $(RELEASEDIR)/main/lib/webadmin.lib
$(BASHCHECK) $(RELEASEDIR)/main/lib/workshop.lib $(BASHCHECK) $(RELEASEDIR)/main/lib/workshop.lib
$(BASHCHECK) $(RELEASEDIR)/main/lib/log.lib
$(BASHCHECK) $(RELEASEDIR)/main/bash_completion/$(NAME)
clean: clean:
rm -rf $(RELEASEDIR) rm -rf $(RELEASEDIR)

View File

@ -25,10 +25,7 @@ MutNames['KFMutator.KFMutator_MaxPlayersV2']='MaxPlayers'
MutNames['ClassicScoreboard.ClassicSCMut']='ClassicSC' MutNames['ClassicScoreboard.ClassicSCMut']='ClassicSC'
MutNames['ZedCustom.ZedCustomMut']='ZedVarients' MutNames['ZedCustom.ZedCustomMut']='ZedVarients'
# These parameters are used when creating new instances. # These parameters are used when creating new instances and in the command "kf2-srv game fix-permissions"
# 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. IniPermissions=664
ForceIniPermissions=664 IniGroup=steam
ForceLogPermissions=644
ForceIniGroup=steam
ForceLogGroup=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

@ -0,0 +1,108 @@
#!/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 _kf2_srv_completions ()
{
function groups_list ()
{
find "$GrpDir" \
-mindepth 1 \
-maxdepth 1 \
-type d \
-printf "%f\n"
}
function commands_list () # $1: Command group
{
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 \
-printf "%f\n"
}
function command_usage_processing () # $1: Command group, $2: Command, $3: Current argument position
{
local CmdParams=$("$KF2Srv" "$1" "$2" "usage")
local LocalPosition; ((LocalPosition = $3 - 2))
local ParamIndex=0
local LastParam
for Param in $CmdParams
do
((ParamIndex++))
if [[ "$ParamIndex" -eq "$LocalPosition" ]]; then
if echo "$Param" | grep -Fq '<instance>'; then
COMPREPLY=($(compgen -W "$(instances_list)" -- "${CURARG}"))
fi
return 0
fi
LastParam="$Param"
done
if echo "$LastParam" | grep -Fq '<instance>...'; then
COMPREPLY=($(compgen -W "$(instances_list)" -- "${CURARG}"))
fi
}
COMPREPLY=()
CURARG="${COMP_WORDS[COMP_CWORD]}"
case "${COMP_CWORD}" in
1 ) COMPREPLY=($(compgen -W "$(groups_list)" -- "${CURARG}")) ;;
2 ) COMPREPLY=($(compgen -W "$(commands_list ${COMP_WORDS[1]})" -- "${CURARG}")) ;;
* ) command_usage_processing "${COMP_WORDS[1]}" "${COMP_WORDS[2]}" "${COMP_CWORD}";;
esac
return 0
}
function _kf2_srv_main_completions ()
{
local GrpDir=":DEFINE_PREFIX:/share/kf2-srv/cmdgrp"
local InsDir="/etc/kf2-srv/instances"
local KF2Srv=":DEFINE_PREFIX:/bin/kf2-srv"
_kf2_srv_completions
}
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 () 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 function cmd_main () # $*: ban list

View File

@ -35,7 +35,8 @@ function cmd_info ()
function cmd_help () 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 function cmd_main () # $*: ban list

View File

@ -33,10 +33,10 @@ function cmd_info ()
echo "Show the list of blocked users" echo "Show the list of blocked users"
} }
function cmd_help () #function cmd_help ()
{ #{
echo "TODO: description" # echo ""
} #}
function cmd_main () function cmd_main ()
{ {

View File

@ -33,10 +33,10 @@ function cmd_info ()
echo "Sync blocklist for all servers" echo "Sync blocklist for all servers"
} }
function cmd_help () #function cmd_help ()
{ #{
echo "TODO: description" # echo ""
} #}
function cmd_main () function cmd_main ()
{ {

View File

@ -35,7 +35,10 @@ function cmd_info ()
function cmd_help () 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 () function cmd_main ()

View File

@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help () function cmd_help ()
{ {
echo "TODO: description" echo "Run the server binary directly, without systemd or anything else."
} }
function cmd_main () function cmd_main ()

View File

@ -35,7 +35,8 @@ function cmd_info ()
function cmd_help () 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 () function cmd_main ()

View File

@ -35,7 +35,8 @@ function cmd_info ()
function cmd_help () 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 () function cmd_main ()

View File

@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help () function cmd_help ()
{ {
echo "TODO: description" echo "Name(s) must not contain spaces."
} }
function cmd_main () function cmd_main ()

View File

@ -30,12 +30,12 @@ function cmd_usage ()
function cmd_info () function cmd_info ()
{ {
echo "Send message to specified server instances" echo "Send message to specified server instance(s)"
} }
function cmd_help () function cmd_help ()
{ {
echo "TODO: description" echo "If instance is not specified, sends a message to all running servers."
} }
function cmd_main () function cmd_main ()

View File

@ -19,8 +19,8 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
cmd_need_superuser () { false ;} cmd_need_superuser () { true ;}
cmd_need_steamuser () { true ;} cmd_need_steamuser () { false ;}
cmd_need_installed_server () { false ;} cmd_need_installed_server () { false ;}
function cmd_usage () function cmd_usage ()
@ -30,12 +30,12 @@ function cmd_usage ()
function cmd_info () function cmd_info ()
{ {
echo "Delete the specified server instances" echo "Delete the specified server instance(s)"
} }
function cmd_help () function cmd_help ()
{ {
echo "TODO: description" echo "If instance is not specified, deletes all server instances."
} }
function cmd_main () function cmd_main ()

View File

@ -30,12 +30,12 @@ function cmd_usage ()
function cmd_info () function cmd_info ()
{ {
echo "Disable specified server instance(s)" echo "Disable autostart for specified server instance(s)"
} }
function cmd_help () function cmd_help ()
{ {
echo "TODO: description" echo "If instance is not specified, disable autostart for all instances."
} }
function cmd_main () function cmd_main ()

View File

@ -30,12 +30,12 @@ function cmd_usage ()
function cmd_info () function cmd_info ()
{ {
echo "Enable specified server instance(s)" echo "Enable autostart for specified server instance(s)"
} }
function cmd_help () function cmd_help ()
{ {
echo "TODO: description" echo "If instance is not specified, disable autostart for all instances."
} }
function cmd_main () function cmd_main ()

View File

@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help () function cmd_help ()
{ {
echo "TODO: description" echo "If instance is not specified, displays the status of all instances."
} }
function cmd_main () function cmd_main ()

View File

@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help () function cmd_help ()
{ {
echo "TODO: description" echo "If instance is not specified, restarts all enabled instances."
} }
function cmd_main () function cmd_main ()

View File

@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help () function cmd_help ()
{ {
echo "TODO: description" echo "If instance is not specified, starts all enabled instances."
} }
function cmd_main () function cmd_main ()

View File

@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help () function cmd_help ()
{ {
echo "TODO: description" echo "If instance is not specified, stops all instances."
} }
function cmd_main () function cmd_main ()

View File

@ -19,25 +19,29 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>. # 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" function cmd_info ()
DirLogBeta="/var/log/kf2-srv-beta" {
DirInstances="/etc/kf2-srv/instances" echo "Print in stdout full log of specified server instance(s)"
DirInstancesBeta="/etc/kf2-srv/instances-beta" }
/usr/bin/inotifywait -qmr -e create -e moved_to --format %w%f \ function cmd_help ()
"$DirLog" "$DirLogBeta" "$DirInstances" "$DirInstancesBeta" | \ {
while read File echo "If instance is not specified, prints the log of all instances."
do }
if echo "$File" | grep -Piq "\.log$"; then
chmod "$ForceLogPermissions" "$File" function cmd_main ()
chown :"$ForceLogGroup" "$File" {
elif echo "$File" | grep -Piq "\.ini$"; then include "$LibDir/log.lib"
chmod "$ForceIniPermissions" "$File"
chown :"$ForceIniGroup" "$File" log_cat "$@"
fi }
done

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 () function cmd_help ()
{ {
echo "TODO: description" echo "If instance is not specified, load map rotation for all instances."
} }
function cmd_main () # $*: Instance[s] function cmd_main () # $*: Instance[s]

View File

@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help () function cmd_help ()
{ {
echo "TODO: description" echo "If instance is not specified, save map rotation for all instances."
} }
function cmd_main () # $*: Instance[s] function cmd_main () # $*: Instance[s]

View File

@ -35,7 +35,9 @@ function cmd_info ()
function cmd_help () 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 () function cmd_main ()

View File

@ -35,7 +35,9 @@ function cmd_info ()
function cmd_help () 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 () function cmd_main ()

View File

@ -25,7 +25,7 @@ cmd_need_installed_server () { false ;}
function cmd_usage () function cmd_usage ()
{ {
echo "[<workshop_id>...]" echo "<workshop_id>..."
} }
function cmd_info () function cmd_info ()
@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help () 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 () function cmd_main ()

View File

@ -35,7 +35,7 @@ function cmd_info ()
function cmd_help () 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 () function cmd_main ()

View File

@ -33,10 +33,10 @@ function cmd_info ()
echo "Show the list of steam workshop resources" echo "Show the list of steam workshop resources"
} }
function cmd_help () #function cmd_help ()
{ #{
echo "TODO: description" # echo ""
} #}
function cmd_main () function cmd_main ()
{ {

View File

@ -30,12 +30,13 @@ function cmd_usage ()
function cmd_info () function cmd_info ()
{ {
echo "Sync steamorkshop resources between all server instances" echo "Sync steam workshop resources between all server instances"
} }
function cmd_help () 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 () function cmd_main ()

View File

@ -43,7 +43,7 @@ readonly InstanceConfigTemplate="/etc/kf2-srv/instance.conf.template"
readonly AppServerNum="232130" readonly AppServerNum="232130"
readonly AppClientNum="232090" readonly AppClientNum="232090"
readonly StrangeConstUID="17825793" readonly SteamConstB='17825793'
readonly ServerBotLogin="srvbot" readonly ServerBotLogin="srvbot"
declare -a DiffNames declare -a DiffNames
@ -67,7 +67,7 @@ function run_as_steamuser () # $@: command
shift 3; cmd_main "$@" shift 3; cmd_main "$@"
elif [[ -n $(groups "$(whoami)" | grep -Fo 'wheel') ]] || [[ "$(whoami)" == "root" ]]; then elif [[ -n $(groups "$(whoami)" | grep -Fo 'wheel') ]] || [[ "$(whoami)" == "root" ]]; then
export INC_LIBS="" export INC_LIBS=""
sudo -u "$SteamUser" "$@" sudo -iu "$SteamUser" "$@"
else else
echo "You must be a $SteamUser, root or sudo-user to run this command." echo "You must be a $SteamUser, root or sudo-user to run this command."
fi fi
@ -79,7 +79,7 @@ function run_as_root () # $@: command
shift 3; cmd_main "$@" shift 3; cmd_main "$@"
elif [[ -n $(groups "$(whoami)" | grep -Fo 'wheel') ]]; then elif [[ -n $(groups "$(whoami)" | grep -Fo 'wheel') ]]; then
export INC_LIBS="" export INC_LIBS=""
sudo "$@" sudo -i "$@"
else else
echo "You must be root or sudo-user to run this command." echo "You must be root or sudo-user to run this command."
fi fi
@ -90,6 +90,11 @@ function is_help () # $1: Arg
echo "$1" | grep -Piqo '^(-h|--help|help)$' echo "$1" | grep -Piqo '^(-h|--help|help)$'
} }
function is_usage () # $1: Arg
{
echo "$1" | grep -Piqo '^usage$'
}
function is_version () # $1: Arg function is_version () # $1: Arg
{ {
echo "$1" | grep -Piqo '^(-v|--version|version)$' echo "$1" | grep -Piqo '^(-v|--version|version)$'
@ -192,10 +197,28 @@ elif [[ -d "$GroupPathname" ]]; then
shift shift
source "$CommandPathName" source "$CommandPathName"
if is_help "$1"; then if is_help "$1"; then
if function_exists "cmd_help"; then if ! function_exists "cmd_usage" \
cmd_help && ! function_exists "cmd_info" \
else && ! function_exists "cmd_help"; then
echo "No help page for this command." 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
cmd_usage
else
echo "No usage information for this command."
fi fi
else else
if function_exists "cmd_main"; then if function_exists "cmd_main"; then

View File

@ -108,7 +108,7 @@ function ban_ID3 () # $1: ID3
do do
( (
local Config="$InstanceConfigDir/$Instance/LinuxServer-KFGame.ini" 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") local Service=$(service_name "$Instance")
if ! multini -gq "$Config" "Engine.AccessControl" "BannedIDs" "$BanStr"; then if ! multini -gq "$Config" "Engine.AccessControl" "BannedIDs" "$BanStr"; then
echo "Add ban $ID3 to $Instance" echo "Add ban $ID3 to $Instance"
@ -137,7 +137,7 @@ function unban_ID3 () # $1: ID3
do do
( (
local Config="$InstanceConfigDir/$Instance/LinuxServer-KFGame.ini" 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") local Service=$(service_name "$Instance")
if systemctl -q is-active $Service ; then if systemctl -q is-active $Service ; then
local PlainID=0 local PlainID=0

View File

@ -39,7 +39,7 @@ function fix_ini_permissions () # $1: Dir
find "$1" \( -type l -o -type f \) -name '*.ini' | \ find "$1" \( -type l -o -type f \) -name '*.ini' | \
xargs --max-procs=$(nproc) -I {} \ xargs --max-procs=$(nproc) -I {} \
sh -c "chmod $ForceIniPermissions {}; chown $SteamUser:$ForceIniGroup {}" sh -c "chmod $IniPermissions {}; chown $SteamUser:$IniGroup {}"
} }
function game_run () # $@: Game args function game_run () # $@: Game args
@ -255,9 +255,9 @@ function make_default_instance () # $1: Dir
local InstanceDir="$InstanceConfigDir/default" local InstanceDir="$InstanceConfigDir/default"
install -d -g "$SteamUser" -o "$ForceIniGroup" -m 775 "$InstanceDir" install -d -g "$SteamUser" -o "$IniGroup" -m 775 "$InstanceDir"
install -d -g "$SteamUser" -o "$ForceIniGroup" -m 775 "$InstanceDir/LinuxServer" install -d -g "$SteamUser" -o "$IniGroup" -m 775 "$InstanceDir/LinuxServer"
install -g "$SteamUser" -o "$ForceIniGroup" -m $ForceIniPermissions "$InstanceConfigTemplate" "$InstanceDir/instance.conf" install -g "$SteamUser" -o "$IniGroup" -m $IniPermissions "$InstanceConfigTemplate" "$InstanceDir/instance.conf"
ln -s "$DefaultConfigDir/KFAI.ini" "$InstanceDir/KFAI.ini" ln -s "$DefaultConfigDir/KFAI.ini" "$InstanceDir/KFAI.ini"
ln -s "$DefaultConfigDir/KFWeb.ini" "$InstanceDir/KFWeb.ini" ln -s "$DefaultConfigDir/KFWeb.ini" "$InstanceDir/KFWeb.ini"
ln -s "$DefaultConfigDir/KFWebAdmin.ini" "$InstanceDir/KFWebAdmin.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 InstanceDir="$InstanceConfigDir/$Instance"
local DirMode="-d -g $SteamUser -o $ForceIniGroup -m 775" local DirMode="-d -g $SteamUser -o $IniGroup -m 775"
local FileMode=" -g $SteamUser -o $ForceIniGroup -m $ForceIniPermissions" local FileMode=" -g $SteamUser -o $IniGroup -m $IniPermissions"
install $DirMode "$InstanceDir" install $DirMode "$InstanceDir"
install $DirMode "$InstanceDir/LinuxServer" install $DirMode "$InstanceDir/LinuxServer"
@ -253,8 +253,11 @@ function instance_list () # $*: [InstanceName[s]]
fi fi
for Instance in $InstanceList for Instance in $InstanceList
do do
(
instance_status "$Instance" instance_status "$Instance"
) &
done done
wait
} | sort -t : -k 4 } | sort -t : -k 4
} | column -t -s : } | column -t -s :
} }

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 # You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
# conversion algorithm taken from here: # WARNING:
# https://github.com/noobient/killinuxfloor/blob/master/share/killinuxfloor # Conversion works correctly for positive A/B for EGS,
# thank bviktor for that :) # but still gives incorrect results if there are negative ones
function steamID3_to_steamID64 () # $1: ID3
function steamID3_to_steamID64 () # $1: ID3 (A), $2: B
{ {
# steamID64 = "7656" + (steamID3 + 1197960265728) local ID3="$1"
ID64=$1 if [[ -z $2 ]]; then
((ID64+=1197960265728)) local B="$SteamConstB"
ID64="7656${ID64}" else
echo "$ID64" 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 local ID64="$1"
ID3=${1:4} if [[ -z $2 ]]; then
((ID3-=1197960265728)) local B="$SteamConstB"
echo "$ID3" else
local B="$2"
fi
# SteamID3=SteamID64-B*2^32
echo $(($ID64-$B*(2**32)))
} }
function any_to_ID3 () # $1: ID3/ID64/Url function any_to_ID3 () # $1: ID3/ID64/Url
{ {
if echo "$1" | grep -qP '^http.+'; then if echo "$1" | grep -qP '^http.+'; then
local Xml=$(mktemp) local ID64=$(curl -ss "$1/?xml=1" | xmllint --xpath 'string(//steamID64/text())' -)
curl -ss "$1/?xml=1" > "$Xml"
local ID64=$(xmllint --xpath 'string(//steamID64/text())' "$Xml")
local ID3=$(steamID64_to_steamID3 "$ID64") local ID3=$(steamID64_to_steamID3 "$ID64")
rm -f "$Xml" elif [[ $(echo "$1" | wc -m) -eq 18 ]] && echo "$1" | grep -qP '^7656[0-9]+' ; then
elif [[ $(echo "$1" | wc -m) -eq 18 ]] && echo "$1" | grep -qP '^76561[0-9]+' ; then
local ID3=$(steamID64_to_steamID3 "$1") local ID3=$(steamID64_to_steamID3 "$1")
else else
local ID3="$1" local ID3="$1"

View File

@ -59,6 +59,7 @@ function workshop_list ()
{ {
for WorkshopID in $(workshop_list_ids) for WorkshopID in $(workshop_list_ids)
do do
(
local Cache="$CacheDir/$WorkshopID" local Cache="$CacheDir/$WorkshopID"
local Downl="$DownloadDir/content/$AppClientNum/$WorkshopID" local Downl="$DownloadDir/content/$AppClientNum/$WorkshopID"
local Url="https://steamcommunity.com/sharedfiles/filedetails/?id=$WorkshopID" local Url="https://steamcommunity.com/sharedfiles/filedetails/?id=$WorkshopID"
@ -69,7 +70,9 @@ function workshop_list ()
local WsSize="-"; WsName="-" local WsSize="-"; WsName="-"
fi fi
echo "$WorkshopID $WsName $WsSize $Url" echo "$WorkshopID $WsName $WsSize $Url"
) &
done done
wait
} | sort -k 2 } | sort -k 2
} | column -t } | column -t
} }

View File

@ -2,9 +2,12 @@ global(parser.permitSlashInProgramName="on")
template(name="DynFile" type="string" string="/var/log/%programname%.log") 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 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 stop
} }

View File

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

View File

@ -1,7 +1,7 @@
%global steamuser steam %global steamuser steam
Name: kf2-srv Name: kf2-srv
Version: 0.14.0 Version: 0.16.0
Release: 1%{dist} Release: 1%{dist}
Summary: Killing Floor 2 server Summary: Killing Floor 2 server
Group: Amusements/Games Group: Amusements/Games
@ -10,10 +10,10 @@ BuildArch: noarch
Source0: %{name}-%{version}.tar.gz Source0: %{name}-%{version}.tar.gz
# test deps
BuildRequires: systemd
BuildRequires: systemd-rpm-macros BuildRequires: systemd-rpm-macros
BuildRequires: libxml2
#BuildRequires(check): xmllint
#BuildRequires(check): systemd >= 219
Requires: systemd >= 219 Requires: systemd >= 219
Requires: steamcmd >= 2018.01.05-5 Requires: steamcmd >= 2018.01.05-5
@ -31,6 +31,7 @@ Requires: multini >= 0.2.3
Requires: rsyslog >= 8.25.0 Requires: rsyslog >= 8.25.0
Requires: logrotate Requires: logrotate
Requires: inotify-tools Requires: inotify-tools
Requires: bash-completion >= 2.7
Provides: %{name} Provides: %{name}
@ -73,13 +74,13 @@ rm -rf $RPM_BUILD_ROOT
%attr(0644,root,root) %config(noreplace) %{_prefix}/lib/firewalld/services/%{name}.xml %attr(0644,root,root) %config(noreplace) %{_prefix}/lib/firewalld/services/%{name}.xml
%attr(0755,root,root) %{_bindir}/%{name} %attr(0755,root,root) %{_bindir}/%{name}
%attr(0755,root,root) %{_bindir}/%{name}-beta %attr(0755,root,root) %{_bindir}/%{name}-beta
%attr(0755,root,root) %{_sbindir}/%{name}-force-attr
%attr(0644,root,root) %{_unitdir}/* %attr(0644,root,root) %{_unitdir}/*
%attr(0644,root,root) %doc %{_datadir}/licenses/%{name}/* %attr(0644,root,root) %doc %{_datadir}/licenses/%{name}/*
%attr(0644,root,root) %{_sysconfdir}/rsyslog.d/%{name}.conf %attr(0644,root,root) %{_sysconfdir}/rsyslog.d/%{name}.conf
%attr(0644,root,root) %{_sysconfdir}/logrotate.d/%{name} %attr(0644,root,root) %{_sysconfdir}/logrotate.d/%{name}
%attr(0644,root,root) %{_datadir}/%{name}/cmdgrp/*/* %attr(0644,root,root) %{_datadir}/%{name}/cmdgrp/*/*
%attr(0644,root,root) %{_datadir}/%{name}/lib/* %attr(0644,root,root) %{_datadir}/%{name}/lib/*
%attr(0644,root,root) %{_sysconfdir}/bash_completion.d/%{name}
%preun %preun
if [[ $1 -eq 0 ]] ; then # Uninstall if [[ $1 -eq 0 ]] ; then # Uninstall
@ -99,6 +100,34 @@ if [[ $1 == 1 ]]; then # Install
fi fi
%changelog %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.
* Mon Aug 10 2020 GenZmeY <genzmey@gmail.com> - 0.14.1-2
- github-actions build.
* Sat Aug 8 2020 GenZmeY <genzmey@gmail.com> - 0.14.1-1
- parallel actions for instance list.
* Sat Aug 8 2020 GenZmeY <genzmey@gmail.com> - 0.14.0-1 * Sat Aug 8 2020 GenZmeY <genzmey@gmail.com> - 0.14.0-1
- new usage (groups/commands); - new usage (groups/commands);
- new code structure; - new code structure;

1
TODO
View File

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