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  }