1
0
mirror of https://github.com/rancher/os.git synced 2025-09-19 17:38:30 +00:00

Make shared mount work in an initrd

This commit is contained in:
Darren Shepherd
2016-06-07 17:18:21 -07:00
parent 438a437459
commit f410c678ba
3 changed files with 31 additions and 3 deletions

View File

@@ -94,6 +94,7 @@ type RancherConfig struct {
CloudInit CloudInit `yaml:"cloud_init,omitempty"`
Debug bool `yaml:"debug,omitempty"`
RmUsr bool `yaml:"rm_usr,omitempty"`
NoSharedRoot bool `yaml:"no_sharedroot,omitempty"`
Log bool `yaml:"log,omitempty"`
ForceConsoleRebuild bool `yaml:"force_console_rebuild,omitempty"`
Disable []string `yaml:"disable,omitempty"`

View File

@@ -19,4 +19,10 @@ for i in /opt/bin /usr/local/bin; do
fi
done
mount --make-shared /
if [ "$(grep '/var/lib/docker /var/lib/docker ' /proc/self/mountinfo | awk '{print $9}')" = "rootfs" ]; then
export DOCKER_RAMDISK=1
fi
exec /usr/bin/dockerlaunch $DOCKER_BIN "$@" $DOCKER_OPTS >>/var/log/docker.log 2>&1

View File

@@ -11,6 +11,7 @@ import (
"syscall"
log "github.com/Sirupsen/logrus"
"github.com/docker/docker/pkg/mount"
"github.com/rancher/docker-from-scratch"
"github.com/rancher/os/config"
"github.com/rancher/os/util"
@@ -179,6 +180,28 @@ func isInitrd() bool {
return int64(stat.Type) == TMPFS_MAGIC || int64(stat.Type) == RAMFS_MAGIC
}
func setupSharedRoot(c *config.CloudConfig) (*config.CloudConfig, error) {
if !c.NoSharedRoot {
return c, nil
}
if isInitrd() {
for _, i := range []string{"/mnt", "/media"} {
if err := os.Mkdir(i, 0755); err != nil {
return c, err
}
if err := mount.Mount("tmpfs", i, "tmpfs", "rw"); err != nil {
return c, err
}
if err := mount.MakeRShared(i); err != nil {
return c, err
}
}
return c, nil
}
return c, mount.MakeShared("/")
}
func RunInit() error {
os.Setenv("PATH", "/sbin:/usr/sbin:/usr/bin")
if isInitrd() {
@@ -218,9 +241,7 @@ func RunInit() error {
return c, dockerlaunch.PrepareFs(&mountConfig)
},
initializeSelinux,
func(c *config.CloudConfig) (*config.CloudConfig, error) {
return c, syscall.Mount("", "/", "", syscall.MS_SHARED|syscall.MS_REC, "")
},
setupSharedRoot,
sysInit,
}