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

Side by Side Diff: enter_chroot.sh

Issue 6250170: Make enter_chroot not be chatty unless you use --verbose (Closed) Base URL: http://git.chromium.org/git/crosutils.git@master
Patch Set: Add comment explaining v_info. Created 9 years, 10 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/bin/bash 1 #!/bin/bash
2 2
3 # Copyright (c) 2009 The Chromium OS Authors. All rights reserved. 3 # Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 # Script to enter the chroot environment 7 # Script to enter the chroot environment
8 8
9 # --- BEGIN COMMON.SH BOILERPLATE --- 9 # --- BEGIN COMMON.SH BOILERPLATE ---
10 # Load common CrOS utilities. Inside the chroot this file is installed in 10 # Load common CrOS utilities. Inside the chroot this file is installed in
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 DEFINE_string chrome_root_mount "/home/$USER/chrome_root" \ 44 DEFINE_string chrome_root_mount "/home/$USER/chrome_root" \
45 "The mount point of the chrome broswer source in the chroot." 45 "The mount point of the chrome broswer source in the chroot."
46 46
47 DEFINE_boolean git_config $FLAGS_TRUE \ 47 DEFINE_boolean git_config $FLAGS_TRUE \
48 "Config git to work with your user/pass in the chroot." 48 "Config git to work with your user/pass in the chroot."
49 DEFINE_boolean official_build $FLAGS_FALSE \ 49 DEFINE_boolean official_build $FLAGS_FALSE \
50 "Set CHROMEOS_OFFICIAL=1 for release builds." 50 "Set CHROMEOS_OFFICIAL=1 for release builds."
51 DEFINE_boolean mount $FLAGS_FALSE "Only set up mounts." 51 DEFINE_boolean mount $FLAGS_FALSE "Only set up mounts."
52 DEFINE_boolean unmount $FLAGS_FALSE "Only tear down mounts." 52 DEFINE_boolean unmount $FLAGS_FALSE "Only tear down mounts."
53 DEFINE_boolean ssh_agent $FLAGS_TRUE "Import ssh agent." 53 DEFINE_boolean ssh_agent $FLAGS_TRUE "Import ssh agent."
54 DEFINE_boolean verbose $FLAGS_FALSE "Print out actions taken"
54 55
55 # More useful help 56 # More useful help
56 FLAGS_HELP="USAGE: $0 [flags] [VAR=value] [-- command [arg1] [arg2] ...] 57 FLAGS_HELP="USAGE: $0 [flags] [VAR=value] [-- command [arg1] [arg2] ...]
57 58
58 One or more VAR=value pairs can be specified to export variables into 59 One or more VAR=value pairs can be specified to export variables into
59 the chroot environment. For example: 60 the chroot environment. For example:
60 61
61 $0 FOO=bar BAZ=bel 62 $0 FOO=bar BAZ=bel
62 63
63 If [-- command] is present, runs the command inside the chroot, 64 If [-- command] is present, runs the command inside the chroot,
64 after changing directory to /$USER/trunk/src/scripts. Note that neither 65 after changing directory to /$USER/trunk/src/scripts. Note that neither
65 the command nor args should include single quotes. For example: 66 the command nor args should include single quotes. For example:
66 67
67 $0 -- ./build_platform_packages.sh 68 $0 -- ./build_platform_packages.sh
68 69
69 Otherwise, provides an interactive shell. 70 Otherwise, provides an interactive shell.
70 " 71 "
71 72
73 # Version of info from common.sh that only echos if --verbose is set.
74 function v_info {
kliegs 2011/02/04 22:46:50 Would it be better to just shift the output levels
dgarrett 2011/02/04 23:57:43 I just checked, and DEBUG doesn't seem to exist fo
kliegs 2011/02/05 07:55:54 Even if DEBUG doesn't exist I'd rather see you cal
75 if [ $FLAGS_verbose -eq $FLAGS_TRUE ]; then
76 info "$1"
77 fi
78 }
79
72 # Double up on the first '--' argument. Why? For enter_chroot, we want to 80 # Double up on the first '--' argument. Why? For enter_chroot, we want to
73 # emulate the behavior of sudo for setting environment vars. That is, we want: 81 # emulate the behavior of sudo for setting environment vars. That is, we want:
74 # ./enter_chroot [flags] [VAR=val] [-- command] 82 # ./enter_chroot [flags] [VAR=val] [-- command]
75 # ...but shflags ends up eating the '--' out of the command line and gives 83 # ...but shflags ends up eating the '--' out of the command line and gives
76 # us back "VAR=val" and "command" together in one chunk. By doubling up, we 84 # us back "VAR=val" and "command" together in one chunk. By doubling up, we
77 # end up getting what we want back from shflags. 85 # end up getting what we want back from shflags.
78 # 86 #
79 # Examples of how people might be using enter_chroot: 87 # Examples of how people might be using enter_chroot:
80 # 1. ./enter_chroot [chroot_flags] VAR1=val1 VAR2=val2 -- cmd arg1 arg2 88 # 1. ./enter_chroot [chroot_flags] VAR1=val1 VAR2=val2 -- cmd arg1 arg2
81 # Set env vars and run cmd w/ args 89 # Set env vars and run cmd w/ args
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 function setup_env { 135 function setup_env {
128 # Validate sudo timestamp before entering the critical section so that we 136 # Validate sudo timestamp before entering the critical section so that we
129 # don't stall for a password while we have the lockfile. 137 # don't stall for a password while we have the lockfile.
130 # Don't use sudo -v since that has issues on machines w/ no password. 138 # Don't use sudo -v since that has issues on machines w/ no password.
131 sudo echo "" > /dev/null 139 sudo echo "" > /dev/null
132 140
133 ( 141 (
134 flock 200 142 flock 200
135 echo $$ >> "$LOCKFILE" 143 echo $$ >> "$LOCKFILE"
136 144
137 info "Mounting chroot environment." 145 v_info "Mounting chroot environment."
138 146
139 # Mount only if not already mounted 147 # Mount only if not already mounted
140 MOUNTED_PATH="$(readlink -f "$FLAGS_chroot/proc")" 148 MOUNTED_PATH="$(readlink -f "$FLAGS_chroot/proc")"
141 if [ -z "$(mount | grep -F "on $MOUNTED_PATH ")" ]; then 149 if [ -z "$(mount | grep -F "on $MOUNTED_PATH ")" ]; then
142 sudo mount none -t proc "$MOUNTED_PATH" || \ 150 sudo mount none -t proc "$MOUNTED_PATH" || \
143 die "Could not mount $MOUNTED_PATH" 151 die "Could not mount $MOUNTED_PATH"
144 fi 152 fi
145 153
146 MOUNTED_PATH="$(readlink -f "$FLAGS_chroot/sys")" 154 MOUNTED_PATH="$(readlink -f "$FLAGS_chroot/sys")"
147 if [ -z "$(mount | grep -F "on $MOUNTED_PATH ")" ]; then 155 if [ -z "$(mount | grep -F "on $MOUNTED_PATH ")" ]; then
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 fi 189 fi
182 190
183 MOUNTED_PATH="$(readlink -f "${FLAGS_chroot}${INNER_CHROME_ROOT}")" 191 MOUNTED_PATH="$(readlink -f "${FLAGS_chroot}${INNER_CHROME_ROOT}")"
184 if [ -z "$(mount | grep -F "on $MOUNTED_PATH ")" ]; then 192 if [ -z "$(mount | grep -F "on $MOUNTED_PATH ")" ]; then
185 ! CHROME_ROOT="$(readlink -f "$FLAGS_chrome_root")" 193 ! CHROME_ROOT="$(readlink -f "$FLAGS_chrome_root")"
186 if [ -z "$CHROME_ROOT" ]; then 194 if [ -z "$CHROME_ROOT" ]; then
187 ! CHROME_ROOT="$(cat "${FLAGS_chroot}${CHROME_ROOT_CONFIG}" \ 195 ! CHROME_ROOT="$(cat "${FLAGS_chroot}${CHROME_ROOT_CONFIG}" \
188 2>/dev/null)" 196 2>/dev/null)"
189 fi 197 fi
190 if [[ ( -z "$CHROME_ROOT" ) || ( ! -d "${CHROME_ROOT}/src" ) ]]; then 198 if [[ ( -z "$CHROME_ROOT" ) || ( ! -d "${CHROME_ROOT}/src" ) ]]; then
191 info "Not mounting chrome source" 199 v_info "Not mounting chrome source"
kliegs 2011/02/04 22:46:50 This can actually be an error if CHROME_ROOT is se
dgarrett 2011/02/04 23:57:43 Currently, this error is displayed every time you
kliegs 2011/02/05 07:55:54 We're not in the chromite world yet. Our entire t
192 sudo rm -f "${FLAGS_chroot}${CHROME_ROOT_CONFIG}" 200 sudo rm -f "${FLAGS_chroot}${CHROME_ROOT_CONFIG}"
193 else 201 else
194 info "Mounting chrome source at: $INNER_CHROME_ROOT" 202 v_info "Mounting chrome source at: $INNER_CHROME_ROOT"
195 echo "$CHROME_ROOT" | \ 203 echo "$CHROME_ROOT" | \
196 sudo dd of="${FLAGS_chroot}${CHROME_ROOT_CONFIG}" 204 sudo dd of="${FLAGS_chroot}${CHROME_ROOT_CONFIG}"
197 mkdir -p "$MOUNTED_PATH" 205 mkdir -p "$MOUNTED_PATH"
198 sudo mount --bind "$CHROME_ROOT" "$MOUNTED_PATH" || \ 206 sudo mount --bind "$CHROME_ROOT" "$MOUNTED_PATH" || \
199 die "Could not mount $MOUNTED_PATH" 207 die "Could not mount $MOUNTED_PATH"
200 fi 208 fi
201 fi 209 fi
202 210
203 MOUNTED_PATH="$(readlink -f "${FLAGS_chroot}${INNER_DEPOT_TOOLS_ROOT}")" 211 MOUNTED_PATH="$(readlink -f "${FLAGS_chroot}${INNER_DEPOT_TOOLS_ROOT}")"
204 if [ -z "$(mount | grep -F "on $MOUNTED_PATH ")" ]; then 212 if [ -z "$(mount | grep -F "on $MOUNTED_PATH ")" ]; then
205 if [ $(which gclient 2>/dev/null) ]; then 213 if [ $(which gclient 2>/dev/null) ]; then
206 info "Mounting depot_tools" 214 v_info "Mounting depot_tools"
207 DEPOT_TOOLS=$(dirname "$(which gclient)") 215 DEPOT_TOOLS=$(dirname "$(which gclient)")
208 mkdir -p "$MOUNTED_PATH" 216 mkdir -p "$MOUNTED_PATH"
209 if ! sudo mount --bind "$DEPOT_TOOLS" "$MOUNTED_PATH"; then 217 if ! sudo mount --bind "$DEPOT_TOOLS" "$MOUNTED_PATH"; then
210 warn "depot_tools failed to mount; perhaps it's on NFS?" 218 warn "depot_tools failed to mount; perhaps it's on NFS?"
211 warn "This may impact chromium build." 219 warn "This may impact chromium build."
212 fi 220 fi
213 fi 221 fi
214 fi 222 fi
215 223
216 # Install fuse module. 224 # Install fuse module.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 # Remove any dups from lock file while installing new one 274 # Remove any dups from lock file while installing new one
267 sort -n "$TMP_LOCKFILE" | uniq > "$LOCKFILE" 275 sort -n "$TMP_LOCKFILE" | uniq > "$LOCKFILE"
268 276
269 if [ $(which gconftool-2 2>/dev/null) ]; then 277 if [ $(which gconftool-2 2>/dev/null) ]; then
270 SAVED_PREF=$(cat "${FLAGS_chroot}${SAVED_AUTOMOUNT_PREF_FILE}") 278 SAVED_PREF=$(cat "${FLAGS_chroot}${SAVED_AUTOMOUNT_PREF_FILE}")
271 gconftool-2 -s --type=boolean ${AUTOMOUNT_PREF} ${SAVED_PREF} || \ 279 gconftool-2 -s --type=boolean ${AUTOMOUNT_PREF} ${SAVED_PREF} || \
272 warn "could not re-set your automount preference." 280 warn "could not re-set your automount preference."
273 fi 281 fi
274 282
275 if [ -s "$LOCKFILE" ]; then 283 if [ -s "$LOCKFILE" ]; then
276 info "At least one other pid is running in the chroot, so not" 284 v_info "At least one other pid is running in the chroot, so not"
277 info "tearing down env." 285 v_info "tearing down env."
kliegs 2011/02/04 22:46:50 This feels like a warning to me, not an error. De
dgarrett 2011/02/04 23:57:43 It's an awfully normal case though. On 2011/02/04
kliegs 2011/02/05 07:55:54 Its a very rare case for me. I almost never see t
278 else 286 else
279 MOUNTED_PATH=$(readlink -f "$FLAGS_chroot") 287 MOUNTED_PATH=$(readlink -f "$FLAGS_chroot")
280 info "Unmounting chroot environment." 288 v_info "Unmounting chroot environment."
281 # sort the list of mounts in reverse order, to ensure umount of 289 # sort the list of mounts in reverse order, to ensure umount of
282 # cascading mounts in proper order 290 # cascading mounts in proper order
283 for i in \ 291 for i in \
284 $(mount | grep -F "on $MOUNTED_PATH/" | sort -r | awk '{print $3}'); do 292 $(mount | grep -F "on $MOUNTED_PATH/" | sort -r | awk '{print $3}'); do
285 safe_umount "$i" 293 safe_umount "$i"
286 done 294 done
287 fi 295 fi
288 ) 200>>"$LOCKFILE" || die "teardown_env failed" 296 ) 200>>"$LOCKFILE" || die "teardown_env failed"
289 } 297 }
290 298
291 if [ $FLAGS_mount -eq $FLAGS_TRUE ]; then 299 if [ $FLAGS_mount -eq $FLAGS_TRUE ]; then
292 setup_env 300 setup_env
293 info "Make sure you run" 301 v_info "Make sure you run"
294 info " $0 --unmount" 302 v_info " $0 --unmount"
295 info "before deleting $FLAGS_chroot" 303 v_info "before deleting $FLAGS_chroot"
296 info "or you'll end up deleting $FLAGS_trunk too!" 304 v_info "or you'll end up deleting $FLAGS_trunk too!"
297 exit 0 305 exit 0
298 fi 306 fi
299 307
300 if [ $FLAGS_unmount -eq $FLAGS_TRUE ]; then 308 if [ $FLAGS_unmount -eq $FLAGS_TRUE ]; then
301 teardown_env 309 teardown_env
302 exit 0 310 exit 0
303 fi 311 fi
304 312
305 # Apply any hacks needed to update the chroot. 313 # Apply any hacks needed to update the chroot.
306 chroot_hacks_from_outside "${FLAGS_chroot}" 314 chroot_hacks_from_outside "${FLAGS_chroot}"
(...skipping 19 matching lines...) Expand all
326 # Use git:8 chars of sha1 334 # Use git:8 chars of sha1
327 REVISION=$(cd ${FLAGS_trunk}/src/scripts ; git rev-parse --short=8 HEAD) 335 REVISION=$(cd ${FLAGS_trunk}/src/scripts ; git rev-parse --short=8 HEAD)
328 CHROOT_PASSTHRU="CHROMEOS_REVISION=$REVISION BUILDBOT_BUILD=$FLAGS_build_number CHROMEOS_OFFICIAL=$CHROMEOS_OFFICIAL" 336 CHROOT_PASSTHRU="CHROMEOS_REVISION=$REVISION BUILDBOT_BUILD=$FLAGS_build_number CHROMEOS_OFFICIAL=$CHROMEOS_OFFICIAL"
329 CHROOT_PASSTHRU="${CHROOT_PASSTHRU} \ 337 CHROOT_PASSTHRU="${CHROOT_PASSTHRU} \
330 CHROMEOS_RELEASE_APPID=${CHROMEOS_RELEASE_APPID:-"{DEV-BUILD}"}" 338 CHROMEOS_RELEASE_APPID=${CHROMEOS_RELEASE_APPID:-"{DEV-BUILD}"}"
331 CHROOT_PASSTHRU="${CHROOT_PASSTHRU} \ 339 CHROOT_PASSTHRU="${CHROOT_PASSTHRU} \
332 CHROMEOS_VERSION_TRACK=$CHROMEOS_VERSION_TRACK CHROMEOS_VERSION_AUSERVER=$CHROME OS_VERSION_AUSERVER CHROMEOS_VERSION_DEVSERVER=$CHROMEOS_VERSION_DEVSERVER" 340 CHROMEOS_VERSION_TRACK=$CHROMEOS_VERSION_TRACK CHROMEOS_VERSION_AUSERVER=$CHROME OS_VERSION_AUSERVER CHROMEOS_VERSION_DEVSERVER=$CHROMEOS_VERSION_DEVSERVER"
333 341
334 if [ -d "$HOME/.subversion" ]; then 342 if [ -d "$HOME/.subversion" ]; then
335 # Bind mounting .subversion into chroot 343 # Bind mounting .subversion into chroot
336 info "mounting ~/.subversion into chroot" 344 v_info "mounting ~/.subversion into chroot"
337 MOUNTED_PATH="$(readlink -f "${FLAGS_chroot}/home/${USER}/.subversion")" 345 MOUNTED_PATH="$(readlink -f "${FLAGS_chroot}/home/${USER}/.subversion")"
338 if [ -z "$(mount | grep -F "on $MOUNTED_PATH ")" ]; then 346 if [ -z "$(mount | grep -F "on $MOUNTED_PATH ")" ]; then
339 mkdir -p "$MOUNTED_PATH" 347 mkdir -p "$MOUNTED_PATH"
340 sudo mount --bind "$HOME/.subversion" "$MOUNTED_PATH" || \ 348 sudo mount --bind "$HOME/.subversion" "$MOUNTED_PATH" || \
341 die "Could not mount $MOUNTED_PATH" 349 die "Could not mount $MOUNTED_PATH"
342 fi 350 fi
343 fi 351 fi
344 352
345 # Configure committer username and email in chroot .gitconfig 353 # Configure committer username and email in chroot .gitconfig
346 if [ $FLAGS_git_config -eq $FLAGS_TRUE ]; then 354 if [ $FLAGS_git_config -eq $FLAGS_TRUE ]; then
347 git config -f ${FLAGS_chroot}/home/${USER}/.gitconfig --replace-all \ 355 git config -f ${FLAGS_chroot}/home/${USER}/.gitconfig --replace-all \
348 user.name "$(cd /tmp; git var GIT_COMMITTER_IDENT | sed -e 's/ *<.*//')" 356 user.name "$(cd /tmp; git var GIT_COMMITTER_IDENT | sed -e 's/ *<.*//')"
349 git config -f ${FLAGS_chroot}/home/${USER}/.gitconfig --replace-all \ 357 git config -f ${FLAGS_chroot}/home/${USER}/.gitconfig --replace-all \
350 user.email "$(cd /tmp; git var GIT_COMMITTER_IDENT | \ 358 user.email "$(cd /tmp; git var GIT_COMMITTER_IDENT | \
351 sed -e 's/.*<\([^>]*\)>.*/\1/')" 359 sed -e 's/.*<\([^>]*\)>.*/\1/')"
352 fi 360 fi
353 361
354 # Run command or interactive shell. Also include the non-chrooted path to 362 # Run command or interactive shell. Also include the non-chrooted path to
355 # the source trunk for scripts that may need to print it (e.g. 363 # the source trunk for scripts that may need to print it (e.g.
356 # build_image.sh). 364 # build_image.sh).
357 sudo -- chroot "$FLAGS_chroot" sudo -i -u $USER $CHROOT_PASSTHRU \ 365 sudo -- chroot "$FLAGS_chroot" sudo -i -u $USER $CHROOT_PASSTHRU \
358 EXTERNAL_TRUNK_PATH="${FLAGS_trunk}" LANG=C SSH_AGENT_PID="${SSH_AGENT_PID}" \ 366 EXTERNAL_TRUNK_PATH="${FLAGS_trunk}" LANG=C SSH_AGENT_PID="${SSH_AGENT_PID}" \
359 SSH_AUTH_SOCK="${SSH_AUTH_SOCK}" "$@" 367 SSH_AUTH_SOCK="${SSH_AUTH_SOCK}" "$@"
360 368
361 # Remove trap and explicitly unmount 369 # Remove trap and explicitly unmount
362 trap - EXIT 370 trap - EXIT
363 teardown_env 371 teardown_env
OLDNEW
« 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