こんにちは、mabuiです。
今回は備忘録としてグラフ作成ライブラリ、Plotlyで使用される、画像出力のためのライブラリ、plotly-orcaをCentOS7でインストール・実行するまでの作業ログになります。
condaでインストール:失敗
インストール方法が3通りあって、まずはAnacondaでインストールする方法を試して見ましたが、ダメでした。一応ログとして残しておきます。
CentOS7でLinuxbrewをインストールして、pyenvでanacondaするまではここに纏めました
condaでインストール
1 2 |
conda install -c plotly plotly-orca |
orcaコマンド実行
1 2 3 |
$ orca /home/mabui/.pyenv/versions/anaconda3-4.0.0/lib/orca_app/orca: error while loading shared libraries: libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory |
この時点では共有ライブラリがなく、エラーになりました。
共有ライブラリとはプログラムの実行時にロードされて、共有で使用されるライブラリで、libgtk-x11-2.0.so.0
のようにlib~.so~
という名付けがされています。
実行ファイルが必要とする共有ライブラリは、ldd
コマンドで確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
$ ldd /home/mabui/.pyenv/versions/anaconda3-4.0.0/lib/orca_app/orca ... # 不足しているライブラリのログ libgtk-x11-2.0.so.0 => not found libgdk-x11-2.0.so.0 => not found libpangocairo-1.0.so.0 => not found libatk-1.0.so.0 => not found libcairo.so.2 => not found libgdk_pixbuf-2.0.so.0 => not found libpango-1.0.so.0 => not found libfontconfig.so.1 => not found libfreetype.so.6 => not found libX11-xcb.so.1 => not found libxcb.so.1 => not found libXi.so.6 => not found libXcursor.so.1 => not found libXdamage.so.1 => not found libXrandr.so.2 => not found libXcomposite.so.1 => not found libXext.so.6 => not found libXfixes.so.3 => not found libXrender.so.1 => not found libX11.so.6 => not found libXtst.so.6 => not found libXss.so.1 => not found libgconf-2.so.4 => not found libasound.so.2 => not found libcups.so.2 => not found ... |
不足している共有ライブラリだけでもこれだけありました。
yum whatprovides
コマンドで、共有ライブラリがどのパッケージからインストールされるかを調べます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
sudo yum whatprovides \ */libgtk-x11-2.0.so.0 \ */libgdk-x11-2.0.so.0 \ */libpangocairo-1.0.so.0 \ */libatk-1.0.so.0 \ */libcairo.so.2 \ */libgdk_pixbuf-2.0.so.0 \ */libpango-1.0.so.0 \ */libfontconfig.so.1 \ */libfreetype.so.6 \ */libX11-xcb.so.1 \ */libxcb.so.1 \ */libXi.so.6 \ */libXcursor.so.1 \ */libXdamage.so.1 \ */libXrandr.so.2 \ */libXcomposite.so.1 \ */libXext.so.6 \ */libXfixes.so.3 \ */libXrender.so.1 \ */libX11.so.6 \ */libXtst.so.6 \ */libXss.so.1 \ */libgconf-2.so.4 \ */libasound.so.2 \ */libcups.so.2 |
上記で調べたパッケージを重複を省いて一括インストールしていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
sudo yum install -y \ gtk2-2.24.31-1.el7.i686 \ gtk2-2.24.31-1.el7.x86_64 \ pango-1.42.4-1.el7.i686 \ pango-1.42.4-1.el7.x86_64 \ atk-2.28.1-1.el7.i686 \ atk-2.28.1-1.el7.x86_64 \ cairo-1.15.12-3.el7.i686 \ cairo-1.15.12-3.el7.x86_64 \ gdk-pixbuf2-2.36.12-3.el7.i686 \ gdk-pixbuf2-2.36.12-3.el7.x86_64 \ fontconfig-2.13.0-4.3.el7.i686 \ fontconfig-2.13.0-4.3.el7.x86_64 \ freetype-2.8-12.el7.i686 \ freetype-2.8-12.el7.x86_64 \ libX11-1.6.5-2.el7.i686 \ libX11-1.6.5-2.el7.x86_64 \ libxcb-1.13-1.el7.i686 \ libxcb-1.13-1.el7.x86_64 \ libXi-1.7.9-1.el7.i686 \ libXi-1.7.9-1.el7.x86_64 \ libXcursor-1.1.15-1.el7.i686 \ libXcursor-1.1.15-1.el7.x86_64 \ libXdamage-1.1.4-4.1.el7.i686 \ libXdamage-1.1.4-4.1.el7.x86_64 \ libXrandr-1.5.1-2.el7.i686 \ libXrandr-1.5.1-2.el7.x86_64 \ libXcomposite-0.4.4-4.1.el7.i686 \ libXcomposite-0.4.4-4.1.el7.x86_64 \ libXext-1.3.3-3.el7.i686 \ libXext-1.3.3-3.el7.x86_64 \ libXfixes-5.0.3-1.el7.i686 \ libXfixes-5.0.3-1.el7.x86_64 \ libXrender-0.9.10-1.el7.i686 \ libXrender-0.9.10-1.el7.x86_64 \ libXtst-1.2.3-1.el7.i686 \ libXtst-1.2.3-1.el7.x86_64 \ libXScrnSaver-1.2.2-6.1.el7.i686 \ libXScrnSaver-1.2.2-6.1.el7.x86_64 \ GConf2-3.2.6-8.el7.i686 \ GConf2-3.2.6-8.el7.x86_64 \ alsa-lib-1.1.6-2.el7.i686 \ alsa-lib-1.1.6-2.el7.x86_64 \ 1:cups-libs-1.6.3-35.el7.i686 \ 1:cups-libs-1.6.3-35.el7.x86_64 |
ここまででorca
コマンドが実行可能になりますが、反応しませんでした。
1 2 3 |
$ orca $ |
追記:condaのリトライで成功
下記で紹介するxvfbを使用してコマンド通りました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ xvfb-run -a ~/.pyenv/shims/orca "$@" Plotly's image-exporting utilities Usage: orca [--version] [--help] <command> [<args>] Available commands: - graph [or plotly-graph, plotly_graph] Generates an image of plotly graph from inputted plotly.js JSON attributes. For more info, run `orca graph --help`. - serve [or server] Boots up a server with one route per available export component For more info, run `orca serve --help`. |
スタンドアローンバイナリでインストール:成功
orcaのリリースページから、Appimageのバイナリファイルをダウンロードして、Dockerfileの置いているディレクトリに置きます。
そしてdocker run
のvolumeオプションでディレクトリ内のファイルをコンテナと共有して起動させます。
1 2 3 |
# docker run -v [ホストディレクトリの絶対パス]:[コンテナの絶対パス] [イメージ名] [コマンド] $ docker run -itv /Users/hogehoge:/home/mabui centos7 |
共有したorca AppImageを実行可能にします。
1 2 |
$ chmod +x orca-1.2.1-x86_64.AppImage |
orca AppImageを指すシンボリックリンクを作成します。
1 2 |
$ sudo ln -s /home/mabui/orca-1.2.1-x86_64.AppImage /usr/local/bin/orca |
FUSEがないため、実行時にエラーになりました。
1 2 3 4 5 6 7 8 9 |
-bash-4.2$ orca dlopen(): error loading libfuse.so.2 AppImages require FUSE to run. You might still be able to extract the contents of this AppImage if you run it with the --appimage-extract option. See https://github.com/AppImage/AppImageKit/wiki/FUSE for more information |
AppImageを動かすためにepel, FUSEをインストール、有効化します
https://github.com/AppImage/AppImageKit/wiki/FUSE
1 2 3 4 5 6 7 |
$ sudo yum -y install epel-release $ sudo yum --enablerepo=epel -y install fuse-sshfs $ sudo modprobe fuse $ sudo groupadd fuse $ user="$(whoami)" $ sudo usermod -a -G fuse "$user" |
DockerコンテナではそのままAppimageを使えないようなので、ビルドスクリプトでAppImageを抽出します。
1 2 |
$ ./orca-1.2.1-x86_64.AppImage --appimage-extract |
抽出したプログラムに向けて、シンボリックリンクを貼り直します。
1 2 |
$ sudo ln -sf /home/mabui/squashfs-root/app/orca /usr/local/bin/orca |
依存ライブラリは既にインストール済みなのでorca
コマンドを実行しましたが、反応なしでした。
1 2 3 |
$ orca $ |
どうやらxvfbからorcaを実行する必要がありそうです。
1 2 3 4 |
The Electron runtime requires the presence of an active X11 display server, but many server Linux distributions (e.g. Ubuntu Server) do not include X11 by default. If you do not wish to install X11 on your server, you may install and run orca with Xvfb instead. ElectronランタイムにはアクティブなX11ディスプレイサーバーが必要ですが、多くのサーバーLinuxディストリビューション(Ubuntuサーバーなど)にはデフォルトでX11が含まれていません。サーバーにX11をインストールしたくない場合は、代わりにorcaをXvfbと共にインストールして実行してください。 |
xvfbをインストールして、orcaコマンドを、自作のシェルスクリプト実行パスに置き換えます。
xvfbのインストール
1 2 |
sudo yum -y install xorg-x11-server-Xvfb |
orca実行パスのシンボリックリンクを、シェルに置き換えます。
1 2 3 4 5 6 7 |
$ which orca /usr/local/bin/orca $ sudo rm /usr/local/bin/orca $ sudo vim /usr/local/bin/orca |
orcaファイルには下記を記載します。
1 2 3 |
#!/bin/bash xvfb-run -a /home/mabui/squashfs-root/app/orca "$@" |
作成したシェルのユーザー・権限変更をして、
1 2 3 |
$ sudo chown mabui:mabui /usr/local/bin/orca $ chmod 777 /usr/local/bin/orca |
コマンドが通りました!
1 2 3 4 5 6 7 8 9 10 11 12 13 |
-bash-4.2$ orca Plotly's image-exporting utilities Usage: orca [--version] [--help] <command> [<args>] Available commands: - graph [or plotly-graph, plotly_graph] Generates an image of plotly graph from inputted plotly.js JSON attributes. For more info, run `orca graph --help`. - serve [or server] Boots up a server with one route per available export component For more info, run `orca serve --help`. |