-
-
Save DennisLfromGA/6690677 to your computer and use it in GitHub Desktop.
| #!/bin/sh -e | |
| ##!! PLEASE USE THIS SCRIPT WITH CAUTION - AND AT YOUR OWN RISK !!## | |
| ##!! IT HAS BEEN KNOWN TO CAUSE RESETS AND WIPE DATA ON SOME CHROMEBOXES !!## | |
| APPLICATION="${0##*/}" | |
| ANSWER='' | |
| SUDO='' | |
| USAGE=" | |
| $APPLICATION [no options] | |
| ### A script that asks the user to make the root filesystem | |
| ##+ read-writable for subsequent changes and additions by the user. | |
| " | |
| ## Exits the script with exit code $1, spitting out message $@ to stderr | |
| error() { | |
| local ecode="$1" | |
| shift | |
| echo "$*" 1>&2 | |
| exit "$ecode" | |
| } | |
| if [ $# -gt 0 ]; then error 0 "$USAGE"; fi | |
| ## Check for bootcache fix ... | |
| checkbootcache () { | |
| ret=$(grep -iq bootcache /usr/share/vboot/bin/make_dev_ssd.sh; echo $?) | |
| if [ $ret -gt 0 ]; | |
| then echo "$ret: No 'bootcache' fix appplied yet. :(" | |
| echo "Not safe to continue, exiting..." | |
| exit $ret | |
| else echo "$ret: The 'bootcache' fix has been appplied - yay. :)" | |
| echo "You can now run 'rw-rootfs' safely." | |
| fi | |
| } | |
| ## Report dev_boot_legacy and dev_boot_usb flags | |
| ## Check and set dev_boot_signed_only flag if needed. | |
| checkflags() { | |
| boot="$($SUDO crossystem dev_boot_usb dev_boot_legacy dev_boot_signed_only)" | |
| echo -n "## " | |
| echo "$boot" | |
| echo " ##" | |
| # db_usb and db_legacy can be off, db_signed_only should be off. | |
| echo "$boot" | { | |
| read -r usb legacy signed | |
| suggest='' | |
| if [ "$usb" = 1 ]; then | |
| echo "NOTE: USB booting <Ctrl+U> is enabled." 1>&2 | |
| else | |
| echo "WARNING: USB booting is disabled." 1>&2 | |
| suggest="$suggest dev_boot_usb=1" | |
| fi | |
| if [ "$legacy" = 1 ]; then | |
| echo "NOTE: Legacy booting <Ctrl+L> is enabled." 1>&2 | |
| else | |
| echo "WARNING: Legacy booting is disabled." 1>&2 | |
| suggest="$suggest dev_boot_legacy=1" | |
| fi | |
| if [ -n "$suggest" ]; then | |
| echo "To enable, you can use the following command: $SUDO crossystem$suggest" 1>&2 | |
| sleep 3 | |
| fi | |
| if [ "$signed" = 1 ]; then | |
| # Only disable signed booting if the user hasn't to ensure booting unverified kernels | |
| echo "WARNING: Signed boot verification is enabled; disabling it to ensure booting unverified kernel." 1>&2 | |
| echo "You can enable it again using: $SUDO crossystem dev_boot_signed_only=1" 1>&2 | |
| $SUDO crossystem dev_boot_signed_only=0 || true | |
| sleep 3 | |
| else | |
| echo "NOTE: Signed boot verification is disabled, you're good to go..." 1>&2 | |
| fi | |
| sleep 2 | |
| } | |
| } | |
| ## | |
| ## If we're not running as root, restart as root. | |
| if [ ${UID:-$(id -u)} -ne 0 ]; then | |
| echo "...elevating $USER to superuser via 'sudo'..." | |
| SUDO='sudo' | |
| fi | |
| if $SUDO mount -i -o remount,rw / 2>/dev/null; then | |
| echo "*** $(mount | grep ' / ') ***" | |
| error 0 "Your rootfs is already mounted read-write ..." | |
| fi | |
| echo -n "Perform REMOVAL of rootfs verification (Y/n/q) ? " 1>&2 | |
| read ANSWER | |
| case ${ANSWER:-y} in | |
| [yY]*) checkbootcache | |
| checkflags | |
| echo | |
| if grep -q CHROMEOS_RELEASE_BOARD=chromeover64 /etc/lsb-release | |
| then | |
| echo "...using CloudReady, disabling verity." | |
| echo "$SUDO disable_verity" 1>&2 | |
| $SUDO disable_verity || ret=$? || true | |
| else | |
| echo "$SUDO /usr/libexec/debugd/helpers/dev_features_rootfs_verification" 1>&2 | |
| $SUDO /usr/libexec/debugd/helpers/dev_features_rootfs_verification || ret=$? | |
| fi | |
| if [ $ret -gt 0 ]; then | |
| error 2 "Sorry but REMOVAL of rootfs verification failed." | |
| else | |
| echo | |
| echo "*** Rebooting in 10 seconds to make changes effective ***" 1>&2 | |
| read -t 10 -p "... ENTER 'a' TO ABORT! " GO | |
| if [ -n "${GO}" ]; then error 0 "Okay, ABORTING ..."; fi | |
| $SUDO reboot && exit $ret | |
| fi | |
| ;; | |
| [nN]*) error 0 "Skipping REMOVAL of rootfs verification for now..." | |
| ;; | |
| [qQ]*) error 0 "Quitting - no changes made..." | |
| ;; | |
| *) error 1 "Not a valid choice, exiting..." | |
| ;; | |
| esac |
Revision #10: added CloudReady detection.
Revision https://gist.github.com/Blaisorblade/9c9e7b24407ea58bab76cd7a3dc30596/8217cacfa63b9bb8a41e85181f44b068fa330b74 (sorry, fixed URL) proposes a fix, to prevent the -gt error:
/home/chronos/user/Downloads/rw-rootfs: line 101: [: -gt: unary operator expected
The error seems in fact harmless, but when I saw it it worried me enough to fix it. The fix is simply to ensure that ret is always set.
Fixed, thanx.
I think this script is mostly superfluous now with the new debugd/helpers script but I'll hang on to it since it does some other checks too.
@DennisLfromGA: Cool! I used it because it's linked on https://github.com/dnschneid/crouton/wiki/Autostart-crouton-chroot-at-ChromeOS-startup — and it worked great. FWIW, that document also links to specific (and old) versions of your other gists (I used the latest versions of each piece).
@DennisLfromGA I'm afraid your last change does not fix the right problem: if you write foo || ret=$? and then use $ret, when commands succeed, ret is not set; as a consequence, the if that uses $ret becomes syntactically incorrect.
I only added || true to make sure that line doesn't fail when ret is false, but it's probably redundant.
Revision #9:Updated for newer /usr/libexec/debugd/helpers/ method.