gopkg.in/hugelgupf/u-root.v9@v9.0.0-20180831063832-3f6f1057f09b/cmds/mm/mm.go (about) 1 // Copyright 2016-2017 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "flag" 9 "log" 10 "os" 11 "os/exec" 12 13 "github.com/u-root/u-root/pkg/uroot/util" 14 ) 15 16 var ( 17 dest = flag.String("d", "/u", "destination directory") 18 namespace = []util.Creator{ 19 util.Dir{Name: "proc", Mode: 0555}, 20 util.Dir{Name: "sys", Mode: 0555}, 21 util.Dir{Name: "buildbin", Mode: 0777}, 22 util.Dir{Name: "ubin", Mode: 0777}, 23 util.Dir{Name: "tmp", Mode: 0777}, 24 util.Dir{Name: "env", Mode: 0777}, 25 util.Dir{Name: "etc", Mode: 0777}, 26 util.Dir{Name: "tcz", Mode: 0777}, 27 util.Dir{Name: "dev", Mode: 0777}, 28 util.Dir{Name: "dev/pts", Mode: 0777}, 29 util.Dir{Name: "lib", Mode: 0777}, 30 util.Dir{Name: "usr/lib", Mode: 0777}, 31 util.Dir{Name: "go/pkg/linux_amd64", Mode: 0777}, 32 util.Link{NewPath: "init", OldPath: "/init"}, 33 util.Mount{Target: "dev/pts", FSType: "devpts", Opts: "newinstance,ptmxmode=666,gid=5,mode=620"}, 34 util.Symlink{NewPath: "dev/ptmx", Target: "/dev/pts/ptmx"}, 35 } 36 commands = []*exec.Cmd{ 37 exec.Command("minimega", "-e", "vm", "config", "filesystem"), 38 exec.Command("minimega", "-e", "vm", "config", "snapshot", "false"), 39 exec.Command("minimega", "-e", "vm", "launch", "container", "uroot"), 40 exec.Command("minimega", "-e", "vm", "start", "all"), 41 } 42 ) 43 44 func main() { 45 flag.Parse() 46 // We won't do wholesale removal. That's up to you if this fails. 47 if err := os.Chdir(*dest); err == nil { 48 log.Printf("Directory exists, skipping namespace setup") 49 } else if !os.IsNotExist(err) { 50 log.Fatalf("Couldn't chdir(%q): %v", *dest, err) 51 } else { 52 if err := os.Mkdir(*dest, 0777); err != nil { 53 log.Fatalf("Can't mkdir: %v", err) 54 } 55 if err := os.Chdir(*dest); err != nil { 56 log.Fatalf("Can't cd: %v", err) 57 } 58 for _, c := range namespace { 59 if err := c.Create(); err != nil { 60 log.Fatalf("Error creating %s: %v", c, err) 61 } 62 } 63 } 64 log.Printf("now you need to run stuff") 65 commands[0].Args = append(commands[0].Args, *dest) 66 for _, c := range commands { 67 o, err := c.CombinedOutput() 68 log.Printf("%v says %v", c, o) 69 if err != nil { 70 log.Fatalf("Fails with %v", err) 71 } 72 } 73 }