Rootless Containers 版 proot のソースコードの修正点について
ここ最近は、随分と腰痛に悩まされる日々が続きます。 そして、身体的な疲労感が著しく蓄積していく状況です。
本稿について
本稿は、技術的事項についての速報的で簡易な短信についての Z.OOL.ネット信託統治領 Qrunch 諸島からのクロス投稿です。
本稿は、以下の Qrunch 諸島の投稿から御覧になれます。どうか御了承下さい。
追記 (2018/12/03)
この度本稿において、 Akihiro Suda 氏によるオリジナルの proot への Pull Request を取り上げましたが、当該 Pull Request は、 Rootless Containers の開発コミュニティによる proot への Pull Request が誤って、オリジナルの proot に流れたものでありました。
この件に関しまして、係る事実関係を見落として誤った内容に基づき、本稿を投稿致しましたことを Akihiko Suda 氏を始め、関係者各位及び読者の皆様に心より深く御詫び致します。
しかしながら本稿に関しましては、最終的な結論に関する箇所に関しては、事実関係の訂正後もなお、変わることはないと考えますので、この度は、本稿の表題と内容を大幅に改稿した上で本稿を再掲する所存で御座います。
改めまして、本稿に付きまして事実誤認が御座いましたことを心より御詫び申し上げます。
はじめに
proot とは、 Android OS 及び Linux をカーネルとする各種ディストリビューション等において、 root 権限を取ること無く chroot 環境や mount --bind
コマンドに基づくディレクトリのバインド等を擬似的に実現するツールです。
Debian noroot 環境においては、 Android OS 上に構築した Debian 環境をルートディレクトリとして、 Android OS のネイティブ環境上の /dev, /proc, /sys, /system
ディレクトリ等をバインドした chroot 環境を構築する為に使用されます。
また、 Debian noroot 環境の proot を pelya 氏による proot から Termux の開発コミュニティによる proot に交換する事によって、 Android OS 6.0 以降の端末においても Debian noroot 環境を使用する事が出来ます。
本稿では、 OCI に準拠したコンテナを作成・実行させることを可能にするためのツール群である Rootless Containers を実行する為に、オリジナル版の proot に修正を加えた Rootless Containers の開発コミュニティ版の proot と、オリジナルの proot からの修正点について取り上げます。
そして、この修正点が、オリジナルの proot 及び Termux の開発コミュニティ版の proot に反映された場合において、 Debian noroot 環境等の Android OS 上で Linux OS 系各種ディストリビューションを動作させるアプリケーションに与える影響についての一つの考察について述べます。
Rootless Containers の開発コミュニティ版の proot について
Rootless Containers とは、 root 権限を取ること無く、 OCI に準拠したコンテナを作成・実行させることを可能にするためのツール群です。
Rootless Containers の他に、 root 権限を取ること無く、コンテナの実行を行うためのツールとして、 uDocker が挙げられます。
なお、 uDocker についての詳細については、 @percipere 氏による以下の Qiita の投稿が参考になります。
ここで、 Rootless Containers のツール群を実行する為に使用する proot には、Akihiro Suda 氏及び Rootless Containers の開発コミュニティの各氏等によって、主に以下の点において修正が加えられています。
- root 権限を取ることなく動作させることの出来る docker ツール udocker 1.1.1 への対応 (patches for udocker-1.1.1)
- root 権限を取ることなくコンテナを作成・実行させることの出来るツール群 rootlesscontainers への対応 (add rootlesscontainers support)
- 現在のルートディレクトリからの相対パスへの chroot システムコールへの対応 (support chroot to a relative path to the current root.)
以上で述べた事からも判る通り、これらの proot のソースコードの修正によって、オリジナルの proot に、 root 権限を取ることを必要としないコンテナ型仮想化技術に関する機能が大幅に追加されている事が判ります。
なお、proot の rootlesscontainers への対応 (add rootlesscontainers support)に伴い、 proot がライブラリ talloc に依存する他に、ライブラリ protobuf にも依存する事も判ります。
Termux の開発コミュニティ版の proot への反映について
以上で述べた Rootless Containers の開発コミュニティによる、オリジナルの proot へのソースコードの変更が、オリジナルの proot 及び Termux の開発コミュニティによる proot にどの程度反映されるかに関しては、現在の時点では不明な点が多い状況です。
しかし、今回の変更が Termux の開発コミュニティによる proot に取り込まれると、今後、 Debian noroot 環境を始め、各種 Android OS 上において Linux OS 系ディストリビューションを動作させるアプリケーションの構築に関しては、前述した root 権限を取ること無く実行可能な各種コンテナ型仮想化技術に基づく手法が、何らかの有効性を示す可能性が高くなるものと考えられます。