Minecraft Forgeサーバを systemd-nspawn でコンテナ化する。
# ------------------------------------------------
# systemd-nspawn 設定 (コンテナ作成まで)
# ------------------------------------------------
#------------------------------------------------
# ubuntu 18.04 ホストで systemd-nspawn インストール
#------------------------------------------------
uname -vr
5.3.0-26-generic #28~18.04.1-Ubuntu SMP Wed Dec 18 16:40:14 UTC 2019
sudo apt install debootstrap systemd-container
#------------------------------------------------
# ubuntu 18.04 コンテナの用意
#------------------------------------------------
sudo debootstrap --arch amd64 bionic /var/lib/machines/minecraft http://archive.ubuntu.com/ubuntu
#------------------------------------------------
# ubuntu 18.04 コンテナの sources.list の修正
#------------------------------------------------
sudo cp -av /var/lib/machines/minecraft/etc/apt/sources.list{,.orig}
egrep -v '^#|^$' /etc/apt/sources.list | sudo tee -a /var/lib/machines/minecraft/etc/apt/sources.list
#------------------------------------------------
# ubuntu 18.04 コンテナ を起動してユーザーを追加
#------------------------------------------------
sudo systemd-nspawn -D /var/lib/machines/minecraft
passwd
useradd -m -r minecraft
passwd minecraft
gpasswd -a minecraft sudo
#------------------------------------------------
# rootログインを許可させる場合は
# ubuntu 18.04 コンテナ の /etc/securetty に pts/0 を追記
#------------------------------------------------
cp -av /etc/securetty{,.orig}
(echo ''
echo 'pts/0') >> /etc/securetty
diff -u /etc/securetty.orig /etc/securetty
--- /etc/securetty.orig 2020-01-19 23:38:14.927697596 +0900
+++ /etc/securetty 2020-01-19 23:40:20.372110886 +0900
@@ -410,3 +410,7 @@
ttySAC1
ttySAC2
ttySAC3
+
+pts/0
#------------------------------------------------
# ubuntu 18.04 コンテナの resolved.conf を修正
#------------------------------------------------
cp -av /etc/systemd/resolved.conf{,.orig}
diff -u /etc/systemd/resolved.conf.orig /etc/systemd/resolved.conf
--- /etc/systemd/resolved.conf.orig 2018-04-21 01:55:56.000000000 +0900
+++ /etc/systemd/resolved.conf 2020-01-20 00:54:57.436523023 +0900
@@ -12,7 +12,7 @@
# See resolved.conf(5) for details
[Resolve]
-#DNS=
+DNS=8.8.8.8, 8.8.4.4
#FallbackDNS=
#Domains=
#LLMNR=no
#------------------------------------------------
# ubuntu 18.04 コンテナからログアウトする
#------------------------------------------------
exit
#------------------------------------------------
# ubuntu 18.04 コンテナを boot する
#------------------------------------------------
sudo systemd-nspawn -b -D /var/lib/machines/minecraft
#------------------------------------------------
# ubuntu 18.04 コンテナのホスト名変更
#------------------------------------------------
sudo hostnamectl set-hostname minecraft-server
sudo cp -av /etc/hosts{,.orig}
sudo sh -c 'echo 127.0.1.1 $(hostname) >> /etc/hosts'
#------------------------------------------------
# ubuntu 18.04 コンテナで使うものをインストール
#------------------------------------------------
sudo apt update
sudo apt upgrade
sudo apt install bind9-host wget psmisc vim lsof
#------------------------------------------------
# ubuntu 18.04 コンテナに OpenJDK 8 をインストール
#------------------------------------------------
sudo apt install software-properties-common
add-apt-repository ppa:openjdk-r/ppa
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt install openjdk-8-jdk
#------------------------------------------------
# Ctrl+] を3回連打して ubuntu 18.04 コンテナ 終了させる
#------------------------------------------------
Ctrl+]
Ctrl+]
Ctrl+]
#------------------------------------------------
# ユニットファイルの作成
#------------------------------------------------
sudo systemctl enable machines.target
sudo systemctl enable systemd-nspawn@devenv.service
(echo '[Service]'
echo 'ExecStart='
echo 'ExecStart=/usr/bin/systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --settings=override --machine=%i'
) | sudo SYSTEMD_EDITOR=tee systemctl edit systemd-nspawn@minecraft.service
#------------------------------------------------
# ユニットファイルはこのようになる
#------------------------------------------------
#マスタ
/lib/systemd/system/systemd-nspawn@.service
# systemctl enable systemd-nspawn@devenv.service
/etc/systemd/system/machines.target.wants/systemd-nspawn@minecraft.service
# systemctl edit systemd-nspawn@minecraft.service
/etc/systemd/system/systemd-nspawn@minecraft.service.d/override.conf
#------------------------------------------------
# 起動してログインしてみる
#------------------------------------------------
sudo machinectl start minecraft
sudo machinectl list
MACHINE CLASS SERVICE OS VERSION ADDRESSES
minecraft container systemd-nspawn ubuntu 18.04 -
1 machines listed.
sudo machinectl login minecraft
# プロンプトがでたらminecraftユーザーでログインしてみる
#------------------------------------------------
# 時刻合わせ
#------------------------------------------------
sudo timedatectl set-timezone Asia/Tokyo
sudo sed -i.orig 's/#NTP=/NTP=ntp.nict.jp/g' /etc/systemd/timesyncd.conf
diff -u /etc/systemd/timesyncd.conf.orig /etc/systemd/timesyncd.conf
--- /etc/systemd/timesyncd.conf.orig 2018-04-20 16:55:56.000000000 +0000
+++ /etc/systemd/timesyncd.conf 2020-01-19 18:44:36.395375786 +0000
@@ -12,7 +12,7 @@
# See timesyncd.conf(5) for details.
[Time]
-#NTP=
+NTP=ntp.nict.jp
#FallbackNTP=ntp.ubuntu.com
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
systemctl -l status systemd-timesyncd
# ------------------------------------------------
# Minecraft Forgeサーバ設定 (コンテナへMinecraft Server導入まで)
# ------------------------------------------------
#------------------------------------------------
# 最新版をダウンロード
#------------------------------------------------
mkdir -p /home/minecraft/minecraft_server
cd /home/minecraft/minecraft_server
wget -O minecraft_server.1.14.4.jar https://launcher.mojang.com/v1/objects/3dc3d84a581f14691199cf6831b71ed1296a9fdf/server.jar
#------------------------------------------------
# いったん起動させる
#------------------------------------------------
java -Xmx1024M -Xms1024M -jar minecraft_server.1.14.4.jar nogui
#------------------------------------------------
# 以下の状態になる
#------------------------------------------------
ls -l
total 35132
-rw-rw-r-- 1 minecraft minecraft 181 Jan 19 16:46 eula.txt
drwxrwxr-x 2 minecraft minecraft 4096 Jan 19 16:46 logs
-rw-rw-r-- 1 minecraft minecraft 35958734 Jul 19 2019 minecraft_server.1.14.4.jar
-rw-rw-r-- 1 minecraft minecraft 940 Jan 19 16:46 server.properties
#------------------------------------------------
# eula を true にして再度起動し
# 無事に起動したら ctrl + c で終了させる
#------------------------------------------------
sed -i 's/eula=false/eula=true/' eula.txt
java -Xmx1024M -Xms1024M -jar minecraft_server.1.14.4.jar nogui
#------------------------------------------------
# 起動ファイルの作成
#------------------------------------------------
(echo '#!/bin/bash'
echo '/usr/bin/java -Xmx1024M -Xms1024M -jar minecraft_server.1.14.4.jar nogui'
) > /home/minecraft/minecraft_server/startup.sh
chmod 755 /home/minecraft/minecraft_server/startup.sh
#------------------------------------------------
# /home/minecraft/minecraft_server/startup.sh
#------------------------------------------------
#!/bin/bash
/usr/bin/java -Xmx1024M -Xms1024M -jar minecraft_server.1.14.4.jar nogui
#------------------------------------------------
# unitファイルの作成
#------------------------------------------------
sudo vi /etc/systemd/system/minecraft_server.service
#------------------------------------------------
# /etc/systemd/system/minecraft_server.service
#------------------------------------------------
[Unit]
Description=Minecraft Server
After=network-online.target
[Service]
ExecStart=/bin/bash /home/minecraft/minecraft_server/startup.sh
WorkingDirectory=/home/minecraft/minecraft_server
Restart=always
User=minecraft
Group=minecraft
[Install]
WantedBy=multi-user.target
#------------------------------------------------
# minecraft server を systemctl で起動させる
#------------------------------------------------
sudo systemctl daemon-reload
sudo systemctl enable minecraft_server
sudo systemctl start minecraft_server
sudo systemctl status minecraft_server
#------------------------------------------------
# systemctl status minecraft_server
#------------------------------------------------
● minecraft_server.service - Minecraft Server
Loaded: loaded (/etc/systemd/system/minecraft_server.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-01-19 16:56:37 UTC; 5s ago
Main PID: 9206 (bash)
CGroup: /system.slice/minecraft_server.service
├─9206 /bin/bash /home/minecraft/minecraft_server/startup.sh
└─9207 /usr/bin/java -Xmx1024M -Xms1024M -jar minecraft_server.1.14.4.jar nogui
Jan 19 16:56:40 minecraft-server bash[9206]: [16:56:40] [Server thread/INFO]: Generating keypair
Jan 19 16:56:41 minecraft-server bash[9206]: [16:56:41] [Server thread/INFO]: Starting Minecraft server on *:25565
Jan 19 16:56:41 minecraft-server bash[9206]: [16:56:41] [Server thread/INFO]: Using epoll channel type
Jan 19 16:56:41 minecraft-server bash[9206]: [16:56:41] [Server thread/INFO]: Preparing level "world"
Jan 19 16:56:41 minecraft-server bash[9206]: [16:56:41] [Server thread/INFO]: Reloading ResourceManager: Default
Jan 19 16:56:41 minecraft-server bash[9206]: [16:56:41] [Server thread/INFO]: Loaded 6 recipes
Jan 19 16:56:41 minecraft-server bash[9206]: [16:56:41] [Server thread/INFO]: Loaded 811 advancements
Jan 19 16:56:42 minecraft-server bash[9206]: [16:56:42] [Server thread/INFO]: Preparing start region for dimension minecraft:ov
Jan 19 16:56:42 minecraft-server bash[9206]: [16:56:42] [Server thread/INFO]: Preparing spawn area: 0%
Jan 19 16:56:42 minecraft-server bash[9206]: [16:56:42] [Server thread/INFO]: Preparing spawn area: 0%
#------------------------------------------------
# minecraft server が 25565番ポートで起動していることを確認
#------------------------------------------------
ss -ant | grep 25565
LISTEN 0 128 *:25565 *:*
lsof -i:25565
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 9207 minecraft 98u IPv6 212425 0t0 TCP *:25565 (LISTEN)
# ------------------------------------------------
# Minecraft Forge の導入
# ------------------------------------------------
#------------------------------------------------
# forge用のディレクトリを作成
#------------------------------------------------
sudo systemctl stop minecraft_server
cp -a /home/minecraft/minecraft_server /home/minecraft/forge_server
cd /home/minecraft/forge_server
#------------------------------------------------
# Macのブラウザから installer.jar をダウンロードする
#------------------------------------------------
https://files.minecraftforge.net/
#------------------------------------------------
# Mac の ~/Downloads/で簡易Webサーバを立てる
#------------------------------------------------
ls ~/Downloads/
forge-1.14.4-28.1.0-installer.jar
cd ~/Downloads/ && python3 -m http.server 9999
#------------------------------------------------
# ubuntu 18.04 コンテナから Mac の installer.jar をダウンロードする
#------------------------------------------------
wget 192.168.1.57:9999/forge-1.14.4-28.1.0-installer.jar
#------------------------------------------------
# ubuntu 18.04 コンテナ で installer.jar を実行
#------------------------------------------------
java -jar forge-1.14.4-28.1.0-installer.jar nogui --installServer
#------------------------------------------------
# ubuntu 18.04 コンテナ で forge-1.14.4-28.1.0.jar を実行
#------------------------------------------------
java -Xmx1024M -Xms1024M -jar forge-1.14.4-28.1.0.jar nogui
#------------------------------------------------
# 起動ファイルの修正
#------------------------------------------------
cat /home/minecraft/forge_server/startup.sh
#!/bin/bash
/usr/bin/java -Xmx1024M -Xms1024M -jar forge-1.14.4-28.1.0.jar nogui
#------------------------------------------------
# Minecraft Forge を systemctl で起動させる
#------------------------------------------------
sudo systemctl daemon-reload
sudo systemctl start minecraft_server
sudo systemctl status minecraft_server
# ------------------------------------------------
# modの導入
# ------------------------------------------------
#------------------------------------------------
# Macのブラウザから OptiFine をダウンロードする
#------------------------------------------------
http://optifine.net/downloads
#------------------------------------------------
# Mac の ~/Downloads/で簡易Webサーバを立てる
#------------------------------------------------
ls ~/Downloads/
OptiFine_1.14.4_HD_U_F5.jar
cd ~/Downloads/ && python3 -m http.server 9999
#------------------------------------------------
# OptiFine_1.14.4_HD_U_F5.jar をダウンロードする
#------------------------------------------------
cd /home/minecraft/forge_server/mods
wget 192.168.1.57:9999/OptiFine_1.14.4_HD_U_F5.jar
#------------------------------------------------
# 再起動する
#------------------------------------------------
sudo systemctl stop minecraft_server
sudo systemctl start minecraft_server
# ------------------------------------------------
# クライアントから接続する
# ------------------------------------------------
問題なく接続できればOK
# ------------------------------------------------
# 参考
# ------------------------------------------------
https://qiita.com/hatayan1126/items/500dc025d41142bd6f84
https://minecraft.server-memo.net/forge_server_install/
https://blog.3qe.us/entry/2017/11/18/200617
https://www.minecraftforge.net/forum/topic/77611-forge-universal-error-%EF%BC%9Ano-main-manifest-attribute/