12
"github.com/containers/image/v5/pkg/compression"
13
"github.com/containers/image/v5/types"
14
diskcompression "github.com/containers/podman/v5/pkg/machine/compression"
15
"github.com/containers/podman/v5/pkg/machine/define"
16
"github.com/sirupsen/logrus"
19
type LocalBlobDir struct {
24
machineImageDir string
28
func NewOCIDir(ctx context.Context, inputDir, machineImageDir, vmName string) *LocalBlobDir {
29
strippedInputDir := strings.TrimPrefix(inputDir, fmt.Sprintf("%s:/", OCIDir.String()))
32
blobDirPath: strippedInputDir,
35
machineImageDir: machineImageDir,
41
func (l *LocalBlobDir) Pull() error {
42
localBlob, err := GetLocalBlob(l.ctx, l.DiskEndpoint())
50
func (l *LocalBlobDir) Decompress(compressedFile *define.VMFile) (*define.VMFile, error) {
51
finalName := finalFQImagePathName(l.vmName, l.imageName)
52
if err := diskcompression.Decompress(compressedFile, finalName); err != nil {
55
return define.NewMachineFile(finalName, nil)
58
func (l *LocalBlobDir) Unpack() (*define.VMFile, error) {
59
tbPath := localOCIDiskImageDir(l.blobDirPath, l.blob)
60
unPackedFile, err := unpackOCIDir(tbPath, l.machineImageDir)
64
l.imageName = unPackedFile.GetPath()
65
return unPackedFile, err
68
func (l *LocalBlobDir) DiskEndpoint() string {
72
func (l *LocalBlobDir) LocalBlob() *types.BlobInfo {
76
// findTarComponent returns a header and a reader matching componentPath within inputFile,
77
// or (nil, nil, nil) if not found.
78
func findTarComponent(pathToTar string) (string, error) {
79
f, err := os.Open(pathToTar)
84
if err := f.Close(); err != nil {
88
uncompressedReader, _, err := compression.AutoDecompress(f)
93
if err := uncompressedReader.Close(); err != nil {
101
t := tar.NewReader(uncompressedReader)
113
if headerCount != 1 {
114
return "", errors.New("invalid oci machine image")