github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/fs2objectcache/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "os" 7 "path" 8 9 "github.com/Cloud-Foundations/Dominator/lib/flags/loadflags" 10 ) 11 12 var ( 13 rootDir = flag.String("rootDir", "", 14 "Name of root of directory tree to convert to an object cache") 15 ) 16 17 func init() { 18 flag.Usage = func() { 19 fmt.Fprintln(os.Stderr, 20 "Usage: fs2objectcache [flags...]") 21 fmt.Fprintln(os.Stderr, "Common flags:") 22 flag.PrintDefaults() 23 fmt.Fprintln(os.Stderr) 24 fmt.Fprintln(os.Stderr, 25 "This tool will convert a file-system tree to an object cache.") 26 fmt.Fprintln(os.Stderr, 27 "It is a building block for a secure and fast re-imaging pipeline.") 28 fmt.Fprintln(os.Stderr, 29 "It should only be run from a trusted boot image.") 30 } 31 } 32 33 func main() { 34 if err := loadflags.LoadForCli("fs2objectcache"); err != nil { 35 fmt.Fprintln(os.Stderr, err) 36 os.Exit(1) 37 } 38 flag.Parse() 39 if *rootDir == "" { 40 fmt.Fprintln(os.Stderr, "rootDir unspecified") 41 os.Exit(1) 42 } 43 if *rootDir == "/" { 44 fmt.Fprintln(os.Stderr, "Cannot convert root file-system") 45 os.Exit(1) 46 } 47 subdDirPathname := path.Join(*rootDir, ".subd") 48 if err := os.RemoveAll(subdDirPathname); err != nil { 49 fmt.Fprintln(os.Stderr, err) 50 os.Exit(1) 51 } 52 objectsDir := path.Join(subdDirPathname, "objects") 53 if err := os.MkdirAll(objectsDir, 0750); err != nil { 54 fmt.Fprintln(os.Stderr, err) 55 os.Exit(1) 56 } 57 if err := walk(*rootDir, "/", objectsDir); err != nil { 58 fmt.Fprintln(os.Stderr, err) 59 os.Exit(1) 60 } 61 }