cros_sdk: Allow additional chroot mounts via .local_mounts file
This change was coopted from http://codereview.chromium.org/5331009/,
originally written by hungte@. And the coopted commit message:
It would be helpful if we could share some directories inside/outside the
chroot (e.g. editor configuration or the default Downloads directory). This
CL reads .local_mounts (just like .default_boards) from the "src/scripts"
folder, and mounts the directories whenever you do cros_sdk.
For safety concern, and to prevent the developer from accidentally deleting
their mounted files, the mounts are made read-only.
.local_mounts has a very simple syntax:
mount_path
or source_path(outside chroot) destination_path(inside chroot)
or # comments.
Examples:
/usr/share/vim/google
/home/XXX/Downloads /outside
BUG=chromium-os:34561
TEST=Manually:
1. Create ~/trunk/src/scripts/.local_mounts with following content:
# comment here
/usr/share/vim/google # test
/home/XXX/Downloads /outside
2. cros_sdk
3. ls -l /usr/share/vim/google/ # ensure dir is mounted correctly
ls -l /outside/ # ensure dir is mounted correctly
4. exit
5. mount | grep chroot # ensure nothing is left
Change-Id: I6f3400a436a825e8cdfcb18b788afe96ebba6757
Reviewed-on: https://gerrit.chromium.org/gerrit/33585
Tested-by: Michael Krebs <mkrebs@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Commit-Ready: Michael Krebs <mkrebs@chromium.org>
diff --git a/sdk_lib/enter_chroot.sh b/sdk_lib/enter_chroot.sh
index 619529d..bed09a0 100755
--- a/sdk_lib/enter_chroot.sh
+++ b/sdk_lib/enter_chroot.sh
@@ -123,11 +123,13 @@
# Already mounted!
;;
*)
- MOUNT_QUEUE+=(
- "mkdir -p '${mounted_path}'"
- # The args are left unquoted on purpose.
- "mount ${mount_args} '${source}' '${mounted_path}'"
- )
+ MOUNT_QUEUE+=( "mkdir -p '${mounted_path}'" )
+ # The args are left unquoted on purpose.
+ if [[ -n ${source} ]]; then
+ MOUNT_QUEUE+=( "mount ${mount_args} '${source}' '${mounted_path}'" )
+ else
+ MOUNT_QUEUE+=( "mount ${mount_args} '${mounted_path}'" )
+ fi
;;
esac
}
@@ -390,6 +392,27 @@
queue_mount "$DEPOT_TOOLS" --bind "$INNER_DEPOT_TOOLS_ROOT"
fi
+ # Mount additional directories as specified in .local_mounts file.
+ local local_mounts="${FLAGS_trunk}/src/scripts/.local_mounts"
+ if [[ -f ${local_mounts} ]]; then
+ info "Mounting local folders (read-only for safety concern)"
+ # format: mount_source
+ # or mount_source mount_point
+ # or # comments
+ local mount_source mount_point
+ while read mount_source mount_point; do
+ if [[ -z ${mount_source} ]]; then
+ continue
+ fi
+ # if only source is assigned, use source as mount point.
+ : ${mount_point:=${mount_source}}
+ debug " mounting ${mount_source} on ${mount_point}"
+ queue_mount "${mount_source}" "--bind" "${mount_point}"
+ # --bind can't initially be read-only so we have to do it via remount.
+ queue_mount "" "-o remount,ro" "${mount_point}"
+ done < <(sed -e 's:#.*::' "${local_mounts}")
+ fi
+
process_mounts
CHROME_ROOT="$(readlink -f "$FLAGS_chrome_root" || :)"