私はDebian 6 chroot刑務所と一緒にDebian 9をインストールしました。私は最近まで刑務所でうまく機能していた独自のアプリを使用しています。しかし、新しいバージョンを実行すると、libcで競合が発生します。新しいDebian Jail(Debian 8)の作成にうんざりしていますが、まだクラッシュします。デフォルトのDebian 8で実行すると動作します。 DockerからDebian 6/8刑務所をインポートすると、まだ機能します。
アプリがchrootでクラッシュする理由を知っている人がいますが、素直に実行したり、Dockerからchrootディレクトリをインポートして実行したりするときはそうではありませんか?
答え1
カーネルユーザーはユーザースペースABIと互換性のない変更を避けようとしますが、通常はセキュリティ上の理由でこれを行う必要があり、そのような問題が発生することがあります。ユーザー空間バイナリの突然の破損を防ぐために、最初は古いABIが引き続き有効になりますが、しばらくするとデフォルトでは無効になります。このとき、このような問題が発生します。
失敗を防ぐには、次の 2 つのオプションがあります。
- 古いカーネルを使用してVM(chrootではない)に古いソフトウェアをインストールします。これは常に動作するはずです
- 現在カーネルにまだ必要な機能がありますが、デフォルトで有効になっていない場合は、しばらく有効にできます。ただし、これにより環境のセキュリティが低下する可能性があるため、安全が重要な環境ではこれを行わないでください。
特定の問題の場合、最も可能性の高い原因はvsyscallエミュレーションです。これは最近のディストリビューションではデフォルトでは無効になっていますが、カーネルブート時間パラメータを指定して有効にできますvsyscall=emulate
。