M1 MacでDocker Desktopに頼らずにx86_64のlRubyを使うまで(追記2)(未解決)→(解決)
はじめに
M1 Macで、limaを使ってx86_64のIRubyを使ためにいろいろやりましたが、この前のように、
$ docker build --platform linux/amd64 -t iruby .
とすると
/bin/bash: pipefail: No such file or directory
と出てbuildに失敗するようになりました。どうしたものかと調べていると、そもそもlima公式に「Fast mode: Intel containers on ARM VM on ARM Host / ARM containers on Intel VM on Intel Host」という記載がありました。
セットアップ
ここに記載されているとおりにやるだけ。
$ limactl start $ lima sudo systemctl start containerd $ lima sudo nerdctl run --privileged --rm tonistiigi/binfmt --install all
以下のようなDockerfile
を用意。
(IRubyにcztopは不要になったみたいですね。)
FROM jupyter/base-notebook:latest USER root RUN apt-get update \ && apt-get install --no-install-recommends -y \ libczmq-dev \ libtool \ make \ ruby-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN gem install --no-document \ iruby USER $NB_USER RUN iruby register --force
Dockerfile
を置いたディレクトリで以下を実行。
$ nerdctl.lima build --platform linux/amd64 -t iruby .
無事完了したら、以下のコマンドでIRubyを起動。
$ mkdir /tmp/lima $ nerdctl.lima run --platform linux/amd64 -it --rm -p 8888:8888 -e JUPYTER_ENABLE_LAB=yes -v /tmp/lima:/home/jovyan/work iruby
これでオーケーと思ったのですが、以下のメッセージを出力してIRubyが終了してしまいます。
Writing notebook-signing key to /home/jovyan/.local/share/jupyter/notebook_secret Operation not permitted (src/thread.cpp:309)
build時とrun時に--platform
を付けないで(linux/arm64で)動作させると、落ちないんですが…
おわりに
結局、未解決。
ここにあるように、Docker Desktop for macでも同様の現象が起きているようです。
追記
これっぽい。
解決
ここによると「For now, simply using old version (tonistiigi/binfmt:qemu-v6.0.0-12) can resolve the jupyter crash」とのことなので
$ limactl start $ lima sudo systemctl start containerd $ lima sudo nerdctl run --privileged --rm tonistiigi/binfmt:qemu-v6.0.0-12 --install all
とすると、大丈夫でした!
M1 MacでGeant4を使う
はじめに
M1 MacでGeant4をGEANT4_USE_QT=ON
でコンパイルしようとしたらハマりました。
Qtのインストール
Geant4は様々なvisualization driverがありますが、この資料によると「The most recent : Qt + OpenGL」とのことなので、以下のようにQtをHomebrewでインストールしました。
$ brew install qt
インストールされたのはQt 6でした。今思えば、これをこのままにしておいたことが間違い。Geant4がサポートするのはQt 5なので、さらに、
$ brew install qt@5
としました。Qt 5はkeg-onlyなので、/opt/homebrew/include
等にシンボリックリンクが作成されませんでした。
Geant4のコンパイル
ソースはGithubからもってきました。
$ git clone https://github.com/Geant4/geant4.git $ mkdir build $ cd build $ cmake \ -DGEANT4_BUILD_MULTITHREADED=ON \ -DGEANT4_INSTALL_DATA=ON \ -DGEANT4_USE_QT=ON \ -DGEANT4_USE_OPENGL_X11=ON \ -DGEANT4_USE_GDML=ON \ -DGEANT4_USE_XM=ON \ -DGEANT4_USE_SYSTEM_CLHEP=ON \ -DGEANT4_USE_SYSTEM_EXPAT=ON \ -DGEANT4_USE_SYSTEM_ZLIB=ON \ -DCMAKE_INSTALL_PREFIX=/opt/homebrew/Cellar/geant4/11.0.0.beta \ ../geant4
とすると、
Could not find a package configuration file provided by "Qt5Core" with any of the following names: Qt5CoreConfig.cmake qt5core-config.cmake Add the installation prefix of "Qt5Core" to CMAKE_PREFIX_PATH or set "Qt5Core_DIR" to a directory containing one of the above files. If "Qt5Core" provides a separate development package or SDK, be sure it has been installed.
と表示されたので、Qt 5を認識させるためにCMAKE_PREFIX_PATH
を加えました。
$ rm CMakeCache.txt $ cmake \ -DGEANT4_BUILD_MULTITHREADED=ON \ -DGEANT4_INSTALL_DATA=ON \ -DGEANT4_USE_QT=ON \ -DGEANT4_USE_OPENGL_X11=ON \ -DGEANT4_USE_GDML=ON \ -DGEANT4_USE_XM=ON \ -DGEANT4_USE_SYSTEM_CLHEP=ON \ -DGEANT4_USE_SYSTEM_EXPAT=ON \ -DGEANT4_USE_SYSTEM_ZLIB=ON \ -DCMAKE_INSTALL_PREFIX=/opt/homebrew/Cellar/geant4/11.0.0.beta \ -DCMAKE_PREFIX_PATH=/opt/homebrew/opt/qt5 \ ../geant4
こうすると、Qt5Core_DIR
等が/opt/homebrew/opt/qt5/lib/cmake/Qt53DCore
などと設定されたので、Qt 6が入ったままでも問題ないだろうと思っていました。
しかし、
$ make -j4
とすると、
/***/geant4/src/main/source/interfaces/basic/include/G4UIQt.hh:55:7: error: definition of type 'QStringList' conflicts with type alias of the same name class QStringList; ^ /opt/homebrew/include/QtCore/qcontainerfwd.h:64:7: note: 'QStringList' declared here using QStringList = QList<QString>;
とのエラーが。ここで(ちゃんと書いてあるのに)/opt/homebrew/include/QtCore
を参照していることに気づかず、かなり時間をロスしました…
エラーの原因は/opt/homebrew/include
以下にあるQt 6のファイル(シンボリックリンク)なので、/opt/homebrew/include
を参照することになりそうな-DGEANT4_USE_SYSTEM_*
等を省いてcmake
を実行しました。
$ rm CMakeCache.txt $ cmake \ -DGEANT4_BUILD_MULTITHREADED=ON \ -DGEANT4_INSTALL_DATA=ON \ -DGEANT4_USE_QT=ON \ -DGEANT4_USE_GDML=ON \ -DCMAKE_INSTALL_PREFIX=/opt/homebrew/Cellar/geant4/11.0.0.beta \ -DCMAKE_PREFIX_PATH=/opt/homebrew/opt/qt5 \ ../geant4
make
します。
$ make -j4
… [100%] Built target G4physicslists
コンパイルできたのでインストール。
$ make install
examples/basic/B1をコンパイル&実行してみた
$ pushd /opt/homebrew/Cellar/geant4/11.0.0.beta/bin && \ source geant4.sh && \ popd $ mkdir ../build_example $ cd ../build_example $ cmake ../geant4/examples/basic/B1 $ make $ ./exampleB1
できました🎉
おわりに
$ brew unlink qt
とした方がいいかも。
M1 MacでDocker Desktopに頼らずにx86_64のlRubyを使うまで(追記)
はじめに
前回、limaでM1 MacでDocker Desktopに頼らずにx86_64のIRubyを使うまでを記載しましたが、こちらで紹介されているとおりにlima + Docker CLIにした上で、--platform linux/amd64
で buildした方がいい感じ。
構築
こちらで説明されているとおりに環境を構築します。ただしパッチを当てたQEMUのインストールは今は不要だと思います。
あとは、前回同様以下のようなDockerfile
を用意。
FROM jupyter/base-notebook:latest USER root RUN apt-get update \ && apt-get install --no-install-recommends -y \ libczmq-dev \ libtool \ make \ ruby-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN gem install --no-document \ cztop \ iruby USER $NB_USER RUN iruby register --force
Dockerfile
を置いたディレクトリで以下を実行。
$ docker build --platform linux/amd64 -t iruby .
無事完了したら、以下のコマンドでIRubyを起動。
$ mkdir /tmp/lima $ docker run -it --rm -p 8888:8888 -e JUPYTER_ENABLE_LAB=yes -v /tmp/lima:/home/jovyan/work iruby
表示されるhttp://127.0.0.1:8888/lab?token=…
にブラウザでアクセスすると、x86_64のlRubyが使えました。
おわりに
aarch64では使えないneilslater/convolverも動きました。
すばらしい。
M1 MacでDocker Desktopに頼らずにx86_64のlRubyを使うまで
はじめに
Docker Desktopと同様に、limaでも、M1 Macでx86_64のIRubyが動作します。以下、その手順です。
limaを使えるようにする
前回の記事のqemu-virglをインストールするところまで実施します。
x86_64のlimaを起動
$ limactl start amd64
amd64
の部分は何でもよいです。
以下のように表示されるので、矢印キーでOpen an editor to override the configuration
を選択してreturn。
? Creating an instance "amd64" [Use arrows to move, type to filter] Proceed with the default configuration > Open an editor to override the configuration Exit
エディタが起動するので、以下のように書き換えて保存し終了。
@@ -4,7 +4,7 @@ # Arch: "default", "x86_64", "aarch64". # "default" corresponds to the host architecture. -arch: "default" +arch: "x86_64" # An image must support systemd and cloud-init. # Ubuntu and Fedora are known to work. @@ -49,7 +49,7 @@ # A localhost port of the host. Forwarded to port 22 of the guest. # Currently, this port number has to be specified manually. # Default: none - localPort: 60022 + localPort: 61022 # Load ~/.ssh/*.pub in addition to $LIMA_HOME/_config/user.pub . # This option is useful when you want to use other SSH-based # applications such as rsync with the Lima instance.
x86_64のLinuxイメージのダウンロードと環境構築が始まります。結構時間がかかります。
IRubyの構築と起動
以下のようなDockerfile
を用意。
FROM jupyter/base-notebook:latest USER root RUN apt-get update \ && apt-get install --no-install-recommends -y \ libczmq-dev \ libtool \ make \ ruby-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN gem install --no-document \ cztop \ iruby USER $NB_USER RUN iruby register --force
Dockerfile
を置いたディレクトリで以下を実行。
$ limactl shell amd64 nerdctl build -t iruby .
とても時間がかかります。私の環境では30分以上かかりました。コーヒーを飲みながら待ちます☕
無事完了したら、以下のコマンドでIRubyを起動。
$ mkdir /tmp/lima $ limactl shell amd64 nerdctl run -it --rm -p 8888:8888 -e JUPYTER_ENABLE_LAB=yes -v /tmp/lima:/home/jovyan/work iruby
ブラウザでアクセス
表示されるhttp://127.0.0.1:8888/lab?token=…
にブラウザでアクセス
すばらしい。
おわりに
なぜこんなことをしているかというと、手元のIRuby notebookで使っている neilslater/convolverがaarch64では使えないから。
icm7216/narray-convolveを使えばいいのでは? まぁ、そうですね…
M1 MacでDocker Desktopに頼らずにJupyter Labを使う(たぶん)最短の手順
はじめに
Jupyter Labをたまに使いたい私にはlimaはとてもありがたいツール。limaの開発はとても活発で頭が下がる思いです。
以下はJupyter Labを使えるようにするまでの手順メモです。
Homebrewをインストール
Homebrewをインストール。詳細は割愛。
limaをインストール
$ brew install lima
依存関係で入るqemuをunlinkしてqemu-virglをインストール
hvfパッチが当たったqemuでないと動かないらしいので、依存関係で入るqemuをunlinkしてqemu-virglをインストール
依存関係で入るqemuがアップデートされてqemu-virglを入れる必要がなくなりました。
limaを起動
$ limactl start
以下のように表示されるのでそのままreturn
? Creating an instance "default" [Use arrows to move, type to filter] > Proceed with the default configuration Open an editor to override the configuration Exit
Jupyter Labの構築と起動
$ mkdir /tmp/lima $ lima nerdctl run -it --rm -p 8888:8888 -e JUPYTER_ENABLE_LAB=yes -v /tmp/lima:/home/jovyan/work jupyter/base-notebook
ブラウザでアクセス
表示されるhttp://127.0.0.1:8888/lab?token=…
にブラウザでアクセス
すばらしい。
おわりに
実は
$ brew install jupyterlab
が最短? いや
が、最短です。
参考
Docker Desktop なしで動いた✨
— Tori Hara (@toricls) 2021年9月1日
M1 Mac で Patched QEMU、Lima をインストール、alias docker="lima nerdctl" して docker ps するところまで Gist にログを残した
nerdctl が "Docker-compatible CLI for containerd" を謳っているだけあってホントにそのままですごいhttps://t.co/xjta4Mx23u pic.twitter.com/mqmwTnpQe2
MacBook Air(M1, 2020)上でRuby/Tkを使ってPlotchart
久しぶりの更新。
はじめに
MacBook Air(M1, 2020)を手に入れたので、Ruby/Tkを使ってPlotchartできるようにします。
Homebrewのインストール
なにはともあれHomebrewをインストールします。詳細は割愛します。
Rubyのインストール
$ brew install ruby
tcl-tkのインストール
$ brew install tcl-tk
tklibのインストール
ここからtklibのソースをダウンロードします。現時点でtklib-0.6.tar.bz2
から7年ぶり2020年2月にリリースされた
tklib-0.7.tar.bz2
が最新のようです(ここのブログも5年ぶりの更新ですが)。
ともかく、展開してインストールします。
$ tar xvf tklib-0.7.tar.bz2 $ cd tklib-0.7 $ PATH="$(brew --prefix tcl-tk)/bin:$PATH" \ ./configure --prefix=$(brew --prefix tcl-tk) $ make install
gemのインストール
Ruby本体から分離されてgemになっているRuby/Tkをインストールします。
$ PATH="$(brew --prefix tcl-tk)/bin:$PATH" \ gem install tk
動作確認
問題なく動作しました。
各OSのPATHの初期値
はじめに
FreeBSD 10.1で
$ pkg install ctags
として、Exuberant Ctagsを入れたのに
$ ctags -R ctags: illegal option -- R usage: ctags [-BFTaduwvx] [-f tagsfile] file ...
と言われます。/usr/local/bin/ctags
ではなく/usr/bin/ctags
が呼ばれていて、FreeBSDのPATH
の初期値が、Debianと違うことに今さら気付きました。以下、自分のためのメモです。
Debian Sidの場合
/etc/login.defs
で設定。
ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
/usr/bin
よりも/usr/local/bin
が優先される。
OSX Yosemiteの場合
/etc/paths
(と/etc/paths.d/
)で設定
/usr/local/bin /usr/bin /bin /usr/sbin /sbin
/usr/bin
よりも/usr/local/bin
が優先される。
FreeBSD 10.1の場合
/etc/login.conf
で設定
default:\ :passwd_format=sha512:\ :copyright=/etc/COPYRIGHT:\ :welcome=/etc/motd:\ :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\ :path=/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin ~/bin:\
/usr/local/bin
よりも/usr/bin
が優先される。
最後に
わかってないと地味にひっかかりそう…