// This will be run manually from command line ONLY func doRootfs(device installer.UInstaller, args runOptionsType, dt string) error { var image io.ReadCloser var imageSize int64 var err error var upclient client.Updater if args == (runOptionsType{}) { return errors.New("rootfs called without needed parameters") } log.Debug("Starting device update.") updateLocation := *args.imageFile if strings.HasPrefix(updateLocation, "http:") || strings.HasPrefix(updateLocation, "https:") { log.Infof("Performing remote update from: [%s].", updateLocation) var ac *client.ApiClient // we are having remote update ac, err = client.New(args.Config) if err != nil { return errors.New("Can not initialize client for performing network update.") } upclient = client.NewUpdate() log.Debug("Client initialized. Start downloading image.") image, imageSize, err = upclient.FetchUpdate(ac, updateLocation) log.Debugf("Image downloaded: %d [%v] [%v]", imageSize, image, err) } else { // perform update from local file log.Infof("Start updating from local image file: [%s]", updateLocation) image, imageSize, err = FetchUpdateFromFile(updateLocation) log.Debugf("Feting update from file results: [%v], %d, %v", image, imageSize, err) } if image == nil || err != nil { return errors.Wrapf(err, "rootfs: error while updating image from command line") } defer image.Close() return installer.Install(image, dt, device) }
func NewMender(config menderConfig, pieces MenderPieces) (*mender, error) { api, err := client.New(config.GetHttpConfig()) if err != nil { return nil, errors.Wrap(err, "error creating HTTP client") } m := &mender{ UInstallCommitRebooter: pieces.device, updater: client.NewUpdate(), manifestFile: defaultManifestFile, state: initState, config: config, authMgr: pieces.authMgr, authReq: client.NewAuth(), api: api, authToken: noAuthToken, } return m, nil }