1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
package sources
import (
"fmt"
"net/url"
"path"
"path/filepath"
"github.com/lxc/distrobuilder/shared"
)
type rootfs struct {
common
}
// Run downloads a tarball.
func (s *rootfs) Run() error {
URL, err := url.Parse(s.definition.Source.URL)
if err != nil {
return fmt.Errorf("Failed to parse URL: %w", err)
}
var fpath string
var filename string
if URL.Scheme == "file" {
fpath = filepath.Dir(URL.Path)
filename = filepath.Base(URL.Path)
} else {
fpath, err = s.DownloadHash(s.definition.Image, s.definition.Source.URL, "", nil)
if err != nil {
return fmt.Errorf("Failed to download %q: %w", s.
definition.Source.URL, err)
}
filename = path.Base(s.definition.Source.URL)
}
s.logger.WithField("file", filepath.Join(fpath, filename)).Info("Unpacking image")
// Unpack
err = shared.Unpack(filepath.Join(fpath, filename), s.rootfsDir)
if err != nil {
return fmt.Errorf("Failed to unpack %q: %w", filepath.Join(fpath, filename), err)
}
return nil
}
|