ptysはlxcのchrootでは動作しません。

ptysはlxcのchrootでは動作しません。

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」にリダイレクトする必要があります。

このファイルの更新されたバージョンを見ると、最新のカーネルにはこの機能は必要ないようです。

おすすめ記事