ウェブサイト検索

BusyBoxとは何ですか、そしてどこで使用されますか?


BusyBoxは、単一のバイナリとしてパッケージ化されたコアUnixユーティリティのコレクションです。これにより、組み込みデバイスなどのリソースが制約されている環境に最適です。完全な配布版には、最も一般的なコマンドのほぼ400があります。

BusyBoxはオープンソースであり、GPLの下でライセンスされています。それは1995年に、1枚のフロッピーに収まるブート可能なシステムを作成することを目的として作られました。複数のコマンドを1つのバイナリにまとめることで、オーバーヘッドが削減され、見かけ上独立したアプリケーション間でのコード共有が可能になります。

BusyBoxには何が含まれていますか?

BusyBoxは、しばしばシェルの一部であるかのように感じられる日常の便利なコマンドを提供します。ユーザーランドツールのような

ls

そして

cat

どこにでも存在していますが、実際にはシェルとは独立した別のユーティリティパッケージに存在しています。多くのLinuxディストリビューションはGNUのcoreutilsを介してこれらのコマンドを提供していますが、他のディストリビューションは代わりにBusyBoxを提供しています。

このプロジェクトは、馴染みのあるコマンド名をシンボリックリンクすることで機能します

/usr/bin

BusyBoxバイナリに。この実行可能ファイルは、その最初の引数として渡された名前に対応する関数を呼び出します。

  • BusyBoxを使って コマンド

    mkdir
    /usr/bin/busybox mkdir
  • 走る

  • GNU Coreutilsを使用して - コマンド

    mkdir
    /usr/bin/mkdir
  • 走る。

コマンドを透明に使用することができます。

mkdir

,

passwd

,

ps

,

tar

、そして

wget

BusyBoxがインストールされると、コマンドは「アプレット」として実装され、機能するBusyBoxの配布物に組み合わされます。フルセットのサイズは約1MBです。アプレットは削除可能なため、バイナリサイズはさらに縮小できます。インストールされているものを確認するには、次のコマンドを実行します。

busybox

引数なしで。

BusyBoxは小さなブート可能なシステムを動かすために作られたため、POSIXシステムを起動し管理するためにユーザーランドに必要なすべてをカバーしています。これは、プロセスIDとして実行できる最小限のinit実装にまで及びます。

1

およびサポートシステムサービス。通常のinitの軽量な代替品としてBusyBoxを採用することができます。

systemd

デーモン。

BusyBoxは意図的に最小限に設計されているため、すべてのコマンドがGNUの対応物のすべての機能を実装しているわけではありません。いくつかのフラグが欠けている場合や、一般的でない状況での動作の違いが見られるかもしれません。これはBusyBoxの洗練された性質の一つのトレードオフです。

BusyBoxはどこで使用されていますか?

BusyBoxは、ディスク使用量が懸念される場所で見つけることができます。Alpineのようなミニマルなオペレーティングシステムや、組み込みデバイスやモバイルシェルのような特定のシナリオで使用されています。

従来のOSディストリビューションを実行していないUnix派生デバイスがBusyBoxを使用している可能性が高いです。ネットワークルーター、スマートTV、現代の車、IoTデバイスで見つけることができます。これらの各設定は、限られたリソースの環境内でコアユーザーランドツールを実行する必要があることが特徴です。

単一のオールインワンバイナリを配送する方が効率的です。すべてのコマンドが共通のコードを共有できるため、スタンドアロンのライブラリをディスクに保存することによる冗長性を減少させます。BusyBoxは他の実装との互換性が良く、GPLの下でライセンスされているため、軽量なユーティリティセットが必要な環境での標準的な選択肢となっています。

組み込みデバイスのベンダーは、BusyBoxのモジュラー性からも恩恵を受けています。IoT製品は、その機能を提供するために、わずか数種類の重要なユーティリティだけを必要とする場合があります。修正されたBusyBoxバイナリを配布することで、数KBのディスクスペースが節約されることがあり、これは大きな節約となる可能性があります。

BusyBoxを試す方法

現在のユーティリティを置き換えることなく、BusyBoxをインストールできます。パッケージマネージャーを使用して追加してください。

busybox

その後、選択したコマンドを追加します。

busybox

アプレットを実行するためのバイナリ:

busybox mkdir test

これにより、コマンドのBusyBoxバージョンが、シェルのデフォルトパスにあるバージョンの代わりに使用されることが保証されます。

BusyBoxを試すもう一つの方法は、その公式Dockerイメージを使用することです:

docker run -it --rm busybox

Dockerがインストールされていれば、これによりBusyBoxのシェル実装に入ることができます。画像名の後に特定のコマンドを追加することで、そのコマンドを実行できます:

docker run -it --rm busybox mkdir demo

BusyBoxには、ウェブブラウザでユーティリティを試すことができるJavaScriptエミュレーターもあります。

ほとんどのLinuxディストリビューションでは、coreutilsを完全にBusyBoxに置き換えることはできません。ディストリ特有のコマンドやパッケージは、しばしばcoreutilsのユーティリティが利用可能であることを期待してハードコーディングされています。通常、あなたのディストリビューションはこのパッケージをアンインストールすることを拒否します。なぜなら、initが削除されるとシステムが動作不能になる可能性があるからです。

BusyBoxに依存したい場合は、それを使用したディストリビューションから始めて、他のソフトウェアをその上に重ねるのが最良です。上記のように coreutils の横にBusyBoxを追加することで、特定のシナリオにおいてアプレットがどのように反応するかを確認する際にうまく機能します。

結論

BusyBoxは、単一のバイナリとしてパッケージ化された軽量なユーザーランドUNIXユーティリティの実装です。それをLinuxカーネルと組み合わせることで、他の依存関係なしに動作するシステムを作成できます。

BusyBoxは、スペース制約のある環境に最適化されています。これにより、IoTデバイスなどの組み込み製品に理想的です。また、Alpine Linuxのような最小限でありながら一般目的のLinuxディストリビューションにBusyBoxがインストールされているのを見つけることもあるでしょう。

BusyBoxを使用している場合でもGNU Coreutilsを使用している場合でも、馴染みのあるコマンドは通常、どちらの実装でも「そのまま動作」します。発生する問題は通常、BusyBoxが特定のまれなフラグや設定オプションを実装していないことが原因です。

関連記事: