HomebrewでTklibをインストール
↑ではTklibをHomebrewで入れたTcl/Tkのディレクトリに直接インストールしていましたが、HomebrewのFormulaを作ってインストールした方がいいです。
以下のFormulaでbrew install
すればPlotchartが使えるようになります。
class Tklib < Formula desc "A collection of utility modules for Tk, and a companion to Tcllib" homepage "http://www.tcl.tk/software/tklib/" url "https://core.tcl-lang.org/tklib/attachdownload/tklib-0.7.tar.bz2?page=Downloads&file=tklib-0.7.tar.bz2" version "0.7" sha256 "5a1283a1056350c7cb89fba4af1e83ed2dbfc2e310c5303013faae0b563e5ece" license "TCL" depends_on "tcl-tk" def install system "./configure", "--prefix=#{prefix}", "--with-tclsh=#{Formula["tcl-tk"].opt_bin}/tclsh" system "make", "install-libraries" end end
以上です。
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
動作確認
問題なく動作しました。