lxcでchrootを使用して開発しようとしています。 lxcコンテナ構成で「nested」オプションを有効にし、chrootが通常のLinuxシステムにあるかのようにインストールされたprocとdevptsをchrootにバインドしました。
残念ながら、chrootでptysを必要とするエントリ(「script」コマンドなど)を使用しようとすると、次のエラーが発生します。
root@manualdev:~# chroot /chroots/jessie-staging/
root@manualdev:/# script
script: openpty failed: No such file or directory
Terminated
root@manualdev:/#
システムメッセージ:
- ホストカーネルは4.4.0-79-genericです。
- ホストディストリビューションはUbuntu xenialです。
- ホストアーキテクチャはarm64です。
- コンテナディストリビューションはDebian Stretchです。
- コンテナとchrootのアーキテクチャはarmhfです。
- ChrootディストリビューションはRaspbianです(jessie、Stretch、およびBusterでテスト済み)。
ベストアンサー1
この問題に対する解決策(トレーニングされた推測によって発見された)は、chrootで次のコマンドを実行することです。
rm /dev/ptmx
ln -s /dev/pts/ptmx /dev/ptmx
100%確信はありませんが、これが必要なのは、lxcが/ dev / ptsに「マルチインスタンスモード」を使用しているためだと思います。文書によるとhttps://github.com/torvalds/linux/blob/v4.4/Documentation/filesystems/devpts.txt
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y で 'newinstance' オプションが指定されている場合、マウントはマルチインスタンスモードにあると見なされ、devpts fs の新しいインスタンスが作成されます。このインスタンスで生成されたすべてのptyは、他のdevptインスタンスのptyから独立しています。シングルインスタンスモードと同様に、/dev/pts/ptmx ノードも存在します。マルチインスタンスモードを効果的に使用するには、シンボリックリンクまたはバインドマウントを使用して/dev/ptmxのオープンを「/dev/pts/ptmx」にリダイレクトする必要があります。
このファイルの更新されたバージョンを見ると、最新のカーネルにはこの機能は必要ないようです。