I bought a Samsung Chromebook after enjoying playing with one in person, playing with ChromeOS in a VM and be pissed off that over a 5 hour travel period my otherwise trusty Thinkpad T61 Laptop would not run off battery.
The specific model is the XE303C12. This is the 11.7“, ARM-based computer.
It's possible to setup the chroot on the internal memory. After a fresh boot there should be about 9gb free. I specifically bought a 32gb SDXC card for running a chroot, and I didn't want to use up all my working freespace on the internal so I did not bother to install it to the internal storage.
I'm a fan of Archlinux, but really any compatible ARM distro will work. Gentoo and Ubuntu are good options as well.
The Archlinux ARM page has a download for arch, but that's not what I used for my chroot.
This is what I downloaded and it worked, though it may not be the best optimized for the Chromebooks.
http://archlinuxarm.org/os/ArchLinuxARM-am33x-latest.tar.gz
Since we don't care about bootloaders or kernels, it doesn't really matter what we use as long as it's ARM 5/6/7/Cortex compatible.
Partition and format your SD card. I used ext4. How do you do this from windows? Good question. I'd say use a VM and use an i686/x86_64 Arch Linux install image.
fdisk /dev/mmcblk0 mkfs.ext4 /dev/mmcblk0p1
Once you have the card partitioned and formatted, mount it and extract the tar ball.
mount /dev/mmcblk0p1 /mnt tar zxf ArchLinuxARM-am33x-latest.tar.gz -C /mnt
Add these scripts into /mnt
#!/bin/sh # script to 'boot' the arch chroot environment # this should be called from ChromeOS SDCARD=/dev/mmcblk1p1 CHROOTDIR=/home/root/arch mount $SDCARD $CHROOTDIR #make it so the chroot's resolv.conf is the same as chromeos's mount --bind /etc/resolv.conf $CHROOTDIR/etc/resolv.conf chroot $CHROOTDIR /boot.sh &
#!/bin/sh # continuation of arch-boot boot script. # this should be called by the boot-arch.sh script as the first command ran within the chroot #setup paths export PATH=/usr/bin:/usr/sbin #mount FS's mount -t proc proc /proc mount -t sysfs sysfs /sysfs mount -t devtmpfs dev /dev mount -t devpts pts /dev/pts #set hostname hostname $(< /etc/hostname) #launch daemons /usr/sbin/crond & /usr/sbin/sshd &
Short Answer: Press Esc + Refresh + Power. System will reboot. Disable verified mode. Power cycle again. When it boots and warns about switching back to verified mode, press ctrl-D.
Once ChromeOS has booted and you're logged it, press ctrl-alt-T to get to crosh. Alternatively you can work out of the frame buffer. Press Ctrl-Alt-Forward (Forward, not right arrow) to get to the framebuffer.
sudo su - mkdir /home/root/arch
Insert your SD card if you have not already. Then try out the boot script
sh boot.sh
There's still some setup left, but you can chroot into it.
chroot /home/root/arch
You'll want to set a root password and probably create a non-root user.
passwd
The way I access my chroot once I've got everything setup is through Secure Shell / ssh. This limits the amount of commands you have to type before getting into your environment and also does not require you to become root and then drop down (yay for minimizing security risks).
You need to generate some ssh keys
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -N '' -t ecdsa
Crosh and Secure Shell both use hterm to deliver the 'in browser' terminal. To change settings on either you must change hterm preferences. The changes are persistent, I believe utilizing the html5's local storage ability.
Since I always work out of tmux, there's no point to keeping that unsightly scroll bar around. I also have pretty good vision (near sighted, anyway) so I can stand to use a smaller font which let's me display more text. Here's how to make these changes as well as a few others.
Open a java console (ctrl-shift-j) from secure shell and then use the following commands to set or check preferences.
Check:
term_.prefs_.get('pref-name')
Set:
term_.prefs_.set('pref-name', 'pref-value')
Reset to default:
term_prefs_.reset('pref-name')
Setting | Options | Example |
---|---|---|
Bell Sound | audible-bell-sound | term_.prefs_.set('audible-bell-sound', 'http://example.com/bell.ogg') |
Background color | background-color | term_.prefs_.set('background-color', 'black') |
Foreground color | foreground-color | term_.prefs_.set('foreground-color', '#fff') |
Terminal Font Face | font-family | term_.prefs_.set('font-family', 'Lucida Console') |
Terminal Font Size | font-size | term_.prefs_.set('font-size', 15) |
Font Smoothing AKA anti-aliasing | font-smoothing | term_.prefs_.set('font-smoothing', 'none') |
Hide scroll bar | scrollbar-visible | term_.prefs_.set('scrollbar-visible', false) |