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

Side by Side Diff: build/install-chroot.sh

Issue 20010003: We sometimes erroneously detected processes in other sessions as belonging to our session. Conseque… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 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 -e 1 #!/bin/bash -e
2 2
3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 3 # Copyright (c) 2012 The Chromium 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 # This script installs Debian-derived distributions in a chroot environment. 7 # This script installs Debian-derived distributions in a chroot environment.
8 # It can for example be used to have an accurate 32bit build and test 8 # It can for example be used to have an accurate 32bit build and test
9 # environment when otherwise working on a 64bit machine. 9 # environment when otherwise working on a 64bit machine.
10 # N. B. it is unlikely that this script will ever work on anything other than a 10 # N. B. it is unlikely that this script will ever work on anything other than a
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 --) shift; break;; 491 --) shift; break;;
492 -h|--help) shift; help;; 492 -h|--help) shift; help;;
493 -l|--list) shift; list;; 493 -l|--list) shift; list;;
494 -c|--clean) shift; clean "${chroot}";; 494 -c|--clean) shift; clean "${chroot}";;
495 -C|--clean-all) shift; clean;; 495 -C|--clean-all) shift; clean;;
496 *) break;; 496 *) break;;
497 esac 497 esac
498 done 498 done
499 499
500 session="$(schroot -c "${chroot}" -b)" 500 session="$(schroot -c "${chroot}" -b)"
501 export CHROOT_SESSION_ID="${session}"
501 502
502 if [ $# -eq 0 ]; then 503 if [ $# -eq 0 ]; then
503 schroot -c "${session}" -r -p 504 schroot -c "${session}" -r -p
504 else 505 else
505 p="$1"; shift 506 p="$1"; shift
506 schroot -c "${session}" -r -p "$p" -- "$@" 507 schroot -c "${session}" -r -p "$p" -- "$@"
507 fi 508 fi
508 rc=$? 509 rc=$?
509 510
510 i=$(schroot -c "${session}" -r -p ls -- -id /proc/self/root/. | 511 i=$(schroot -c "${session}" -r -p ls -- -id /proc/self/root/. |
511 awk '{ print $1 }') 2>/dev/null 512 awk '{ print $1 }') 2>/dev/null
513 other_pids=
512 while [ -n "$i" ]; do 514 while [ -n "$i" ]; do
513 pids=$(ls -id1 /proc/*/root/. 2>/dev/null | 515 pids=$({ ls -id1 /proc/*/root/. 2>/dev/null |
jln (very slow on Chromium) 2013/07/23 00:41:20 Add a comment to explain the set substraction magi
514 sed -e 's,^[^0-9]*'$i'.*/\([1-9][0-9]*\)/.*$,\1, 516 sed -e 's,^[^0-9]*'$i'.*/\([1-9][0-9]*\)/.*$,\1,
515 t 517 t
516 d') >/dev/null 2>&1 518 d';
517 [ -z "$pids" ] && break 519 echo "${other_pids}";
518 kill -9 $pids 520 echo "${other_pids}"; } | sort | uniq -u) >/dev/null 2>&1
521 # Kill all processes that are still left running in the session. This is
522 # typically an assortment of daemon processes that were started
523 # automatically. They result in us being unable to tear down the session
524 # cleanly.
525 [ -z "${pids}" ] && break
526 for j in $pids; do
527 # Unfortunately, the way that schroot sets up sessions has the
528 # side-effect of being unable to tell one session apart from another.
529 # This can result in us attempting to kill processes in other sessions.
530 # We make a best-effort to avoid doing so.
531 k="$( ( xargs -0 -n1 </proc/$j/environ ) 2>/dev/null |
532 sed 's/^CHROOT_SESSION_ID=/x/;t1;d;:1;q')"
533 if [ -n "${k}" -a "${k#x}" != "${session}" ]; then
534 other_pids="${other_pids}
535 ${j}"
536 continue
537 fi
538 kill -9 $pids
539 done
519 done 540 done
520 schroot -c "${session}" -e 541 schroot -c "${session}" -e
521 exit $rc 542 exit $rc
522 EOF 543 EOF
523 sudo chown root:root /usr/local/bin/"${target%bit}" 544 sudo chown root:root /usr/local/bin/"${target%bit}"
524 sudo chmod 755 /usr/local/bin/"${target%bit}" 545 sudo chmod 755 /usr/local/bin/"${target%bit}"
525 546
526 # Add the standard Ubuntu update repositories if requested. 547 # Add the standard Ubuntu update repositories if requested.
527 [ "${alt_repos}" = "y" -a \ 548 [ "${alt_repos}" = "y" -a \
528 -r "/var/lib/chroot/${target}/etc/apt/sources.list" ] && 549 -r "/var/lib/chroot/${target}/etc/apt/sources.list" ] &&
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 828
808 For Chrome, this probably means you want to make your "out" directory a 829 For Chrome, this probably means you want to make your "out" directory a
809 symbolic link that points somewhere inside of "${HOME}/chroot". 830 symbolic link that points somewhere inside of "${HOME}/chroot".
810 831
811 You still need to run "gclient runhooks" whenever you switch from building 832 You still need to run "gclient runhooks" whenever you switch from building
812 outside of the chroot to inside of the chroot. But you will find that you 833 outside of the chroot to inside of the chroot. But you will find that you
813 don't have to repeatedly erase and then completely rebuild all your object 834 don't have to repeatedly erase and then completely rebuild all your object
814 and binary files. 835 and binary files.
815 836
816 EOF 837 EOF
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