#!/bin/sh ## https://github.com/dnschneid/crouton/wiki/Repack-kernel-to-Enable-VT_x-for-Virtualbox set -e main() { local part=$1 assert matches_rx $part '^[24]$' check_crossystem sudo dd if=/dev/sda$part of=$tmp/old_kernel cmdline=$($hack/chromeos-files/futility vbutil_kernel --verify $tmp/old_kernel | tail -1) new_cmdline="$cmdline" echo $new_cmdline | egrep -q " rootwait rw " || { new_cmdline=$(echo $new_cmdline | sed 's/ rootwait ro / rootwait rw /') } echo $new_cmdline | egrep -q "disable_vmx" || { new_cmdline="$new_cmdline disable_vmx=off" } echo $new_cmdline | egrep -q "lsm.module_locking" || { new_cmdline="$new_cmdline lsm.module_locking=0" } if [ "$cmdline" = "$new_cmdline" ]; then fatal "no changes to apply to current cmdline: $cmdline" else echo $new_cmdline > $tmp/new_cmdline $hack/chromeos-files/futility vbutil_kernel \ --repack $tmp/new_kernel \ --signprivate $hack/chromeos-files/kernel_data_key.vbprivk \ --keyblock $hack/chromeos-files/kernel.keyblock \ --oldblob $tmp/old_kernel \ --config $tmp/new_cmdline $hack/chromeos-files/futility vbutil_kernel \ --verify $tmp/new_kernel \ --verbose | \ grep -q "Body verification succeeded" || { fatal "new kernel verification failed" } log "saving kernel with new cmdline" $dry_run sudo dd if=$tmp/new_kernel of=/dev/sda$part bs=512 notrunc fi } #### hack=$(readlink -f $(dirname $0)) . $hack/functions.sh tmp=/tmp/$(basename $0).$$ mkdir $tmp if [ "x$1" = x-f ]; then shift else log "dry-run mode" dry_run=echo fi [ "$1" != 2 -a "$1" != 4 ] && { log "Usage: $0 [24]" exit 2 } main $1