// 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 (m *mender) InstallUpdate(from io.ReadCloser, size int64) error { return installer.Install(from, m.GetDeviceType(), m.UInstallCommitRebooter) }