Добавление начального функционала для systemd

This commit is contained in:
Евгений Храмов 2023-05-06 16:46:07 +03:00
parent 822b20dd87
commit 041532f2ce

105
hlna.py

@ -1,21 +1,22 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os import os
import time
import threading
from pathlib import Path import threading
from pprint import pprint
import yaml import yaml
import click import click
import colorama import colorama
import click_completion
from pathlib import Path
from rcon.source import Client from rcon.source import Client
home_dir = Path.home() home_dir = Path.home()
dir_server = f"{home_dir}/ARK_Servers/" dir_server = f"{home_dir}/ARK_Servers/"
dir_config = f"{home_dir}/.config/hlna/maps/" server_dir = dir_server + "ShooterGame/Binaries/Linux/"
dir_unit = f"{home_dir}/.config/systemd/user/"
dir_config = f"{home_dir}/.config/hlna/"
dir_maps = f"{dir_config}maps/"
mods_id = "" mods_id = ""
listen_server = True listen_server = True
@ -37,7 +38,7 @@ def find_file(path):
return arr return arr
list_config = find_file(dir_config) list_config = find_file(dir_maps)
delist_config = find_file(dir_config+"deactivated") delist_config = find_file(dir_config+"deactivated")
@ -52,12 +53,6 @@ def create_dir(directory):
"""Проверка и создание директории""" """Проверка и создание директории"""
if not os.path.exists(directory): if not os.path.exists(directory):
os.mkdir(directory) os.mkdir(directory)
if not os.path.exists(f"{home_dir}/.config/hlna/"):
os.chdir(f"{home_dir}/.config/")
os.mkdir("hlna")
if not os.path.exists(f"{home_dir}/.config/hlna/maps"):
os.chdir(f"{home_dir}/.config/hlna/")
os.mkdir("maps")
def check_int(number=""): def check_int(number=""):
@ -74,8 +69,9 @@ def check_int(number=""):
create_dir(dir_server) create_dir(dir_server)
create_dir(dir_unit)
create_dir(dir_config) create_dir(dir_config)
create_dir(dir_maps)
@hlna.command(help='Для конфигурирования параметров запускаемого сервера или кластера серверов') @hlna.command(help='Для конфигурирования параметров запускаемого сервера или кластера серверов')
def config(list_config=list_config): def config(list_config=list_config):
@ -234,54 +230,60 @@ def config(list_config=list_config):
max_players = 70 max_players = 70
systemd_unit_create(cluster_server, map_s, list_config[-1], port_server, query_port, rcon_enabled, rcon_port, adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override) systemd_unit_create(cluster_server, map_s, list_config[-1], port_server, query_port, rcon_enabled, rcon_port, adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override)
# yaml_create(cluster_server, map_s, list_config[-1], port_server, query_port, rcon_enabled, rcon_port, adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override) yaml_create(cluster_server, map_s, list_config[-1], port_server, query_port, rcon_enabled, rcon_port, adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override)
def systemd_unit_create(cluster_server, map_s, name_server, port_server, query_port, rcon_enabled, rcon_port, adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override) def yaml_create(cluster_server, map_s, name_server, port_server, query_port, rcon_enabled, rcon_port, adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override):
unit = f'''[Unit] settings_hlna = [
Description=ARK: Survival Evolved dedicated server {
'map' : map_s,
'Cluster' : cluster_server,
'SessionName' : name_server,
'Port' : port_server,
'QueryPort' : query_port,
'RCONEnabled' : rcon_enabled,
'RCONPort' : rcon_port,
'ServerAdminPassword': adminpassword_server,
'ServerPassword' : password_server,
'MaxPlayers' : max_players,
'ModsId' : mods_id,
'Listen' : listen_server,
'ServerPath' : dir_server,
'clusterid' : cluster_id,
'clusterdir' : cluster_dir_override
}
]
with open(dir_maps + f"{name_server}", 'w') as yamlfile:
yaml.dump(settings_hlna, yamlfile)
print(colorama.Fore.GREEN + "Конфиг создан" + colorama.Style.RESET_ALL)
def systemd_unit_create(cluster_server, map_s, name_server, port_server, query_port, rcon_enabled, rcon_port, adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override):
if not cluster_server:
ntff = ""
else:
ntff = "-NoTransferFromFiltering"
unit_file = f'{dir_unit}ARK_{name_server}.service'
unit_text = f'''[Unit]
Description=ARK: Survival Evolved dedicated server - {map_s}
Wants=network-online.target Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target After=syslog.target network.target nss-lookup.target network-online.target
[Service] [Service]
ExecStartPre=/home/steam/steamcmd +login anonymous +force_install_dir /home/steam/servers/ark +app_update 376030 +quit ExecStartPre=/usr/bin/steamcmd +force_install_dir {dir_server} +login anonymous +app_update 376030 +quit
ExecStart=/home/steam/servers/ark/ShooterGame/Binaries/Linux/ShooterGameServer TheIsland?listen?SessionName=<session_name> -server -log TimeoutStartSec=60
WorkingDirectory=/home/steam/servers/ark/ShooterGame/Binaries/Linux ExecStart={server_dir}ShooterGameServer {map_s}?{listen_server}?SessionName={name_server}?Port={port_server}?QueryPort={query_port}?RCONEnabled={rcon_enabled}?RCONPort={rcon_port}?ServerAdminPassword={adminpassword_server}?MaxPlayers={max_players} -clusterid={cluster_id}-ClusterDirOverride={cluster_dir_override} {ntff}
WorkingDirectory={server_dir}
LimitNOFILE=100000 LimitNOFILE=100000
ExecReload=/bin/kill -s HUP $MAINPID ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID ExecStop=/bin/kill -s INT $MAINPID
User=steam
Group=steam
[Install] [Install]
WantedBy=multi-user.target\ WantedBy=multi-user.target
''' '''
with open(unit, 'w') as systemd_unit: with open(unit_file, 'w') as systemd_unit:
systemd_unit.write(unit) systemd_unit.write(unit_text)
os.system('systemctl daemon-reload') os.system('systemctl daemon-reload')
# def yaml_create(cluster_server, map_s, name_server, port_server, query_port, rcon_enabled, rcon_port, adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override):
# settings_hlna = [
# {
# 'map' : map_s,
# 'Cluster' : cluster_server,
# 'SessionName' : name_server,
# 'Port' : port_server,
# 'QueryPort' : query_port,
# 'RCONEnabled' : rcon_enabled,
# 'RCONPort' : rcon_port,
# 'ServerAdminPassword': adminpassword_server,
# 'ServerPassword' : password_server,
# 'MaxPlayers' : max_players,
# 'ModsId' : mods_id,
# 'Listen' : listen_server,
# 'ServerPath' : dir_server,
# 'clusterid' : cluster_id,
# 'clusterdir' : cluster_dir_override
# }
# ]
# with open(dir_config + f"{name_server}", 'w') as yamlfile:
# yaml.dump(settings_hlna, yamlfile)
# print(colorama.Fore.GREEN + "Конфиг создан" + colorama.Style.RESET_ALL)
def test_mod_install(): def test_mod_install():
@ -420,7 +422,6 @@ def start(m, b, name_server=list_config):
else: else:
names_serverstart = choose_map(names_serverstart) names_serverstart = choose_map(names_serverstart)
server_dir = dir_server + "ShooterGame/Binaries/Linux/"
print_line("Валидация файлов сервера") print_line("Валидация файлов сервера")
x = os.system(f"steamcmd +force_install_dir {dir_server} +login anonymous +app_update 376030 +quit") x = os.system(f"steamcmd +force_install_dir {dir_server} +login anonymous +app_update 376030 +quit")
os.chdir(server_dir) os.chdir(server_dir)
@ -453,7 +454,7 @@ def start(m, b, name_server=list_config):
def read_yaml(name_server, flag=True): def read_yaml(name_server, flag=True):
# Читаем конфиги активных или неактивных карт в зависимости от флага # Читаем конфиги активных или неактивных карт в зависимости от флага
if flag: if flag:
dirs = f"{home_dir}/.config/hlna/maps/{name_server}" dirs = f"{dir_maps}{name_server}"
else: else:
dirs = f"{home_dir}/.config/hlna/deactivated/{name_server}" dirs = f"{home_dir}/.config/hlna/deactivated/{name_server}"
with open(dirs, "r") as yamlfile: with open(dirs, "r") as yamlfile:
@ -512,7 +513,5 @@ def zero(x=""):
return "" return ""
# if __name__ == 'hlna':
# input = zero
if __name__ == '__main__': if __name__ == '__main__':
hlna() hlna()