Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 # Load common constants. This should be the first executable line. | 9 # Load common constants. This should be the first executable line. |
| 10 # The path to common.sh should be relative to your script's location. | 10 # The path to common.sh should be relative to your script's location. |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 58 fi | 58 fi |
| 59 | 59 |
| 60 # Only now can we die on error. shflags functions leak non-zero error codes, | 60 # Only now can we die on error. shflags functions leak non-zero error codes, |
| 61 # so will die prematurely if 'set -e' is specified before now. | 61 # so will die prematurely if 'set -e' is specified before now. |
| 62 # TODO: replace shflags with something less error-prone, or contribute a fix. | 62 # TODO: replace shflags with something less error-prone, or contribute a fix. |
| 63 set -e | 63 set -e |
| 64 | 64 |
| 65 INNER_CHROME_ROOT="/home/$USER/chrome_root" # inside chroot | 65 INNER_CHROME_ROOT="/home/$USER/chrome_root" # inside chroot |
| 66 CHROME_ROOT_CONFIG="/var/cache/chrome_root" # inside chroot | 66 CHROME_ROOT_CONFIG="/var/cache/chrome_root" # inside chroot |
| 67 INNER_DEPOT_TOOLS_ROOT="/home/$USER/depot_tools" # inside chroot | 67 INNER_DEPOT_TOOLS_ROOT="/home/$USER/depot_tools" # inside chroot |
| 68 KERNEL_MODULES_ROOT="/lib/modules/$( uname -r )" # inside and outside chroot | |
| 69 FUSE_DEVICE="/dev/fuse" | 68 FUSE_DEVICE="/dev/fuse" |
| 70 | 69 |
| 71 sudo chmod 0777 "$FLAGS_chroot/var/lock" | 70 sudo chmod 0777 "$FLAGS_chroot/var/lock" |
| 72 | 71 |
| 73 LOCKFILE="$FLAGS_chroot/var/lock/enter_chroot" | 72 LOCKFILE="$FLAGS_chroot/var/lock/enter_chroot" |
| 74 | 73 |
| 75 function setup_env { | 74 function setup_env { |
| 76 ( | 75 ( |
| 77 flock 200 | 76 flock 200 |
| 78 echo $$ >> "$LOCKFILE" | 77 echo $$ >> "$LOCKFILE" |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 134 then | 133 then |
| 135 if [ $(which gclient 2>/dev/null) ]; then | 134 if [ $(which gclient 2>/dev/null) ]; then |
| 136 echo "Mounting depot_tools" | 135 echo "Mounting depot_tools" |
| 137 DEPOT_TOOLS=$(dirname $(which gclient) ) | 136 DEPOT_TOOLS=$(dirname $(which gclient) ) |
| 138 mkdir -p "$MOUNTED_PATH" | 137 mkdir -p "$MOUNTED_PATH" |
| 139 if ! sudo mount --bind "$DEPOT_TOOLS" "$MOUNTED_PATH"; then | 138 if ! sudo mount --bind "$DEPOT_TOOLS" "$MOUNTED_PATH"; then |
| 140 echo "depot_tools failed to mount; perhaps it's on NFS?" | 139 echo "depot_tools failed to mount; perhaps it's on NFS?" |
| 141 echo "This may impact chromium build." | 140 echo "This may impact chromium build." |
| 142 fi | 141 fi |
| 143 fi | 142 fi |
| 144 fi | 143 fi |
| 145 | 144 |
| 146 # Mount fuse device from host machine into chroot and copy over | 145 # Mount fuse device from host machine into chroot and copy over |
| 147 # corresponding kernel modules. | 146 # corresponding kernel modules. |
| 148 MOUNTED_PATH="$(readlink -f "${FLAGS_chroot}${FUSE_DEVICE}")" | 147 MOUNTED_PATH="$(readlink -f "${FLAGS_chroot}${FUSE_DEVICE}")" |
|
adlr
2010/04/05 23:31:31
can you remove the call to readlink? readlink will
sosa
2010/04/05 23:41:40
readlink -f only checks the directory, not the las
| |
| 149 if [ -z "$(mount | grep -F "on ${MOUNTED_PATH} ")" ] && \ | 148 if [ -z "$(mount | grep -F "on ${MOUNTED_PATH} ")" ] && \ |
| 150 [ -c "${FUSE_DEVICE}" ] ; then | 149 [ -c "${FUSE_DEVICE}" ] ; then |
| 151 if [ -c "${FUSE_DEVICE}" ] ; then | 150 echo "Attempting to mount fuse device for gmergefs" |
| 152 echo "Mounting fuse device" | 151 sudo touch "${MOUNTED_PATH}" |
| 153 sudo touch "${MOUNTED_PATH}" | 152 sudo mount --bind "${FUSE_DEVICE}" "${MOUNTED_PATH}" |
| 154 sudo mount --bind "${FUSE_DEVICE}" "${MOUNTED_PATH}" | 153 sudo modprobe fuse 2> /dev/null ||\ |
| 155 INNER_MOD_PATH="$(readlink -f "${FLAGS_chroot}${KERNEL_MODULES_ROOT}")" | 154 echo "-- Note: modprobe fuse failed. gmergefs will not work" |
| 156 if [ ! -f "${INNER_MOD_PATH}/modules.dep" ] ; then | 155 fi |
| 157 sudo mkdir -p "${INNER_MOD_PATH}/kernel/fs/fuse" | 156 |
| 158 sudo cp -fu "${KERNEL_MODULES_ROOT}/modules.dep" "${INNER_MOD_PATH}" | |
| 159 if [ -f "${KERNEL_MODULES_ROOT}/kernel/fs/fuse/fuse.ko" ] ; then | |
| 160 sudo cp -fu "${KERNEL_MODULES_ROOT}/kernel/fs/fuse/fuse.ko" \ | |
| 161 "${INNER_MOD_PATH}/kernel/fs/fuse" | |
| 162 else | |
| 163 echo "Warning: Fuse device found but no modules for running kernel" | |
| 164 echo "gmergefs will not work" | |
| 165 fi | |
| 166 fi | |
| 167 else | |
| 168 echo "Warning: Fuse device not found. gmergefs will not work" | |
| 169 fi | |
| 170 fi | |
| 171 | |
| 172 ) 200>>"$LOCKFILE" || die "setup_env failed" | 157 ) 200>>"$LOCKFILE" || die "setup_env failed" |
| 173 } | 158 } |
| 174 | 159 |
| 175 function teardown_env { | 160 function teardown_env { |
| 176 # Only teardown if we're the last enter_chroot to die | 161 # Only teardown if we're the last enter_chroot to die |
| 177 ( | 162 ( |
| 178 flock 200 | 163 flock 200 |
| 179 | 164 |
| 180 # check each pid in $LOCKFILE to see if it's died unexpectedly | 165 # check each pid in $LOCKFILE to see if it's died unexpectedly |
| 181 TMP_LOCKFILE="$LOCKFILE.tmp" | 166 TMP_LOCKFILE="$LOCKFILE.tmp" |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 260 | 245 |
| 261 # Run command or interactive shell. Also include the non-chrooted path to | 246 # Run command or interactive shell. Also include the non-chrooted path to |
| 262 # the source trunk for scripts that may need to print it (e.g. | 247 # the source trunk for scripts that may need to print it (e.g. |
| 263 # build_image.sh). | 248 # build_image.sh). |
| 264 sudo chroot "$FLAGS_chroot" sudo -i -u $USER $CHROOT_PASSTHRU \ | 249 sudo chroot "$FLAGS_chroot" sudo -i -u $USER $CHROOT_PASSTHRU \ |
| 265 EXTERNAL_TRUNK_PATH="${FLAGS_trunk}" LANG=C "$@" | 250 EXTERNAL_TRUNK_PATH="${FLAGS_trunk}" LANG=C "$@" |
| 266 | 251 |
| 267 # Remove trap and explicitly unmount | 252 # Remove trap and explicitly unmount |
| 268 trap - EXIT | 253 trap - EXIT |
| 269 teardown_env | 254 teardown_env |
| OLD | NEW |