Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/kargs.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func kargs(cmd *cobra.Command, args []string) error {
cmdr.Error.Println(err)
return err
}
err = aBsys.RunOperation(core.APPLY, false)
err = aBsys.RunOperation(core.APPLY, false, false)
if err != nil {
cmdr.Error.Println(abroot.Trans("pkg.applyFailed"))
return err
Expand Down
8 changes: 2 additions & 6 deletions cmd/pkg.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ func pkg(cmd *cobra.Command, args []string) error {
return err
}

freeSpace, err := cmd.Flags().GetBool("delete-old-system")
deleteOldSystem, err := cmd.Flags().GetBool("delete-old-system")
if err != nil {
cmdr.Error.Println(err)
return err
Expand Down Expand Up @@ -204,11 +204,7 @@ func pkg(cmd *cobra.Command, args []string) error {
return err
}

if dryRun {
err = aBsys.RunOperation(core.DRY_RUN_APPLY, freeSpace)
} else {
err = aBsys.RunOperation(core.APPLY, freeSpace)
}
err = aBsys.RunOperation(core.APPLY, deleteOldSystem, dryRun)
if err != nil {
cmdr.Error.Printf(abroot.Trans("pkg.applyFailed"), err)
return err
Expand Down
6 changes: 1 addition & 5 deletions cmd/rebase.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,10 +129,6 @@ func rebase(cmd *cobra.Command, args []string) error {
return err
}

if dryRun {
cmdr.Info.Println(abroot.Trans("rebase.dryRunSuccess"))
}

rebaseOnly, err := cmd.Flags().GetBool("rebase-only")
if err != nil {
cmdr.Error.Println(err)
Expand All @@ -144,5 +140,5 @@ func rebase(cmd *cobra.Command, args []string) error {
}

cmdr.Info.Println(abroot.Trans("rebase.successUpdate"))
return abSys.RunOperation("UPGRADE", false)
return abSys.RunOperation("UPGRADE", false, dryRun)
}
8 changes: 2 additions & 6 deletions cmd/update-initramfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ func updateInitramfs(cmd *cobra.Command, args []string) error {
return err
}

freeSpace, err := cmd.Flags().GetBool("delete-old-system")
deleteOldSystem, err := cmd.Flags().GetBool("delete-old-system")
if err != nil {
cmdr.Error.Println(err)
return err
Expand All @@ -79,11 +79,7 @@ func updateInitramfs(cmd *cobra.Command, args []string) error {
return err
}

if dryRun {
err = aBsys.RunOperation(core.DRY_RUN_INITRAMFS, freeSpace)
} else {
err = aBsys.RunOperation(core.INITRAMFS, freeSpace)
}
err = aBsys.RunOperation(core.INITRAMFS, deleteOldSystem, dryRun)
if err != nil {
cmdr.Error.Printf(abroot.Trans("updateInitramfs.updateFailed"), err)
return err
Expand Down
6 changes: 2 additions & 4 deletions cmd/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ func upgrade(cmd *cobra.Command, args []string) error {
return err
}

freeSpace, err := cmd.Flags().GetBool("delete-old-system")
deleteOldSystem, err := cmd.Flags().GetBool("delete-old-system")
if err != nil {
cmdr.Error.Println(err)
return err
Expand Down Expand Up @@ -253,14 +253,12 @@ func upgrade(cmd *cobra.Command, args []string) error {
var operation core.ABSystemOperation
if force {
operation = core.FORCE_UPGRADE
} else if dryRun {
operation = core.DRY_RUN_UPGRADE
} else {
operation = core.UPGRADE
}

cmdr.Info.Println(abroot.Trans("upgrade.checkingSystemUpdate"))
err = aBsys.RunOperation(operation, freeSpace)
err = aBsys.RunOperation(operation, deleteOldSystem, dryRun)
if err != nil {
if err == core.ErrNoUpdate {
cmdr.Info.Println(abroot.Trans("upgrade.noUpdateAvailable"))
Expand Down
57 changes: 33 additions & 24 deletions core/oci.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ import (
"time"

"github.com/containers/buildah"
"go.podman.io/image/v5/types"
"go.podman.io/storage"
humanize "github.com/dustin/go-humanize"
digest "github.com/opencontainers/go-digest"
"github.com/pterm/pterm"
"github.com/vanilla-os/abroot/settings"
"github.com/vanilla-os/prometheus"
"go.podman.io/image/v5/types"
"go.podman.io/storage"
)

type NotEnoughSpaceError struct{}
Expand Down Expand Up @@ -63,6 +63,31 @@ func padString(str string, size int) string {
}
}

// OciExportRootFs pulls an image from a registry
func OciPullImage(imageName string) error {
pt, err := prometheus.NewPrometheus(
"/var/lib/abroot/storage",
"overlay",
settings.Cnf.MaxParallelDownloads,
)
if err != nil {
PrintVerboseErr("OciPullImage", 0, err)
return err
}

if strings.HasPrefix(imageName, "localhost/") {
return nil
}

err = pullImageWithProgressbar(pt, "remoteimage", imageName)
if err != nil {
PrintVerboseErr("OciPullImage", 1, err)
return err
}

return nil
}

// OciExportRootFs generates a rootfs from an image recipe file
func OciExportRootFs(buildImageName string, imageRecipe *ImageRecipe, transDir string, dest string) error {
PrintVerboseInfo("OciExportRootFs", "running...")
Expand Down Expand Up @@ -111,32 +136,16 @@ func OciExportRootFs(buildImageName string, imageRecipe *ImageRecipe, transDir s
return err
}

pulledImage := false
// pull image
if !strings.HasPrefix(imageRecipe.From, "localhost/") {
err = pullImageWithProgressbar(pt, buildImageName, imageRecipe)
if err != nil {
PrintVerboseErr("OciExportRootFs", 6.1, err)
return err
}
pulledImage = true
}

// build image
imageBuild, err := pt.BuildContainerFile(imageRecipePath, buildImageName)
if err != nil {
PrintVerboseErr("OciExportRootFs", 7, err)
return err
}

if pulledImage {
// This is safe because BuildContainerFile layers on top of the base image
// So this won't delete the actual layers, only the image reference
_, err = pt.Store.DeleteImage(imageRecipe.From, true)
if err != nil {
PrintVerboseWarn("OciExportRootFs", 7.5, "could not delete downloaded image", err)
}
}
// This is safe because BuildContainerFile layers on top of the base image
// So this won't delete the actual layers, only the image reference
_, _ = pt.Store.DeleteImage(imageRecipe.From, true)

// mount image
mountDir, err := pt.MountImage(imageBuild.TopLayer)
Expand All @@ -152,7 +161,7 @@ func OciExportRootFs(buildImageName string, imageRecipe *ImageRecipe, transDir s
}

// copy mount dir contents to dest
err = rsyncCmd(mountDir+"/", dest, []string{"--delete", "--checksum"}, false)
err = rsyncCmd(mountDir+"/", dest, []string{"--delete", "--delete-before", "--checksum"}, false)
if err != nil {
PrintVerboseErr("OciExportRootFs", 9, err)
return err
Expand Down Expand Up @@ -214,7 +223,7 @@ func checkImageSize(imageDir string, filesystemMount string) error {
// and reports the download progress using pterm progressbars. Each blob has
// its own bar, similar to how docker and podman report downloads in their
// respective CLIs
func pullImageWithProgressbar(pt *prometheus.Prometheus, name string, image *ImageRecipe) error {
func pullImageWithProgressbar(pt *prometheus.Prometheus, name string, imageName string) error {
PrintVerboseInfo("pullImageWithProgressbar", "running...")

progressCh := make(chan types.ProgressProperties)
Expand All @@ -225,7 +234,7 @@ func pullImageWithProgressbar(pt *prometheus.Prometheus, name string, image *Ima
defer close(manifestCh)
defer close(errorCh)

err := pt.PullImageAsync(image.From, name, progressCh, manifestCh, errorCh)
err := pt.PullImageAsync(imageName, name, progressCh, manifestCh, errorCh)
if err != nil {
PrintVerboseErr("pullImageWithProgressbar", 0, err)
return err
Expand Down
Loading