From 821f469a1d82e180528dc07afffde05f08a57dd1 Mon Sep 17 00:00:00 2001 From: Andrew Rynhard Date: Mon, 21 Jun 2021 21:27:44 +0000 Subject: [PATCH] feat: skip overlay mount checks with docker We need to be able to run an install with `docker run`. This checks if we are running from docker and skips overlay mount checks if we are, as docker creates a handful of overlay mounts by default that we can't workaround (not easily at least). Signed-off-by: Andrew Rynhard --- cmd/installer/pkg/install/manifest.go | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/cmd/installer/pkg/install/manifest.go b/cmd/installer/pkg/install/manifest.go index 27dbc3b82..46dc53ba1 100644 --- a/cmd/installer/pkg/install/manifest.go +++ b/cmd/installer/pkg/install/manifest.go @@ -94,13 +94,18 @@ func NewManifest(label string, sequence runtime.Sequence, bootPartitionFound boo } } + skipOverlayMountsCheck, err := shouldSkipOverlayMountsCheck(sequence) + if err != nil { + return nil, err + } + manifest.Devices[opts.Disk] = Device{ Device: opts.Disk, ResetPartitionTable: opts.Force, Zero: opts.Zero, - SkipOverlayMountsCheck: sequence == runtime.SequenceNoop, + SkipOverlayMountsCheck: skipOverlayMountsCheck, } // Initialize any slices we need. Note that a boot partition is not @@ -533,3 +538,20 @@ func (m *Manifest) zeroDevice(device Device) (err error) { return bd.Close() } + +func shouldSkipOverlayMountsCheck(sequence runtime.Sequence) (bool, error) { + var skipOverlayMountsCheck bool + + _, err := os.Stat("/.dockerenv") + + switch { + case err == nil: + skipOverlayMountsCheck = true + case os.IsNotExist(err): + skipOverlayMountsCheck = sequence == runtime.SequenceNoop + default: + return false, fmt.Errorf("cannot determine if /.dockerenv exists: %w", err) + } + + return skipOverlayMountsCheck, nil +}