結論から言いますと、管理者権限のない共用の Xserver で Chrome を起動させることは不可能です。挑戦しても多くの時間を浪費するだけになるため、別の方法を検討したほうがいいです。
今回 私は1週間毎日挑戦し、休みの日は朝から晩まで試行を繰り返しました。その結果たどり着いた結論になります。Chromeを正式にインストールせず、バイナリで直接実行する環境を整えることはほぼ不可能です。
今回はその理由と直面したエラーのご紹介をさせて頂きます。
なおこれまで行ってきた全行程は以下の通りです。
① Chrome バイナリ を入手
② Chrome の動作に必要な GLIBC を ユーザ環境に構築
③ Chrome のライブラリに必要な GLIB を ユーザ環境に構築 ⇦ 前回の記事はここまで完了
④ Chrome が必要とするライブラリを手動でダウンロード
⑤ ④のライブラリを展開してパスを通す ⇦ 今回の記事ではここまで実行しました
不可能な理由
調査して分かったことなのですが、Chrome は Chrome自身に最適化された ダイナミックリンカー(ld.so) を使用しなければ起動できません。これにより GLIBC をローカルに構築するという方法ではChromeの起動は絶対に不可能です。
Chrome を起動できない根拠
以下は実際に Chrome を起動させようとしたコマンドです。
/home/xs******/local_glibc_2.39/lib/ld-linux-x86-64.so.2 –library-path $HOME/chrome-libs $HOME/temp_chrome/opt/google/chrome/chrome
ローカルにインストールした GLIBC のダイナミックリンカー (ld-linux-x86-64.so.2) からChromeのバイナリを指定しています。この時、Chromeに依存するライブラリが足りないとエラーとなりますが、それは 手動で入手 することで解決が可能です。それらは $HOME/chrome-libs に入れて –library-path で指定します。
しかし、ライブラリを全て入手し終わっても 絶対に解決できないエラーが発生 します。それがこちらです。
unrecognized option ‘–type=zygote’
Chrome は Zygoteプロセス を起動する際に、ld-linux-x86-64.so.2
(ダイナミックリンカー) に --type=zygote
のオプションを渡しています。
「Zygote(ザイゴート)」は、Google Chrome(およびChromium)などの多くの現代的なLinuxアプリケーションで採用されている、プロセスの起動を高速化し、メモリを効率的に共有するための特別なプロセスです。
この Zygote は古くからChromeに搭載されていますが、私が入手した GLIBC は 2024年にリリースされた 比較的新しいものです。その新しい GLIBC のリンカーが zygote
オプションを認識できない のです。これはそもそも 通常配布されている GLIBC に Chrome を起動する機能が備わっていない ということです。
この章の結論
ローカルに構築した GLIBC では Chrome の起動に必要な zygote
オプション が認識できないため Chromeの起動 はできません。
もともとOSに備わっている GLIBC を利用しても不可能
先ほどの結論で ローカルに構築した GLIBC のリンカーが Chrome のオプションを認識しないため Chrome の起動ができないというご説明をしました。では、もともと OSに備わっている GLIBC を利用すれば Chrome を起動できるのではないでしょうか。
なぜなら、管理者権限があって Chrome をインストールできれば使用できますよね?ということは、もともとOSに備わっている GLIBC のリンカーには Chrome を起動させる機能が備わっている のです。
機能が備わっている理由
各Linuxディストリビューション(例: Ubuntu, Rocky Linux, Fedoraなど)は、GLIBCの安定版リリースを基盤としつつ、独自のパッチを適用して再ビルドしています。
--type=zygote
のような特殊なオプションを認識させるために、ディストリビューション独自のパッチによってGLIBCのリンカーに 機能が追加されている のです。
もともと備わっている GLIBC で実行した結果
これも結論から言いますと、Chromeの起動はできませんでした。実行結果は以下の通りです。
# エラーの抜粋
/home/xs******/temp_chrome/opt/google/chrome/chrome: /usr/lib64/libc.so.6: version ’GLIBC_2.38' not found
(required by /home/xs******/chrome-libs/libtasn1.so.6)
これが、私が最初に ローカル環境に GLIBC を構築した理由です。各ライブラリが GLIBC に対して 新しいバージョンを要求しています。ですので、先に 新しい GLIBC を構築したのです。
最終的な結論
もともと備わっている GLIBC では Chrome を実行した際に ライブラリ が GLIBC の新しいバージョンを要求しエラーとなります。新しい GLIBC を構築しても Chrome の要求する Zygoteオプション に対応できません。
従いまして、Chrome を正規の方法でインストールできない環境においては、Chrome の起動は非常に困難という結論になります。
今回の挑戦は以上になります。
この記事が皆様のお役に立てれば幸いです。
以下は、行った操作やダウンロードしたライブラリをご参考までに載せておきます。
ではまた。
※参考 行った操作 と ライブラリ
ライブラリの入手方法
① rpmfind.net から必要なパッケージを入力し Search ボタンをクリックします。画面に表示された x84_64版のライブラリを探し ○○.rpm をダウンロードします。この方法で9割ほどのライブラリは 入手できます。 ただ 64bit版が 存在しない場合が 1割 くらいありました。その場合は ② のサイトから探しました。
② pkgs.org からも入手できます。
③ サーバーにもとから存在しているライブラリを検索する
find / -name ライブラリ名 2>/dev/null
見つかったら 保存先に コピーします。
cp -p 見つかったライブラリのパス 保存先のパス
入手したライブラリの展開方法
rpm2cpio コマンドと cpio コマンド で展開します。
rpm2cpio パッケージ名.rpm | cpio -idmv
しかし cpio コマンドが存在していなかったため、cpio ライブラリをユーザ環境にインストールしました。
cpio のインストール
wgetでダウンロード、インストール、システムへのパス設定を終えれば、すぐに使い始められます。
wget https://ftp.gnu.org/gnu/cpio/cpio-2.14.tar.gz
tar -xvf cpio-2.14.tar.gz
cd cpio-2.14
./configure –prefix=$HOME/local/cpio # $HOME/local/cpio は好きなインストールパスに変更
make
make install
export PATH=”$HOME/local/cpio/bin:$PATH”
シンボリックリンクを張る
保存したライブラリにシンボリックリンクをはります。例えば libfreetype.so.6.20.2 ライブラリの場合は libfreetype.so.6 とします。これはシステムが要求してきますので、それに合わせましょう。
ln -s $HOME/chrome-libs/libfreetype.so.6.20.2 $HOME/chrome-libs/libfreetype.so.6
筆者が手動でダウンロードしたライブラリ
glibc-hwcaps
libX11.so.6 -> /home/xs123456/chrome-libs/libX11.so.6.4.0
libX11.so.6.4.0
libXau.so.6 -> /home/xs123456/chrome-libs/libXau.so.6.0.0
libXau.so.6.0.0
libXcomposite.so.1 -> /home/xs123456/chrome-libs/libXcomposite.so.1.0.0
libXcomposite.so.1.0.0
libXdamage.so.1 -> /home/xs123456/chrome-libs/libXdamage.so.1.1.0
libXdamage.so.1.1.0
libXext.so.6 -> /home/xs123456/chrome-libs/libXext.so.6.4.0
libXext.so.6.4.0
libXfixes.so.3 -> /home/xs123456/chrome-libs/libXfixes.so.3.1.0
libXfixes.so.3.1.0
libXi.so.6 -> /home/xs123456/chrome-libs/libXi.so.6.1.0
libXi.so.6.1.0
libXrandr.so.2 -> /home/xs123456/chrome-libs/libXrandr.so.2.2.0
libXrandr.so.2.2.0
libXrender.so.1 -> /home/xs123456/chrome-libs/libXrender.so.1.3.0
libXrender.so.1.3.0
libasound.so.2 -> /home/xs123456/chrome-libs/libasound.so.2.0.0
libasound.so.2.0.0
libatk-1.0.so.0 -> /home/xs123456/chrome-libs/libatk-1.0.so.0.25611.1
libatk-1.0.so.0.25611.1
libatk-bridge-2.0.so.0 -> /home/xs123456/chrome-libs/libatk-bridge-2.0.so.0.0.0
libatk-bridge-2.0.so.0.0.0
libatspi.so.0 -> /home/xs123456/chrome-libs/libatspi.so.0.0.1
libatspi.so.0.0.1
libavahi-client.so.3 -> /home/xs123456/chrome-libs/libavahi-client.so.3.2.9
libavahi-client.so.3.2.9
libavahi-common.so.3 -> /home/xs123456/chrome-libs/libavahi-common.so.3.5.4
libavahi-common.so.3.5.4
libblkid.so.1 -> /home/xs123456/chrome-libs/libblkid.so.1.1.0
libblkid.so.1.1.0
libbrotlicommon.so.1 -> /home/xs123456/chrome-libs/libbrotlicommon.so.1.0.9
libbrotlicommon.so.1.0.9
libbrotlidec.so.1 -> /home/xs123456/chrome-libs/libbrotlidec.so.1.0.9
libbrotlidec.so.1.0.9
libbz2.so.1 -> /home/xs123456/chrome-libs/libbz2.so.1.0.6
libbz2.so.1.0.6
libcairo.so.2 -> /home/xs123456/chrome-libs/libcairo.so.2.11804.4
libcairo.so.2.11804.4
libcap.so.2 -> /home/xs123456/chrome-libs/libcap.so.2.73
libcap.so.2.73
libcom_err.so.2 -> /home/xs123456/chrome-libs/libcom_err.so.2.1
libcom_err.so.2.1
libcrypto.so.3 -> /home/xs123456/chrome-libs/libcrypto.so.3.2.4
libcrypto.so.3.2.4
libcups.so.2
libdatrie.so.1 -> /home/xs123456/chrome-libs/libdatrie.so.1.4.0
libdatrie.so.1.4.0
libdbus-1.so.3
libdrm.so.2 -> /home/xs123456/chrome-libs/libdrm.so.2.4.0
libdrm.so.2.4.0
libeconf.so.0 -> /home/xs123456/chrome-libs/libeconf.so.0.7.7
libeconf.so.0.7.7
libexpat.so.1 -> /home/xs123456/chrome-libs/libexpat.so.1.10.2
libexpat.so.1.10.2
libffi.so.7 -> /home/xs123456/chrome-libs/libffi.so.7.1.0
libffi.so.7.1.0
libffi.so.8 -> /home/xs123456/chrome-libs/libffi.so.8.1.4
libffi.so.8.1.4
libfontconfig.so.1 -> /home/xs123456/chrome-libs/libfontconfig.so.1.15.0
libfontconfig.so.1.15.0
libfreetype.so.6 -> /home/xs123456/chrome-libs/libfreetype.so.6.20.2
libfreetype.so.6.20.2
libfribidi.so.0 -> /home/xs123456/chrome-libs/libfribidi.so.0.4.0
libfribidi.so.0.4.0
libgbm.so.1 -> /home/xs123456/chrome-libs/libgbm.so.1.0.0
libgbm.so.1.0.0
libgcc_s.so.1
libgio-2.0.so.0 -> /home/xs123456/chrome-libs/libgio-2.0.so.0.8400.1
libgio-2.0.so.0.8400.1
libglib-2.0.so.0 -> /home/xs123456/chrome-libs/libglib-2.0.so.0.8400.1
libglib-2.0.so.0.8400.1
libgmodule-2.0.so.0 -> /home/xs123456/chrome-libs/libgmodule-2.0.so.0.8400.0
libgmodule-2.0.so.0.8400.0
libgmp.so.10 -> /home/xs123456/chrome-libs/libgmp.so.10.5.0
libgmp.so.10.5.0
libgnutls.so.30 -> /home/xs123456/chrome-libs/libgnutls.so.30.40.3
libgnutls.so.30.40.3
libgobject-2.0.so.0 -> /home/xs123456/chrome-libs/libgobject-2.0.so.0.8400.1
libgobject-2.0.so.0.8400.1
libgraphite2.so.3 -> /home/xs123456/chrome-libs/libgraphite2.so.3.2.1
libgraphite2.so.3.2.1
libgssapi_krb5.so.2 -> /home/xs123456/chrome-libs/libgssapi_krb5.so.2.2
libgssapi_krb5.so.2.2
libharfbuzz.so.0 -> /home/xs123456/chrome-libs/libharfbuzz.so.0.61100.0
libharfbuzz.so.0.61100.0
libhogweed.so.6 -> /home/xs123456/chrome-libs/libhogweed.so.6.10
libhogweed.so.6.10
libidn2.so.0 -> /home/xs123456/chrome-libs/libidn2.so.0.3.8
libidn2.so.0.3.8
libjitterentropy.so.3 -> /home/xs123456/chrome-libs/libjitterentropy.so.3.4.1
libjitterentropy.so.3.4.1
libk5crypto.so.3 -> /home/xs123456/chrome-libs/libk5crypto.so.3.1
libk5crypto.so.3.1
libkeyutils.so.1 -> /home/xs123456/chrome-libs/libkeyutils.so.1.10
libkeyutils.so.1.10
libkrb5.so.3 -> /home/xs123456/chrome-libs/libkrb5.so.3.3
libkrb5.so.3.3
libkrb5support.so.0 -> /home/xs123456/chrome-libs/libkrb5support.so.0.1
libkrb5support.so.0.1
libmount.so.1 -> /home/xs123456/chrome-libs/libmount.so.1.1.0
libmount.so.1.1.0
libnettle.so.8 -> /home/xs123456/chrome-libs/libnettle.so.8.10
libnettle.so.8.10
libnspr4.so
libnss3.so
libnssutil3.so
libp11-kit.so.0 -> /home/xs123456/chrome-libs/libp11-kit.so.0.3.1
libp11-kit.so.0.3.1
libpango-1.0.so.0 -> /home/xs123456/chrome-libs/libpango-1.0.so.0.5600.3
libpango-1.0.so.0.5600.3
libpcre2-8.so.0 -> /home/xs123456/chrome-libs/libpcre2-8.so.0.14.0
libpcre2-8.so.0.14.0
libpixman-1.so.0 -> /home/xs123456/chrome-libs/libpixman-1.so.0.43.4
libpixman-1.so.0.43.4
libplc4.so
libplds4.so
libpng16.so.16 -> /home/xs123456/chrome-libs/libpng16.so.16.44.0
libpng16.so.16.44.0
libselinux.so.1
libsmime3.so
libsystemd.so.0 -> /home/xs123456/chrome-libs/libsystemd.so.0.40.0
libsystemd.so.0.40.0
libtasn1.so.6 -> /home/xs123456/chrome-libs/libtasn1.so.6.6.4
libtasn1.so.6.6.4
libthai.so.0 -> /home/xs123456/chrome-libs/libthai.so.0.3.1
libthai.so.0.3.1
libudev.so.1 -> /home/xs123456/chrome-libs/libudev.so.1.7.10
libudev.so.1.7.10
libunistring.so.5 -> /home/xs123456/chrome-libs/libunistring.so.5.2.0
libunistring.so.5.2.0
libwayland-server.so.0 -> /home/xs123456/chrome-libs/libwayland-server.so.0.22.0
libwayland-server.so.0.22.0
libxcb-randr.so.0 -> /home/xs123456/chrome-libs/libxcb-randr.so.0.1.0
libxcb-randr.so.0.1.0
libxcb-render.so.0 -> /home/xs123456/chrome-libs/libxcb-render.so.0.0.0
libxcb-render.so.0.0.0
libxcb-shm.so.0 -> /home/xs123456/chrome-libs/libxcb-shm.so.0.0.0
libxcb-shm.so.0.0.0
libxcb.so.1 -> /home/xs123456/chrome-libs/libxcb.so.1.1.0
libxcb.so.1.1.0
libxkbcommon.so.0 -> /home/xs123456/chrome-libs/libxkbcommon.so.0.8.0
libxkbcommon.so.0.8.0
libz.so.1 -> /home/xs123456/chrome-libs/libz.so.1.2.13
libz.so.1.2.13
詳細なログを出力する strace のインストール
strace をインストールして詳細なログを確認しました。
wget https://github.com/strace/strace/releases/download/v6.8/strace-6.8.tar.xz
tar -xvf strace-6.8.tar.xz
cd strace-6.8
./configure –prefix=$HOME/local/strace # $HOME/local/strace は好きなインストールパスに変更 make
make install
export PATH=”$HOME/local/strace/bin:$PATH”
strace
(System Trace)は、LinuxやUnix系オペレーティングシステムで利用可能な非常に便利なデバッグツールです。
ライブラリのエラー例
# エラー
/home/xs******/chrome-libs/libharfbuzz.so.0: symbol lookup error: /home/xs******/chrome-libs/libharfbuzz.so.0: undefined symbol: FT_Get_Transform
これは、libharfbuzz.so.0
というライブラリが、FT_Get_Transform
というシンボル(関数や変数)を見つけられない、というエラーです。しかしこれは FreeType ライブラリ (libfreetype.so.6
など) によって提供されているため原因が libfreetype.so.6
に起因しているのです。
このライブラリは以下のサイトでダウンロードしたものでした。
これを以下のサイトのライブラリと置き換えることでこのエラーは解消されました。
ライブラリ同士も依存関係があります。ライブラリが見つからない場合にディストリビューションが分からないものをダウンロードしてもエラーとなり実行できない可能性が高いです。
最終的に実行したコマンドとそのエラー
・実行コマンド
(base) [xs******@sv***** ~]$ /home/xs******/local_glibc_2.39/lib/ld-linux-x86-64.so.2 –library-path $HOME/local_glibc_2.39/lib:/usr/lib64 /home/xs******/bin/strace -o chrome_trace.log -e trace=all -e signal=none /home/xs******/local_glibc_2.39/lib/ld-linux-x86-64.so.2 –library-path $HOME/chrome-libs $HOME/temp_chrome/opt/google/chrome/chrome –noerrdialogs –disable-breakpad –no-sandbox –disable-setuid-sandbox –headless –disable-gpu –remote-debugging-port=9222 –disable-software-rasterizer
・エラー
/home/xs123456/bin/strace: /home/xs123456/local_glibc_2.39/lib/libselinux.so.1: no version information available (required by /home/xs123456/bin/strace)
[0529/155008.476390:WARNING:chrome/app/chrome_main_linux.cc:80] Read channel stable from /home/xs123456/temp_chrome/opt/google/chrome/CHROME_VERSION_EXTRA
/home/xs123456/local_glibc_2.39/lib/ld-linux-x86-64.so.2: unrecognized option ‘–type=zygote’
Try ‘/home/xs123456/local_glibc_2.39/lib/ld-linux-x86-64.so.2 –help’ for more information.
/home/xs123456/local_glibc_2.39/lib/ld-linux-x86-64.so.2: unrecognized option ‘–type=zygote’
Try ‘/home/xs123456/local_glibc_2.39/lib/ld-linux-x86-64.so.2 –help’ for more information.
[4183946:4183964:0529/155008.518416:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are “tcp” and on UNIX “unix”)
[4183946:4183964:0529/155008.518498:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are “tcp” and on UNIX “unix”)
[4183946:4183964:0529/155008.518521:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are “tcp” and on UNIX “unix”)
[4183946:4183964:0529/155008.518528:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are “tcp” and on UNIX “unix”)
/proc/self/exe: unrecognized option ‘–type=utility’
Try ‘/proc/self/exe –help’ for more information.
[4183946:4183964:0529/155008.919568:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are “tcp” and on UNIX “unix”)
[4183946:4183964:0529/155008.934904:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are “tcp” and on UNIX “unix”)
[4183946:4183964:0529/155008.946282:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are “tcp” and on UNIX “unix”)
(process:4183946): GLib-GIO-CRITICAL **: 15:50:08.956: g_settings_schema_source_lookup: assertion ‘source != NULL’ failed
[4183946:4183946:0529/155009.080425:ERROR:dbus/object_proxy.cc:590] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type:
[4183946:4183946:0529/155009.080626:ERROR:content/browser/gpu/gpu_process_host.cc:950] GPU process launch failed: error_code=1002
[4183946:4183946:0529/155009.082679:ERROR:content/browser/network_service_instance_impl.cc:586] Network service crashed, restarting service.
[4183946:4183946:0529/155009.086513:ERROR:dbus/object_proxy.cc:590] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type:
[4183946:4183964:0529/155009.086666:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are “tcp” and on UNIX “unix”)
[4183946:4183964:0529/155009.086701:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are “tcp” and on UNIX “unix”)
[4183946:4183946:0529/155009.087001:ERROR:dbus/object_proxy.cc:590] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type:
/proc/self/exe: unrecognized option ‘–type=utility’
Try ‘/proc/self/exe –help’ for more information.
[4183946:4183946:0529/155009.090309:ERROR:ui/base/accelerators/global_accelerator_listener/global_accelerator_listener_linux.cc:356] Failed to connect to signal: org.freedesktop.portal.GlobalShortcuts.Activated
[4183946:4183946:0529/155009.105269:ERROR:content/browser/gpu/gpu_process_host.cc:950] GPU process launch failed: error_code=1002
[4183946:4183985:0529/155009.106133:ERROR:dbus/object_proxy.cc:590] Failed to call method: org.freedesktop.DBus.Properties.Get: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files
[4183946:4183985:0529/155009.106204:ERROR:dbus/object_proxy.cc:590] Failed to call method: org.freedesktop.UPower.GetDisplayDevice: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files
[4183946:4183985:0529/155009.106267:ERROR:dbus/object_proxy.cc:590] Failed to call method: org.freedesktop.UPower.EnumerateDevices: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files
[4183946:4183946:0529/155009.107787:ERROR:dbus/object_proxy.cc:590] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type:
[4183946:4183946:0529/155009.108056:ERROR:dbus/object_proxy.cc:590] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type:
[4183946:4183946:0529/155009.110217:ERROR:content/browser/network_service_instance_impl.cc:586] Network service crashed, restarting service.
/proc/self/exe: unrecognized option ‘–type=utility’
Try ‘/proc/self/exe –help’ for more information.
[4183946:4183946:0529/155009.125440:ERROR:content/browser/gpu/gpu_process_host.cc:950] GPU process launch failed: error_code=1002
[4183946:4183946:0529/155009.125482:FATAL:content/browser/gpu/gpu_data_manager_impl_private.cc:416] GPU process isn’t usable. Goodbye.
[0530/005009.125799:ERROR:third_party/crashpad/crashpad/util/linux/scoped_ptrace_attach.cc:27] ptrace: Operation not permitted (1)
中止
コメント