mirror of
https://github.com/mudler/luet.git
synced 2025-07-12 06:38:16 +00:00
68 lines
1.2 KiB
Go
68 lines
1.2 KiB
Go
package api
|
|
|
|
// This part is an extract from https://github.com/jwilder/docker-squash/
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
jww "github.com/spf13/jwalterweatherman"
|
|
|
|
"os/exec"
|
|
)
|
|
|
|
type ExportedImage struct {
|
|
Path string
|
|
JsonPath string
|
|
VersionPath string
|
|
LayerTarPath string
|
|
LayerDirPath string
|
|
}
|
|
|
|
func (e *ExportedImage) CreateDirs() error {
|
|
return os.MkdirAll(e.Path, 0755)
|
|
}
|
|
|
|
func (e *ExportedImage) TarLayer() error {
|
|
cwd, err := os.Getwd()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = os.Chdir(e.LayerDirPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer os.Chdir(cwd)
|
|
|
|
cmd := exec.Command("sudo", "/bin/sh", "-c", fmt.Sprintf("%s cvf ../layer.tar ./", TarCmd))
|
|
out, err := cmd.CombinedOutput()
|
|
if err != nil {
|
|
jww.INFO.Println(out)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (e *ExportedImage) RemoveLayerDir() error {
|
|
return os.RemoveAll(e.LayerDirPath)
|
|
}
|
|
|
|
func (e *ExportedImage) ExtractLayerDir(unpackmode string) error {
|
|
err := os.MkdirAll(e.LayerDirPath, 0755)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := ExtractLayer(&ExtractOpts{
|
|
Source: e.LayerTarPath,
|
|
Destination: e.LayerDirPath,
|
|
Compressed: true,
|
|
KeepDirlinks: true,
|
|
Rootless: false,
|
|
UnpackMode: unpackmode}); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|