
10 changed files with 185 additions and 77 deletions
@ -0,0 +1,48 @@ |
|||||
|
### |
||||
|
### Build Variables |
||||
|
### |
||||
|
FROM localhost/debian:latest |
||||
|
|
||||
|
# deploy options |
||||
|
# -p (port) and -v (volume) both go host:container |
||||
|
LABEL deployopts="\ |
||||
|
-p 19132:19132/udp \ |
||||
|
-p 19133:19133/udp \ |
||||
|
-v /srv/vol/minecraft_be/worlds:/vol/worlds" |
||||
|
|
||||
|
# Build variables |
||||
|
# uid that the files owner user should have |
||||
|
ARG FILESUID=5000 |
||||
|
|
||||
|
### |
||||
|
### General Setup |
||||
|
### |
||||
|
|
||||
|
# install packages we want |
||||
|
RUN apt update -y && apt install -y libcurl4 |
||||
|
|
||||
|
# create minecraft server user with file owner UID |
||||
|
RUN addgroup --gid $FILESUID mcadmin && \ |
||||
|
adduser mcadmin --ingroup mcadmin --uid $FILESUID --disabled-password --gecos "Minecraft Server Admin" --shell /usr/sbin/nologin && \ |
||||
|
rm /home/mcadmin/.bashrc |
||||
|
|
||||
|
# Copy custom scripts |
||||
|
COPY assets/bin/ /usr/local/bin/ |
||||
|
|
||||
|
### |
||||
|
### Minecraft |
||||
|
### |
||||
|
WORKDIR /home/mcadmin |
||||
|
|
||||
|
# download Minecraft Bedrock dedicated server |
||||
|
RUN url=$(wget -q https://www.minecraft.net/en-us/download/server/bedrock/ -O - | grep -Eo 'https://[^ ]+bin-linux/bedrock-server-[^ ]+\.zip' | head -n 1) && \ |
||||
|
wget $url && \ |
||||
|
unzip $(basename $url) && \ |
||||
|
rm $(basename $url) && \ |
||||
|
chown -R mcadmin:mcadmin ./ |
||||
|
|
||||
|
# copy units to systemd |
||||
|
COPY assets/systemd/ /etc/systemd/system/ |
||||
|
|
||||
|
# enable systemd units |
||||
|
RUN systemctl enable mcbe.service mcbe-backup.timer |
@ -0,0 +1,43 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
do_backup() { |
||||
|
mcbe-stop $1 "Shutting down server for scheduled daily backup." |
||||
|
rsyn /home/mcadmin/worlds/ /vol/worlds/ |
||||
|
systemctl start mcbe |
||||
|
rm /home/mcadmin/backup.lock |
||||
|
} |
||||
|
|
||||
|
# Check if server is started |
||||
|
status=$(systemctl show "$service" -p ActiveState --value) |
||||
|
# if service is not active, do backup immediately and exit |
||||
|
if [[ $status == inactive ]]; then |
||||
|
rsyn /home/mcadmin/worlds/ /vol/worlds/ |
||||
|
rm /home/mcadmin/backup.lock |
||||
|
exit 0 |
||||
|
fi |
||||
|
|
||||
|
# Check if any players present |
||||
|
present=$(mcbe-exec list | cut -d ' ' -f 3 | cut -d '/' -f 1) |
||||
|
# if no players are present, do backup immediately and exit |
||||
|
if [[ $present == 0 ]]; then |
||||
|
do_backup 0 |
||||
|
exit 0 |
||||
|
fi |
||||
|
|
||||
|
cd /home/mcadmin |
||||
|
|
||||
|
# create backup.attempts file if it doesn't exist |
||||
|
if [[ ! -e backup.attempts ]]; then |
||||
|
echo "0" > backup.attempts |
||||
|
fi |
||||
|
|
||||
|
# read backup.wait and add one to it |
||||
|
attempts=$(( $(cat backup.attempts) + 1 )) |
||||
|
|
||||
|
# if 12 or more attempts have already been made, go ahead and force a shutdown anyways |
||||
|
if [[ $attempts -ge 12 ]]; then |
||||
|
do_backup 10 |
||||
|
# otherwise, schedule another attempt in an hour |
||||
|
else |
||||
|
systemd-run --on-active=1h $0 |
||||
|
fi |
@ -0,0 +1,5 @@ |
|||||
|
#!/bin/bash |
||||
|
today=$(date "+%Y-%m-%d %H:%M:%S") |
||||
|
echo "$*" > /run/mcbe |
||||
|
sleep 0.1 |
||||
|
journalctl -u mcbe -S "$today" -o cat |
@ -0,0 +1,36 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
if [[ -z $1 ]]; then |
||||
|
# default warning time is 10 seconds |
||||
|
time=10 |
||||
|
elif [[ $1 -ge 0 && $1 -le 60 ]]; then |
||||
|
time=$1 |
||||
|
else |
||||
|
echo "Invalid value for time-to-shutdown: only values between 0 and 60 seconds are accepted." |
||||
|
exit 2 |
||||
|
fi |
||||
|
|
||||
|
# if 2nd arg is given (and shutdown is not immediate), say it before shutting down |
||||
|
if [[ -z $2 ]]; then |
||||
|
mcbe-exec say "$2" |
||||
|
fi |
||||
|
|
||||
|
echo "Shutting down server in $time seconds..." |
||||
|
count=$time |
||||
|
|
||||
|
while [[ $count -gt 0 ]]; do |
||||
|
# print warning every 10 seconds |
||||
|
if [[ $(( $count % 10 )) -eq 0 ]]; then |
||||
|
mcbe-exec say "Server shutting down in ${count} seconds!" |
||||
|
fi |
||||
|
|
||||
|
# print warning every second for last 5 seconds |
||||
|
if [[ $count -le 5 ]]; then |
||||
|
mcbe-exec say "Shutting down in ${count}s..." |
||||
|
fi |
||||
|
|
||||
|
count=$((count-1)) |
||||
|
sleep 1 |
||||
|
done |
||||
|
|
||||
|
mcbe-exec stop |
@ -0,0 +1,9 @@ |
|||||
|
[Unit] |
||||
|
After=mcbe.service |
||||
|
Description=Back up Minecraft Bedrock Edition server |
||||
|
Requisite=mcbe.service |
||||
|
|
||||
|
[Service] |
||||
|
ExecStart=/usr/local/bin/mcbe-backup |
||||
|
KillMode=none |
||||
|
Type=oneshot |
@ -0,0 +1,9 @@ |
|||||
|
[Unit] |
||||
|
Description=Back up Minecraft Bedrock Edition server daily at 4:05 AM |
||||
|
|
||||
|
[Timer] |
||||
|
# Every 2 hours: OnCalendar=0/2:00:00 |
||||
|
OnCalendar=*-*-* 04:05 |
||||
|
|
||||
|
[Install] |
||||
|
WantedBy=timers.target |
@ -0,0 +1,27 @@ |
|||||
|
[Unit] |
||||
|
# Implicit needs are explicitly needed to survive shutdown till stop finishes |
||||
|
After=network.target |
||||
|
BindsTo=mcbe.socket |
||||
|
Description=Minecraft Bedrock Edition server |
||||
|
|
||||
|
[Service] |
||||
|
ExecReload=/usr/local/bin/mcbe-exec reload |
||||
|
ExecStop=/usr/local/bin/mcbe-stop |
||||
|
ExecStart=/bin/bash -c 'LD_LIBRARY_PATH=. ./bedrock_server' |
||||
|
User=mcadmin |
||||
|
WorkingDirectory=/home/mcadmin |
||||
|
Restart=on-failure |
||||
|
StandardInput=socket |
||||
|
StandardOutput=journal |
||||
|
StandardError=journal |
||||
|
Type=simple |
||||
|
# Thanks for the security agowa338 |
||||
|
PrivateUsers=true |
||||
|
ProtectHome=true |
||||
|
ProtectControlGroups=true |
||||
|
ProtectKernelModules=true |
||||
|
ProtectKernelTunables=true |
||||
|
ProtectSystem=full |
||||
|
|
||||
|
[Install] |
||||
|
WantedBy=multi-user.target |
@ -0,0 +1,8 @@ |
|||||
|
[Unit] |
||||
|
BindsTo=mcbe.service |
||||
|
|
||||
|
[Socket] |
||||
|
ListenFIFO=/run/mcbe |
||||
|
RemoveOnStop=true |
||||
|
SocketMode=600 |
||||
|
SocketUser=mcadmin |
@ -1,77 +0,0 @@ |
|||||
### |
|
||||
### Build Variables |
|
||||
### |
|
||||
FROM localhost/debian:latest |
|
||||
|
|
||||
# deploy options |
|
||||
# -p (port) and -v (volume) both go host:container |
|
||||
LABEL deployopts="\ |
|
||||
-p 19132:19132/udp \ |
|
||||
-p 19133:19133/udp \ |
|
||||
-v /srv/vol/minecraft_bedrock/backup:/vol/backup" |
|
||||
|
|
||||
# Build variables |
|
||||
# uid that the files owner user should have |
|
||||
ARG FILESUID=5000 |
|
||||
|
|
||||
### |
|
||||
### General Setup |
|
||||
### |
|
||||
|
|
||||
# install packages we want |
|
||||
RUN apt update -y && apt install -y libcurl4 |
|
||||
|
|
||||
# create minecraft server user with file owner UID |
|
||||
RUN addgroup --gid $FILESUID mcadmin && \ |
|
||||
adduser mcadmin --ingroup mcadmin --uid $FILESUID --disabled-password --gecos "Minecraft Server Admin" --shell /usr/sbin/nologin && \ |
|
||||
rm /home/mcadmin/.bashrc |
|
||||
|
|
||||
### |
|
||||
### Minecraft |
|
||||
### |
|
||||
|
|
||||
# download Minecraft Bedrock dedicated server |
|
||||
RUN url=$(wget -q https://www.minecraft.net/en-us/download/server/bedrock/ -O - | grep -Eo 'https://[^ ]+bin-linux/bedrock-server-[^ ]+\.zip' | head -n 1) && \ |
|
||||
wget $url && \ |
|
||||
unzip $(basename $url) && \ |
|
||||
rm $(basename $url) |
|
||||
|
|
||||
### |
|
||||
### Gitea |
|
||||
### |
|
||||
|
|
||||
# dowload gitea |
|
||||
RUN wget https://dl.gitea.io/gitea/${giteav}/gitea-${giteav}-linux-amd64 && \ |
|
||||
mv gitea /usr/local/bin/gitea && \ |
|
||||
chmod +x /usr/local/bin/gitea |
|
||||
|
|
||||
# make directories gitea needs |
|
||||
RUN mkdir -p /var/lib/gitea/ && \ |
|
||||
cd /var/lib/gitea/ && \ |
|
||||
mkdir custom data log && \ |
|
||||
chown -R gitea:gitea /var/lib/gitea/ && \ |
|
||||
chmod -R 750 /var/lib/gitea/ |
|
||||
|
|
||||
# copy gitea config template |
|
||||
COPY assets/app.ini.esh /etc/gitea/ |
|
||||
# template config file |
|
||||
RUN cd /etc/gitea/ && \ |
|
||||
esh app.ini.esh > app.ini && \ |
|
||||
rm app.ini.esh && \ |
|
||||
chmod -R +r /etc/gitea/ |
|
||||
|
|
||||
COPY assets/gitea.service /etc/systemd/system/ |
|
||||
|
|
||||
### |
|
||||
### Crontab |
|
||||
### |
|
||||
COPY assets/crontab /root/ |
|
||||
RUN crontab -u gitea /root/crontab |
|
||||
|
|
||||
### |
|
||||
### Bugfix |
|
||||
### |
|
||||
|
|
||||
# execute command to workaround bug in cron |
|
||||
COPY bugfix/cronfix /root/ |
|
||||
RUN chmod +x /root/cronfix && /root/cronfix |
|
Loading…
Reference in new issue