github.com/iqoqo/nomad@v0.11.3-0.20200911112621-d7021c74d101/client/allocdir/task_dir_linux.go (about)

     1  // +build !android
     2  
     3  package allocdir
     4  
     5  import (
     6  	"fmt"
     7  	"os"
     8  	"path/filepath"
     9  
    10  	multierror "github.com/hashicorp/go-multierror"
    11  )
    12  
    13  // unmountSpecialDirs unmounts the dev and proc file system from the chroot. No
    14  // error is returned if the directories do not exist or have already been
    15  // unmounted.
    16  func (t *TaskDir) unmountSpecialDirs() error {
    17  	errs := new(multierror.Error)
    18  	dev := filepath.Join(t.Dir, "dev")
    19  	if pathExists(dev) {
    20  		if err := unlinkDir(dev); err != nil {
    21  			errs = multierror.Append(errs, fmt.Errorf("Failed to unmount dev %q: %v", dev, err))
    22  		} else if err := os.RemoveAll(dev); err != nil {
    23  			errs = multierror.Append(errs, fmt.Errorf("Failed to delete dev directory %q: %v", dev, err))
    24  		}
    25  	}
    26  
    27  	// Unmount proc.
    28  	proc := filepath.Join(t.Dir, "proc")
    29  	if pathExists(proc) {
    30  		if err := unlinkDir(proc); err != nil {
    31  			errs = multierror.Append(errs, fmt.Errorf("Failed to unmount proc %q: %v", proc, err))
    32  		} else if err := os.RemoveAll(proc); err != nil {
    33  			errs = multierror.Append(errs, fmt.Errorf("Failed to delete proc directory %q: %v", dev, err))
    34  		}
    35  	}
    36  
    37  	return errs.ErrorOrNil()
    38  }