I'm not entirely sure why I did this - but there we are. I've successfully installed Arch on a Samsung Series 5 550 Chromebook!
Instructions taken and modified from http://dev.chromium.org/chromium-os/dev … on-a-cr-48
Red text indicates Chromebook steps.
Blue text indicates "host PC" steps.
Green text indicates "Arch VM under host PC" steps.
Here are some instructions, because instructions are fun:
Make sure you know what you're doing. This isn't for the faint-hearted.
Firstly, you need to enable the developer-mode switch on your Chromebook. This will wipe all stored persistent data! It's hidden inside the Kensington lock space and can be switched with a toothpick or paperclip.
Boot your Chromebook to the initial setup screen and set up networking on the first page, then stop.
Use the script from the Ubuntu on CR-48 blog to repartition your Chromebook's internal storage. This will reboot your Chromebook. Remember how large you made your new Linux partition!
Again, boot your Chromebook to the initial setup screen and set up networking on the first page, then press Ctrl-(->) again, and login as chronos, then sudo -i.
On your host PC, install VirtualBox and download the latest Arch installation media.
Copy /usr/bin/cgpt onto a memory stick, or scp it directly to your host system. On the Samsung Series 5 550, it's a 64-bit static binary.
Calculate how much (number of Linux gigabytes) * 1024 * 1024 * 2 is and substitute LINBYTES in all following instructions for that number.
HOST (make a new directory for this somewhere - /tmp or your home directory are both good candidates):
dd if=/dev/zero of=zero_file.bin bs=512 seek=LINBYTES count=1 cgpt create zero_file.bin cgpt boot -p zero_file.bin cgpt add -b 128 -s LINBYTES -t data -l arch zero_file.bin VBoxManage convertdd zero_file.bin arch_disk.vdi --format VDI rm zero_file.bin
Launch VirtualBox, configure a 4GB-RAM virtual machine with the first SATA drive as arch_disk.vdi and the CD-ROM drive pointed at the ISO you downloaded earlier.
Install Arch onto /dev/sda inside the VM. Make sure that you use /dev/sda7 in the fstab and not /dev/sda1!
Shutdown the VM and close VirtualBox.
VBoxManage internalcommands converttoraw arch_disk.vdi arch_disk.bin dd if=arch_disk.bin bs=512 skip=128 count=LINBYTES of=arch_rootfs.bin
Get the arch_rootfs.bin onto the Chromebook somehow. I suggest a USB memory stick.
dd if=arch_rootfs.bin of=/dev/sda7 mkdir /tmp/arch mount /dev/sda7 /tmp/arch cp /usr/bin/cgpt /tmp/arch/usr/bin/cgpt chmod a+rx /tmp/arch/usr/bin/cgpt cd /tmp/arch/lib/modules mkdir `uname -r` cp -ar * /tmp/arch/lib/modules/`uname -r`/ umount /tmp/arch
If this says /dev/sda3, substitute 2 for CRKERNEL in the following commands.
If this says /dev/sda5, substitute 4 for CRKERNEL.
If it says anything else, panic.
dd if=/dev/sdaCRKERNEL of=/dev/sda6 mkdir /tmp/mds
Download http://git.chromium.org/cgi-bin/gitweb. … sh;hb=HEAD (as make_dev_ssd.sh)
and http://git.chromium.org/cgi-bin/gitweb. … sh;hb=HEAD (as common_minimal.sh)
scp the make_dev_ssd.sh and common_minimal.sh files to /tmp/mds then
mount -o remount,exec /tmp
CHROMEBOOK:If you want to look at and modify the existing config, run
./make_dev_ssd.sh --partitions '6' --save_config foo
and look at foo.6.
If not, simply run:
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" > foo.6
After modifying/creating foo.6 to your liking, run
./make_dev_ssd.sh --partitions '6' --set_config foo cgpt add -i 6 -P 5 -T 1 -S 0 /dev/sda
Now you can reboot your Chromebook and you should boot into Arch! Note that rebooting after this will boot back into ChromeOS, as Arch does not set the "successful boot" flag on the kernel partition.
Photos to come.
So you managed to install it, but how does it run?
Is everything working or do some parts not work?
I believe everything should have an OS driver, and I know that Xorg works.
Click thumbnails to view full-size imagery.
Working on getting KDE up and running, but I accidentally resized my Arch partition to 0 bytes and broke the entire partition table. Gives me a chance to revalidate my instructions, I suppose!
Last edited by lukegb (2012-09-08 16:51:40)
I see you don't have any F1-F12 keys, so how do you manage, for example, TTY switching? (and you have no Capslock either, but I guess that Search Key can be swapped for it)
I'm pretty interested in this, keep us posted!
(and perhaps you might want to resize the photo's according to the forum rules. I find omploader to be a nice host, which automatically resizes them for thumbnails and links to the bigger picture)
The Chromebook does actually have F1-F12 buttons - they just have the Chrome imagery on top, so it's Back Arrow, Forward Arrow, Refresh Circle, Maximize, Tab Switcher, Dim Brightness, Increase Brightness, Mute, Volume Down, Volume Up and they all appear to the software as F1-F12.
Great! Thanks for these instructions.
In fact I already have an ubuntu installed... do you think I can start at step 10?
Another question, do you think it is possible to pass root=/dev/sdb1 for instance, so that the rootfs will be on a usb stick?
You should make this a wiki page... good info here.
Updated my Chromebook to systemd - no problems at all. Just swapped out init=/sbin/init for init=/usr/lib/systemd/systemd
This can be done post-install, under ChromeOS, by redownloading make_dev_ssd.sh and common_minimal.sh, remounting /tmp as exec and copying those shell scripts there, and then running (in /tmp):
sudo ./make_dev_ssd.sh --partitions '6' --save_config arch sudo vim arch.6 # change init= sudo ./make_dev_ssd.sh --partitions '6' --set_config arch
Obviously this also applies to changing any other kernel parameters.
As a sidenote, I use both Arch and CrOS regularly. I use CrOS as the "default" OS, and I have:
alias archboot = 'sudo cgpt add -i 6 -T 1 -P 5 -S 0 /dev/sda && sudo reboot'
in my user's ~/.bash_profile so that when I'm logged in to CrOS, Arch is just a Ctrl-Shift-T (opens crosh), "shell" (opens bash), "archboot" and then my root password away. Both Arch and CrOS have very minimal bootup times, so this serves me well.
Obviously hitting Ctrl-D on every boot to clear the Sad Chromebook is a bit annoying, but not too bad. The beep still surprises me sometimes if I forget!
I did install a bit differently:
In fact I had an ubuntu already installed.
I installed arch on a virtualbox, made a tarball, transfered it to my chromebox, mounted /dev/sda7 where ubuntu was, moved all the files into an 'ubuntu' folder, then extracted the tarball
I then copied /ubuntu/lib/modules * to /lib/modules
And it worked!
I then used the method explained above to switch to systemd booting.
Everything seems supported, I have a kernel 3.4 running, fuse filesystem is supported, video accelerations sems to work in xbmc.
It is perfect except for the 30-seconds we have to wait at each boot...
lukegb, great post/thread.
Thanks very much for this, i'm going to give this an attempt tonight on identical hardware (series 5 550).
I'll keep you posted, and try to re-translate this to the wiki here:
I did exactly as cyberic - I installed ubuntu via the script, then installed arch on a VM, then tar'd up the rootfs and untar'd it onto my ubuntu filesystem (mounted via chromeos). I then copied the old /etc/fstab and /lib/modules to my extracted arch system, rebooted and it works!
I was able to compile some modules for the kernel.
But you have to stick with the chrome os kernel...
I'll try to add kexec support and try to launch a new kernel...
anybody tried that before?
Does anyone know where I could build/have the cgpt program? I failed to back it up properly before installing Arch on my Samsung 550.
Also, everything works except for wake from suspend. I will likely start another thread for that.
Actually, I just downloaded a chromeos image and copied it from there - was literally coming on here to update.
So that's cool, I can now switch between the two OSes... I have two issues remainging:
for some reason GDM says "Invalid UTF-8" when I try and login... autologin works fine, though. This isn't huge and I will eventually figure it out.
My big problem is: suspend works, but when I try and wake the machine up it just boots Arch normally (as in, i see the sick chromebook and have to hit ctrl+d). Are you able to suspend properly?
Ah of course. Ok, I'll make a post elsewhere and try to get some help on this - it's very weird, though. Nothing in pm-suspend.log or journalctl - everything suspends fine, it just doesn't WAKE UP. Tried adding acpi_sleep=nonvs to the kernel parameters of GRUB, but that didn't work...
Has anyone attempted to get this to work on a C7 chromebook? One of the $199 x86 ones? If so, could they tell me how? The cgpt returns an error and is not a 64-bit ELF, rather 32-bit, so I think this may have something to do with it.
You can use the script here to partition the drive (or boot from an SD card!). It installs Ubuntu but you can do what cyberic and I did and just replace it with Arch.
Does anyone have the ability to provide me with a KERN-A & KERN-B image?
I tried pm'ing cyberic but I'm not sure if it went through.
Just to let you know that I have compiled a kernel with kexec enabled.
This kernel enables me to load other kernels , without any risk of 'bricking' my chromebox
I succeeded in loading kernels compiled from chromeos-3.4 branch, but when I tried to kexec a 3.6 arch kernel, it failed.
Does anyone has info on google patches required to boot a kernel on a samsung chromebox/chromebook?
I compiled mine from here if you haven't seen it yet.