diff --git a/SOURCES/kf2-srv b/SOURCES/kf2-srv
index 70b4e21..14f29c6 100755
--- a/SOURCES/kf2-srv
+++ b/SOURCES/kf2-srv
@@ -18,24 +18,14 @@
# along with this program. If not, see .
source /etc/steamcmd/steamcmd.conf
-source /etc/kf2-srv/kf2-srv.conf
ScriptFullname=$(readlink -e "$0")
ScriptName=$(echo "$ScriptFullname" | awk -F '/' '{print $NF;}')
-ScriptVersion="0.6.0"
+ScriptVersion="0.7.0"
AppServerNum="232130"
AppClientNum="232090"
StrangeConstUID="17825793"
-InstallDir="/usr/games/kf2-srv"
-ActiveBranch="$InstallDir/activebranch.txt"
-AppBin="$InstallDir/Binaries/Win64/KFGameSteamServer.bin.x86_64"
-DefaultConfigDir="$InstallDir/KFGame/Config"
-DownloadMapsDir="$InstallDir/Binaries/Win64/steamapps/workshop/content/$AppClientNum"
-CacheMapsDir="$InstallDir/KFGame/Cache"
-InstanceConfigDir="/etc/kf2-srv/instances"
-InstanceConfigLnk="$DefaultConfigDir/instances"
-MainConfigTemplate="/etc/kf2-srv/main.conf.template"
DiffArray=('Normal' 'Hard' 'Suicide' 'Hell')
WaveArray=('4' '7' '10')
@@ -52,7 +42,8 @@ function show_help ()
echo "$ScriptName v$ScriptVersion"
echo "Централизование управление серверами Killing Floor 2"
echo "Usage:"
- echo "$ScriptName OPTIONS"
+ echo "${ScriptName} OPTIONS stable branch"
+ echo "${ScriptName}-beta OPTIONS beta branch"
echo ""
echo "Mandatory arguments to long options are mandatory for short options too."
echo " -n, --new INSTANCE создает новый ЭКЗЕМПЛЯР сервера"
@@ -113,8 +104,12 @@ function show_help ()
# Use this function with non-root user only!!!
function run_as_root () # $*: Args
{
+ if [[ -n "$BetaPostfix" ]]; then
+ BetaPostfix="beta"
+ fi
+
if [[ -n $(groups "$USER" | grep -Fo 'wheel') ]]; then
- sudo "$ScriptFullname" $*
+ sudo "$ScriptFullname" $BetaPostfix $*
else
echo "You must be root or sudo-user to run this command."
return 1
@@ -126,7 +121,7 @@ function service_name () # $*: Instance[s]
local Services=""
for Instance in $*
do
- Services+=" kf2-srv@$Instance.service"
+ Services+=" kf2-srv$BetaPostfix@$Instance.service"
done
echo "$Services"
}
@@ -159,7 +154,7 @@ function instance_exists () # $1: Instance
function server_exists ()
{
- if [[ -n $(ls "$InstallDir") ]]; then
+ if [[ -x "$AppBin" ]]; then
return 0
else
return 1
@@ -168,8 +163,21 @@ function server_exists ()
function updates_aviable ()
{
- # TODO: implementation
- return 0
+ # TODO: check
+ if [[ -n "$BetaPostfix" ]]; then
+ local BetaArg="-beta preview"
+ fi
+ if steamcmd +login anonymous \
+ +force_install_dir $InstallDir \
+ +app_info_update 1 \
+ +app_status $AppServerNum $BetaArg \
+ +quit | \
+ grep 'install state:' | \
+ grep -qiF 'Update Required'; then
+ return 0
+ else
+ return 1
+ fi
}
function new_instance () # $*: InstanceName[s]
@@ -230,7 +238,7 @@ function new_instance () # $*: InstanceName[s]
sed -i -r --follow-symlinks "s/-queryport=[0-9]+/-queryport=$MaxQueryPort/g" "$InstanceDir/main.conf"
sed -i -r --follow-symlinks "s/-webadminport=[0-9]+/-webadminport=$MaxWebAdminPort/g" "$InstanceDir/main.conf"
- echo "Instance $Instance created. See /etc/$ScriptName/instances/$Instance for edit configuration"
+ echo "Instance $Instance created. See /etc/$ScriptName/instances$BetaPostfix/$Instance for edit configuration"
done
}
@@ -330,12 +338,11 @@ function show_status () # $*: [InstanceName[s]]
function validate ()
{
- if [[ -n "$BranchName" ]]; then
- local BetaArg="-beta $BranchName"
+ if [[ -n "$BetaPostfix" ]]; then
+ local BetaArg="-beta preview"
fi
stop_instance
steamcmd +login $SteamLogin +force_install_dir $InstallDir +app_update $AppServerNum $BetaArg validate +exit
- echo "$BranchName" > "$ActiveBranch"
start_instance
}
@@ -392,13 +399,43 @@ function fix_steamclient_so ()
ln -s "/usr/share/steamcmd/linux64/steamclient.so" "$InstallDir/Binaries/Win64/lib64/steamclient.so"
}
+function create_map_dirs ()
+{
+ # space saving
+ local InstallDirOrig="/usr/games/kf2-srv"
+ local InstallDirBeta="/usr/games/kf2-srv-beta"
+ local DownloadMapsDirOrig="$InstallDirOrig/Binaries/Win64/steamapps/workshop/content/$AppClientNum"
+ local CacheMapsDirOrig="$InstallDirOrig/KFGame/Cache"
+ local DownloadMapsDirBeta="$InstallDirBeta/Binaries/Win64/steamapps/workshop/content/$AppClientNum"
+ local CacheMapsDirBeta="$InstallDirBeta/KFGame/Cache"
+
+ if [[ -z "$BetaPostfix" ]]; then # Orig
+ sudo -u "$SteamUser" install -d -m 775 "$DownloadMapsDirOrig"
+ if [[ -d "$CacheMapsDirBeta" ]]; then
+ ln -s "$CacheMapsDirBeta" "$CacheMapsDirOrig"
+ rm -rf "$DownloadMapsDirOrig"
+ ln -s "$DownloadMapsDirBeta" "$DownloadMapsDirOrig"
+ else
+ sudo -u "$SteamUser" install -d -m 775 "$CacheMapsDirOrig"
+ fi
+ else # Beta
+ sudo -u "$SteamUser" install -d -m 775 "$DownloadMapsDirBeta"
+ if [[ -d "$CacheMapsDirOrig" ]]; then
+ ln -s "$CacheMapsDirOrig" "$CacheMapsDirBeta"
+ rm -rf "$DownloadMapsDirBeta"
+ ln -s "$DownloadMapsDirOrig" "$DownloadMapsDirBeta"
+ else
+ sudo -u "$SteamUser" install -d -m 775 "$CacheMapsDirBeta"
+ fi
+ fi
+}
+
function update_kf2 ()
{
- if [[ -n "$BranchName" ]]; then
- local BetaArg="-beta $BranchName"
+ if [[ -n "$BetaPostfix" ]]; then
+ local BetaArg="-beta preview"
fi
if ! server_exists; then # First install
- echo "$BranchName" > "$ActiveBranch"
if ! steamcmd +login $SteamLogin +force_install_dir $InstallDir +app_update $AppServerNum $BetaArg validate +exit; then
echo "Errors during installation - exit"
exit 1
@@ -419,22 +456,18 @@ function update_kf2 ()
break
fi
sleep 2
+ # TODO: KFWeb.ini > webadmin=true
done
killall -KILL KFGameSteamServer.bin.x86_64
- set_ini_permissions "$DefaultConfigDir"
- install -d -g "$SteamUser" -o "$SteamUser" -m 775 "$CacheMapsDir"
+ create_map_dirs
fix_steamclient_so
ln -s "$InstanceConfigDir" "$InstanceConfigLnk"
make_default_instance
echo "KF2 succesfully installed"
elif updates_aviable; then # Update
- if [[ "$BranchName" == $(cat "$ActiveBranch") ]]; then
- stop_instance
- steamcmd +login $SteamLogin +force_install_dir $InstallDir +app_update $AppServerNum $BetaArg +exit
- start_instance
- else
- validate
- fi
+ stop_instance
+ steamcmd +login $SteamLogin +force_install_dir $InstallDir +app_update $AppServerNum $BetaArg +exit
+ start_instance
fi
}
@@ -687,7 +720,7 @@ function map_sync ()
do
if instance_exists "$Instance"; then
local Config="$InstanceConfigDir/$Instance/LinuxServer-KFGame.ini"
- for MapFile in $(find "$CacheMapsDir" -type f -name '*.kfm' -printf "%f\n")
+ for MapFile in $(find -L "$CacheMapsDir" -type f -name '*.kfm' -printf "%f\n")
do
MapName=$(echo "$MapFile" | sed -r 's|.kfm$||g')
if [[ ! -f "$Config" ]]; then
@@ -883,6 +916,19 @@ function ban_sync ()
done
}
+if [[ "$1" == "beta" ]]; then
+ BetaPostfix="-beta"; shift
+fi
+
+InstallDir="/usr/games/kf2-srv$BetaPostfix"
+AppBin="$InstallDir/Binaries/Win64/KFGameSteamServer.bin.x86_64"
+DefaultConfigDir="$InstallDir/KFGame/Config"
+DownloadMapsDir="$InstallDir/Binaries/Win64/steamapps/workshop/content/$AppClientNum"
+CacheMapsDir="$InstallDir/KFGame/Cache"
+InstanceConfigDir="/etc/kf2-srv/instances$BetaPostfix"
+InstanceConfigLnk="$DefaultConfigDir/instances"
+MainConfigTemplate="/etc/kf2-srv/main.conf.template"
+
if [[ $# -eq 0 ]]; then show_help; exit 0; fi
case $1 in
-h|--help ) show_help; ;;
diff --git a/SOURCES/kf2-srv-beta b/SOURCES/kf2-srv-beta
new file mode 100644
index 0000000..9410b0b
--- /dev/null
+++ b/SOURCES/kf2-srv-beta
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+/usr/bin/kf2-srv beta $*
diff --git a/SOURCES/kf2-srv-beta-update.service b/SOURCES/kf2-srv-beta-update.service
new file mode 100644
index 0000000..bd615aa
--- /dev/null
+++ b/SOURCES/kf2-srv-beta-update.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Check and Update Killing Floor 2 server
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/kf2-srv-beta --update
+
+PrivateTmp=true
+PrivateDevices=true
+ProtectHome=false
+ProtectSystem=false
+
+[Install]
+WantedBy=multi-user.target
diff --git a/SOURCES/kf2-srv-beta-update.timer b/SOURCES/kf2-srv-beta-update.timer
new file mode 100644
index 0000000..db4e826
--- /dev/null
+++ b/SOURCES/kf2-srv-beta-update.timer
@@ -0,0 +1,9 @@
+[Unit]
+Description=Check and Update killing Floor 2 beta job
+
+[Timer]
+OnCalendar=*-*-* 4:00:00
+Unit=kf2-srv-beta-update.service
+
+[Install]
+WantedBy=multi-user.target
diff --git a/SOURCES/kf2-srv-beta@.service b/SOURCES/kf2-srv-beta@.service
new file mode 100644
index 0000000..7895fdd
--- /dev/null
+++ b/SOURCES/kf2-srv-beta@.service
@@ -0,0 +1,21 @@
+[Unit]
+Description=Killing Floor 2 Beta Server Daemon - %i
+
+[Service]
+User=steam
+Group=steam
+Type=simple
+StandardOutput=null
+StandardError=null
+EnvironmentFile=/etc/kf2-srv/instances-beta/%i/main.conf
+ExecStart=/usr/games/kf2-srv-beta/Binaries/Win64/KFGameSteamServer.bin.x86_64 $Args configsubdir=instances/%i $PortW $PortQ $PortG
+Restart=always
+
+NoNewPrivileges=yes
+PrivateTmp=true
+PrivateDevices=true
+ProtectHome=true
+ProtectSystem=false
+
+[Install]
+WantedBy=multi-user.target
diff --git a/SOURCES/kf2-srv-update.timer b/SOURCES/kf2-srv-update.timer
index b6ce218..153bd5c 100644
--- a/SOURCES/kf2-srv-update.timer
+++ b/SOURCES/kf2-srv-update.timer
@@ -2,7 +2,7 @@
Description=Check and Update killing Floor 2 job
[Timer]
-OnCalendar=Wed, 04:00
+OnCalendar=*-*-* 4:00:00
Unit=kf2-srv-update.service
[Install]
diff --git a/SPECS/kf2-srv.spec b/SPECS/kf2-srv.spec
index fd2b10a..798596b 100644
--- a/SPECS/kf2-srv.spec
+++ b/SPECS/kf2-srv.spec
@@ -1,7 +1,7 @@
%global steamuser steam
Name: kf2-srv
-Version: 0.6.0
+Version: 0.7.0
Release: 1%{dist}
Summary: Killing Floor 2 server
Group: Amusements/Games
@@ -9,17 +9,28 @@ License: GNU GPLv3
BuildArch: noarch
Source1: %{name}
-Source2: %{name}.conf
+Source2: %{name}-beta
Source3: %{name}.xml
Source4: %{name}@.service
Source5: %{name}-update.service
Source6: %{name}-update.timer
Source7: main.conf.template
+Source8: %{name}-beta@.service
+Source9: %{name}-beta-update.service
+Source10: %{name}-beta-update.timer
Requires: systemd >= 219
Requires: steamcmd
Requires: libxml2
Requires: dos2unix
+Requires: curl
+Requires: grep
+Requires: coreutils
+Requires: sed
+Requires: util-linux
+Requires: sudo
+Requires: psmisc
+Requires: gawk
Provides: %{name}
@@ -37,29 +48,34 @@ install -m 755 -d %{buildroot}/%{_bindir}
install -m 755 -d %{buildroot}/%{_prefix}/lib/systemd/system
install -m 755 -d %{buildroot}/%{_prefix}/lib/firewalld/services
install -m 755 -d %{buildroot}/%{_sysconfdir}/%{name}/instances
+install -m 755 -d %{buildroot}/%{_sysconfdir}/%{name}/instances-beta
install -m 644 -d %{buildroot}/%{_prefix}/games/%{name}
+install -m 644 -d %{buildroot}/%{_prefix}/games/%{name}-beta
-install -m 755 %{SOURCE1} %{buildroot}/%{_bindir}
-install -m 644 %{SOURCE2} %{buildroot}/%{_sysconfdir}/%{name}
-install -m 644 %{SOURCE3} %{buildroot}/%{_prefix}/lib/firewalld/services
-install -m 644 %{SOURCE4} %{buildroot}/%{_prefix}/lib/systemd/system
-install -m 644 %{SOURCE5} %{buildroot}/%{_prefix}/lib/systemd/system
-install -m 644 %{SOURCE6} %{buildroot}/%{_prefix}/lib/systemd/system
-install -m 644 %{SOURCE7} %{buildroot}/%{_sysconfdir}/%{name}
-
-sed -i -r "s|^(InstallDir=).*$|\1\"%{_prefix}/games/%{name}\"|g" %{buildroot}/%{_bindir}/%{name}
+install -m 755 %{SOURCE1} %{buildroot}/%{_bindir}
+install -m 644 %{SOURCE2} %{buildroot}/%{_bindir}
+install -m 644 %{SOURCE3} %{buildroot}/%{_prefix}/lib/firewalld/services
+install -m 644 %{SOURCE4} %{buildroot}/%{_prefix}/lib/systemd/system
+install -m 644 %{SOURCE5} %{buildroot}/%{_prefix}/lib/systemd/system
+install -m 644 %{SOURCE6} %{buildroot}/%{_prefix}/lib/systemd/system
+install -m 644 %{SOURCE7} %{buildroot}/%{_sysconfdir}/%{name}
+install -m 644 %{SOURCE8} %{buildroot}/%{_prefix}/lib/systemd/system
+install -m 644 %{SOURCE9} %{buildroot}/%{_prefix}/lib/systemd/system
+install -m 644 %{SOURCE10} %{buildroot}/%{_prefix}/lib/systemd/system
%clean
rm -rf $RPM_BUILD_ROOT
%files
%attr(775,root,%{steamuser}) %dir %{_prefix}/games/%{name}
+%attr(775,root,%{steamuser}) %dir %{_prefix}/games/%{name}-beta
%attr(775,root,%{steamuser}) %dir %{_sysconfdir}/%{name}
%attr(775,root,%{steamuser}) %dir %{_sysconfdir}/%{name}/instances
-%attr(644,root,root) %{_sysconfdir}/%{name}/main.conf.template
-%attr(644,root,root) %config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf
+%attr(775,root,%{steamuser}) %dir %{_sysconfdir}/%{name}/instances-beta
+%attr(644,root,root) %config(noreplace) %{_sysconfdir}/%{name}/main.conf.template
%attr(644,root,root) %config(noreplace) %{_prefix}/lib/firewalld/services/%{name}.xml
%attr(755,root,root) %{_bindir}/%{name}
+%attr(755,root,root) %{_bindir}/%{name}-beta
%attr(644,root,root) %{_prefix}/lib/systemd/system/*
%preun
@@ -67,9 +83,17 @@ if [[ $1 -eq 0 ]] ; then # Uninstall
%{_bindir}/%{name} --stop
%{_bindir}/%{name} --disable
rm -rf %{_prefix}/games/%{name}/*
+ rm -rf %{_prefix}/games/%{name}-beta/*
+ rm -rf %{_sysconfdir}/%{name}/instances/default
+ rm -rf %{_sysconfdir}/%{name}/instances-beta/default
fi
%changelog
+* Sat Mar 7 2020 GenZmeY - 0.7.0-1
+- dual versions support;
+- check updates;
+- bugfixes.
+
* Sat Jan 18 2020 GenZmeY - 0.6.0-1
- versions;
- instance conf tweaks;