Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(32)

Unified Diff: enter_chroot.sh

Issue 6720005: enter_chroot: introduce a sync process that synchronizes given files between chroot and host (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/crosutils.git@master
Patch Set: Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: enter_chroot.sh
diff --git a/enter_chroot.sh b/enter_chroot.sh
index bca9c68866b365e58899af344589004058e88264..5c7f07b52a14043bf0d174966fed85f3a69b2651 100755
--- a/enter_chroot.sh
+++ b/enter_chroot.sh
@@ -129,6 +129,7 @@ SAVED_AUTOMOUNT_PREF_FILE="/tmp/.automount_pref"
sudo chmod 0777 "$FLAGS_chroot/var/lock"
LOCKFILE="$FLAGS_chroot/var/lock/enter_chroot"
+SYNCERPIDFILE="${FLAGS_chroot}/var/tmp/enter_chroot_sync.pid"
function ensure_mounted {
@@ -153,12 +154,46 @@ function ensure_mounted {
fi
}
+function env_sync_proc {
+ # This function runs and performs periodic updates to the chroot env, if
+ # necessary.
+
+ local poll_interval=10
+ local sync_files="etc/resolv.conf etc/hosts"
+
+ # Make sure the synced files are writable by normal user, so that we
+ # don't have to sudo inside the loop.
+ for file in ${sync_files}; do
+ sudo chown ${USER} ${FLAGS_chroot}/${file} 1>&2
+ done
+
+ while true; do
+ # Sync files
+ for file in ${sync_files}; do
+ if ! cmp /${file} ${FLAGS_chroot}/${file} &> /dev/null; then
+ cp -f /${file} ${FLAGS_chroot}/${file}
+ fi
+ done
+
+ sleep ${poll_interval}
+ done
+}
+
function setup_env {
# Validate sudo timestamp before entering the critical section so that we
# don't stall for a password while we have the lockfile.
# Don't use sudo -v since that has issues on machines w/ no password.
sudo echo "" > /dev/null
+ # Syncer proc, but only the first time
+ if ! [ -f "${SYNCERPIDFILE}" ] || \
+ ! [ -d /proc/$(cat "${SYNCERPIDFILE}") ]; then
+ debug "Starting sync process"
+ env_sync_proc &
+ echo $! > "${SYNCERPIDFILE}"
+ disown $!
+ fi
+
(
flock 200
echo $$ >> "$LOCKFILE"
@@ -283,6 +318,9 @@ function teardown_env {
debug "At least one other pid is running in the chroot, so not"
debug "tearing down env."
else
+ debug "Stopping syncer process"
+ kill $(cat "${SYNCERPIDFILE}")
+
MOUNTED_PATH=$(readlink -f "$FLAGS_chroot")
debug "Unmounting chroot environment."
# sort the list of mounts in reverse order, to ensure umount of
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698