This guide documents the command-line installation procedure for GrapheneOS on a Google Pixel 6 Pro (codename: raven) from an Ubuntu 24.04 host system.
- Prerequisites
- Device Preparation
- Host System Setup
- Bootloader Unlock
- Download and Verify Factory Images
- Flash GrapheneOS
- Lock Bootloader
- Post-Installation
- Verification
- Troubleshooting
- Google Pixel 6 Pro (non-carrier-locked)
- USB-C cable (high-quality, preferably the cable shipped with the device)
- Computer running Ubuntu 24.04 LTS with:
- Minimum 2GB free memory
- Minimum 32GB free storage
- Direct USB port access (avoid USB hubs)
- Ubuntu 24.04 LTS (fully updated)
- Internet connection for downloading factory images (~1.6GB)
- Navigate to Settings > About phone
- Tap Build number seven times until developer mode is enabled
- Navigate to Settings > System > Developer options
- Enable OEM unlocking
- Requires active internet connection for carrier lock verification
Note: The device must not be carrier-locked. Carrier variants may have OEM unlocking permanently disabled.
sudo apt update
sudo apt install -y android-sdk-platform-tools-common openssh-client libarchive-toolsThe android-sdk-platform-tools-common package provides udev rules for non-root USB device access.
Ubuntu's packaged fastboot is outdated. Download the official standalone platform-tools:
cd ~/graphene
# Download platform-tools
curl -O https://dl.google.com/android/repository/platform-tools_r35.0.2-linux.zip
# Verify checksum
echo 'acfdcccb123a8718c46c46c059b2f621140194e5ec1ac9d81715be3d6ab6cd0a platform-tools_r35.0.2-linux.zip' | sha256sum -c
# Extract
bsdtar xvf platform-tools_r35.0.2-linux.zip
# Verify installation
./platform-tools/fastboot --versionExpected output:
fastboot version 35.0.2-12147458
The fwupd service can interfere with fastboot device communication:
sudo systemctl stop fwupd.serviceNote: This change is temporary and reverts on reboot.
- Power off the device
- Hold Volume Down while pressing Power
- Continue holding Volume Down until "Fastboot Mode" appears with a red warning triangle
- Do not select any menu options
Connect the device via USB and verify detection:
./platform-tools/fastboot devicesExpected output:
<SERIAL_NUMBER> fastboot
Verify device model:
./platform-tools/fastboot getvar productExpected output:
product: raven
./platform-tools/fastboot flashing unlockOn the device:
- Use Volume buttons to select "Unlock the bootloader"
- Press Power to confirm
Warning: This operation wipes all device data.
After confirmation:
- Press Power to select "Start"
- Allow the device to boot (factory reset occurs)
- At the setup wizard, reboot back into fastboot mode:
- Hold Volume Down + Power until reboot
- Continue holding Volume Down until "Fastboot Mode" appears
curl -O https://releases.grapheneos.org/allowed_signersKey contents (for verification):
[email protected] ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIUg/m5CoP83b0rfSCzYSVA4cw4ir49io5GPoxbgxdJE
curl -s https://releases.grapheneos.org/raven-stable | head -1This returns the current stable version number.
Replace <VERSION> with the version from the previous command:
curl -O https://releases.grapheneos.org/raven-install-<VERSION>.zip
curl -O https://releases.grapheneos.org/raven-install-<VERSION>.zip.sigExample for version 2025112100:
curl -O https://releases.grapheneos.org/raven-install-2025112100.zip
curl -O https://releases.grapheneos.org/raven-install-2025112100.zip.sigssh-keygen -Y verify -f allowed_signers -I [email protected] -n "factory images" -s raven-install-<VERSION>.zip.sig < raven-install-<VERSION>.zipExpected output:
Good "factory images" signature for [email protected] with ED25519 key SHA256:AhgHif0mei+9aNyKLfMZBh2yptHdw/aN7Tlh/j2eFwM
bsdtar xvf raven-install-<VERSION>.zipEnsure device is in fastboot mode and connected:
./platform-tools/fastboot devicescd raven-install-<VERSION>
PATH="../platform-tools:$PATH" bash flash-all.shThe script performs the following operations:
- Flashes bootloader to both slots
- Flashes radio/modem firmware
- Writes GrapheneOS verified boot key
- Erases and flashes system partitions
- Formats userdata and metadata
Important: Do not disconnect the device or interact with it during flashing. The device will reboot multiple times automatically.
Upon completion, the device returns to fastboot mode.
Locking the bootloader enables verified boot and prevents unauthorized modifications.
cd ~/graphene
./platform-tools/fastboot flashing lockOn the device:
- Use Volume buttons to select "Lock the bootloader"
- Press Power to confirm
Warning: This operation wipes all device data.
After confirmation:
- Press Power to select "Start"
- The device boots into GrapheneOS
- Initial boot may take 1-2 minutes
- A yellow warning screen appears briefly showing the verified boot key fingerprint
- This warning is expected for any non-stock OS with a locked bootloader
During the GrapheneOS setup wizard:
- On the final configuration screen, locate the OEM unlocking toggle
- Ensure it remains checked (default) to disable OEM unlocking
- This prevents bootloader unlock without factory reset
Alternatively, after setup:
- Navigate to Settings > System > Developer options
- Disable OEM unlocking
On Pixel 6 Pro, the boot screen displays the full SHA-256 hash of the verified boot public key. Compare against the official GrapheneOS key:
439b76524d94c40652ce1bf0d8243773c634d2f99ba3160d8d02aa5e29ff925c
For cryptographic verification of device integrity:
- Install the Auditor app from the GrapheneOS App Store
- Use a second Android device with Auditor to perform QR code verification
- Optionally, configure remote attestation via https://attestation.app
# Verify udev rules are installed
dpkg -l | grep android-sdk-platform-tools-common
# Reconnect device after installing udev rules
# Check dmesg for USB connection events
dmesg | tail -20- Ensure device is connected to the internet
- Verify device is not carrier-locked
- Factory reset may be required after enabling OEM unlocking on Pixel 6 series
Common causes:
- USB cable quality issues
- USB hub interference
- fwupd service claiming device
Resolution:
- Use a different USB cable (preferably OEM)
- Connect directly to motherboard USB port
- Ensure
fwupd.serviceis stopped - Reboot device into fastboot mode
- Re-run flash script (safe to re-execute)
If /tmp has insufficient space:
mkdir tmp
TMPDIR="$PWD/tmp" bash flash-all.shThis documentation is provided for reference purposes. GrapheneOS is developed by the GrapheneOS project. Google Pixel is a trademark of Google LLC.