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
|
// Copyright (c) 2018, Sylabs Inc. All rights reserved.
// This software is licensed under a 3-clause BSD license. Please consult the
// LICENSE.md file distributed with the sources of this project regarding your
// rights to use or distribute this software.
package build
import (
"context"
"fmt"
"github.com/sylabs/singularity/v4/internal/pkg/build/sources"
"github.com/sylabs/singularity/v4/pkg/build/types"
)
// Conveyor is responsible for downloading from remote sources (library, shub, docker...).
type Conveyor interface {
Get(context.Context, *types.Bundle) error
}
// Packer is the type which is responsible for installing the chroot directory,
// metadata directory, and potentially other files/directories within the Bundle.
type Packer interface {
Pack(context.Context) (*types.Bundle, error)
}
// ConveyorPacker describes an interface that a ConveyorPacker type must implement.
type ConveyorPacker interface {
Conveyor
Packer
}
// NewConveyorPacker returns a valid ConveyorPacker for the given image definition.
func NewConveyorPacker(def types.Definition) (ConveyorPacker, error) {
bs, ok := def.Header["bootstrap"]
if !ok {
return nil, fmt.Errorf("no bootstrap specification found")
}
switch bs {
case "library":
return &sources.LibraryConveyorPacker{}, nil
case "oras":
return &sources.OrasConveyorPacker{}, nil
case "shub":
return &sources.ShubConveyorPacker{}, nil
case "docker", "docker-archive", "docker-daemon", "oci", "oci-archive":
return &sources.OCIConveyorPacker{}, nil
case "busybox":
return &sources.BusyBoxConveyorPacker{}, nil
case "debootstrap":
return &sources.DebootstrapConveyorPacker{}, nil
case "arch":
return &sources.ArchConveyorPacker{}, nil
case "localimage":
return &sources.LocalConveyorPacker{}, nil
case "yum":
return &sources.YumConveyorPacker{}, nil
case "zypper":
return &sources.ZypperConveyorPacker{}, nil
case "scratch":
return &sources.ScratchConveyorPacker{}, nil
case "":
return nil, fmt.Errorf("no bootstrap specification found")
default:
return nil, fmt.Errorf("invalid build source %q", def.Header["bootstrap"])
}
}
|