botan-party / gretel

Minecraft Spigot サーバを運用するための実行環境
MIT License
0 stars 1 forks source link

setup.sh install の再実行を可能に #16

Closed usagiga closed 2 years ago

usagiga commented 3 years ago

setup.sh install を再実行可能にしました。

これにより、インストール作業がなんらかの事情(Javaのバージョンが合わなかったとか。今はないけど…)で異常終了しても再度インストールを実行できたり、マイクラサーバーのバージョンアップが可能になったりします。

resolve #15

usagiga commented 3 years ago

知見がいっぱいだ、ありがとうございます 🙌

Javaがふたつインストールされちゃう状況に関しては手元でテストしてみます。

また、--forceUpgrade ですが、「ワールドに関して大きな変更があった場合に、マイクラ側でワールド全体のマイグレーションをするためのもの」のようです。 spigot-server.jar 実行時に指定して更新処理とサーバーの起動とを一緒くたにやるものなので、現行の setup.sh の仕様だといつ実行するかが微妙なところです。。。

方針

したがって、以下のような感じで作り足してみようと思っています。

参考

shokkunrf commented 3 years ago

Javaの競合に関しては調査・検証してみます

:+1:

--forceUpgradeを実行する動線(オプションとか)は用意するが、手入力で実行してもらうものとする

:+1:

--forceUpdate の実行はサービスファイル側でなんとかできるようにする

(1度だけ--forceUpgrade付きで実行&停止すれば実行系とみなさなくてもいいかも?)

複雑になるようであれば、バージョンアップ用に新たにshellを書いてしまってもよいかと思います

usagiga commented 3 years ago

(1度だけ--forceUpgrade付きで実行&停止すれば実行系とみなさなくてもいいかも?)

複雑になるようであれば、バージョンアップ用に新たにshellを書いてしまってもよいかと思います

そっちのがスマートそうですね!その路線で行ってみます!

usagiga commented 3 years ago

メモ

usagiga commented 2 years ago

Amazon Linux 2 は Docker イメージがあったので、 これを使ってローカルで検証環境つくることにします https://hub.docker.com/_/amazonlinux

usagiga commented 2 years ago

amazonlinux2 での Java のインストールは alternatives コマンドを使ってくれているようだったので、 単に alternatives --config java で Java のバージョンを切り替えられるようでした。 https://www.task-notes.com/entry/20150530/1432954800

というわけで、以下のような Java 8 / 16 が共存する環境を用意し、

FROM amazonlinux:2 AS base

# Install Java 8
RUN amazon-linux-extras enable corretto8
RUN yum install -y java-1.8.0-amazon-corretto-devel
RUN alternatives --set java /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java

# Install Java 16
RUN rpm --import https://yum.corretto.aws/corretto.key 
RUN curl -L -o /etc/yum.repos.d/corretto.repo https://yum.corretto.aws/corretto.repo
RUN yum install -y java-16-amazon-corretto-devel
RUN alternatives --set java /usr/lib/jvm/java-16-amazon-corretto/bin/java

# Install other dependencies
RUN yum install -y git wget

FROM base AS sandbox

# Change java version
RUN alternatives --set java /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java
RUN java -version
RUN alternatives --set java /usr/lib/jvm/java-16-amazon-corretto/bin/java
RUN java -version

CMD ["/bin/bash"]

alternatives で Java のバージョンを切り替えながら BuildTools.jar を走らせてみたのですが、特に問題は起こっていないようでした。 後ほどEC2環境でもテストしてみます。

(こういう感じで手軽に検証できる環境を立ててE2Eテストするやつがほしいですね……)

usagiga commented 2 years ago

アップグレード・ダウングレードに伴う Java のバージョン変更の追随と、 アップグレードに伴うワールドの更新の機能を追加しました。 動作確認は手元のEC2(AMD64)で行っていますが問題なく動くようです。

これで懸念点は全部実装できたように思いますので、 お手すきの際に再度レビュー願えますか? @shokkunrf

FYI: アップグレードに伴うワールドの更新は、bash ./setup.sh update <Minecraft Version> をしたあとのサーバーの起動時に実行されます。

usagiga commented 2 years ago

あー…… x86_64 では動くけど、 aarch64 だと setup.sh の alternatives のところでコケるのを見つけてしまった……

usagiga commented 2 years ago

あー…… x86_64 では動くけど、 aarch64 だと setup.sh の alternatives のところでコケるのを見つけてしまった……

こちら af9a5ee にて修正しました。