blob: e1a22a4a526cbd2cb58e575485bb881257ac4984 [file] [log] [blame]
Tim Windelschmidt7006caf2024-02-27 16:49:39 +01001package main
2
3import (
4 _ "embed"
Tim Windelschmidt0b4fb8c2024-09-18 17:34:23 +02005 "fmt"
Tim Windelschmidt7006caf2024-02-27 16:49:39 +01006 "log"
7
8 "github.com/spf13/cobra"
9
10 "source.monogon.dev/metropolis/cli/metroctl/core"
11)
12
13var genusbCmd = &cobra.Command{
14 Use: "genusb target",
15 Short: "Generates a Metropolis installer disk or image.",
16 Example: "metroctl install --bundle=metropolis-v0.1.zip genusb /dev/sdx",
Tim Windelschmidtfc6e1cf2024-09-18 17:34:07 +020017 Args: PrintUsageOnWrongArgs(cobra.ExactArgs(1)), // One positional argument: the target
Tim Windelschmidt0b4fb8c2024-09-18 17:34:23 +020018 RunE: func(cmd *cobra.Command, args []string) error {
19 params, err := makeNodeParams()
20 if err != nil {
21 return err
22 }
Tim Windelschmidt7006caf2024-02-27 16:49:39 +010023
Tim Windelschmidt0b4fb8c2024-09-18 17:34:23 +020024 installerPath, err := cmd.Flags().GetString("installer")
25 if err != nil {
26 return err
27 }
Tim Windelschmidt7006caf2024-02-27 16:49:39 +010028
Tim Windelschmidt0b4fb8c2024-09-18 17:34:23 +020029 installer, err := external("installer", "_main/metropolis/installer/kernel.efi", &installerPath)
30 if err != nil {
31 return err
32 }
33 bundle, err := external("bundle", "_main/metropolis/node/bundle.zip", bundlePath)
34 if err != nil {
35 return err
36 }
Tim Windelschmidt7006caf2024-02-27 16:49:39 +010037
Tim Windelschmidt0b4fb8c2024-09-18 17:34:23 +020038 installerImageArgs := core.MakeInstallerImageArgs{
39 TargetPath: args[0],
40 Installer: installer,
41 NodeParams: params,
42 Bundle: bundle,
43 }
Tim Windelschmidt7006caf2024-02-27 16:49:39 +010044
Tim Windelschmidt0b4fb8c2024-09-18 17:34:23 +020045 log.Printf("Generating installer image (this can take a while, see issues/92).")
46 if err := core.MakeInstallerImage(installerImageArgs); err != nil {
47 return fmt.Errorf("failed to create installer: %w", err)
48 }
49 return nil
50 },
Tim Windelschmidt7006caf2024-02-27 16:49:39 +010051}
52
53func init() {
54 genusbCmd.Flags().StringP("installer", "i", "", "Path to the Metropolis installer to use when installing")
55 installCmd.AddCommand(genusbCmd)
56}