Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apple Silicon (M1)のMacでもdocker-compose upしたい #335

Open
banjun opened this issue Dec 25, 2020 · 6 comments
Open

Apple Silicon (M1)のMacでもdocker-compose upしたい #335

banjun opened this issue Dec 25, 2020 · 6 comments

Comments

@banjun
Copy link
Member

banjun commented Dec 25, 2020

M1のMacでdocker-compose upしたところ、途中で止まってしまい起動しなかった(下記のところ)。

Step 6/8 : RUN /scripts/setup.sh
 ---> [Warning] The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
 ---> Running in 4f5332838d16
Creating virtuoso.ini file...
Converting environment variables to ini file...
Updating dba password and sparql update...

手元にM1のMacしかないけれどいますぐPrismDBをローカルで起動して動作確認したいというときのためにワークアラウンドを記載する。修正してマージを目指すというよりは、時代が進んで自然に直るまでの一時的な対策として。直ったときはこのissueはクローズできる。

対策

5bb4084 askomics/virtuoso:7.2.5.1 ではなく tenforce/virtuoso:virtuoso7.2.5 を使うようにしたら起動するようになった。

環境

sw_vers
ProductName:	macOS
ProductVersion:	11.1
BuildVersion:	20C69

sysctl -n machdep.cpu.brand_string
Apple M1

Docker Desktop 0.0.0(1) (Docker-AppleSilicon-Preview7)
@takanakahiko
Copy link
Member

この対応だと Dockerfile の

CMD ["/bin/bash", "/virtuoso.sh"]

で環境変数からのサーバの設定やデータの流し込みと起動をまとめてやっているので、起動が非常に遅くなっちゃうんじゃないかなと思ってます。
PrismDB で採用している CloudRun は、アクセスがあるたびに CMD で指定されたスクリプトが実行されるからです。(逆に RUN で指定されたものはビルド時に実行されるだけなので重い処理でも大丈夫)

基本的に以下のコマンドのように、サーバの準備と起動を別のスクリプトに分けて置き、Dockerfile で指定する必要がありそうです。

RUN /scripts/setup.sh
CMD /scripts/start.sh	

そうすると、 CMD で実行されるコマンドが最小になるため起動が遅くならないはずです。
tenforce/virtuoso:virtuoso7.2.5 を使う場合もそのような対応が必要ですね。

加えて、もともと使ってた RUN /scripts/setup.sh ではデータの流し込みや CORS の設定を行っていましたので、新しい tenforce/virtuoso:virtuoso7.2.5 を使う際にも、そのシェルスクリプトは書く必要がありそうです。


そもそも上記のような対応をしようとしてシェルスクリプトをいじったところ、発生したのが今回の不具合であるという認識です。
ですから、 tenforce/virtuoso:virtuoso7.2.5 を使ったところで、 CloudRun への対応やデータの流し込み、CORS の設定を行う作業をする際に M1 で動かなくなるということはありそうです。

もとのやり方で RUN /scripts/setup.sh で失敗する理由を知りたいので、可能だったら setup.sh の1行目を以下のコマンドにして docker-compose build してもらえると助かります〜

#!/bin/bash -eu

@takanakahiko
Copy link
Member

すみません、説明がうまくいってない気がするので、分かりづらい部分があれば聞いてください〜

@banjun
Copy link
Member Author

banjun commented Dec 27, 2020

masterに戻って #!/bin/bash -eu はそもそも /scripts/setup.sh: line 26: SPARQL_UPDATE: parameter not set でコケたので、 SPARQL_UPDATE=false とか差し込んだとして(↓ではエラーのあとのvim行でいれた)、それで元の状態が再現して、issue本文の一番上にあるとおり、ここで10分以上返ってこない、という感じです。たぶん、 virtuoso-t +wait が完了しない。

image

RUNとCMDそういう挙動をするんですね。つまり開発中(=output.ttlが更新されるような操作をしている)ときはそもそも常にbuildをすればよい。・・・というふうに、CloudRunに移行したPRでREADMEもそういうふうに分かりやすくなっていたということですね。なるほど。

@takanakahiko
Copy link
Member

takanakahiko commented Dec 27, 2020

virtuoso/Dockerfileを FROM tenforce/virtuoso:virtuoso7.2.5 にすると、刺さらなくはなるが、

/scripts/setup.sh: 31: /scripts/setup.sh: cannot open /virtuoso/dump_nquads_procedure.sql: No such file
*** Error 28000: [Virtuoso Driver]CL034: Bad login
at line 0 of Top-Level:

こういう感じのエラーでて、nuxtとvirtuosoは上がるけど、dataをロードできてないっぽく、prismdbっぽいデータはSELECTされない感じだった(data入れなくても返る基本のデータセットはSELECT返る)

これに関しては https://github.com/tenforce/docker-virtuoso にあるファイルがすべて必要っぽいですね。


masterに戻って #!/bin/bash -eu はそもそも /scripts/setup.sh: line 26: SPARQL_UPDATE: parameter not set でコケたので、 SPARQL_UPDATE=false とか差し込んだとして(↓ではエラーのあとのvim行でいれた)、それで元の状態が再現して、issue本文の一番上にあるとおり、ここで10分以上返ってこない、という感じです。たぶん、 virtuoso-t +wait が完了しない。

virtuoso-t +wait が完了しないとなると、バックグラウンドモードではなくフォアグラウンドモードで動かしたらエラーログとか吐いてくれそうな気がしてます。
ここらへんのパラメータをゴチャゴチャやる必要があって面倒そうですけど。

http://manpages.ubuntu.com/manpages/xenial/man1/VIRTUOSO-T.1.html

とはいえ tenforce/virtuoso:virtuoso7.2.5 でも virtuoso-t +wait 自体は使っているのですが、そっちは動いてますからねえ...。

https://github.com/tenforce/docker-virtuoso/blob/master/virtuoso.sh#L55

違いはベースイメージかな..? tenforce/virtuoso:virtuoso7.2.5 は Ubuntuaskomics/virtuoso:7.2.5.1 は alpine  だったり。

@banjun
Copy link
Member Author

banjun commented Dec 27, 2020

なるほどなるほど。さしあたり、 -fd でログはみえたものの、有用なログはなさそう(このログの最後のあと待ちになる)

`virtuoso-t +wait -fd` に変えてみたログ
Creating virtuoso.ini file...
Converting environment variables to ini file...
Updating dba password and sparql update...

		Sun Dec 27 2020
05:30:05 INFO: OpenLink Virtuoso Universal Server
05:30:05 INFO: Version 07.20.3229-pthreads for Linux as of Oct 26 2020
05:30:05 INFO: uses parts of OpenSSL, PCRE, Html Tidy
05:30:05 INFO: SQL Optimizer enabled (max 1000 layouts)
05:30:06 INFO: Compiler unit is timed at 0.001698 msec
05:30:15 INFO: Checkpoint started
05:30:15 INFO: Roll forward started
05:30:15 INFO: Roll forward complete
05:30:15 INFO: Checkpoint started
05:30:16 INFO: Checkpoint finished, log reused
05:30:16 INFO: Checkpoint started
05:30:16 INFO: Checkpoint finished, log reused
05:30:16 INFO: Checkpoint started
05:30:16 INFO: Checkpoint finished, log reused
05:30:17 INFO: Checkpoint started
05:30:17 INFO: Checkpoint finished, log reused
05:30:17 INFO: Checkpoint started
05:30:17 INFO: Checkpoint finished, log reused
05:30:17 INFO: PL LOG: Installing Virtuoso Conductor version 1.00.8783 (DAV)
05:30:18 INFO: PL LOG: Installing with dependencies Virtuoso Conductor version 1.00.8783/2020-10-26 10:14 (DAV)
05:30:18 INFO: Checkpoint started
05:30:18 INFO: Checkpoint finished, log reused
05:30:24 INFO: Checkpoint started
05:30:24 INFO: Checkpoint finished, log reused
05:30:24 INFO: PL LOG: Installation with dependencies complete
05:30:24 INFO: Checkpoint started
05:30:24 INFO: Checkpoint finished, log reused

@takanakahiko
Copy link
Member

なるほど〜、ありがとうございます。
どうしても手元だと確認できないのでありがたいです。

ちなみに自分の環境 ( not M1 ) だとこうなります。

僕の手元で `virtuoso-t +wait -fd` に変えてみたログ
Creating virtuoso.ini file...
Converting environment variables to ini file...
Updating dba password and sparql update...

                Sun Dec 27 2020
05:42:50 INFO: OpenLink Virtuoso Universal Server
05:42:50 INFO: Version 07.20.3229-pthreads for Linux as of Jan 15 2020
05:42:50 INFO: uses parts of OpenSSL, PCRE, Html Tidy
05:42:50 INFO: SQL Optimizer enabled (max 1000 layouts)
05:42:50 INFO: Compiler unit is timed at 0.000580 msec
05:42:53 INFO: Checkpoint started
05:42:54 INFO: Roll forward started
05:42:54 INFO: Roll forward complete
05:42:54 INFO: Checkpoint started
05:42:54 INFO: Checkpoint finished, log reused
05:42:54 INFO: Checkpoint started
05:42:54 INFO: Checkpoint finished, log reused
05:42:54 INFO: Checkpoint started
05:42:54 INFO: Checkpoint finished, log reused
05:42:54 INFO: Checkpoint started
05:42:54 INFO: Checkpoint finished, log reused
05:42:54 INFO: Checkpoint started
05:42:54 INFO: Checkpoint finished, log reused
05:42:54 INFO: PL LOG: Installing Virtuoso Conductor version 1.00.8783 (DAV)
05:42:54 INFO: PL LOG: Installing with dependencies Virtuoso Conductor version 1.00.8783/2020-01-15 15:36 (DAV)
05:42:54 INFO: Checkpoint started
05:42:54 INFO: Checkpoint finished, log reused
05:42:57 INFO: Checkpoint started
05:42:57 INFO: Checkpoint finished, log reused
05:42:57 INFO: PL LOG: Installation with dependencies complete
05:42:57 INFO: Checkpoint started
05:42:57 INFO: Checkpoint finished, log reused
05:42:57 INFO: HTTP/WebDAV server online at 8890
05:42:57 INFO: Server online at 1111 (pid 15)

M1 だと以下2つが始まらないようですね。謎だ。

05:42:57 INFO: HTTP/WebDAV server online at 8890
05:42:57 INFO: Server online at 1111 (pid 15)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants