botan-party / gretel

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

expr コマンドが動かない #30

Closed usagiga closed 2 years ago

usagiga commented 2 years ago

Dockerfile 内にあるバージョン判定処理で使われている、 expr コマンドが動いていません。

以前動作確認したときは動いていたような気がするのですが……。

$ sudo docker compose build
[+] Building 0.2s (7/14)
 => [internal] load build definition from Dockerfile                                                                                                                                                                                                                                                                                                                                      0.0s
 => => transferring dockerfile: 1.49kB                                                                                                                                                                                                                                                                                                                                                    0.0s
 => [internal] load .dockerignore                                                                                                                                                                                                                                                                                                                                                         0.0s
 => => transferring context: 2B                                                                                                                                                                                                                                                                                                                                                           0.0s
 => [internal] load metadata for docker.io/library/alpine:3.15.0                                                                                                                                                                                                                                                                                                                          0.0s
 => [ 1/10] FROM docker.io/library/alpine:3.15.0                                                                                                                                                                                                                                                                                                                                          0.0s
 => [internal] load build context                                                                                                                                                                                                                                                                                                                                                         0.0s
 => => transferring context: 35B                                                                                                                                                                                                                                                                                                                                                          0.0s
 => CACHED [ 2/10] RUN apk update &&     apk add         curl         git         screen                                                                                                                                                                                                                                                                                                  0.0s
 => ERROR [ 3/10] RUN if expr "1.19" : '^1\.[0-9]|1[0-6]\.[0-9]*$' > /dev/null ; then         apk add openjdk8;     elif expr "1.19" : '^1\.17\.[0-9]*$' > /dev/null ; then         apk add openjdk16;     elif expr "1.19" : '^1\.18\.[0-9]*$' > /dev/null ; then         apk add openjdk17;     elif expr "1.19" : '^1\.19\.[0-9]*$' > /dev/null ; then             apk add openjdk17;  0.2s
------
 > [ 3/10] RUN if expr "1.19" : '^1\.[0-9]|1[0-6]\.[0-9]*$' > /dev/null ; then         apk add openjdk8;     elif expr "1.19" : '^1\.17\.[0-9]*$' > /dev/null ; then         apk add openjdk16;     elif expr "1.19" : '^1\.18\.[0-9]*$' > /dev/null ; then         apk add openjdk17;     elif expr "1.19" : '^1\.19\.[0-9]*$' > /dev/null ; then             apk add openjdk17;     else         echo 'Invalid version.' >&2;         exit 1;     fi:
#6 0.127 expr: warning: '^1\.[0-9]|1[0-6]\.[0-9]*$': using '^' as the first character
#6 0.127 of a basic regular expression is not portable; it is ignored
#6 0.127 expr: warning: '^1\.17\.[0-9]*$': using '^' as the first character
#6 0.127 of a basic regular expression is not portable; it is ignored
#6 0.127 expr: warning: '^1\.18\.[0-9]*$': using '^' as the first character
#6 0.127 of a basic regular expression is not portable; it is ignored
#6 0.127 expr: warning: '^1\.19\.[0-9]*$': using '^' as the first character
#6 0.127 of a basic regular expression is not portable; it is ignored
#6 0.128 Invalid version.
------
failed to solve: rpc error: code = Unknown desc = executor failed running [/bin/sh -c if expr "${VERSION}" : '^1\.[0-9]|1[0-6]\.[0-9]*$' > /dev/null ; then         apk add openjdk8;     elif expr "${VERSION}" : '^1\.17\.[0-9]*$' > /dev/null ; then         apk add openjdk16;     elif expr "${VERSION}" : '^1\.18\.[0-9]*$' > /dev/null ; then         apk add openjdk17;     elif expr "${VERSION}" : '^1\.19\.[0-9]*$' > /dev/null ; then             apk add openjdk17;     else         echo 'Invalid version.' >&2;         exit 1;     fi]: exit code: 1
usagiga commented 2 years ago

sed や perl のようなもので置き換えるのがいい…のではないかと…? (使えればなんでもいいという判断であり、ちゃんと比較したわけではありません)

usagiga commented 2 years ago

闇ですが、たとえばこんな風にやれば動きます

RUN JDK_PACKAGE=$(sed -Ee 's/^1.([0-9]|1[0-6])(.[0-9]+)?$/openjdk8/g' <(echo '1.9.128')); \
    JDK_PACKAGE=$(sed -Ee 's/^1.17(.[0-9]+)?$/openjdk16/g' <(echo ${JDK_PACKAGE})); \
    JDK_PACKAGE=$(sed -Ee 's/^1.18(.[0-9]+)?$/openjdk17/g' <(echo ${JDK_PACKAGE})); \
    JDK_PACKAGE=$(sed -Ee 's/^1.19(.[0-9]+)?$/openjdk17/g' <(echo ${JDK_PACKAGE})); \
    apk add ${JDK_PACKAGE}
usagiga commented 2 years ago

動かないのは 1.19 のようなバグフィックスが存在しないバージョンと、 1.16 以前のみだった。 このような条件を正しく記述するなら、素直に ERE を使ったほうがいいだろう。