元のシステムにいくつかのソフトウェアをインストールするために、rpmとyum(centos 7.5)を含むルート刑務所を作成しました。
作業プロセス
- sys、proc、devをルート刑務所にマウントします。
- 元のシステムのルート「/」を刑務所にマウントします。実際には、基本システムにソフトウェアをインストールするためにルート刑務所を使用するので、これは重要です。
- 一部のソフトウェアをインストールするために必要なmount /proc /rootJail/originalRoot/procなど、rootJailの元のシステムのルートディレクトリに元のシステムのsys、proc、およびdevをマウントします。
- ルート刑務所に入り、ソフトウェアをインストールしてルート刑務所から出てください。
- ルート刑務所からsys、proc、devを削除する
- ルート刑務所の元のシステムからsys、proc、devを削除します。
- ルート刑務所から元のシステムルートを削除します。 (ここで失敗します。)
umount: /rootJail/originalRoot: ターゲットが使用中です。 (場合によっては、デバイスを使用するプロセスに関する有用な情報はlsof(8)またはfusionr(1)にあります)
したがって、デフォルトでは、元のシステム自体のルート以外のすべてを削除できます。必要なルート刑務所を削除するには、これを行う必要があります。
問題は、ルート刑務所の内部にソフトウェアをインストールした後、多くのプロセスが開始されることです。そのため、対象が忙しいと言うのです。これらのプロセスをすべてシャットダウンすると、システムもシャットダウンされるため不可能です。インストールパスが正しい場合でも、これらのプロセスは実際のシステムではなくrootJailにバインドされているようです。また、再起動後、すべてがうまく機能します。 (最悪の場合:ここからフォルダを削除してください。)
私はほとんど動作する怠惰な除去を試みました。 rootJailを削除することができ、インストールされた元のシステムには害を及ぼさないようです。
私の質問は:これは安全ですか?それとも、フォルダをアンマウントする他の解決策はありますか?
ベストアンサー1
したがって、これらのプロセスが無限に実行され続けたいと思います。つまり、ネストされたchroot環境で開始されたサービスプロセスです。これは、systemdではなくシェルでサービスプロセスを作成していることを示します。
通常、これは悪いので避けることをお勧めします。
CentOS 7は、systemd
PID 1を使用してシステムサービスを実行および管理するために使用されます。明らかに、メインシステムのPID 1はchrootで実行されていません。通常、システムサービスプロセスの開始を要求すると、PID 1 から分岐きれい環境(.service
関連ユニットファイルに従ってカスタマイズ)。 (ここには従来のsysvinitスクリプトが含まれています。自動的に生成されたファイルにインポートされます.service
。)
chroot
(これをさらに説明すると、技術的にソケットでバインドマウントを実行してsystemdと通信し、chroot内のコマンドを使用してホストシステムのサービスを操作することができます。)
問題は、あなたのアプローチがsystemdの利点を失うことだけではありません。これは、システムサービス(デーモンにある場合)を混同していることを意味します。たとえば、サービスが開始されていないように見える場合があります(service foo status
)。後で試してみるとservice foo restart
... systemdは停止するデーモンがあることを知らず、起動しようとします。第二代わりにデーモンプロセスのインスタンスです。これはデバッグに少し混乱しています!通常、TCPポート80をリッスンする他のプログラムがすでに存在しているため、Webサーバーを起動できないというエラーがすぐに表示されますが、他の場合は2つの異なるデーモンインスタンスが表示されることがあります。気づくのに時間がかかるエラーが発生します。