GameServerManagers / GameServerManagers/LinuxGSM

Pre/Post hooks

Open
#2,764 0 comments 2 reactions 0 assignees View on GitHub
game: ARK: Survival Evolved
Dominant language
Shell
Stars
4.9k
Forks
864
PR merge metrics
No merged PRs in 30d

Description

## User Story

I am administrating several arkservers for a small community using LGSM, and i have found
myself in need of a Pre and/or Post hook system (Mainly Post-update, Pre-start).

This is due to a (not directly related) bug in SteamCMD that makes mods of >1GiB size fail to download on the first attempt, and i wanted to write a tool that basically handles that downloading instead of SteamCMD directly. But as i am using LGSM, i would have to either wrap the whole lgsm script (which would be possible, but not really elegant) or completely reinvent it for Ark.

## Basic info

* **Distro:** Debian GNU/Linux 9.12 (stretch)
* **Game:** Ark Survival Evolved
* **Command:** update / start
* **LinuxGSM version:** v19.12.5

## Further Information

### Arguments
The hooks themselves dont need to provide a lot of information really, mainly 3 arguments.

1. Game
2. Instance Name
3. Install Path

The motivation for using args (or, if needed environment variables) is that it does not rely on any bash-internals, and thus hooks can be written in any language that can be called as a file.
(bash, python, nodejs, it would even enable the use of things like [sciptisto](https://github.com/igor-petruk/scriptisto) or directly compiling the hook to a binary.

### Installation

I would envision either a simple directory like `hooks` under the default lgsm config path
or a more complicated `hooks/[pre|post]-[target]` directory where multiple scripts get executed in alphabetical order order (with target being the name of the command, like `start`, `stop`, ...).

### Running

Given the 3 arguments specified above lgsm should only have to call the script / program like this
(with LGSM_DIR being the lgsm install directory)

```sh
$LGSM_DIR/hooks/post-update arkserver yourfancyinstance /home/arkuser/serverfiles/
```

Additionally, if 1 hook exits with a non 0 exit code, lgsm should abort completly.

## Further Reading

Here i was mainly inspired by both `pacman` [Pre/Post Transaction hooks](https://wiki.archlinux.org/index.php/Pacman#Hooks) and `git` [hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.