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

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

Issue 1173713002: Fix install-chroot.sh for recent versions of ubuntu (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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
« 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 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 echo "I can abort installation, I can overwrite the existing chroot," 216 echo "I can abort installation, I can overwrite the existing chroot,"
217 echo "or I can delete the old one and then exit. What would you like to" 217 echo "or I can delete the old one and then exit. What would you like to"
218 printf "do (a/o/d)? " 218 printf "do (a/o/d)? "
219 read choice 219 read choice
220 case "${choice}" in 220 case "${choice}" in
221 a|A) exit 1;; 221 a|A) exit 1;;
222 o|O) sudo rm -rf "/var/lib/chroot/${target}"; break;; 222 o|O) sudo rm -rf "/var/lib/chroot/${target}"; break;;
223 d|D) sudo rm -rf "/var/lib/chroot/${target}" \ 223 d|D) sudo rm -rf "/var/lib/chroot/${target}" \
224 "/usr/local/bin/${target%bit}" \ 224 "/usr/local/bin/${target%bit}" \
225 "/etc/schroot/mount-${target}" \ 225 "/etc/schroot/mount-${target}" \
226 "/etc/schroot/script-${target}" 226 "/etc/schroot/script-${target}" \
227 "/etc/schroot/${target}"
227 sudo sed -ni '/^[[]'"${target%bit}"']$/,${ 228 sudo sed -ni '/^[[]'"${target%bit}"']$/,${
228 :1;n;/^[[]/b2;b1;:2;p;n;b2};p' \ 229 :1;n;/^[[]/b2;b1;:2;p;n;b2};p' \
229 "/etc/schroot/schroot.conf" 230 "/etc/schroot/schroot.conf"
230 trap '' INT TERM QUIT HUP 231 trap '' INT TERM QUIT HUP
231 trap '' EXIT 232 trap '' EXIT
232 echo "Deleted!" 233 echo "Deleted!"
233 exit 0;; 234 exit 0;;
234 esac 235 esac
235 done 236 done
236 echo 237 echo
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 343
343 sudo ${http_proxy:+http_proxy="${http_proxy}"} debootstrap ${archflag} \ 344 sudo ${http_proxy:+http_proxy="${http_proxy}"} debootstrap ${archflag} \
344 "${distname}" "/var/lib/chroot/${target}" "$mirror" 345 "${distname}" "/var/lib/chroot/${target}" "$mirror"
345 346
346 # Add new entry to /etc/schroot/schroot.conf 347 # Add new entry to /etc/schroot/schroot.conf
347 grep -qs ubuntu.com /usr/share/debootstrap/scripts/"${distname}" && 348 grep -qs ubuntu.com /usr/share/debootstrap/scripts/"${distname}" &&
348 brand="Ubuntu" || brand="Debian" 349 brand="Ubuntu" || brand="Debian"
349 if [ -z "${chroot_groups}" ]; then 350 if [ -z "${chroot_groups}" ]; then
350 chroot_groups="${admin},$(id -gn)" 351 chroot_groups="${admin},$(id -gn)"
351 fi 352 fi
352 # Older versions of schroot wanted a "priority=" line, whereas recent 353
353 # versions deprecate "priority=" and warn if they see it. We don't have 354 if [ -d '/etc/schroot/default' ]; then
354 # a good feature test, but scanning for the string "priority=" in the 355 new_version=1
355 # existing "schroot.conf" file is a good indication of what to do. 356 fstab="/etc/schroot/${target}/fstab"
356 priority=$(grep -qs 'priority=' /etc/schroot/schroot.conf && 357 else
357 echo 'priority=3' || :) 358 new_version=0
358 sudo sh -c 'cat >>/etc/schroot/schroot.conf' <<EOF 359 fstab="/etc/schroot/mount-${target}"
360 fi
361
362 if [ "$new_version" = "1" ]; then
363 sudo cp -ar /etc/schroot/default /etc/schroot/${target}
364
365 sudo sh -c 'cat >>/etc/schroot/schroot.conf' <<EOF
359 [${target%bit}] 366 [${target%bit}]
360 description=${brand} ${distname} ${arch} 367 description=${brand} ${distname} ${arch}
361 type=directory 368 type=directory
369 directory=/var/lib/chroot/${target}
370 users=root
371 groups=${chroot_groups}
372 root-groups=${chroot_groups}
373 personality=linux$([ "${arch}" != 64bit ] && echo 32)
374 profile=${target}
375
376 EOF
377 [ -n "${bind_mounts}" -a "${bind_mounts}" != "NONE" ] &&
378 printf "${bind_mounts}" |
379 sudo sh -c "cat >>${fstab}"
380 else
381 # Older versions of schroot wanted a "priority=" line, whereas recent
382 # versions deprecate "priority=" and warn if they see it. We don't have
383 # a good feature test, but scanning for the string "priority=" in the
384 # existing "schroot.conf" file is a good indication of what to do.
385 priority=$(grep -qs 'priority=' /etc/schroot/schroot.conf &&
386 echo 'priority=3' || :)
387 sudo sh -c 'cat >>/etc/schroot/schroot.conf' <<EOF
388 [${target%bit}]
389 description=${brand} ${distname} ${arch}
390 type=directory
362 directory=/var/lib/chroot/${target} 391 directory=/var/lib/chroot/${target}
363 users=root 392 users=root
364 groups=${chroot_groups} 393 groups=${chroot_groups}
365 root-groups=${chroot_groups} 394 root-groups=${chroot_groups}
366 personality=linux$([ "${arch}" != 64bit ] && echo 32) 395 personality=linux$([ "${arch}" != 64bit ] && echo 32)
367 script-config=script-${target} 396 script-config=script-${target}
368 ${priority} 397 ${priority}
369 398
370 EOF 399 EOF
371 400
372 # Set up a list of mount points that is specific to this 401 # Set up a list of mount points that is specific to this
373 # chroot environment. 402 # chroot environment.
374 sed '/^FSTAB=/s,"[^"]*","/etc/schroot/mount-'"${target}"'",' \ 403 sed '/^FSTAB=/s,"[^"]*","'"${fstab}"'",' \
375 /etc/schroot/script-defaults | 404 /etc/schroot/script-defaults |
376 sudo sh -c 'cat >/etc/schroot/script-'"${target}" 405 sudo sh -c 'cat >/etc/schroot/script-'"${target}"
377 sed '\,^/home[/[:space:]],s/\([,[:space:]]\)bind[[:space:]]/\1rbind /' \ 406 sed '\,^/home[/[:space:]],s/\([,[:space:]]\)bind[[:space:]]/\1rbind /' \
378 /etc/schroot/mount-defaults | 407 /etc/schroot/mount-defaults |
379 sudo sh -c 'cat > /etc/schroot/mount-'"${target}" 408 sudo sh -c "cat > ${fstab}"
409 fi
380 410
381 # Add the extra mount points that the user told us about 411 # Add the extra mount points that the user told us about
382 [ -n "${bind_mounts}" -a "${bind_mounts}" != "NONE" ] && 412 [ -n "${bind_mounts}" -a "${bind_mounts}" != "NONE" ] &&
383 printf "${bind_mounts}" | 413 printf "${bind_mounts}" |
384 sudo sh -c 'cat >>/etc/schroot/mount-'"${target}" 414 sudo sh -c 'cat >>'"${fstab}"
385 415
386 # If this system has a "/media" mountpoint, import it into the chroot 416 # If this system has a "/media" mountpoint, import it into the chroot
387 # environment. Most modern distributions use this mount point to 417 # environment. Most modern distributions use this mount point to
388 # automatically mount devices such as CDROMs, USB sticks, etc... 418 # automatically mount devices such as CDROMs, USB sticks, etc...
389 if [ -d /media ] && 419 if [ -d /media ] &&
390 ! grep -qs '^/media' /etc/schroot/mount-"${target}"; then 420 ! grep -qs '^/media' "${fstab}"; then
391 echo '/media /media none rw,rbind 0 0' | 421 echo '/media /media none rw,rbind 0 0' |
392 sudo sh -c 'cat >>/etc/schroot/mount-'"${target}" 422 sudo sh -c 'cat >>'"${fstab}"
393 fi 423 fi
394 424
395 # Share /dev/shm, /run and /run/shm. 425 # Share /dev/shm, /run and /run/shm.
396 grep -qs '^/dev/shm' /etc/schroot/mount-"${target}" || 426 grep -qs '^/dev/shm' "${fstab}" ||
397 echo '/dev/shm /dev/shm none rw,bind 0 0' | 427 echo '/dev/shm /dev/shm none rw,bind 0 0' |
398 sudo sh -c 'cat >>/etc/schroot/mount-'"${target}" 428 sudo sh -c 'cat >>'"${fstab}"
399 if [ ! -d "/var/lib/chroot/${target}/run" ] && 429 if [ ! -d "/var/lib/chroot/${target}/run" ] &&
400 ! grep -qs '^/run' /etc/schroot/mount-"${target}"; then 430 ! grep -qs '^/run' "${fstab}"; then
401 echo '/run /run none rw,bind 0 0' | 431 echo '/run /run none rw,bind 0 0' |
402 sudo sh -c 'cat >>/etc/schroot/mount-'"${target}" 432 sudo sh -c 'cat >>'"${fstab}"
403 fi 433 fi
404 if ! grep -qs '^/run/shm' /etc/schroot/mount-"${target}"; then 434 if ! grep -qs '^/run/shm' "${fstab}"; then
405 { [ -d /run ] && echo '/run/shm /run/shm none rw,bind 0 0' || 435 { [ -d /run ] && echo '/run/shm /run/shm none rw,bind 0 0' ||
406 echo '/dev/shm /run/shm none rw,bind 0 0'; } | 436 echo '/dev/shm /run/shm none rw,bind 0 0'; } |
407 sudo sh -c 'cat >>/etc/schroot/mount-'"${target}" 437 sudo sh -c 'cat >>'"${fstab}"
408 fi 438 fi
409 439
410 # Set up a special directory that changes contents depending on the target 440 # Set up a special directory that changes contents depending on the target
411 # that is executing. 441 # that is executing.
412 d="$(readlink -f "${HOME}/chroot" 2>/dev/null || echo "${HOME}/chroot")" 442 d="$(readlink -f "${HOME}/chroot" 2>/dev/null || echo "${HOME}/chroot")"
413 s="${d}/.${target}" 443 s="${d}/.${target}"
414 echo "${s} ${d} none rw,bind 0 0" | 444 echo "${s} ${d} none rw,bind 0 0" |
415 sudo sh -c 'cat >>/etc/schroot/mount-'"${target}" 445 sudo sh -c 'cat >>'"${target}"
416 mkdir -p "${s}" 446 mkdir -p "${s}"
417 447
418 # Install a helper script to launch commands in the chroot 448 # Install a helper script to launch commands in the chroot
419 sudo sh -c 'cat >/usr/local/bin/'"${target%bit}" <<'EOF' 449 sudo sh -c 'cat >/usr/local/bin/'"${target%bit}" <<'EOF'
420 #!/bin/bash 450 #!/bin/bash
421 451
422 chroot="${0##*/}" 452 chroot="${0##*/}"
423 453
424 wrap() { 454 wrap() {
425 # Word-wrap the text passed-in on stdin. Optionally, on continuation lines 455 # Word-wrap the text passed-in on stdin. Optionally, on continuation lines
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 if ! sudo /usr/local/bin/"${target%bit}" \ 740 if ! sudo /usr/local/bin/"${target%bit}" \
711 sh -c "[ -x '${script}' ]" >&/dev/null; then 741 sh -c "[ -x '${script}' ]" >&/dev/null; then
712 tmp_script="/tmp/${script##*/}" 742 tmp_script="/tmp/${script##*/}"
713 cp "${script}" "${tmp_script}" 743 cp "${script}" "${tmp_script}"
714 fi 744 fi
715 # Some distributions automatically start an instance of the system- 745 # Some distributions automatically start an instance of the system-
716 # wide dbus daemon, cron daemon or of the logging daemon, when 746 # wide dbus daemon, cron daemon or of the logging daemon, when
717 # installing the Chrome build depencies. This prevents the chroot 747 # installing the Chrome build depencies. This prevents the chroot
718 # session from being closed. So, we always try to shut down any running 748 # session from being closed. So, we always try to shut down any running
719 # instance of dbus and rsyslog. 749 # instance of dbus and rsyslog.
720 sudo /usr/local/bin/"${target%bit}" sh -c "${script} --no-lib32; 750 sudo /usr/local/bin/"${target%bit}" sh -c "${script};
721 rc=$?; 751 rc=$?;
722 /etc/init.d/cron stop >/dev/null 2>&1 || :; 752 /etc/init.d/cron stop >/dev/null 2>&1 || :;
723 /etc/init.d/rsyslog stop >/dev/null 2>&1 || :; 753 /etc/init.d/rsyslog stop >/dev/null 2>&1 || :;
724 /etc/init.d/dbus stop >/dev/null 2>&1 || :; 754 /etc/init.d/dbus stop >/dev/null 2>&1 || :;
725 exit $rc" 755 exit $rc"
726 rc=$? 756 rc=$?
727 [ -n "${tmp_script}" ] && rm -f "${tmp_script}" 757 [ -n "${tmp_script}" ] && rm -f "${tmp_script}"
728 [ $rc -ne 0 ] && exit $rc 758 [ $rc -ne 0 ] && exit $rc
729 break 759 break
730 ;; 760 ;;
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 879
850 For Chrome, this probably means you want to make your "out" directory a 880 For Chrome, this probably means you want to make your "out" directory a
851 symbolic link that points somewhere inside of "${HOME}/chroot". 881 symbolic link that points somewhere inside of "${HOME}/chroot".
852 882
853 You still need to run "gclient runhooks" whenever you switch from building 883 You still need to run "gclient runhooks" whenever you switch from building
854 outside of the chroot to inside of the chroot. But you will find that you 884 outside of the chroot to inside of the chroot. But you will find that you
855 don't have to repeatedly erase and then completely rebuild all your object 885 don't have to repeatedly erase and then completely rebuild all your object
856 and binary files. 886 and binary files.
857 887
858 EOF 888 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