github.com/bigcommerce/nomad@v0.9.3-bc/client/allocdir/task_dir_linux.go (about)

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