Skip to content

Instantly share code, notes, and snippets.

@brianherman
Created May 13, 2011 07:02
Show Gist options
  • Save brianherman/970107 to your computer and use it in GitHub Desktop.
Save brianherman/970107 to your computer and use it in GitHub Desktop.
stuff
elpowerd_status="`initctl status powerd`"
if [ ! "$powerd_status" = "powerd stop/waiting" ]
then
echo "Stopping powerd to keep display from timing out..."
initctl stop powerd
fi
# Do partitioning (if we haven't already)
ckern_size="`cgpt show -i 6 -n -s -q /dev/sda`"
croot_size="`cgpt show -i 7 -n -s -q /dev/sda`"
state_size="`cgpt show -i 1 -n -s -q /dev/sda`"
# If KERN-C and ROOT-C are one, we partition, otherwise assume they're what they need to be...
if [ "$ckern_size" = "1" -o "$croot_size" = "1" ]
then
while :
do
read -p "Enter the size in gigabytes you want to reserve for Ubuntu. Acceptable range is 5 to 10 but 9 is the recommended maximum: " ubuntu_size
if [ ! $ubuntu_size -ne 0 2>/dev/null ]
then
echo "\n\nNumbers only please...\n\n"
continue
fi
if [ $ubuntu_size -lt 5 -o $ubuntu_size -gt 10 ]
then
echo "\n\nThat number is out of range. Enter a number 5 through 10\n\n"
continue
fi
break
done
# We've got our size in GB for ROOT-C so do the math...
#calculate sector size for rootc
rootc_size=$(($ubuntu_size*1024*1024*2))
#kernc is always 16mb
kernc_size=32768
#new stateful size with rootc and kernc subtracted from original
stateful_size=$(($state_size - $rootc_size - $kernc_size))
#start stateful at the same spot it currently starts at
stateful_start="`cgpt show -i 1 -n -b -q /dev/sda`"
#start kernc at stateful start plus stateful size
kernc_start=$(($stateful_start + $stateful_size))
#start rootc at kernc start plus kernc size
rootc_start=$(($kernc_start + $kernc_size))
#Do the real work
echo "Modifying partition table to make room for Ubuntu. Computer will reboot, wipe your data and then this script will need to be re-run..."
umount /mnt/stateful_partition
# stateful first
cgpt add -i 1 -b $stateful_start -s $stateful_size -l STATE /dev/sda
# now kernc
cgpt add -i 6 -b $kernc_start -s $kernc_size -l KERN-C /dev/sda
# finally rootc
cgpt add -i 7 -b $rootc_start -s $rootc_size -l ROOT-C /dev/sda
# wipe the resized stateful then reboot
dd if=/dev/zero of=/dev/sda bs=131072 seek=1040 count=47280
reboot
fi
cd /mnt/stateful_partition/
# try mounting a USB / SD Card if it's there...
if [ ! -d /tmp/usb_files ]
then
mkdir /tmp/usb_files
fi
mount /dev/sdb /tmp/usb_files > /dev/null 2>&1
mount /dev/sdb1 /tmp/usb_files > /dev/null 2>&1
# Download and copy ubuntu root filesystem, keep track of successful parts so we can resume
SEEK=0
FILESIZE=102400
for one in a b
do
for two in a b c d e f g h i j k l m n o p q r s t u v w x y z
do
FILENAME="ubuntu-1104.bin$one$two.bz2"
if [ ! -f /mnt/stateful_partition/ubuntu-$FILENAME-finished.txt ]
then
if [ -f /tmp/usb_files/$FILENAME ]
then
echo "Found $FILENAME on flash drive. Using it..."
get_cmd="cat /tmp/usb_files/$FILENAME"
else
echo "\n\nDownloading $FILENAME\n\n"
get_cmd="wget -O - http://cr-48-ubuntu.googlecode.com/files/$FILENAME"
fi
$get_cmd | bunzip2 -c | dd bs=1024 seek=$SEEK of=/dev/sda7
touch /mnt/stateful_partition/ubuntu-$FILENAME-finished.txt
fi
SEEK=$(( $SEEK + $FILESIZE ))
done
done
#Mount Ubuntu rootfs and copy cgpt + modules over
if [ ! -d /tmp/urfs ]
then
mkdir /tmp/urfs
fi
mount -t ext4 /dev/sda7 /tmp/urfs
cp /usr/bin/cgpt /tmp/urfs/usr/bin/
chmod a+rx /tmp/urfs/usr/bin/cgpt
cp -ar /lib/modules/* /tmp/urfs/lib/modules/
umount /tmp/urfs
#Copy running Chrome OS kernel to KERN-C partition for Ubuntu's usage
current_rootfs="`rootdev -s`"
current_kernfs="/dev/sda2"
if [ "$current_rootfs" = "/dev/sda5" ]
then
current_kernfs=/dev/sda4
fi
dd if=$current_kernfs of=/dev/sda6
echo "Setting Ubuntu kernel arguments and resigning kernel partition..."
#echo "console=tty1 init=/sbin/init add_efi_memmap boot=local rootwait ro noresume noswap i915.modeset=1 loglevel=7 kern_guid=%U tpm_tis.force=1 tpm_tis.interrupts=0 root=/dev/sda7 noinitrd" > /mnt/stateful_partition/foo.6
if [ ! -f /mnt/stateful_partition/foo.6 ]
then
wget http://cr-48-ubuntu.googlecode.com/files/foo.6
fi
/usr/share/vboot/bin/make_dev_ssd.sh --partitions '6' --set_config /mnt/stateful_partition/foo
#Set Ubuntu partition as top priority for next 2 boots
cgpt add -i 6 -P 5 -T 2 -S 0 /dev/sda
reboot
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment