Skip to content

Commit

Permalink
cros_sdk: Allow additional chroot mounts via .local_mounts file
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Michael Krebs authored and Gerrit committed Sep 21, 2012
1 parent 4411efe commit 04c4f73
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 5 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -1,6 +1,7 @@
# User files
/.chromeos_dev
/.default_board
/.local_mounts
/shared_user_passwd.txt

# Generated files
Expand Down
33 changes: 28 additions & 5 deletions sdk_lib/enter_chroot.sh
Expand Up @@ -123,11 +123,13 @@ queue_mount() {
# 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
}
Expand Down Expand Up @@ -390,6 +392,27 @@ setup_env() {
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" || :)"
Expand Down

0 comments on commit 04c4f73

Please sign in to comment.