opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

ArchLinuxでminecraft serverを運営するとか

ArchLinuxでminecraftサーバーを運用するときのアレこれをメモしてみる。
とりあえずだけど、modは今回は考えないでやってみるけど別にmodを入れるなら起動するminecraft_server.jarに細工をすればいいだけなので...

minecraft_server.jarを用意する

server用のjarをダウンロードする。ダウンロード方法は様々なので特に指定はないんだけどコマンドラインなら

$ wget https://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar

とかcurlwgetを使ったダウンロードが速いと思う。

server用の適当なディレクトリを作る

どこでもいいが、自分は以下の位置の作成した

$ mkdir /usr/local/minecraft

サーバー用ディレクトリにはワールドデータやその他設定データなどが入るわけだが、注意としてはサーバー(jar)を実行したいユーザーの権限で読み書きができるようにしておく必要がある。
rootで運用すると危険なので、自分は自分のユーザーを使う(opamp)
もちろん専用のユーザーを用意してもいいと思う。
その場合chownなどのコマンドで権限(permission)を適切に変更し読み書き可能にしておく必要がある。

起動用のスクリプトを作る

systemdから呼び出してもらって起動するが、minecraft_server.jarはカレントディレクトリにワールドデータやら色々生成してしまうので以下のような順番でminecraft_server.jarを起動する

1. systemdでrun.shなど予め用意してある適当なスクリプトを呼び出す
2. run.sh内部で"cd"して先ほど作ったサーバー用ディレクトリに移動しjavaコマンドでサーバー起動

ということで、ここで必要になるrun.shを作る。名前はなんでもいいんだけど。
作成場所は、先程作ったサーバー用ディレクトリ(ここでは/usr/local/minecraft)直下に作る。

$ vim /usr/local/minecraft/run.sh

などとしてエディタを開き以下の内容を書き込む

#!/bin/sh

cd /usr/local/minecraft #ここはサーバー用ディレクトリへのPATHにする
java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui

このように書き込む。

systemd用のファイルを用意する

ということでsystemd用のファイルを用意する。systemdはデーモンなどの登録は/usr/lib/systemd/system以下にすればいいようなので、ここ以下にminecraftd.serviceなど適当な名前でファイルを作成する。
(あんまりsystemd詳しくないので間違えていたり適切でない場合などがあった場合教えていただけると幸いです。)

$ sudo vim /usr/lib/systemd/system/minecraftd.service

内容は例えば以下の様な感じに

[Unit]
Description=Minecraft
After=local-fs.target network.target

[Service]
User=opamp
ExecStart=/usr/local/minecraft/run.sh
ExecStop=/bin/kill -TERM $MAINPID

[Install]
WantedBy=multi-user.target

上の[Service]の"ExecStart"の行は適切に変更するように。前の手順で作ったrun.shを絶対PATHで指定すればおk。
要は起動時に呼び出すスクリプトを指定しているので...
ちなみにその下のExecStopはkillコマンドを呼んでminecraftのプロセスを正常終了させるようになっている。
systemdさんは賢いので$MAINPIDとすればわざわざpidをファイルに書き出して云々という処理が要らないようだ。

終わり

終わった。あとはちゃんとできたか起動してみるだけ。
動かないときはスクリプトやPATHなんかが正しいかを確認して見ること。modを導入してる場合は一度直接していして端末の出力を調べたほうがいいかもしれないね。

起動方法

systemdを用いた起動は以下のようにすればいい

$ sudo systemctl start minecraftd.service

これで正しくできてればサーバーが起動する。

$ sudo systemctl stop minecraftd.service

これでサーバーが停止する。

感想

感想というかまあ、終わりにみたいなもんなんだけど、systemdが優秀ですね。

途中にも書いたけれど、systemdは初心者で全く理解してないので間違いなどがありましたら教えていただけると幸いです。
あと、これでサーバーがおかしくなるなどということは無いとは思いますが、万一失敗しておかしくなっても責任は負いかねますのでよろしくお願いします。

Firefox ブラウザ無料ダウンロード