shimboot/README.md

98 lines
4.4 KiB
Markdown
Raw Normal View History

2023-10-02 15:17:59 -04:00
# Chrome OS RMA Shim Bootloader
2023-10-21 09:46:34 -04:00
Shimboot is a collection of scripts for patching a Chrome OS RMA shim to serve as a bootloader for a standard Linux distribution. It allows you to boot a full desktop Debian install on a Chromebook, without needing to unenroll it or modify the firmware.
2023-10-04 02:56:57 -04:00
2023-10-21 02:59:53 -04:00
## About:
2023-10-21 09:46:34 -04:00
Chrome OS RMA shims are bootable disk images which are designed to run a variety of diagnostic utilities on Chromebooks, and they'll work even if the device is enterprise enrolled. Unfortunately for Google, there exists a [security flaw](https://sh1mmer.me/) where the root filesystem of the RMA shim is not verified. This lets us replace the rootfs with anything we want, including a full Linux distribution.
2023-10-21 02:59:53 -04:00
2023-10-21 05:06:52 -04:00
Simply replacing the shim's rootfs doesn't work, as it boots in an environment friendly to the RMA shim, not regular Linux distros. To get around this, a separate bootloader is required to transition from the shim environment to the main rootfs. This bootloader then does `pivot_root` to enter the rootfs, where it then starts the init system.
2023-10-21 02:59:53 -04:00
2023-10-21 05:06:52 -04:00
Another problem is encountered at this stage: the Chrome OS kernel will complain about systemd's mounts, and the boot process will hang. A simple workaround is to [apply a patch](https://github.com/ading2210/chromeos-systemd) to systemd, and then it can be recompiled and hosted at a [repo somewhere](https://shimboot.ading.dev/debian/).
2023-10-21 02:59:53 -04:00
After copying all the firmware from the recovery image and shim to the rootfs, we're able to boot to a mostly working XFCE desktop.
### Partition Layout:
1. 1MB dummy stateful partition
2. 32MB Chrome OS kernel
3. 20MB bootloader
4. The rootfs partitions fill the rest of the disk
Note that rootfs partitions have to be named `shimboot_rootfs:<partname>` for the bootloader to recognize them.
2023-10-21 05:06:52 -04:00
## Status:
### What Works:
- Systmed
- X11
- XFCE
- Backlight
- Touchscreen
- 3D acceleration
- Bluetooth
- Wifi (partially)
- Suspend (partially)
### What Doesn't Work:
- Audio
- Zram
### Development Roadmap:
2023-10-04 02:56:57 -04:00
- ~~build the image automatically~~
- ~~boot to a shell~~
2023-10-06 13:29:10 -04:00
- ~~switch_root into an actual rootfs~~
- ~~start X11 in the actual rootfs~~
- ~~ui improvements in the bootloader~~
2023-10-20 08:04:19 -04:00
- ~~load all needed drivers~~
- ~~autostart X11~~
- ~~host repo for patched systemd packages~~
- ~~use debootstrap to install debian~~
2023-10-20 16:51:56 -04:00
- ~~prompt user for hostname and account when creating the rootfs~~
2023-10-20 22:30:02 -04:00
- ~~auto load iwlmvm~~
2023-10-20 16:51:56 -04:00
- get wifi fully working
2023-10-20 08:18:09 -04:00
- host prebuilt images
2023-10-21 02:59:53 -04:00
- ~~write detailed documentation~~
2023-10-06 13:29:10 -04:00
2023-10-20 16:51:56 -04:00
### Long Term Goals:
- get zram to work
- eliminate binwalk dependency
- get audio to work
2023-10-06 13:29:10 -04:00
## Usage:
2023-10-20 16:51:56 -04:00
### Prerequisites:
2023-10-20 22:30:02 -04:00
- A separate Linux PC for the build process (preferably something Debian-based)
2023-10-20 16:51:56 -04:00
- A USB that is at least 8GB in size
- At least 20GB of free disk space
- An x86-based Chromebook
### Instructions:
2023-10-06 13:29:10 -04:00
1. Grab a Chrome OS RMA Shim from somewhere. Most of them have already been leaked and aren't too difficult to find.
2023-10-20 08:04:19 -04:00
2. Download a Chrome OS [recovery image](https://chromiumdash.appspot.com/serving-builds?deviceCategory=ChromeOS) for your board.
3. Clone this repository and cd into it.
2023-10-21 05:06:52 -04:00
4. Run `sudo ./build_rootfs.sh data/rootfs bookworm` to build the base rootfs.
5. Run `sudo ./patch_rootfs.sh path_to_shim path_to_reco data/rootfs` to patch the base rootfs and add any needed drivers.
6. Run `sudo ./build.sh image.bin path_to_shim data/rootfs` to generate a disk image at `image.bin`.
7. Flash the generated image to a USB drive or SD card.
8. Enable developer mode on your Chromebook. Even if it's enrolled and dev mode is blocked, it'll still work for running shimboot.
9. Plug the USB into your Chromebook and enter recovery mode. It should detect the USB and run the shimboot bootloader.
2023-10-06 14:05:15 -04:00
2023-10-20 08:18:09 -04:00
Note that these instructions are currently incomplete.
2023-10-06 14:05:15 -04:00
## License:
```
ading2210/shimboot: Boot desktop Linux from a Chrome OS RMA shim.
Copyright (C) 2023 ading2210
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
```