私はこの質問と同じ間違いをしました: Debian chrootがホスト上のPTTYをブロックしています
「devpts」ファイルシステムをchroot内にマウントしましたが、urxvtでptysを作成できなくなりました。奇妙なことに、xtermはまだ可能です。/dev/ptsを再マウントしても、問題は修正されません。
再起動せずにシステムを通常どおりに動作させるにはどうすればよいですか?
@mikeservのコメントのおかげで、私はそれを復活させる方法を見つけました。
私はこれをLinux4.0.7でのみテストしたので、はるかに古いバージョンまたははるかに新しいバージョンでは機能しない可能性があります。
mount/dev/pts -o remount、gid = 5、mode = 620
devpts
オプションを使用せずにchroot
ファイルシステムをnewinstance
にマウントすると、同じptyを含む/dev/pts
の同じ「インスタンス」がマウントされました。マニュアルページによると、gid
引数を渡さないと、新しいptyが生成されたプロセスと同じgidで作成されます。どうやらこの(欠如した)マウントオプションはdevpts
インスタンス全体に影響を与えるので、元の/dev/pts
はもはやptyをtty
グループに再割り当てしていません。 xtermがそうではないのに、なぜurxvtがそのptyをそのグループに含める必要があるのか私はまだ知りません。
これに関するいくつかのメモ:
/dev/pts/ptmx
のモードが000(root:root)であるのに対し、/dev/ptmx
のモードは666(root:tty)であるのは正常なようです。ただし、これらは同じブロックデバイスを指しているため、ptmxmode
の設定は不要に見えますが、無害です。mode
(600)は機能しているようですが、とにかくttyはモード620で作成されます。何かがモードを変更している可能性があります。システムが起動すると、mode=620
が渡され、デフォルトのmode
が上書きされるため、/ dev/ptsのデフォルト機能をより適切に復元するために、上記のコマンドラインにこれを配置しました。uid
を設定しないでください。これにより、セキュリティの問題、または端末が生成されないという同じ問題が発生します。newinstance
の追加はオプションですが、セキュリティを向上させることができます。このオプションを使用すると、ホストシステムが使用していないため、コンテナは「実際の」/dev/pts
をマウントできません。これを使用する場合は、ptmxmode=666
を確認し、/dev/ptmx
がpts/ptmx
へのシンボリックリンクであることを確認する必要があります。新しいdevpts
インスタンスを/dev/pts
にマウントすると、既存の端末で奇妙な動作が発生する可能性があるため(たとえば、gpg
が機能しない)、このオプションを使用する場合はそれらを再起動する必要があります。