Brotcast

How to Install iodéOS 3.2 on a Fairphone 4 for Dummies

29. November 2022  •  21 Minuten

I find it often frustrating how even tech-savvy people are too lazy to switch to privacy-respecting services. So I wrote this guide on how to install the Google-free Android iodéOS (version 3.2) on the Fairphone 4 to lower the barrier even further. Give it a go, anyone familiar with the command line can do it!

I don’t install a custom Android every day either and this is unfortunately where the official installation instructions for iodéOS fall a bit short. So I took some notes of the pitfalls I encountered during the process and compiled them into this document.

The article is structured into three sections:

  1. 😤 TL;DR: Just gimme the commands!
  2. 🧐 Introduction: Why this?
  3. 🥴 Detailed instructions for dummies

An addendum elaborates on the fact that, by installing iodéOS, you are going to have an ugly warning screen for about two seconds on powering up the phone:

Warning

This is nothing to worry about but something to be aware of that I have not found mentioned in any of the installation guides.

😤 TL;DR: Just gimme the commands!

If you are experienced with installing custom Androids/ROMs and with using a Unix command line, this overview might be enough for you. Otherwise better skip this section and start either with the introduction or the detailed instructions section.

To install iodéOS 3.2 on a Fairphone 4:

  1. Update the stock FairphoneOS to the latest version.

  2. Get the unlock code from the Fairphone website by entering your phone’s IMEI and serial number found in the Settings. Then unlock the phone by flipping the switch on “OEM unlocking” in the Developer options.

  3. Download and unzip the Android SDK Platform Tools . Add yourself to the plugdev group and install the necessary udev rules:

    sudo usermod -aG plugdev $LOGNAME
    sudo apt-get install android-sdk-platform-tools-common
    
  4. Connect the phone to the desktop, enable USB debugging in the developer options and authorize the access to the phone by confirming the dialog. You can test that you have access with

    adb devices
    
  5. Reboot into fastmode and unlock the bootloader

    adb reboot bootloader
    fastboot flashing unlock
    

    and confirm on the phone by selecting “UNLOCK THE BOOTLOADER”.

  6. Download the latest recovery image (example: iode-3.2-20221014-FP4-recovery.img) and the file avb_custom_key-FP4.bin from iodéOS' release page on GitHub (choose the latest release for Fairphone 4, in my case “iodéOS 3.x for Fairphone FP4 ”). Boot into fastboot mode again and check connectivity with fastboot devices. Flash the recovery image and the avb_custom_key:

    fastboot flash recovery_a iode-3.2-20221014-FP4-recovery.img
    fastboot flash recovery_b iode-3.2-20221014-FP4-recovery.img
    fastboot flash avb_custom_key avb_custom_key-FP4.bin
    

    and reboot into recovery by selecting “Recovery mode” on the phone.

  7. Download the most recent flash for FP4 from iodéOS's release page on GitHub (example: iode-3.2-20221014-FP4.zip) and, on the phone, format the phone by navigating through “Factory Reset” > “Format data / factory reset” > “Format data”. Go back and navigate to “Apply update” > “Apply from ADB”. Sideload iodéOS with:

    adb sideload iode-3.2-20221014-FP4.zip
    
  8. After a restart, do a minimal setup of iodéOS (user data is going to be wiped) in order to enable USB debugging again. Reboot to bootloader as before (adb reboot bootloader) and verify that you are safe to relock the phone with:

    fastboot flashing get_unlock_ability
    

    If you see get_unlock_ability: 0 in the output, DON’T CONTINUE OR YOU RISK BRICKING YOUR PHONE. For further information, see the detailed installation instructions.

    If you see get_unlock_ability: 1, you are safe to relock your bootloader:

    fastboot flashing lock
    

    which you must confirm on the phone. After reboot, follow the iodéOS setup wizard and finally turn off again the switch on “OEM unlocking” in the developer options.

🧐 Introduction: Why this?

In this section I give some context around this document. If you are not interested in the “why” but the “how”, feel free to jump to the next section with the actual instruction for the installation of iodéOS.

Why this guide?

The official installation instructions are too short for someone who does not install custom ROMs on a regular basis like me. For example, I first had to find out how to install the command line tool adb to interact with my phone from the desktop computer. Switching back and forth between several documents is cumbersome and risky. With this guide, I hope to provide a single document that holds all the relevant information and some debugging advice.

Who is this for?

The title says that this guide is “for dummies” but you still need to feel comfortable with a Unix command line interface. Also, be aware that the operations described here might void your device’s warranty or worse put your phone at risk of becoming unusable permanently (“bricking” it). There should not be a problem if you follow the steps described here one by one but it is still possible that you do a mistake at the wrong point.

If you are not willing to take the time and the risk, consider just buying the phone directly at iodé . Iodé is a French company that developed and maintains the iodéOS. According to their FAQ , all their income comes from selling smartphones that have their operating system (OS) preinstalled. That possibly also explains why the installation instructions for their iodéOS are so minimalist. So if you don’t already own a phone compatible with iodéOS as I do, consider buying a phone from them to support their business regardless of your technical skill set.

What references did you use?

This is based on the twelve super short points given in the official installation instructions by iodé .

For reference, complementary resources that helped me solve the problems encountered along the way were:

Why iodéOS?

In January 2021, I installed LineageOS for the first time on a Fairphone 3 and tweaked it to be more privacy respecting following the “Take back control! ” guide by Mike Kuketz from 2019 (in German). This proved to be quite time intensive, so I was looking for a LineageOS fork that would come with batteries included.

/e/OS came close to this and is very similar to iodéOS. Fairphone partners officially with /e/OS , so I figured that the chances for a smooth installation process were high. I have installed and used /e/OS for some months but shared the doubts on its transparency as described by Mike Kuketz (in German). Also, I was not a fan of it preinstalling many apps and suggesting cloud services.

Through some comment on Hacker News I learnt about iodéOS. iodéOS is an operating system for Android-compatible smartphones with a focus on privacy. It’s a fork of the popular LineageOS and aims at removing any interaction with Google servers and other privacy-invasive services. As I understand it, it achieves that principally through three measures:

  1. It replaces Google services running in the background with an open alternative (MicroG ).
  2. A built-in ad/tracker blocker.
  3. Privacy-friendly default configuration and privacy-friendly apps.

This resembles my own setup with LineageOS that I had initially - just that someone else already had done all the tedious configuration for me. Great! Since the announcement of going fully open source I feel confident that iodéOS is a good choice for an easy setup of a privacy-friendly Android from a transparent company.

🥴 Detailed instructions for “dummies”

Here I list every step I did to install iodéOS together with some trouble shooting advice (marked by a “❌”) and complementary tips (marked with a “☝️”). Carefully read the warnings marked with a “⚠️”.

This section is divided into the following steps:

Let’s get started!

✅ Step 0: Prerequisites

To follow along with the steps presented here, you are going to need the following components:

  1. A Fairphone 4 with the stock firmware (the default FairphoneOS).
  2. A desktop computer with a GNU/Linux distribution on it to remote control the phone. Personally I use Ubuntu 22.04. If you want to be sure that every command listed here also works for you, I advise to use either Ubuntu as well or any other Debian-based distribution . But even for other distributions, most of the commands should be exactly the same.
  3. A USB-C cable to connect your phone with the desktop computer.
  4. Some software installed to your GNU/Linux environment. The setup is detailed in the next chapter.

For reference, these are the versions of the software parts used for this guide:

Given these components, you are ready to start modifying our phone such that you can install iodéOS.

🔄 Step 1: Update your phone

In order to be able to get your Unlock Code later from the Fairphone website, you have to make sure that your phone’s operating system (FairphoneOS) is at the latest version.

To update your FairphoneOS:

  1. Power up the phone and follow initial setup wizard.

    1. Connect to WiFi. You are going to need this in order to download the latest version of the FairphoneOS.
    2. Skip the login to Google account and untick all permissions.
    3. Set a temporary PIN.
  2. In the “Settings” app, go to “System” > “Advanced” > “System update” to download and install the latest version of the FairphoneOS

    ☝️ For me: Version FP4G.A.0170.

This might take a while. After that, you are good to “unlock” our phone in order to be able to modify it.

🔐 Step 2: Unlock your phone

To unlock your phone’s bootloader, you first need to get an unlocking code from the official Fairphone website. Then you’ll have to enter this code in a menu on the phone. These steps are explained on the Fairphone website if you need more context and screenshots.

☝️ Note: For safety reasons, we are later going to reLock the bootloader.

The steps in detail:

  1. Get the IMEI via menu “Settings” > “About phone” > “IMEI (sim slot 1)” and write it down.

  2. Get the serial number via menu “Settings” > “About phone” > “Model & Hardware” > “Serial number” and write it down.

  3. Fill in the form on the Fairphone website with the numbers from (1) and (2) to get the unlock code. You are going to need this one later.

    ☝️ The numbers should look something like this:

    1. IMEI: 912849821649817
    2. Serial number: a573b7c1
    3. Unlock code: 11g8a06

    ❌ If the Unlock button is greyed out, you maybe haven’t updated your stock firmware to the latest.

  4. Unlock your bootloader:

    1. Enable the developer mode by going to “Settings” > “About phone”. There, press on “Build number” for seven times until you see a small message with a countdown that confirms your actions. Enter your phone’s PIN to confirm.
    2. In “Settings” > “System” > “Developer Options”, flip the switch on “OEM unlocking”. Enter the unlock code from above into the dialog popping up.

Having changed that setting, you are now free to install operating systems on your phone.

🖥️ Step 3: Prepare your desktop

In order to be able to launch command from your desktop computer to be executed on the phone, you need some software and configurations.

  1. Get the Android SDK Platform-Tools with the command line tools fastboot and adb from the official Android developer tools website through the corresponding download link. This downloads a file platform-tools-latest-linux.zip that you have to unzip.

  2. Prepare your computer to be able to interact with fastboot as described in the Android developer website Change :

    1. Add yourself to the plugdev group :
    sudo usermod -aG plugdev $LOGNAME
    

    Note that you need to first logout and login again. To verify that this worked you can use command id and you should see something like this:

    $ id | grep -o plugdev
    plugdev
    
    1. Install rules for Android devices for the system’s device manager udev:

      sudo apt-get install android-sdk-platform-tools-common
      

With that, your desktop should have all it needs to launch commands that interact with your phone.

📱 Step 4: Prepare your phone

Your computer is now capable of running the commands but the phone is not yet going to accept them. In order to allow that, follow the steps below:

  1. Connect your phone via the USB cable to the desktop computer.

  2. Configure the phone for USB debugging:

    1. Enable USB debugging on the phone in “Settings” > “System” > “Developer Options” > “USB debugging” (there are many options).

      ❌ If you don’t see the “Developer Options”, you have to enable the menu item as described in the previous section to unlock the bootloader.

    2. Authorize the computer for debugging by confirming the dialog on the phone. You can check the check box to make your phone remember the computer but this won’t really matter as you are going to wipe the system clean anyway.

  3. Verify that your computer is allowed to debug on your phone. Assuming you unzipped the platform-tools-latest-linux.zip in ~/Downloads, this is:

    cd ~/Downloads/platform-tools-latest-linux/platform-tools
    ./adb devices
    

    which should print something like this:

    List of devices attached
    * daemon not running; starting now at tcp:5037
    * daemon started successfully
    a573b7c1	device
    

    Note the serial number of the device that you retrieved before (in the example: a573b7c1).

    ❌ If it shows something like:

    List of devices attached
    a573b7c1	no permissions (user in plugdev group; are your udev rules wrong?); see [http://developer.android.com/tools/device.html]
    

    you need to enable USB debugging on your phone. If that doesn’t help, verify that you set the udev rules correctly in Step 3. You might also want to enable file transfer for your USB connection: On the phone, go to “Settings” > “USB preferences” > “Set USB for: File Transfer”. I am not sure anymore from my notes if this was necessary.

    ❌ If it shows something like:

    List of devices attached
    a573b7c1	unauthorized
    

    you need to grant your computer permission to debug (see step 3.2.2).

You have made sure that your phone accepts to be modified through the USB cable and you are ready to get started.

🔓️ Step 5: Unlock the bootloader

Steps 1 to 4 were about the setup. Now you have all the pieces together to begin with the actual installation process:

  1. Reboot into the fastboot mode:

    ./adb reboot bootloader
    

    Your phone is going to restart into a minimalist mode with a kind of console look: White font on black background, navigation through buttons only.

  2. Unlock the bootloader with

    ./fastboot flashing unlock
    

    and follow the onscreen instructions: Select “UNLOCK THE BOOTLOADER” with the volume buttons and confirm with the power button.

    This is going to cause the phone to reboot two times. Don’t interrupt this process. In the end, all data is wiped from the phone and you are back to the initial setup screen of the default OS.

    ⚠️ From the iodéOS installation guide:

    Do not unlock critical partitions (do not execute fastboot flashing unlock_critical)

    I didn’t really see how this is relevant… but … just don’t do it 😏

    ❌ If ./fastboot flashing unlock shows something like

    < waiting for any device >
    

    kill the process with CTRL+C on your keyboard and check connectivity to your computer with

    ./fastboot devices
    

    This should show something like

    a573b7c1	fastboot
    

    If ./fastboot devices shows something like

    no permissions (missing udev rules? user is in the plugdev group); see [http://developer.android.com/tools/device.html]	fastboot
    

    you probably missed on of the previous steps. Also, just try to restart your phone into the fastboot mode again. There are two ways to do that:

    • Select START in the minimalist boot menu on the phone, redo the basic setup (no need for the WiFi) and redo the ./adb reboot bootloader command.
    • Or: Select “Restart bootloader” on the phone directly.

    I am not sure from my notes which route I actually chose. But restarting it somehow helped to properly get into the fastboot mode (or maybe this was to make one of the udev rules effective?).

Your bootloader is now open to modifications which enables the next step to bring iodéOS to your phone.

🚑️ Step 6: Boot into recovery

With the bootloader unlocked, you are free to “flash” files on our phone. Before you can install iodéOS, you must install a temporary “recovery” image.

Section “Temporarily booting a custom recovery using fastboot” in the LineageOS installation guide helped me to get through this. Note that there is no dedicated page of LineageOS for the Fairphone 4 at the moment of this writing.

The steps in detail:

  1. Identify the latest release of iodéOS for the FP4. For that, on your desktop, go to iodéOS' release page on GitHub and search for the latest release that is made for the Fairphone 4. In my case, this was “iodéOS 3.x for Fairphone FP4 ” but for you this might already be a later version, e.g., “iodéOS 4.x”. Make sure to select the latest version of iodéOS and one that is made for the FP4.

  2. On the right release page, download the recovery to your desktop by choosing the .img file with the most recent date in its file name.

    ☝️ In my case, the filename is: iode-3.2-20221014-FP4-recovery.img.

    ☝️ For the next steps, I assume you downloaded this file to folder ~/Downloads.

  3. Boot into fastboot mode again if you are not already there:

    ./adb reboot bootloader
    
  4. Verify again that fastboot can interact with your phone:

    $ ./fastboot devices
    a573b7c1	fastboot
    

    ❌ If you have a different output (apart from the leading device serial number), check that USB debugging is enabled and the computer is trusted by the phone. See the troubleshooting advice in previous steps.

  5. Temporarily flash the downloaded recovery image on “recovery A” and “recovery B” of your device by running these two commands:

    ./fastboot flash recovery_a ~/Downloads/iode-3.2-20221014-FP4-recovery.img
    ./fastboot flash recovery_b ~/Downloads/iode-3.2-20221014-FP4-recovery.img
    

    All fastboot flash commands output something like this if they work as expected:

    Sending 'recovery_a' (98304 KB)                    OKAY [  3.535s]
    Writing 'recovery_a'                               OKAY [  0.456s]
    Finished. Total time: 3.999s
    

    ❌ Probably not relevant here, but I had the following error when flashing the recovery on my Fairphone 3 (so not here!):

    fastboot: error: boot partition is smaller than boot image
    

    In case you fall into this here, the /e/OS’s installation guide suggests to check first which “slot” is used:

    $ fastboot getvar current-slot
    current-slot: b
    Finished. Total time: 0.010s
    

    So here, slot B is used. To resolve the situation, it might help to explicitly specify the slot:

    ./fastboot flash boot_b ~/Downloads/iode-3.2-20221014-FP4-recovery.img
    
  6. Relock the bootloader by flashing the phone with a special file:

    1. Download the file avb_custom_key-FP4.bin from iodéOS release page on GitHub (the same page the recovery image was downloaded from). In this guide, again, you assume the file is downloaded to folder ~/Downloads.

    2. Flash your device with the avb_custom_key you downloaded:

      ./fastboot flash avb_custom_key ~/Downloads/avb_custom_key-FP4.bin
      
  7. Reboot into recovery: In the minimalist screen on the phone, select “Recovery mode” with the volume buttons and confirm with POWER button. This restarts the phone and you end up in a screen with the LineageOS logo and title RECOVERY.

    ❌ What did not work for me is the alternative way to get into recovery mode: With the device powered off, hold Volume Up + POWER and release again when the boot logo appears.

You are now in a special recovery mode that allows us to really install a custom firmware.

📲 Step 7: Install iodéOS

Your phone is now booted into the recovery mode. From here you can finally “sideload”, i.e., install the actual iodéOS.

Again, the LineageOS installation guide contains helpful instructions to make this work. See section “Installing LineageOS from recovery”.

The steps in detail:

  1. Download the most recent flash for FP4 from iodéOS' release page on GitHub (the same page the recovery image was downloaded from). Again, let’s assume the file is downloaded to folder ~/Downloads.

    ☝️ For me the relevant file had the following name: iode-3.2-20221014-FP4.zip

  2. On the phone (still in recovery mode, see the last section), tap “Factory Reset” > “Format data / factory reset” > “Format data”. This takes just 1 second.

    ☝️ Note that this can also be navigated through using the touch screen, not necessarily using the physical buttons.

  3. Return to the main menu with the arrow on the upper left of your screen.

    ❌ Depending on the physical size of your screen (maybe you don’t do this on the FP 4…), the “Back” arrow is not visible. One can still go up with the Volume buttons and confirm with the Power button to go back. This happened to me on the Fairphone 3 for example.

  4. Install the iodéOS (“sideload the flash”?):

    1. Still in the recovery mode on the phone, tap “Apply update” > “Apply from ADB”

    2. Switch to your computer and run:

      ./adb sideload ~/Downloads/iode-3.2-20221014-FP4.zip
      

      which should return something like

      Total xfer: 2.00x
      

      ☝️ This might take 2-3 minutes.

      ❌ If adb returns something unexpected, verify the connection with ./adb devices and follow the troubleshooting advice in previous sections.

  5. On the phone, tap “Back” (the arrow on the top left) and “Reboot system now”.

Nice, iodéOS is installed and we could theoretically stop here. For safety reasons, it is still recommended to do one last step.

🔒️ Step 8: Lock the bootloader

The only small piece missing is to relock the bootloader to increase the safety of your device.

So one last effort:

  1. Set up iodéOS: After your phone has restarted, follow the instructions for the setup. Don’t spend too much time here as user data is going to be wiped once again and you anyway have to go through this wizard again.

  2. You might have to enable USB debugging again on the phone as you did in previous steps:

    1. Enable the developer mode by tapping on “Settings” > “About phone” > “Build number” for seven times (see step 2 for details).
    2. Step 4: Flip the switch in “Settings” > “System” > “Developer Options” > “USB debugging” (see step 4 for details).
    3. On the phone, confirm that you trust the desktop computer trying to connect with it.
  3. Reboot to bootloader by executing this command from your desktop computer:

    ./adb reboot bootloader
    
  4. When the phone is back in the “fastboot mode” with the minimalist menu, run this command from your computer to verify that you are good to relock the bootloader:

    ./fastboot flashing get_unlock_ability
    

    ⚠️ Closely look at the output of this command. If it returns something like

    (bootloader) get_unlock_ability: 0
    OKAY [  0.001s]
    Finished. Total time: 0.001s
    

    so if you see a 0 (for “false”) after the get_unlock_ability, then DON’T CONTINUE! Don’t relock the bootloader, so don’t run fastboot flashing lock as suggested later. If you still do this, YOU RISK MAKING YOUR PHONE UNUSABLE!. More on this on the release page by iodéOS (where you downloaded the recovery image etc., in my case “iodéOS 3.x for Fairphone FP4 ”).

    The above, however, is unlikely to be the case if you followed this guide step by step. The expected output of ./fastboot flashing get_unlock_ability is the following:

    (bootloader) get_unlock_ability: 1
    OKAY [  0.001s]
    Finished. Total time: 0.001s
    

    So if you see a 1 (for “true”) after the get_unlock_ability, you are safe to continue with the next step.

  5. Having checked that ./fastboot flashing get_unlock_ability returns get_unlock_ability: 1, you can now launch a command to relock the bootloader:

    ./fastboot flashing lock
    

    and confirm on the phone by tapping on “LOCK THE BOOTLOADER”.

    ☝️ For me, this resulted in some quick succession of scary looking screens about erasing the system. Just wait for this to finish and you are going to end up happily in a fresh iodé OS.

  6. This time, you are safe to properly set up iodéOS as the user settings are not going to wiped again. So, for example, now you are good to set up the connection to your WiFi. Finish the wizard until you are in your home screen.

  7. Final step: Uncheck OEM unlocking in the Settings!

    1. As before, enable the developer options menu item by tapping “Settings” > “About phone” > “Build number” seven times.
    2. Uncheck “Settings” > “System” > “Developer Options” > “OEM unlocking”.

That’s it, you have installed iodéOS 3.2 on your Fairphone 4 - congrats! 🥳


😱 Addendum

A note to calm your nerves: With the Fairphone 4, you are going to see a strange black screen with white font when powering up your phone saying something like

Your device has loaded a different operating system.

Warning

Following the page linked in the warning , we see that this is a warning by Android saying:

If you changed the operating system on purpose

You can continue using your device. But you acknowledge that your device might not work properly and your data could be exposed to corruption and security risks.

This has also been confirmed by the FP support :

Yes, installing a custom “avb_custom_key” onto Fairphone 4 and locking the bootloader again is possible. FP4 will then verify the integrity of the custom image against the key in “avb_custom_key.”.

However, after locking the bootloader, FP4 will still show a yellow warning message saying: “Your device has loaded a different operating system.”. You can find more details here .

So don’t worry, this is to be expected. It’s a bit annoying because, if you hold the POWER button for too long, this screen interprets it as your wish to pause the startup (this is written in the warning message). So if your phone seems frozen in that screen, just push the POWER button again and the startup should continue as normal.

Note that this seems to be Fairphone 4 specific. On the Fairphone 3 with the same version of iodéOS, I don’t see any such screen.

Follow the breadcrumbs

Subscribe here.