Добавление начального функционала для systemd
This commit is contained in:
parent
822b20dd87
commit
041532f2ce
107
hlna.py
107
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()
|
||||||
|
Loading…
Reference in New Issue
Block a user