Skip to content

Commit

Permalink
Remove the rest of v1 manifest support
Browse files Browse the repository at this point in the history
As people are using the UUID in `docker info` that was based on the v1 manifest signing key, replace
with a UUID instead.

Remove deprecated `--disable-legacy-registry` option that was scheduled to be removed in 18.03.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
  • Loading branch information
justincormack authored and cpuguy83 committed Mar 2, 2019
1 parent 8aca18d commit 98fc091
Show file tree
Hide file tree
Showing 17 changed files with 47 additions and 247 deletions.
15 changes: 0 additions & 15 deletions cmd/dockerd/config.go
Expand Up @@ -12,8 +12,6 @@ import (
const (
// defaultShutdownTimeout is the default shutdown timeout for the daemon
defaultShutdownTimeout = 15
// defaultTrustKeyFile is the default filename for the trust key
defaultTrustKeyFile = "key.json"
)

// installCommonConfigFlags adds flags to the pflag.FlagSet to configure the daemon
Expand Down Expand Up @@ -83,13 +81,6 @@ func installCommonConfigFlags(conf *config.Config, flags *pflag.FlagSet) error {

flags.IntVar(&conf.NetworkControlPlaneMTU, "network-control-plane-mtu", config.DefaultNetworkMtu, "Network Control plane MTU")

// "--deprecated-key-path" is to allow configuration of the key used
// for the daemon ID and the deprecated image signing. It was never
// exposed as a command line option but is added here to allow
// overriding the default path in configuration.
flags.Var(opts.NewQuotedString(&conf.TrustKeyPath), "deprecated-key-path", "Path to key file for ID and image signing")
flags.MarkHidden("deprecated-key-path")

conf.MaxConcurrentDownloads = &maxConcurrentDownloads
conf.MaxConcurrentUploads = &maxConcurrentUploads
return nil
Expand All @@ -103,10 +94,4 @@ func installRegistryServiceFlags(options *registry.ServiceOptions, flags *pflag.
flags.Var(ana, "allow-nondistributable-artifacts", "Allow push of nondistributable artifacts to registry")
flags.Var(mirrors, "registry-mirror", "Preferred Docker registry mirror")
flags.Var(insecureRegistries, "insecure-registry", "Enable insecure registry communication")

if runtime.GOOS != "windows" {
// TODO: Remove this flag after 3 release cycles (18.03)
flags.BoolVar(&options.V2Only, "disable-legacy-registry", true, "Disable contacting legacy registries")
flags.MarkHidden("disable-legacy-registry")
}
}
19 changes: 0 additions & 19 deletions cmd/dockerd/daemon.go
Expand Up @@ -432,14 +432,6 @@ func loadDaemonCliConfig(opts *daemonOptions) (*config.Config, error) {
conf.CommonTLSOptions.KeyFile = opts.TLSOptions.KeyFile
}

if conf.TrustKeyPath == "" {
daemonConfDir, err := getDaemonConfDir(conf.Root)
if err != nil {
return nil, err
}
conf.TrustKeyPath = filepath.Join(daemonConfDir, defaultTrustKeyFile)
}

if flags.Changed("graph") && flags.Changed("data-root") {
return nil, errors.New(`cannot specify both "--graph" and "--data-root" option`)
}
Expand All @@ -462,17 +454,6 @@ func loadDaemonCliConfig(opts *daemonOptions) (*config.Config, error) {
return nil, err
}

if runtime.GOOS != "windows" {
if flags.Changed("disable-legacy-registry") {
// TODO: Remove this error after 3 release cycles (18.03)
return nil, errors.New("ERROR: The '--disable-legacy-registry' flag has been removed. Interacting with legacy (v1) registries is no longer supported")
}
if !conf.V2Only {
// TODO: Remove this error after 3 release cycles (18.03)
return nil, errors.New("ERROR: The 'disable-legacy-registry' configuration option has been removed. Interacting with legacy (v1) registries is no longer supported")
}
}

if flags.Changed("graph") {
logrus.Warnf(`The "-g / --graph" flag is deprecated. Please use "--data-root" instead`)
}
Expand Down
4 changes: 0 additions & 4 deletions cmd/dockerd/daemon_unix.go
Expand Up @@ -55,10 +55,6 @@ func setDefaultUmask() error {
return nil
}

func getDaemonConfDir(_ string) (string, error) {
return getDefaultDaemonConfigDir()
}

func (cli *DaemonCli) getPlatformContainerdDaemonOpts() ([]supervisor.DaemonOpt, error) {
opts := []supervisor.DaemonOpt{
supervisor.WithOOMScore(cli.Config.OOMScoreAdjust),
Expand Down
5 changes: 0 additions & 5 deletions cmd/dockerd/daemon_windows.go
Expand Up @@ -4,7 +4,6 @@ import (
"fmt"
"net"
"os"
"path/filepath"

"github.com/docker/docker/daemon/config"
"github.com/docker/docker/libcontainerd/supervisor"
Expand All @@ -21,10 +20,6 @@ func setDefaultUmask() error {
return nil
}

func getDaemonConfDir(root string) (string, error) {
return filepath.Join(root, `\config`), nil
}

// preNotifySystem sends a message to the host when the API is active, but before the daemon is
func preNotifySystem() {
// start the service now to prevent timeouts waiting for daemon to start
Expand Down
10 changes: 0 additions & 10 deletions daemon/config/config.go
Expand Up @@ -8,7 +8,6 @@ import (
"io/ioutil"
"os"
"reflect"
"runtime"
"strings"
"sync"

Expand Down Expand Up @@ -135,12 +134,6 @@ type CommonConfig struct {
SocketGroup string `json:"group,omitempty"`
CorsHeaders string `json:"api-cors-header,omitempty"`

// TrustKeyPath is used to generate the daemon ID and for signing schema 1 manifests
// when pushing to a registry which does not support schema 2. This field is marked as
// deprecated because schema 1 manifests are deprecated in favor of schema 2 and the
// daemon ID will use a dedicated identifier not shared with exported signatures.
TrustKeyPath string `json:"deprecated-key-path,omitempty"`

// LiveRestoreEnabled determines whether we should keep containers
// alive upon daemon shutdown/start
LiveRestoreEnabled bool `json:"live-restore,omitempty"`
Expand Down Expand Up @@ -247,9 +240,6 @@ func New() *Config {
config.LogConfig.Config = make(map[string]string)
config.ClusterOpts = make(map[string]string)

if runtime.GOOS != "linux" {
config.V2Only = true
}
return &config
}

Expand Down
5 changes: 2 additions & 3 deletions daemon/daemon.go
Expand Up @@ -953,7 +953,7 @@ func NewDaemon(ctx context.Context, config *config.Config, pluginStore *plugin.S
return nil, err
}

trustKey, err := loadOrCreateTrustKey(config.TrustKeyPath)
uuid, err := loadOrCreateUUID(filepath.Join(config.Root, "engine_uuid"))
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -998,7 +998,7 @@ func NewDaemon(ctx context.Context, config *config.Config, pluginStore *plugin.S
return nil, errors.New("Devices cgroup isn't mounted")
}

d.ID = trustKey.PublicKey().KeyID()
d.ID = uuid
d.repository = daemonRepo
d.containers = container.NewMemoryStore()
if d.containersReplica, err = container.NewViewDB(); err != nil {
Expand Down Expand Up @@ -1029,7 +1029,6 @@ func NewDaemon(ctx context.Context, config *config.Config, pluginStore *plugin.S
MaxConcurrentUploads: *config.MaxConcurrentUploads,
ReferenceStore: rs,
RegistryService: registryService,
TrustKey: trustKey,
})

go d.execCommandGC()
Expand Down
1 change: 0 additions & 1 deletion daemon/images/image_push.go
Expand Up @@ -54,7 +54,6 @@ func (i *ImageService) PushImage(ctx context.Context, image, tag string, metaHea
},
ConfigMediaType: schema2.MediaTypeImageConfig,
LayerStores: distribution.NewLayerProvidersFromStores(i.layerStores),
TrustKey: i.trustKey,
UploadManager: i.uploadManager,
}

Expand Down
4 changes: 0 additions & 4 deletions daemon/images/service.go
Expand Up @@ -14,7 +14,6 @@ import (
"github.com/docker/docker/layer"
dockerreference "github.com/docker/docker/reference"
"github.com/docker/docker/registry"
"github.com/docker/libtrust"
"github.com/opencontainers/go-digest"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
Expand All @@ -40,7 +39,6 @@ type ImageServiceConfig struct {
MaxConcurrentUploads int
ReferenceStore dockerreference.Store
RegistryService registry.Service
TrustKey libtrust.PrivateKey
}

// NewImageService returns a new ImageService from a configuration
Expand All @@ -56,7 +54,6 @@ func NewImageService(config ImageServiceConfig) *ImageService {
layerStores: config.LayerStores,
referenceStore: config.ReferenceStore,
registryService: config.RegistryService,
trustKey: config.TrustKey,
uploadManager: xfer.NewLayerUploadManager(config.MaxConcurrentUploads),
}
}
Expand All @@ -72,7 +69,6 @@ type ImageService struct {
pruneRunning int32
referenceStore dockerreference.Store
registryService registry.Service
trustKey libtrust.PrivateKey
uploadManager *xfer.LayerUploadManager
}

Expand Down
57 changes: 0 additions & 57 deletions daemon/trustkey.go

This file was deleted.

71 changes: 0 additions & 71 deletions daemon/trustkey_test.go

This file was deleted.

28 changes: 28 additions & 0 deletions daemon/uuid.go
@@ -0,0 +1,28 @@
package daemon // import "github.com/docker/docker/daemon"

import (
"fmt"
"io/ioutil"
"os"
"path/filepath"

"github.com/docker/docker/pkg/ioutils"
"github.com/pborman/uuid"
)

func loadOrCreateUUID(path string) (string, error) {
err := os.MkdirAll(filepath.Dir(path), 0755)
if err != nil {
return "", err
}
id, err := ioutil.ReadFile(path)
if os.IsNotExist(err) {
id = []byte(uuid.New())
if err := ioutils.AtomicWriteFile(path, id, os.FileMode(0600)); err != nil {
return "", fmt.Errorf("Error saving uuid file: %s", err)
}
} else if err != nil {
return "", fmt.Errorf("Error loading uuid file %s: %s", path, err)
}
return string(id), nil
}
4 changes: 0 additions & 4 deletions distribution/config.go
Expand Up @@ -18,7 +18,6 @@ import (
"github.com/docker/docker/pkg/system"
refstore "github.com/docker/docker/reference"
"github.com/docker/docker/registry"
"github.com/docker/libtrust"
"github.com/opencontainers/go-digest"
specs "github.com/opencontainers/image-spec/specs-go/v1"
)
Expand Down Expand Up @@ -73,9 +72,6 @@ type ImagePushConfig struct {
ConfigMediaType string
// LayerStores (indexed by operating system) manages layers.
LayerStores map[string]PushLayerProvider
// TrustKey is the private key for legacy signatures. This is typically
// an ephemeral key, since these signatures are no longer verified.
TrustKey libtrust.PrivateKey
// UploadManager dispatches uploads.
UploadManager *xfer.LayerUploadManager
}
Expand Down

0 comments on commit 98fc091

Please sign in to comment.