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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
package sources
import (
"crypto/sha512"
"fmt"
"path/filepath"
"github.com/lxc/distrobuilder/shared"
)
type alpaquita struct {
common
}
func (s *alpaquita) Run() error {
baseURL, fname, err := s.getMiniroot(s.definition)
if err != nil {
return err
}
var fpath string
tarballURL := baseURL + fname
if s.definition.Source.SkipVerification {
fpath, err = s.DownloadHash(s.definition.Image,
tarballURL, "", nil)
if err != nil {
return err
}
} else {
fpath, err = s.DownloadHash(s.definition.Image,
tarballURL, tarballURL+".sha512", sha512.New())
if err != nil {
return err
}
}
tarballLocal := filepath.Join(fpath, fname)
s.logger.WithField("file", tarballLocal).Info("Unpacking image")
err = shared.Unpack(tarballLocal, s.rootfsDir)
if err != nil {
return err
}
return nil
}
// Sample URLs (or with "latest" instead of date):
//
// https://packages.bell-sw.com/alpaquita/musl/stream/releases/x86_64/alpaquita-minirootfs-stream-241231-musl-x86_64.tar.gz
// https://packages.bell-sw.com/alpaquita/glibc/23/releases/aarch64/alpaquita-minirootfs-23-241231-glibc-aarch64.tar.gz
func (s *alpaquita) getMiniroot(definition shared.Definition) (string, string, error) {
// default server
if s.definition.Source.URL == "" {
s.definition.Source.URL = "https://packages.bell-sw.com"
}
// require explicit source variant (libc)
if s.definition.Source.Variant == "" {
return "", "", fmt.Errorf("Alpaquita requires explicitly specified source variant")
}
base := fmt.Sprintf("%s/alpaquita/%s/%s/releases/%s/",
s.definition.Source.URL,
s.definition.Source.Variant,
s.definition.Image.Release,
s.definition.Image.ArchitectureMapped)
fname := fmt.Sprintf("alpaquita-minirootfs-%s-latest-%s-%s.tar.gz",
s.definition.Image.Release,
s.definition.Source.Variant,
s.definition.Image.ArchitectureMapped)
return base, fname, nil
}
|