There is no need for this, the device node by itself doesn't work, since
its not on a devpts fs, and we can just a regular file to bind mount over.
Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
| ... | ... |
@@ -17,29 +17,26 @@ func Setup(rootfs, consolePath, mountLabel string) error {
|
| 17 | 17 |
oldMask := system.Umask(0000) |
| 18 | 18 |
defer system.Umask(oldMask) |
| 19 | 19 |
|
| 20 |
- stat, err := os.Stat(consolePath) |
|
| 21 |
- if err != nil {
|
|
| 22 |
- return fmt.Errorf("stat console %s %s", consolePath, err)
|
|
| 23 |
- } |
|
| 24 |
- var ( |
|
| 25 |
- st = stat.Sys().(*syscall.Stat_t) |
|
| 26 |
- dest = filepath.Join(rootfs, "dev/console") |
|
| 27 |
- ) |
|
| 28 |
- if err := os.Remove(dest); err != nil && !os.IsNotExist(err) {
|
|
| 29 |
- return fmt.Errorf("remove %s %s", dest, err)
|
|
| 30 |
- } |
|
| 31 | 20 |
if err := os.Chmod(consolePath, 0600); err != nil {
|
| 32 | 21 |
return err |
| 33 | 22 |
} |
| 34 | 23 |
if err := os.Chown(consolePath, 0, 0); err != nil {
|
| 35 | 24 |
return err |
| 36 | 25 |
} |
| 37 |
- if err := system.Mknod(dest, (st.Mode&^07777)|0600, int(st.Rdev)); err != nil {
|
|
| 38 |
- return fmt.Errorf("mknod %s %s", dest, err)
|
|
| 39 |
- } |
|
| 40 | 26 |
if err := label.SetFileLabel(consolePath, mountLabel); err != nil {
|
| 41 |
- return fmt.Errorf("set file label %s %s", dest, err)
|
|
| 27 |
+ return fmt.Errorf("set file label %s %s", consolePath, err)
|
|
| 42 | 28 |
} |
| 29 |
+ |
|
| 30 |
+ dest := filepath.Join(rootfs, "dev/console") |
|
| 31 |
+ |
|
| 32 |
+ f, err := os.Create(dest) |
|
| 33 |
+ if err != nil && !os.IsExist(err) {
|
|
| 34 |
+ return fmt.Errorf("create %s %s", dest, err)
|
|
| 35 |
+ } |
|
| 36 |
+ if f != nil {
|
|
| 37 |
+ f.Close() |
|
| 38 |
+ } |
|
| 39 |
+ |
|
| 43 | 40 |
if err := system.Mount(consolePath, dest, "bind", syscall.MS_BIND, ""); err != nil {
|
| 44 | 41 |
return fmt.Errorf("bind %s to %s %s", consolePath, dest, err)
|
| 45 | 42 |
} |