概要
Amazon Linux で Headless Chrome を実行しようとしたところ、Chrome のインストールで色々ハマったので手順を残しておく。
インストールしたバージョンは以下の通り。
- Amazon Linux 2018.03
- Google Chrome 71.0.3578.98
問題点
Amazon Linux には GUI 関連のパッケージが提供されていないため、そのまま Chrome をパッケージでインストールしようとすると依存関係のエラーが多発します。
ここ とか ここ で紹介されている以下のスクリプトを実行してみたが、同様に依存関係の解決で無限ループにハマってうまく動きませんでした。
Chrome のアップデートにより依存関係が変わったことが原因と思われます。
# curl https://intoli.com/install-google-chrome.sh | bash
...
Finding dependency for libwayland-egl.so.1
Finding dependency for libwayland-egl.so.1
Finding dependency for libwayland-egl.so.1
Finding dependency for libwayland-egl.so.1
Finding dependency for libwayland-egl.so.1
...
インストール手順
Headless で実行することが前提のため、GUI 関連の依存パッケージは無視して必要最低限のみインストールします。
Amazon Linx のリポジトリにないものは CentOS7 と Fedora のリポジトリから取得しました。
まず、依存パッケージをインストール。
$ sudo yum install -y cups-libs dbus-glib libXrandr libXcursor libXinerama cairo cairo-gobject pango ipa-gothic-fonts ipa-mincho-fonts
$ sudo rpm -ivh --nodeps http://mirror.centos.org/centos/7/os/x86_64/Packages/atk-2.28.1-1.el7.x86_64.rpm
$ sudo rpm -ivh --nodeps http://mirror.centos.org/centos/7/os/x86_64/Packages/at-spi2-atk-2.26.2-1.el7.x86_64.rpm
$ sudo rpm -ivh --nodeps http://mirror.centos.org/centos/7/os/x86_64/Packages/at-spi2-core-2.28.0-1.el7.x86_64.rpm
$ sudo rpm -ivh --nodeps http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/20/Fedora/x86_64/os/Packages/g/GConf2-3.2.6-7.fc20.x86_64.rpm
$ sudo rpm -ivh --nodeps http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/20/Fedora/x86_64/os/Packages/l/libXScrnSaver-1.2.2-6.fc20.x86_64.rpm
$ sudo rpm -ivh --nodeps http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/20/Fedora/x86_64/os/Packages/l/libxkbcommon-0.3.1-1.fc20.x86_64.rpm
$ sudo rpm -ivh --nodeps http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/20/Fedora/x86_64/os/Packages/l/libwayland-client-1.2.0-3.fc20.x86_64.rpm
$ sudo rpm -ivh --nodeps http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/20/Fedora/x86_64/os/Packages/l/libwayland-cursor-1.2.0-3.fc20.x86_64.rpm
$ sudo rpm -ivh --nodeps http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/20/Fedora/x86_64/os/Packages/g/gtk3-3.10.4-1.fc20.x86_64.rpm
$ sudo rpm -ivh --nodeps http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/16/Fedora/x86_64/os/Packages/gdk-pixbuf2-2.24.0-1.fc16.x86_64.rpm
次に google の公式リポジトリを登録。
$ sudo touch /etc/yum.repos.d/google-chrome.repo
$ echo -e "[google-chrome]\nname=google-chrome\nbaseurl=http://dl.google.com/linux/chrome/rpm/stable/\$basearch\nenabled=1\ngpgcheck=1\ngpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub" | sudo tee -a /etc/yum.repos.d/google-chrome.repo
最後に rpm をダウンロードしてインストール。
$ sudo yumdownloader google-chrome-stable
$ sudo rpm -i --nodeps google-chrome-stable-71.0.3578.98-1.x86_64.rpm
警告: google-chrome-stable-71.0.3578.98-1.x86_64.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 7fac5991: NOKEY
Error: Could not find xdg-icon-resource
警告: %post(google-chrome-stable-71.0.3578.98-1.x86_64) スクリプトの実行に失敗しました。終了ステータス 1
xdg-icon-resource が見つからないとエラーが発生していますが、これは GUI 環境用のアイコンを登録する処理なので無視します。
これで /opt/google/chrome/ にインストールされました。
動作確認
Google トップページのスクリーンショットを撮ってみます。
$ /opt/google/chrome/chrome --headless --disable-gpu --window-size=1024,768 --hide-scrollbars --screenshot='google.png' https://www.google.co.jp/
/opt/google/chrome/chrome: /lib64/libdbus-1.so.3: no version information available (required by /usr/lib64/libatk-bridge-2.0.so.0)
/opt/google/chrome/chrome: /lib64/libdbus-1.so.3: no version information available (required by /usr/lib64/libatspi.so.0)
/opt/google/chrome/chrome: /lib64/libdbus-1.so.3: no version information available (required by /usr/lib64/libatk-bridge-2.0.so.0)
/opt/google/chrome/chrome: /lib64/libdbus-1.so.3: no version information available (required by /usr/lib64/libatspi.so.0)
Fontconfig warning: "/etc/fonts/conf.d/30-metric-aliases.conf", line 84: Having multiple <family> in <alias> isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/30-metric-aliases.conf", line 84: Having multiple <family> in <alias> isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/30-metric-aliases.conf", line 93: Having multiple <family> in <alias> isn't supported and may not work as expected
...
Fontconfig warning: "/etc/fonts/conf.d/45-latin.conf", line 75: Having multiple <family> in <alias> isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/45-latin.conf", line 75: Having multiple <family> in <alias> isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/65-2-ipa-mincho.conf", line 17: Having multiple values in <test> isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/65-3-ipa-gothic.conf", line 24: Having multiple values in <test> isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/conf.d/65-3-ipa-gothic.conf", line 37: Having multiple values in <test> isn't supported and may not work as expected
Fontconfig warning: "/etc/fonts/fonts.conf", line 82: unknown element "blank"
[0118/143501.485043:ERROR:gpu_process_transport_factory.cc(967)] Lost UI shared context.
/proc/self/exe: /lib64/libdbus-1.so.3: no version information available (required by /usr/lib64/libatk-bridge-2.0.so.0)
/proc/self/exe: /lib64/libdbus-1.so.3: no version information available (required by /usr/lib64/libatspi.so.0)
[0118/143502.969819:INFO:headless_shell.cc(546)] Written to file google.png.
取得した画像が以下。
ライブラリやフォント関連の warning が大量に表示されましたが、スクリーンショット自体は正常に撮れていました。
日本語もOK。
最後に
GUI 系の依存パッケージを無視することで Amazon Linux に Chrome がインストールできました。
これからテストや JavaScript の実行結果取得等に活用したいと思います。