github.com/endocode/docker@v1.4.2-0.20160113120958-46eb4700391e/contrib/apparmor/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "log" 6 "os" 7 "path" 8 "text/template" 9 10 "github.com/docker/docker/pkg/aaparser" 11 ) 12 13 type profileData struct { 14 MajorVersion int 15 MinorVersion int 16 } 17 18 func main() { 19 if len(os.Args) < 2 { 20 log.Fatal("pass a filename to save the profile in.") 21 } 22 23 // parse the arg 24 apparmorProfilePath := os.Args[1] 25 26 majorVersion, minorVersion, err := aaparser.GetVersion() 27 if err != nil { 28 log.Fatal(err) 29 } 30 data := profileData{ 31 MajorVersion: majorVersion, 32 MinorVersion: minorVersion, 33 } 34 fmt.Printf("apparmor_parser is of version %+v\n", data) 35 36 // parse the template 37 compiled, err := template.New("apparmor_profile").Parse(dockerProfileTemplate) 38 if err != nil { 39 log.Fatalf("parsing template failed: %v", err) 40 } 41 42 // make sure /etc/apparmor.d exists 43 if err := os.MkdirAll(path.Dir(apparmorProfilePath), 0755); err != nil { 44 log.Fatal(err) 45 } 46 47 f, err := os.OpenFile(apparmorProfilePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) 48 if err != nil { 49 log.Fatal(err) 50 } 51 defer f.Close() 52 53 if err := compiled.Execute(f, data); err != nil { 54 log.Fatalf("executing template failed: %v", err) 55 } 56 57 fmt.Printf("created apparmor profile for version %+v at %q\n", data, apparmorProfilePath) 58 }