func runDownload(args *docopt.Args) error { if err := os.MkdirAll(args.String["--root"], 0755); err != nil { return fmt.Errorf("error creating root dir: %s", err) } // create a TUF client and update it tufDB := args.String["--tuf-db"] local, err := tuf.FileLocalStore(tufDB) if err != nil { return err } remote, err := tuf.HTTPRemoteStore(args.String["--repository"], tufHTTPOpts("downloader")) if err != nil { return err } client := tuf.NewClient(local, remote) if err := updateTUFClient(client); err != nil { return err } // pull images from the TUF repo if err := pinkerton.PullImagesWithClient( client, args.String["--repository"], args.String["--driver"], args.String["--root"], pinkerton.InfoPrinter(false), ); err != nil { return err } // download the upstart config and image manifests if err := os.MkdirAll(args.String["--config-dir"], 0755); err != nil { return fmt.Errorf("error creating config dir: %s", err) } for _, path := range []string{"/upstart.conf", "/bootstrap-manifest.json"} { if _, err := downloadGzippedFile(client, path, args.String["--config-dir"]); err != nil { return err } } // download the init and cli binaries if err := os.MkdirAll(args.String["--bin-dir"], 0755); err != nil { return fmt.Errorf("error creating bin dir: %s", err) } for _, path := range []string{"/flynn-linux-amd64", "/flynn-init", "/flynn-nsumount"} { dst, err := downloadGzippedFile(client, path, args.String["--bin-dir"]) if err != nil { return err } if err := os.Chmod(dst, 0755); err != nil { return err } } return nil }
func runDownload(args *docopt.Args) error { if err := os.MkdirAll(args.String["--root"], 0755); err != nil { return fmt.Errorf("error creating root dir: %s", err) } // create a TUF client and update it tufDB := args.String["--tuf-db"] local, err := tuf.FileLocalStore(tufDB) if err != nil { return err } remote, err := tuf.HTTPRemoteStore(args.String["--repository"], tufHTTPOpts("downloader")) if err != nil { return err } client := tuf.NewClient(local, remote) if err := updateTUFClient(client); err != nil { return err } // pull images from the TUF repo if err := pinkerton.PullImagesWithClient( client, args.String["--repository"], args.String["--driver"], args.String["--root"], pinkerton.InfoPrinter(false), ); err != nil { return err } if _, err := downloader.DownloadConfig(client, args.String["--config-dir"]); err != nil { return err } if _, err := downloader.DownloadBinaries(client, args.String["--bin-dir"]); err != nil { return err } return nil }
func runDownload(args *docopt.Args) error { if err := os.MkdirAll(args.String["--root"], 0755); err != nil { return fmt.Errorf("error creating root dir: %s", err) } log := log15.New() // create a TUF client and update it log.Info("initializing TUF client") tufDB := args.String["--tuf-db"] local, err := tuf.FileLocalStore(tufDB) if err != nil { log.Error("error creating local TUF client", "err", err) return err } remote, err := tuf.HTTPRemoteStore(args.String["--repository"], tufHTTPOpts("downloader")) if err != nil { log.Error("error creating remote TUF client", "err", err) return err } client := tuf.NewClient(local, remote) if err := updateTUFClient(client); err != nil { log.Error("error updating TUF client", "err", err) return err } configDir := args.String["--config-dir"] version := os.Getenv("FLYNN_VERSION") if version == "" { version, err = getChannelVersion(configDir, client, log) if err != nil { return err } } log.Info(fmt.Sprintf("downloading components with version %s", version)) log.Info("downloading images") if err := pinkerton.PullImagesWithClient( client, args.String["--repository"], args.String["--driver"], args.String["--root"], version, pinkerton.InfoPrinter(false), ); err != nil { return err } d := downloader.New(client, version) log.Info(fmt.Sprintf("downloading config to %s", configDir)) if _, err := d.DownloadConfig(configDir); err != nil { log.Error("error downloading config", "err", err) return err } binDir := args.String["--bin-dir"] log.Info(fmt.Sprintf("downloading binaries to %s", binDir)) if _, err := d.DownloadBinaries(binDir); err != nil { log.Error("error downloading binaries", "err", err) return err } log.Info("download complete") return nil }