Closed usagiga closed 2 years ago
知見がいっぱいだ、ありがとうございます 🙌
Javaがふたつインストールされちゃう状況に関しては手元でテストしてみます。
また、--forceUpgrade
ですが、「ワールドに関して大きな変更があった場合に、マイクラ側でワールド全体のマイグレーションをするためのもの」のようです。 spigot-server.jar
実行時に指定して更新処理とサーバーの起動とを一緒くたにやるものなので、現行の setup.sh
の仕様だといつ実行するかが微妙なところです。。。
したがって、以下のような感じで作り足してみようと思っています。
--forceUpdate
を実行する動線(オプションとか)は用意するが、手入力で実行してもらうものとする
--forceUpdate
の実行はサービスファイル側でなんとかできるようにする
Javaの競合に関しては調査・検証してみます
:+1:
--forceUpgrade
を実行する動線(オプションとか)は用意するが、手入力で実行してもらうものとする
:+1:
--forceUpdate
の実行はサービスファイル側でなんとかできるようにする
(1度だけ--forceUpgrade
付きで実行&停止すれば実行系とみなさなくてもいいかも?)
複雑になるようであれば、バージョンアップ用に新たにshellを書いてしまってもよいかと思います
(1度だけ--forceUpgrade付きで実行&停止すれば実行系とみなさなくてもいいかも?)
複雑になるようであれば、バージョンアップ用に新たにshellを書いてしまってもよいかと思います
そっちのがスマートそうですね!その路線で行ってみます!
PATH
/etc/environment
とかを設定してもらう必要がある
spigot.jar
( BuildTools.jar
の成果物) の実行時にも使うためJAVA_HOME
BuildTools.jar
内部で使われる Gradle や Maven だけが読むためAmazon Linux 2 は Docker イメージがあったので、 これを使ってローカルで検証環境つくることにします https://hub.docker.com/_/amazonlinux
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テストするやつがほしいですね……)
アップグレード・ダウングレードに伴う Java のバージョン変更の追随と、 アップグレードに伴うワールドの更新の機能を追加しました。 動作確認は手元のEC2(AMD64)で行っていますが問題なく動くようです。
これで懸念点は全部実装できたように思いますので、 お手すきの際に再度レビュー願えますか? @shokkunrf
FYI: アップグレードに伴うワールドの更新は、bash ./setup.sh update <Minecraft Version>
をしたあとのサーバーの起動時に実行されます。
あー…… x86_64 では動くけど、 aarch64 だと setup.sh の alternatives のところでコケるのを見つけてしまった……
あー…… x86_64 では動くけど、 aarch64 だと setup.sh の alternatives のところでコケるのを見つけてしまった……
こちら af9a5ee にて修正しました。
setup.sh install
を再実行可能にしました。これにより、インストール作業がなんらかの事情(Javaのバージョンが合わなかったとか。今はないけど…)で異常終了しても再度インストールを実行できたり、マイクラサーバーのバージョンアップが可能になったりします。
resolve #15