[lxc-devel] [lxd/master] Simplify container shifting
stgraber on Github
lxc-bot at linuxcontainers.org
Wed Mar 27 23:13:58 UTC 2019
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 301 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20190327/3b4c0291/attachment-0001.bin>
-------------- next part --------------
From 67df1839e482e854fe22b89badf2dbf8f24d0e07 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Wed, 27 Mar 2019 18:56:47 -0400
Subject: [PATCH 1/2] lxd: Drop initialShiftRootfs and always shift on start
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
lxd/container_lxc.go | 4 ++--
lxd/storage_btrfs.go | 8 --------
lxd/storage_ceph.go | 23 -----------------------
lxd/storage_dir.go | 7 -------
lxd/storage_lvm.go | 7 -------
lxd/storage_shared.go | 28 ----------------------------
lxd/storage_zfs.go | 7 -------
7 files changed, 2 insertions(+), 82 deletions(-)
diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go
index 32b6baa790..f3b8b5f8a0 100644
--- a/lxd/container_lxc.go
+++ b/lxd/container_lxc.go
@@ -449,9 +449,9 @@ func containerLXCCreate(s *state.State, args db.ContainerArgs) (container, error
// Invalid idmap cache
c.idmapset = nil
- // Set last_state to the map we have on disk
+ // Set last_state if not currently set
if c.localConfig["volatile.last_state.idmap"] == "" {
- err = c.ConfigKeySet("volatile.last_state.idmap", jsonIdmap)
+ err = c.ConfigKeySet("volatile.last_state.idmap", "[]")
if err != nil {
c.Delete()
logger.Error("Failed creating container", ctxMap)
diff --git a/lxd/storage_btrfs.go b/lxd/storage_btrfs.go
index 2c2fee436a..a1b3a8aed7 100644
--- a/lxd/storage_btrfs.go
+++ b/lxd/storage_btrfs.go
@@ -944,14 +944,6 @@ func (s *storageBtrfs) ContainerCreateFromImage(container container, fingerprint
return errors.Wrap(err, "Failed to create container mountpoint")
}
- if !container.IsPrivileged() {
- err := s.initialShiftRootfs(container, nil)
- if err != nil {
- s.ContainerDelete(container)
- return errors.Wrap(err, "Failed to shift rootfs")
- }
- }
-
logger.Debugf("Created BTRFS storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
err = container.TemplateApply("create")
if err != nil {
diff --git a/lxd/storage_ceph.go b/lxd/storage_ceph.go
index a626b4367d..8e99ff126a 100644
--- a/lxd/storage_ceph.go
+++ b/lxd/storage_ceph.go
@@ -972,29 +972,6 @@ func (s *storageCeph) ContainerCreateFromImage(container container, fingerprint
defer s.ContainerUmount(container, containerPath)
}
- if !privileged {
- err := s.initialShiftRootfs(container, nil)
- if err != nil {
- logger.Errorf(`Failed to shift rootfs for container "%s": %s`, containerName, err)
- return err
- }
- logger.Debugf(`Shifted rootfs for container "%s"`, containerName)
-
- err = os.Chmod(containerPoolVolumeMntPoint, 0711)
- if err != nil {
- logger.Errorf(`Failed change mountpoint "%s" permissions to 0711 for container "%s" for RBD storage volume: %s`, containerPoolVolumeMntPoint, containerName, err)
- return err
- }
- logger.Debugf(`Changed mountpoint "%s" permissions to 0711 for container "%s" for RBD storage volume`, containerPoolVolumeMntPoint, containerName)
- } else {
- err := os.Chmod(containerPoolVolumeMntPoint, 0700)
- if err != nil {
- logger.Errorf(`Failed change mountpoint "%s" permissions to 0700 for container "%s" for RBD storage volume: %s`, containerPoolVolumeMntPoint, containerName, err)
- return err
- }
- logger.Debugf(`Changed mountpoint "%s" permissions to 0700 for container "%s" for RBD storage volume`, containerPoolVolumeMntPoint, containerName)
- }
-
err = container.TemplateApply("create")
if err != nil {
logger.Errorf(`Failed to apply create template for container "%s": %s`, containerName, err)
diff --git a/lxd/storage_dir.go b/lxd/storage_dir.go
index f82e821b26..2b29832f65 100644
--- a/lxd/storage_dir.go
+++ b/lxd/storage_dir.go
@@ -548,13 +548,6 @@ func (s *storageDir) ContainerCreateFromImage(container container, imageFingerpr
return errors.Wrap(err, "Unpack image")
}
- if !privileged {
- err := s.initialShiftRootfs(container, nil)
- if err != nil {
- return errors.Wrap(err, "Shift rootfs")
- }
- }
-
err = container.TemplateApply("create")
if err != nil {
return errors.Wrap(err, "Apply template")
diff --git a/lxd/storage_lvm.go b/lxd/storage_lvm.go
index 34d521c985..e9053d762a 100644
--- a/lxd/storage_lvm.go
+++ b/lxd/storage_lvm.go
@@ -1059,13 +1059,6 @@ func (s *storageLvm) ContainerCreateFromImage(container container, fingerprint s
return errors.Wrap(err, "Set mount point permissions")
}
- if !container.IsPrivileged() {
- err := s.initialShiftRootfs(container, nil)
- if err != nil {
- return errors.Wrap(err, "Shift rootfs")
- }
- }
-
err = container.TemplateApply("create")
if err != nil {
logger.Errorf("Error in create template during ContainerCreateFromImage, continuing to unmount: %s", err)
diff --git a/lxd/storage_shared.go b/lxd/storage_shared.go
index ae7d7ee771..8fb89b2da6 100644
--- a/lxd/storage_shared.go
+++ b/lxd/storage_shared.go
@@ -1,13 +1,8 @@
package main
import (
- "fmt"
- "os"
-
"github.com/lxc/lxd/lxd/state"
"github.com/lxc/lxd/shared/api"
- "github.com/lxc/lxd/shared/logger"
- "github.com/pkg/errors"
)
type storageShared struct {
@@ -35,29 +30,6 @@ func (s *storageShared) GetStorageTypeVersion() string {
return s.sTypeVersion
}
-func (s *storageShared) initialShiftRootfs(c container, skipper func(dir string, absPath string, fi os.FileInfo) bool) error {
- rpath := c.RootfsPath()
-
- logger.Debugf("Shifting root filesystem \"%s\" for \"%s\"", rpath, c.Name())
-
- idmapset, err := c.IdmapSet()
- if err != nil {
- return errors.Wrap(err, "Get ID map")
- }
-
- if idmapset == nil {
- return fmt.Errorf("IdmapSet of container '%s' is nil", c.Name())
- }
-
- err = idmapset.ShiftRootfs(rpath, skipper)
- if err != nil {
- logger.Debugf("Shift of rootfs %s failed: %s", rpath, err)
- return errors.Wrap(err, "Shift rootfs")
- }
-
- return nil
-}
-
func (s *storageShared) createImageDbPoolVolume(fingerprint string) error {
// Fill in any default volume config.
volumeConfig := map[string]string{}
diff --git a/lxd/storage_zfs.go b/lxd/storage_zfs.go
index a678121c7e..0a01d16c74 100644
--- a/lxd/storage_zfs.go
+++ b/lxd/storage_zfs.go
@@ -919,13 +919,6 @@ func (s *storageZfs) ContainerCreateFromImage(container container, fingerprint s
return err
}
- if !privileged {
- err = s.initialShiftRootfs(container, zfsIdmapSetSkipper)
- if err != nil {
- return err
- }
- }
-
err = container.TemplateApply("create")
if err != nil {
return err
From 19a68fab6e7d83ddd186ac3faa31625566320c5e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Wed, 27 Mar 2019 19:12:05 -0400
Subject: [PATCH 2/2] lxc/launch: Show start progress
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
lxc/launch.go | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/lxc/launch.go b/lxc/launch.go
index 2f51cea8c5..cdb7b786f4 100644
--- a/lxc/launch.go
+++ b/lxc/launch.go
@@ -5,6 +5,7 @@ import (
"github.com/spf13/cobra"
+ "github.com/lxc/lxd/lxc/utils"
"github.com/lxc/lxd/shared/api"
cli "github.com/lxc/lxd/shared/cmd"
"github.com/lxc/lxd/shared/i18n"
@@ -74,8 +75,19 @@ func (c *cmdLaunch) Run(cmd *cobra.Command, args []string) error {
return err
}
- err = op.Wait()
+ progress := utils.ProgressRenderer{
+ Quiet: c.global.flagQuiet,
+ }
+ _, err = op.AddHandler(progress.UpdateOp)
+ if err != nil {
+ progress.Done("")
+ return err
+ }
+
+ // Wait for operation to finish
+ err = utils.CancelableWait(op, &progress)
if err != nil {
+ progress.Done("")
prettyName := name
if remote != "" {
prettyName = fmt.Sprintf("%s:%s", remote, name)
@@ -84,5 +96,6 @@ func (c *cmdLaunch) Run(cmd *cobra.Command, args []string) error {
return fmt.Errorf("%s\n"+i18n.G("Try `lxc info --show-log %s` for more info"), err, prettyName)
}
+ progress.Done("")
return nil
}
More information about the lxc-devel
mailing list