chrootのBashで奇妙なキー入力

chrootのBashで奇妙なキー入力

bash専用のchroot環境を設定しようとしています。これが私が今まで持っているものです:

[root@free]# tree .
.
├── bin -> usr/bin/
├── dev
├── etc
│   ├── bash.bash_logout
│   ├── bash.bashrc
│   ├── inputrc
│   └── profile
├── lib -> usr/lib/
├── lib64 -> usr/lib64/
├── proc
├── sys
└── usr
    ├── bin
    │   └── bash
    ├── lib
    │   ├── libc.so
    │   ├── libc.so.6
    │   ├── libdl.so
    │   ├── libdl.so.2
    │   ├── libncursesw.so.6
    │   ├── libreadline.so
    │   ├── libreadline.so.7
    │   ├── libreadline.so.7.0
    │   ├── libtinfo.so
    │   └── libtinfo.so.6
    └── lib64
        └── ld-linux-x86-64.so.2

11 directories, 16 files

ldd以下をリストしますbash

[root@free]# ldd /bin/bash
    linux-vdso.so.1 (0x00007ffd388a3000)
    libreadline.so.7 => /usr/lib/libreadline.so.7 (0x00007fa6e0baa000)
    libdl.so.2 => /usr/lib/libdl.so.2 (0x00007fa6e09a6000)
    libc.so.6 => /usr/lib/libc.so.6 (0x00007fa6e05ea000)
    libncursesw.so.6 => /usr/lib/libncursesw.so.6 (0x00007fa6e037d000)
    /lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007fa6e10d8000)

chroot環境に入るのはすでにうまくいきます(I have no name!passwdファイルをスプレーコピーしていないので良いです):

[root@free jail]# chroot .
[I have no name!@jail]#

質問 この行を入力すると、p e backspace w d次のように表示されます。

[I have no name!@jail]#pe wd

Enterで実行すると実行され、pwd印刷されます。

/

矢印キー(左右)も奇妙に機能します。カーソルを移動せずに複数の文字を印刷すると、p d left wchroot以外ではpdwdこれは発生しません。bash

この問題をどのように解決できますか?

私は図書館のようなものをコピーするのを忘れましたか?質問がありますか?libreadline(コピーしました)etc/inputrcそれともこれがlibncursesw問題でしょうか?

答え1

私は見ました最小 chroot を生成するスクリプト/usr/share/terminfo/そして、libcursesが端末コマンドシーケンスを使用して処理するディレクトリが見つからないことを確認しました。必要な可能性があるいくつかの追加ファイル(など)を除いて、/etc/resolv.confこれが私がやろうとしていることです。

答え2

/etc/terminfo/README上記のように読むhttp://web.archive.org/web/20120621035133/http://www.ibb.net/~anne/keyboard/keyboard.html、terminfoがどこにあるかを調べるのに役立ちます。

猫/etc/terminfo/README

このディレクトリは、システムローカル用語情報の説明に使用されます。デフォルトでは、ncurses は ${HOME}/.terminfo を最初に検索し、次に /etc/terminfo(このディレクトリ)、/lib/terminfo、最後に /usr/share/terminfo を検索します。

空なので(ただし、多くのサイトで一般的な回答です)、ここは/usr/share/terminfo/最近のリリースで/lib/terminfo/良い場所のようです。

したがって、空でないディレクトリを次のようにchrootディレクトリにコピーします。

  • /etc/terminfo/
  • /lib/terminfo/
  • /usr/share/terminfo/

関連情報