Bind-mount /run if it exists
Ubuntu 11.10, for whatever reason, moved /dev/shm to /run/shm. Since
/run is not mounted in the chroot, /dev/shm is a dangling symlink and
various things that require shared memory start failing.
If /run and /run/shm exist, bind-mount them in the chroot.
Because /run doesn't yet exist in the SDK tarballs, try to create it
(and /run/shm if necessary) as root if it and can't be created as a
normal user.
BUG=chromium-os:19871
TEST=Run cros_sdk, verify that /dev/shm has the expected contents
Change-Id: I61583c1c0d409c1234fa8d8930a9b64544c9a8e7
Reviewed-on: https://gerrit.chromium.org/gerrit/10222
Tested-by: Aaron Plattner <aplattner@nvidia.com>
Reviewed-by: David James <davidjames@chromium.org>
Commit-Ready: David James <davidjames@chromium.org>
diff --git a/sdk_lib/enter_chroot.sh b/sdk_lib/enter_chroot.sh
index 3d7582f..3fb61d7 100755
--- a/sdk_lib/enter_chroot.sh
+++ b/sdk_lib/enter_chroot.sh
@@ -104,8 +104,12 @@
*)
# Attempt to make the mountpoint as the user. This depends on the
# fact that all mountpoints that should be owned by root are
- # already present.
- mkdir -p "${mounted_path}"
+ # already present. However, when distributions add new paths (such as
+ # Ubuntu 11.10's /run), it might not yet exist in the chroot. If that
+ # happens, just create it as root.
+ if ! mkdir -p "${mounted_path}" 2>/dev/null; then
+ sudo mkdir -p "${mounted_path}"
+ fi
# NB: mount_args deliberately left unquoted
debug mount ${mount_args} "${source}" "${mounted_path}"
@@ -238,6 +242,12 @@
ensure_mounted none "-t sysfs" /sys
ensure_mounted /dev "--bind" /dev
ensure_mounted none "-t devpts" /dev/pts
+ if [ -d /run ]; then
+ ensure_mounted /run "--bind" /run
+ if [ -d /run/shm ]; then
+ ensure_mounted /run/shm "--bind" /run/shm
+ fi
+ fi
ensure_mounted "${FLAGS_trunk}" "--bind" "${CHROOT_TRUNK_DIR}"
if [ $FLAGS_ssh_agent -eq $FLAGS_TRUE ]; then