1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // +build linux
- package util
- import (
- "bufio"
- "bytes"
- "os"
- "os/exec"
- "strings"
- "syscall"
- "github.com/docker/docker/pkg/mount"
- "github.com/rancher/os/log"
- )
- func mountProc() error {
- if _, err := os.Stat("/proc/self/mountinfo"); os.IsNotExist(err) {
- if _, err := os.Stat("/proc"); os.IsNotExist(err) {
- if err = os.Mkdir("/proc", 0755); err != nil {
- return err
- }
- }
- if err := syscall.Mount("none", "/proc", "proc", 0, ""); err != nil {
- return err
- }
- }
- return nil
- }
- func Mount(device, directory, fsType, options string) error {
- if err := mountProc(); err != nil {
- return nil
- }
- if _, err := os.Stat(directory); os.IsNotExist(err) {
- err = os.MkdirAll(directory, 0755)
- if err != nil {
- return err
- }
- }
- return mount.Mount(device, directory, fsType, options)
- }
- func Unmount(target string) error {
- return mount.Unmount(target)
- }
- func Blkid(label string) (deviceName, deviceType string) {
- // Not all blkid's have `blkid -L label (see busybox/alpine)
- cmd := exec.Command("blkid")
- cmd.Stderr = os.Stderr
- out, err := cmd.Output()
- if err != nil {
- log.Errorf("Failed to run blkid: %s", err)
- return
- }
- r := bytes.NewReader(out)
- s := bufio.NewScanner(r)
- for s.Scan() {
- line := s.Text()
- //log.Debugf("blkid: %s", cmd, line)
- if !strings.Contains(line, `LABEL="`+label+`"`) {
- continue
- }
- d := strings.Split(line, ":")
- deviceName = d[0]
- s1 := strings.Split(line, `TYPE="`)
- s2 := strings.Split(s1[1], `"`)
- deviceType = s2[0]
- log.Debugf("blkid type of %s: %s", deviceName, deviceType)
- return
- }
- return
- }
|