systemdディストリビューション(Arch Linux、OpenSUSE、Fedora)でよく知られている問題。
Systemdはsysvinitに代わるものであり、これに対して1つの大きな利点を提供します。sysvinitでは、サービスの開始を要求すると、スクリプトを呼び出す人の実行コンテキストを継承します。これには、環境変数、ulimitsなどが含まれます。Systemdはこれとは逆に、デーモンを通知することでこれを改善します。デーモンは、環境が常に同じであるため、サービスのパフォーマンスを予測するのがはるかに容易な、明確に定義された健全な一定の環境でサービスを開始します。
これは、chroot内からsystemctlを呼び出すとき、chroot内にいることは無関係であり、継承される環境は現在のPID 1の環境ではないことを意味します。しかし、これはさらに悪化します。通信ソケットは/ run / systemd内に配置されるため、chroot内のプロセスはinitシステムと通信することさえできません!
それでは、systemdディストリビューションでどのようにchrootしますか?
Linuxコンテナのみが必要な場合は、このArch Wikiページで、Linuxコンテナを30秒以内にセットアップする方法を説明しますsystemd-nspawn
。
代わりに本当にchroot環境が必要な場合、この美しく透明なWebページは2つの実用的なソリューションを提供します(2つ目はポイント#1で提供されたものの修正版です)。