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

Side by Side Diff: common.sh

Issue 3916002: cros_make_image_bootable, mount_gpt_image, common.sh: root filesystem changes: ext2, ro by default (Closed)
Patch Set: line len Created 10 years, 2 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
OLDNEW
1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 # Common constants for build scripts 5 # Common constants for build scripts
6 # This must evaluate properly for both /bin/bash and /bin/sh 6 # This must evaluate properly for both /bin/bash and /bin/sh
7 7
8 # All scripts should die on error unless commands are specifically excepted 8 # All scripts should die on error unless commands are specifically excepted
9 # by prefixing with '!' or surrounded by 'set +e' / 'set -e'. 9 # by prefixing with '!' or surrounded by 'set +e' / 'set -e'.
10 # TODO: Re-enable this once shflags is less prone to dying. 10 # TODO: Re-enable this once shflags is less prone to dying.
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 } 316 }
317 317
318 V_RED="\e[31m" 318 V_RED="\e[31m"
319 V_YELLOW="\e[33m" 319 V_YELLOW="\e[33m"
320 V_BOLD_GREEN="\e[1;32m" 320 V_BOLD_GREEN="\e[1;32m"
321 V_BOLD_RED="\e[1;31m" 321 V_BOLD_RED="\e[1;31m"
322 V_BOLD_YELLOW="\e[1;33m" 322 V_BOLD_YELLOW="\e[1;33m"
323 323
324 function info { 324 function info {
325 echo -e >&2 "${V_BOLD_GREEN}INFO : $1${V_VIDOFF}" 325 echo -e >&2 "${V_BOLD_GREEN}INFO : $1${V_VIDOFF}"
326 } 326 }
327 327
328 function warn { 328 function warn {
329 echo -e >&2 "${V_BOLD_YELLOW}WARNING: $1${V_VIDOFF}" 329 echo -e >&2 "${V_BOLD_YELLOW}WARNING: $1${V_VIDOFF}"
330 } 330 }
331 331
332 function error { 332 function error {
333 echo -e >&2 "${V_BOLD_RED}ERROR : $1${V_VIDOFF}" 333 echo -e >&2 "${V_BOLD_RED}ERROR : $1${V_VIDOFF}"
334 } 334 }
335 335
336 function die { 336 function die {
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 # Setup var symlink. 442 # Setup var symlink.
443 if [ -h "${dev_image_root}/var" ]; then 443 if [ -h "${dev_image_root}/var" ]; then
444 sudo unlink "${dev_image_root}/var" 444 sudo unlink "${dev_image_root}/var"
445 elif [ -e "${dev_image_root}/var" ]; then 445 elif [ -e "${dev_image_root}/var" ]; then
446 die "${dev_image_root}/var should be a symlink if it exists" 446 die "${dev_image_root}/var should be a symlink if it exists"
447 fi 447 fi
448 448
449 sudo ln -s "${var_target}" "${dev_image_root}/var" 449 sudo ln -s "${var_target}" "${dev_image_root}/var"
450 } 450 }
451 451
452 # These two helpers clobber the ro compat value in our root filesystem.
453 #
454 # When the system is built with --enable_rootfs_verification, bit-precise
455 # integrity checking is performed. That precision poses a usability issue on
456 # systems that automount partitions with recognizable filesystems, such as
457 # ext2/3/4. When the filesystem is mounted 'rw', ext2 metadata will be
458 # automatically updated even if no other writes are performed to the
459 # filesystem. In addition, ext2+ does not support a "read-only" flag for a
460 # given filesystem. That said, forward and backward compatibility of
461 # filesystem features are supported by tracking if a new feature breaks r/w or
462 # just write compatibility. We abuse the read-only compatibility flag[1] in
463 # the filesystem header by setting the high order byte (le) to FF. This tells
464 # the kernel that features R24-R31 are all enabled. Since those features are
465 # undefined on all ext-based filesystem, all standard kernels will refuse to
466 # mount the filesystem as read-write -- only read-only[2].
467 #
468 # [1] 32-bit flag we are modifying:
469 # http://git.chromium.org/cgi-bin/gitweb.cgi?p=kernel.git;a=blob;f=include/linu x/ext2_fs.h#l417
470 # [2] Mount behavior is enforced here:
471 # http://git.chromium.org/cgi-bin/gitweb.cgi?p=kernel.git;a=blob;f=fs/ext2/supe r.c#l857
472 #
473 # N.B., if the high order feature bits are used in the future, we will need to
474 # revisit this technique.
475 disable_rw_mount() {
gauravsh 2010/10/20 19:06:55 Both these helpers don't have any external depende
Will Drewry 2010/10/20 19:11:49 cool
476 local rootfs="$1"
477 local offset="${2-0}" # in bytes
478 local ro_compat_offset=$((0x467 + 3)) # Set 'highest' byte
479 echo -ne '\xff' |
480 sudo dd of="$rootfs" seek=$((offset + ro_compat_offset)) \
481 conv=notrunc count=1 bs=1
482 }
483
484 enable_rw_mount() {
485 local rootfs="$1"
486 local offset="${2-0}"
487 local ro_compat_offset=$((0x467 + 3)) # Set 'highest' byte
488 echo -ne '\x00' |
489 sudo dd of="$rootfs" seek=$((offset + ro_compat_offset)) \
490 conv=notrunc count=1 bs=1
491 }
492
452 # Get current timestamp. Assumes common.sh runs at startup. 493 # Get current timestamp. Assumes common.sh runs at startup.
453 start_time=$(date +%s) 494 start_time=$(date +%s)
454 495
455 # Print time elsapsed since start_time. 496 # Print time elsapsed since start_time.
456 print_time_elapsed() { 497 print_time_elapsed() {
457 end_time=$(date +%s) 498 end_time=$(date +%s)
458 elapsed_seconds="$(( $end_time - $start_time ))" 499 elapsed_seconds="$(( $end_time - $start_time ))"
459 minutes="$(( $elapsed_seconds / 60 ))" 500 minutes="$(( $elapsed_seconds / 60 ))"
460 seconds="$(( $elapsed_seconds % 60 ))" 501 seconds="$(( $elapsed_seconds % 60 ))"
461 echo "Elapsed time: ${minutes}m${seconds}s" 502 echo "Elapsed time: ${minutes}m${seconds}s"
462 } 503 }
OLDNEW
« build_image ('K') | « build_image ('k') | mount_gpt_image.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698