mirror of
https://github.com/linuxkit/linuxkit.git
synced 2026-03-19 23:49:39 +00:00
pkg build: make buildkit builder container name configurable
On shared servers where multiple users build packages against the same Docker daemon, all users fight over a single hardcoded builder container named "linuxkit-builder". One user's build can destroy another's in-flight build when builder lifecycle management detects mismatches. Make the builder container name configurable: 1. --builder-name CLI flag (highest priority) 2. LINUXKIT_BUILDER_NAME environment variable 3. "linuxkit-builder" default (original behavior, unchanged) The flag is available on both "linuxkit pkg build" and "linuxkit pkg builder" (du/prune) commands. Users on shared servers can set LINUXKIT_BUILDER_NAME or pass --builder-name to get per-user isolation (e.g. LINUXKIT_BUILDER_NAME=linuxkit-builder-$USER). Signed-off-by: Mikhail Malyshev <mike.malyshev@gmail.com>
This commit is contained in:
@@ -16,6 +16,7 @@ import (
|
||||
const (
|
||||
buildersEnvVar = "LINUXKIT_BUILDERS"
|
||||
envVarCacheDir = "LINUXKIT_CACHE"
|
||||
envVarBuilderName = "LINUXKIT_BUILDER_NAME"
|
||||
defaultBuilderImage = "moby/buildkit:v0.26.3"
|
||||
)
|
||||
|
||||
@@ -40,6 +41,7 @@ func pkgBuildCmd() *cobra.Command {
|
||||
platforms string
|
||||
skipPlatforms string
|
||||
builders string
|
||||
builderName = flagOverEnvVarOverDefaultString{def: pkglib.DefaultBuilderName(), envVar: envVarBuilderName}
|
||||
builderImage string
|
||||
builderConfig string
|
||||
builderRestart bool
|
||||
@@ -199,6 +201,7 @@ func pkgBuildCmd() *cobra.Command {
|
||||
|
||||
opts = append(opts, pkglib.WithBuildBuilders(buildersMap))
|
||||
opts = append(opts, pkglib.WithBuildBuilderConfig(pkglib.BuilderConfig{
|
||||
Name: builderName.String(),
|
||||
Image: builderImage,
|
||||
ConfigPath: builderConfig,
|
||||
Restart: builderRestart,
|
||||
@@ -305,6 +308,7 @@ func pkgBuildCmd() *cobra.Command {
|
||||
cmd.Flags().StringVar(&platforms, "platforms", "", "Which platforms to build for, defaults to all of those for which the package can be built")
|
||||
cmd.Flags().StringVar(&skipPlatforms, "skip-platforms", "", "Platforms that should be skipped, even if present in build.yml")
|
||||
cmd.Flags().StringVar(&builders, "builders", "", "Which builders to use for which platforms, e.g. linux/arm64=docker-context-arm64, overrides defaults and environment variables, see https://github.com/linuxkit/linuxkit/blob/master/docs/packages.md#Providing-native-builder-nodes")
|
||||
cmd.Flags().Var(&builderName, "builder-name", fmt.Sprintf("Name of the buildkit builder container, default: %s, overrides env var %s", pkglib.DefaultBuilderName(), envVarBuilderName))
|
||||
cmd.Flags().StringVar(&builderImage, "builder-image", defaultBuilderImage, "buildkit builder container image to use")
|
||||
cmd.Flags().StringVar(&builderConfig, "builder-config", "", "path to buildkit builder config.toml file to use, overrides the default config.toml in the builder image. When provided, copied over into builder, along with all certs. Use paths for certificates relative to your local host, they will be adjusted on copying into the container. USE WITH CAUTION")
|
||||
cmd.Flags().BoolVar(&builderRestart, "builder-restart", false, "force restarting builder, even if container with correct name and image exists")
|
||||
|
||||
@@ -13,6 +13,7 @@ import (
|
||||
func pkgBuilderCmd() *cobra.Command {
|
||||
var (
|
||||
builders string
|
||||
builderName = flagOverEnvVarOverDefaultString{def: pkglib.DefaultBuilderName(), envVar: envVarBuilderName}
|
||||
platforms string
|
||||
builderImage string
|
||||
builderConfigPath string
|
||||
@@ -40,6 +41,7 @@ func pkgBuilderCmd() *cobra.Command {
|
||||
|
||||
platformsToClean := strings.Split(platforms, ",")
|
||||
bc := pkglib.BuilderConfig{
|
||||
Name: builderName.String(),
|
||||
Image: builderImage,
|
||||
ConfigPath: builderConfigPath,
|
||||
}
|
||||
@@ -60,6 +62,7 @@ func pkgBuilderCmd() *cobra.Command {
|
||||
}
|
||||
|
||||
cmd.PersistentFlags().StringVar(&builders, "builders", "", "Which builders to use for which platforms, e.g. linux/arm64=docker-context-arm64, overrides defaults and environment variables, see https://github.com/linuxkit/linuxkit/blob/master/docs/packages.md#Providing-native-builder-nodes")
|
||||
cmd.PersistentFlags().Var(&builderName, "builder-name", fmt.Sprintf("Name of the buildkit builder container, default: %s, overrides env var %s", pkglib.DefaultBuilderName(), envVarBuilderName))
|
||||
cmd.PersistentFlags().StringVar(&platforms, "platforms", fmt.Sprintf("linux/%s", runtime.GOARCH), "Which platforms we built images for")
|
||||
cmd.PersistentFlags().StringVar(&builderImage, "builder-image", defaultBuilderImage, "buildkit builder container image to use")
|
||||
cmd.Flags().StringVar(&builderConfigPath, "builder-config", "", "path to buildkit builder config.toml file to use, overrides the default config.toml in the builder image; USE WITH CAUTION")
|
||||
|
||||
@@ -67,6 +67,11 @@ const (
|
||||
buildkitConfigPath = buildkitConfigDir + "/" + buildkitConfigFileName
|
||||
)
|
||||
|
||||
// DefaultBuilderName returns the default builder container name.
|
||||
func DefaultBuilderName() string {
|
||||
return buildkitBuilderName
|
||||
}
|
||||
|
||||
type dockerRunnerImpl struct {
|
||||
cache bool
|
||||
builder BuilderConfig
|
||||
@@ -74,7 +79,7 @@ type dockerRunnerImpl struct {
|
||||
|
||||
func NewDockerRunner(cache bool, bc BuilderConfig) DockerRunner {
|
||||
if bc.Name == "" {
|
||||
bc.Name = buildkitBuilderName
|
||||
bc.Name = DefaultBuilderName()
|
||||
}
|
||||
return &dockerRunnerImpl{cache: cache, builder: bc}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user