Running Arch Linux on a Chromebook?
By: Jasper Parish
Tags: Chromebook, Arch Linux, Chrome OS, Dual Boot, Linux

The Prerequisites

To get started, you’re going to need a Chromebook, of course, (one that you don’t mind “powerwashing” a couple of times). This should be fine for most since Chromeos is inherently very easy in terms of restoring configuration (one of the great features of Chromebooks). You will need to put your Chromebook into developer mode (this is really easy and well documented). You’ll also need to decide on which distro you want. I went with Arch Linux because I’ve recently become an addict of Luke Smith’s Youtube channel and thought I should give it a shot. I’m also ready to take the next step in my knowledge of Linux and I want a better understanding of how everything works.

Other than a Chromebook and Linux distro, you’re going to need a USB storage drive that you can make bootable. You will also need to check whether your Chromebook is supported by MrChromebox’s firmware utils but the script we’ll run later will check for you so you shouldn’t have to worry.

Finally, you probably won’t need to but some Chromebooks may require disabled Write-Protect. This involves taking your laptop apart and removing a screw in the motherboard. However, don’t fret! I thought that this was going way too far but when I finally went through with it, I found that it was super easy and had no problems at all.

Now we’re done with the prerequisites, we can get started with the real thing.

Getting Started

First things first, you should download MrChromebox’s firmware-util.sh. Detailed instructions can be found on his website but it basically boils down to the following:

Open up your “crosh” terminal by pressing Ctrl-Alt-T in Chromeos. Then type shell to open up a chronos shell. Then run the following command: cd; curl -LO https://mrchromebox.tech/firmware-util.sh && sudo bash firmware-util.sh (this will download the firmware script and run it straight away. Now comes a decision. Depending on what you want from your Chromebook, you can pick one of the available options. If you’d like to dual boot then RW_LEGACY Firmware is the option for you. For the purposes of this post, this is the option we’ll be going with. The prompt may give you an option to set the SeaBIOS bootloader as the default boot item. At this point you should press n (no) as we don’t yet have another OS. If you press y now then you may find it impossible to boot into Chromeos again.

An example of the firmware-util script menu (with some fancy colours of course).

You should reboot your Chromebook and nothing should change. You can press Ctrl+L at the ‘Developer Warning Screen’ and this should take you to a new SeaBIOS screen. However at the moment you can’t do anything with it so just reboot and get back into chromeos (Ctrl+D at developer warning screen). If you press Ctrl+L and your speaker makes 2 ‘beeps’, then something hasn’t worked properly but Chromeos should still work fine.

Re-partitioning your Chromebook

To dual boot your system, your going to want to create or resize some partitions on your Chromebook’s hard drive. To do this, we’re going to use the cgpt tool that comes pre-installed on all Chromebooks as far as I am aware. I believe that if you try to modify the system partitions outside of cgpt then your Chromebook may reject the changes and revert back (so use cgpt).

To access the cgpt tool, you will have to open up another ‘chronos’ shell in Chromeos and then you could type cgpt help to list all your options. To start with, you’re going to want to run cgpt show /dev/<name of hard_drive> . This will list all of the partitions in your Chromebook. To find the name of your hard drive, you can run lsblk . Your hard drive will look something like /dev/mmcblk0 with lots of partitions. From here, you have two options, you can either create 1–4 new partitions or take 2 of the existing partitions and move and resize them. (you may have to run cgpt with sudo).

Chromebook partitions

All Chromebooks (as far as I am aware) have three pairs of partitions: KERN_A, ROOT_A, KERN_B, ROOT_B and KERN_C, ROOT_C. You should also see a few other partitions on your drive such as STATE which is where the user-storage is kept for Chromeos. You might see that KERN_C and ROOT_C have a block-size of 1 meaning they are not really being used. If you choose to use these partitions to store your new OS, then you can follow this excellent tutorial on cgpt that will take you through the process (just the partitioning section). I recommend that you create a quick spreadsheet of your partitions to keep your partitions organised. This will make the maths much easier. I would say that it is safer to resize and move the KERN_C and ROOT_C partitions than to create more because Chromeos may repair itself and delete the new partitions.

If you choose to do what I did and create 1–4 new partitions then you will have to resize your STATE partition to allow for them to coexist. It is a very similar process to the other method. I created three new partitions and named them ARCH_BOOT, ARCH_ROOT and ARCH_SWAP. You could also create a partition for your home directory but I chose not to as its not really necessary (the same applies with the boot partition, I think, but that would be slightly more risky). My ARCH_BOOT partition was 256MB in size (500000 blocks); my ARCH_ROOT partition was 32GB in size (62500000 blocks); and my ARCH_SWAP partition was ~5.8GB in size (11376214 blocks). You may need to create the ARCH_BOOT partition with type 21686148–6449–6E6F-744E-656564454649 ( -t ). This is so SeaBIOS/GRUB can work together to boot properly.

Below is the output of running sudo cgpt show on my Chromebook:

chronos@localhost / $ sudo cgpt show /dev/mmcblk0

start size part contents

0 1 PMBR (Boot GUID: 3CAC10CD-7500-C3F4-0000-000000000000)

1 1 Pri GPT header

2 32 Pri GPT table

8671323 39062500 1 Label: "STATE"

Type: Basic data

UUID: 3BD37896-9120-E34B-BBD6-C94F2DB13454

20480 32768 2 Label: "KERN-A"

Type: ChromeOS kernel

UUID: DF8DA88E-F8FF-7E40-BC74-C2F8BE9DD07F

Attr: priority=2 tries=0 successful=1

4476928 4194304 3 Label: "ROOT-A"

Type: ChromeOS rootfs

UUID: BF1420A4-5912-0749-A3C8-CE7DC9FBBB50

53248 32768 4 Label: "KERN-B"

Type: ChromeOS kernel

UUID: 932BC76A-25F9-3B40-9B3F-E97F65234D9A

Attr: priority=1 tries=0 successful=1

282624 4194304 5 Label: "ROOT-B"

Type: ChromeOS rootfs

UUID: 7D79735C-2504-3448-B241-F7D6AE1931E2

16448 1 6 Label: "KERN-C"

Type: ChromeOS kernel

UUID: 0667A4E3-8109-B348-897E-BEEFB8AAC989

Attr: priority=0 tries=15 successful=0

16449 1 7 Label: "ROOT-C"

Type: ChromeOS rootfs

UUID: C6E7B3C7-F34C-F646-B427-A41AD1EE0B28

86016 32768 8 Label: "OEM"

Type: Basic data

UUID: 62CA7110-A2DB-0549-A465-7A4E59ADCD78

16450 1 9 Label: "reserved"

Type: ChromeOS reserved

UUID: A4FDCCE9-44B8-8240-BE26-9E3B855E9112

16451 1 10 Label: "reserved"

Type: ChromeOS reserved

UUID: B27187F5-03AC-6242-9E14-36EF17D54D97

64 16384 11 Label: "RWFW"

Type: ChromeOS firmware

UUID: 243AC9C8-AE5F-2D4B-B979-6256DC84D394

249856 32768 12 Label: "EFI-SYSTEM"

Type: EFI System Partition

UUID: 859AA362-65E0-4740-95D8-9D9AEA6BA712

110733826 11376214 13 Label: "ARCH_SWAP"

Type: Linux data

UUID: 0AEA14EF-1BFD-A343-A56D-C20A06B879DD

47733824 500000 14 Label: "ARCH_BOOT"

Type: 21686148-6449-6E6F-744E-656564454649

UUID: 98E9BFB1-BA59-2A42-BD92-188C14FB0B52

48233825 62500000 15 Label: "ARCH_ROOT"

Type: Linux data

UUID: 8CB3CE64-317E-5445-819C-F4B71302BF6B

122142687 32 Sec GPT table

122142719 1 Sec GPT header

Once you have fully resized/moved your partitions, you can reboot your device and you should be greeted by a message telling you that your system is ‘repairing itself’. Once the process ends, you will boot back into a — powerwashed — Chromeos.

That’s the scary bit over, now you can move onto installing your favourite Linux distro.

Linux Installation

You will now want to create a bootable USB-drive with your favourite Linux flavour on it (from here on I will assume you are using Arch so check elsewhere for other flavours before proceeding). Note that you probably won’t be able to use a USB-C dongle and will need a proper USB-C flash drive.

You can then plug in your USB-drive and reboot your Chromebook. You will need to press Ctrl+L at the developer mode warning screen and hopefully you’ll see a boot menu. From here you will need to select the USB-drive and after a few seconds you should be greeted with a tty interface for your ‘live’ Linux. This will allow you to run commands and setup Arch, all from the USB-drive. From here you can follow any other Arch Linux installation tutorial mounting your BOOT and ROOT partitions. You can swapon your SWAP partition if you made one.

Once you have mounted your partitions, you should use pacstrap to install the base packages. You should probably install at least the following 4 packages.

pacstrap -i /mnt base base-devel linux linux-firmware

Now you can install GRUB bootloader and you should find that the ArchWiki is extremely useful.

Once you have setup GRUB and Arch, you’re pretty much done. You can now install all the tools and software you want.

Post-Installation

Once I had a working installation, I installed the i3 window manager (i3-gaps to be specific) and got it working just fine. I am, as of now, having a little trouble getting sound to work on Arch but I’m still looking into sound fixes for Skylake. I installed urxvt as my terminal emulator and I am experimenting with lightdm as a desktop manager.

Also, the ArchWiki is your friend. I can’t tell you how many times I ‘Googled’ a question only to find it written in plain English on the ArchWiki. It really will make your life easier.

Conclusion

I’m pretty impressed with how easy this was to do and just how few problems I have encountered along the way. I now have my very own Arch installation on my laptop that works amazingly well and is more performant than crouton Linux. Its worth noting that this is my first time installing Arch and I was pleasantly surprised by how easy it was.

Anyway, thanks for reading this if you made it this far. I hope this was useful to someone out there and that you now have a dual-booting Chromebook!