chroot環境のdebianに「/dev/pts」をマウント、bindマウント

■chroot環境をapt-getしているとたまに「/dev/pts」でエラーを吐く。
 やっぱり、「/dev/pts」位は対応した方が良さそう。

■debian公式のTipsでは「/dev/pts」をbindマウントしている。

 chroot
 http://wiki.debian.org/chroot

$ mount | grep pts | grep cifs | awk '{print $3}' | for list in `xargs`;do sudo umount "$list";done
$ sudo mount --bind /dev/pts /home/labunix/cifs/wheezy/dev/pts
$ mount | grep ^/dev/pts
/dev/pts on /home/labunix/cifs/wheezy/dev/pts type none (rw,bind)
$ mount | grep pts | grep cifs | awk '{print $3}' | for list in `xargs`;do sudo umount "$list";done

■上記を参考にfstabに記述。

$ grep ^/dev/pts /etc/fstab
/dev/pts        /home/labunix/cifs/wheezy/dev/pts       none    bind    0      0
/dev/pts        /home/labunix/cifs/lenny/dev/pts       none    bind    0      0
/dev/pts        /home/labunix/cifs/squeeze/dev/pts       none    bind    0      0
/dev/pts        /home/labunix/cifs/sid/dev/pts       none    bind    0      0

$ sudo mount -a
$ mount | grep ^/dev/pts
/dev/pts on /home/labunix/cifs/wheezy/dev/pts type none (rw,bind)
/dev/pts on /home/labunix/cifs/lenny/dev/pts type none (rw,bind)
/dev/pts on /home/labunix/cifs/squeeze/dev/pts type none (rw,bind)
/dev/pts on /home/labunix/cifs/sid/dev/pts type none (rw,bind)

■ちなみに。「/dev/pts」を呼び出すのはinitスクリプト。

$ grep -v "^\$\|^#" /etc/default/devpts
TTYGRP=5
TTYMODE=620

■マウント箇所。kernelがLinuxで「/dev/pts」ディレクトリが無ければ作って、
 初期値としてinitスクリプト内にも同じ環境変数があって、上記に変更があれば、該当の環境変数を上書きする。

$ grep "domount devpts" /etc/init.d/mountdevsubfs.sh
                domount devpts "" /dev/pts devpts -onoexec,nosuid,gid=$TTYGRP,mode=$TTYMODE

■環境変数「TTYGRP」はGIDのこと。

$ awk -F\: '($3==5){print $1}' /etc/group
tty

■環境変数「TTYMODE」は読み/書き/実行の権限のこと。

$ ls -l /dev/pts/0
crw--w---- 1 labunix tty 136, 0 2013-03-26 22:37 /dev/pts/0

■fstabに無くてもマウント中なので、mtabならあるはず。

$ mount | grep pts
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)

$ grep pts /etc/mtab
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0

■上記と同じで良いのでは?
 「TTYGRP」「TTYMODE」を変更する可能性がある場合はbindオプションの方が良い。

$ grep pts /etc/fstab
devpts /home/labunix/cifs/wheezy/dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
devpts /home/labunix/cifs/lenny/dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
devpts /home/labunix/cifs/squeeze/dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
devpts /home/labunix/cifs/sid/dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0

■マウントする

$ sudo moun -a
$ mount | grep pts
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
devpts on /home/labunix/cifs/wheezy/dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
devpts on /home/labunix/cifs/lenny/dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
devpts on /home/labunix/cifs/squeeze/dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
devpts on /home/labunix/cifs/sid/dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)

$ ls -l /home/labunix/cifs/[lsw]*/dev/pts/0
crw--w---- 1 labunix tty 136, 0 2013-03-26 22:48 /home/labunix/cifs/lenny/dev/pts/0
crw--w---- 1 labunix tty 136, 0 2013-03-26 22:48 /home/labunix/cifs/sid/dev/pts/0
crw--w---- 1 labunix tty 136, 0 2013-03-26 22:48 /home/labunix/cifs/squeeze/dev/pts/0
crw--w---- 1 labunix tty 136, 0 2013-03-26 22:48 /home/labunix/cifs/wheezy/dev/pts/0

■mtabにあるなら当然「proc」にもあるはず。

$ grep devpts /proc/mounts
none /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
devpts /home/labunix/cifs/wheezy/dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
devpts /home/labunix/cifs/lenny/dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
devpts /home/labunix/cifs/squeeze/dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
devpts /home/labunix/cifs/sid/dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 02種類の書き方があるので、環境変数に変更が無い事が分かっているならお好みで。
 bindマウントの方がベターだと思います。