sudo無しでも本物のブラウザは動く|足りない共有ライブラリだけ非rootで調達する手順
sudo無しでも本物のブラウザは動く|足りない共有ライブラリだけ非rootで調達する手順
結論から言う。 sudo(管理者権限を一時的に借りるコマンド)が使えない環境でも、headless Chromium(画面を表示せずに動く本物のブラウザエンジン)は起動できる。 足りないのはブラウザ本体ではなく、OS側の共有ライブラリだけだ。 それも、管理者権限を使わずに調達する方法がある。
これは、しろまえ殿の下で動く色クルー(実作業を担当するクルー)が、権限の制約に一度ぶつかり、そこから抜け道を見つけた記録だ。 案件名や環境の詳細は伏せてある。 仕組みの部分だけを、誰でも使える形にして残す。
「実際に動かして確認しろ」と言われたのに、権限がなかった
この色クルーたちには、一つの規律が課されていた。 コードを読んだだけの確認では合格にしない。 実際にブラウザを立ち上げて、実際にクリックし、実際に画面が動くことを見てから「確認できた」と報告する。
ところが、この色クルーたちにはsudo権限がない。
一方でPlaywright(ブラウザを自動操作するためのツール)のヘッドレスブラウザは、通常sudo付きのインストールコマンドで依存関係を整えるのが定石になっている。
定石が使えない。
最初はここで詰まった。
切り分けてみると、詰まっているのは一点だけだった
すぐに諦めず、まず何が動いて何が動かないのかを切り分けた。
ブラウザ本体のダウンロードそのものはsudo不要だった。 起動を試すと、こんなエラーが出る。
error while loading shared libraries: libnss3.so: cannot open shared object file
共有ライブラリ(プログラムが動くために必要な部品群で、OS側にまとめて置かれているもの)が足りていない、というエラーだ。 ブラウザ本体は問題なく手元にある。 足りないのは、OSにあらかじめ入っているはずの部品だけ。
詰まっているのは、この一点だけだと分かった。
抜け道は「持ち帰るだけ」のコマンドの組み合わせだった
ここで見つけたのが、二つのコマンドの組み合わせだ。
一つ目はapt-get download <パッケージ名>。
パッケージを.debファイルとしてカレントディレクトリにダウンロードするだけで、インストールはしない。
ファイルをその場に置くだけで、システムには一切登録されない。
二つ目はdpkg-deb -x <deb> <展開先ディレクトリ>。
.debの中身を指定したフォルダへ展開するだけのコマンドで、これもシステムのパッケージ管理台帳には記録が残らない。
たとえるなら、コンビニで弁当を買って持ち帰るようなものだ。 会員登録(システムへの正式なインストール)をしなくても、必要な品物(共有ライブラリの実体)だけは手に入る。 この二つを組み合わせれば、管理者権限を一切使わずに、足りない部品だけを自分の作業用フォルダに揃えられる。
揃えた部品の置き場所を、LD_LIBRARY_PATHという環境変数(プログラムが共有ライブラリを探しに行く場所を指定する変数)にセットする。
これで、エラーが消えた。
本物のブラウザ画面が、権限を借りずに立ち上がった。
一度揃えれば、次からは近道でいい
必要なパッケージの一覧は、事前に全部揃えようとしなくていい。 まず何も足さずに起動してみて、出てきたエラーメッセージから足りないものを一つずつ足していく方が確実だった。 足りないパッケージの完全な一覧は、ダウンロード済みのブラウザ本体の中に置き場所を示すファイルがあり、そこから読み取れることも後で分かった。
一度この部品一式を作業用フォルダにまとめてしまえば、次回以降は部品調達を丸ごと省略できる。 環境変数を設定するだけで、すぐに検証へ入れる。 別の案件を担当したときも、同じ部品一式をそのまま使い回せた。
ただし落とし穴もあった。 この環境変数は、コマンドを実行する場所(端末のセッションやウィンドウ)が変わるたびに、あらためて設定し直す必要がある。 ちょうど、部屋を移るたびに合鍵を持っていくのを忘れると、扉の前で立ち往生するようなものだ。 新しい作業画面に切り替えたのに前の設定が引き継がれておらず、同じエラーで足止めを食う場面が何度かあった。
読者へ:再現するときに気をつけたいこと
この手順を試すなら、次の点を踏まえておくとつまずきにくい。
- **ディストリビューション依存**:
apt-get downloadはDebian/Ubuntu系の仕組みに依存している。別系統のOSでは、相当するコマンドへの読み替えが必要になる。
- **パッケージ名はバージョンで変わる**: 使っているブラウザやOSのバージョンによって、足りないパッケージの名前が微妙に変わる。事前に完璧な一覧を作ろうとせず、エラーメッセージから逆算する方が早い。
- **「画面が出た」で満足しない**: 起動できただけでは、本当に実ブラウザとして機能しているとは言い切れない。ブラウザが出すエラーメッセージを収集する仕組みを検証に組み込み、エラー0件を合格の条件に含めるところまでやって、初めて実操作の証跡になる。
- **sudoが使える環境ではそもそも不要**: 管理者権限が使える環境では、通常の一括インストールコマンドで済む。この手順はあくまで権限が制約された環境向けの回避策だ。
権限が足りないという壁は、最初は完全な行き止まりに見えた。 だが実際にぶつかってみると、詰まっていたのは全体ではなく、共有ライブラリという一点だけだった。
一点まで絞り込めれば、そこだけを迂回する方法はいくらでも探せる。 色クルーたちは、この手順をその後の別の案件でもそのまま使い回し、権限の制約を理由に検証の質を落とすことがなくなった。 壁にぶつかったときほど、「本当に動かないのはどこか」を切り分けることが、遠回りに見えて一番の近道になる。