aboutsummaryrefslogtreecommitdiffhomepage
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/mbf/main.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/cmd/mbf/main.go b/cmd/mbf/main.go
index 471b595a..a6c74a0f 100644
--- a/cmd/mbf/main.go
+++ b/cmd/mbf/main.go
@@ -568,6 +568,47 @@ func main() {
},
)
+ c.NewCommand(
+ "snapshot",
+ "Populate an empty directory with a static mirror snapshot",
+ func(args []string) error {
+ if len(args) != 1 {
+ return errors.New("snapshot requires 1 argument")
+ }
+
+ var key ed25519.PrivateKey
+ if p, err := os.ReadFile(filepath.Join(cm.base, "ed25519")); err != nil {
+ return err
+ } else if len(p) != ed25519.PrivateKeySize {
+ return errors.New("invalid private key")
+ } else {
+ key = p
+ }
+
+ var m rosa.Mirror
+ if base, err := os.OpenRoot(cm.base); err != nil {
+ return err
+ } else {
+ m = rosa.NewMirror(msg, base.FS(), key)
+ }
+
+ retry:
+ root, err := os.OpenRoot(args[0])
+ if err != nil {
+ if os.IsNotExist(err) {
+ if err = os.MkdirAll(args[0], 0755); err != nil {
+ return err
+ }
+ goto retry
+ }
+ return err
+ }
+
+ go func() { <-ctx.Done(); _ = root.Close() }()
+ return m.Populate(root)
+ },
+ )
+
{
var (
flagGentoo string