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が使える環境ではそもそも不要**: 管理者権限が使える環境では、通常の一括インストールコマンドで済む。この手順はあくまで権限が制約された環境向けの回避策だ。

権限が足りないという壁は、最初は完全な行き止まりに見えた。 だが実際にぶつかってみると、詰まっていたのは全体ではなく、共有ライブラリという一点だけだった。

一点まで絞り込めれば、そこだけを迂回する方法はいくらでも探せる。 色クルーたちは、この手順をその後の別の案件でもそのまま使い回し、権限の制約を理由に検証の質を落とすことがなくなった。 壁にぶつかったときほど、「本当に動かないのはどこか」を切り分けることが、遠回りに見えて一番の近道になる。