This post contains some instructions to install GerdaOS onto a Nokia 8110 4G in 2024. I’m writing this down partially for myself and partially for others who may find it useful. Despite the fact that the official gerda.tech instructions are fairly clear and I’m accustomed to flashing Android ROMS1, I got a little overwhelmed at first and it took a few attempts to get it right.
The Nokia 8110 4G is a re-imagining of the classic Nokia 8110 “banana phone” and I picked one up a while ago to help wean me off of my smartphone usage. I’ll write more about my goals and process for that separately. The key reason that I chose the 8110 4G is that I could use it to generate a Wi-Fi hotspot for any emergency situations where my smartphone needed a connection. The tradeoff is that I needed to install an alternative to KaiOS to remove all the proprietary bloatware and spyware that came pre-loaded on the phone.
I found Martin Kaptein’s series of related blog posts very useful in filling out some gaps, which some readers may prefer to my style of writing. Martin claims that some things no longer work but I found that I managed a very similar process relatively smoothly once I understood what I was supposed to do.
- Flashing GerdaOS onto the Nokia 8110, installation tutorial on Martin Kaptein’s blog
- Remove default pre-installed bloatware apps from KaiOS on a Nokia 8110 4G on Martin Kaptein’s blog (this one contains instructions for temporary root access)
- Sideloading and deploying custom apps to KaiOS on Martin Kaptein’s blog
I did encounter a few wrinkles, so I’ll outline how I solved them as I go either by heading them off before they cause you an issue or by letting you know what might occur and how I got it to work for me.
Table of Contents
Overview of the steps
With something like this I always find it useful to have a high-level overview of what we’re doing and the motivation behind some of the steps. I find that this “primes” me, as my brain always wants to know what’s actually going on and thus I understand the actual steps a lot better than if I didn’t have an overview.
The process of installing GerdaOS onto the 8110 4G is very similar to flashing a custom Android ROM onto a contemporary smartphone, only a little bit more involved. If you’ve ever flashed e.g. LineageOS onto a device, this represents a small step up in complexity but after some initial faff it will feel very comfortable and familiar.
Ultimately our goal will be to replace the operating system with GerdaOS, but this requires replacing the stock recovery software with some custom recovery software which is friendly to GerdaOS. Once we’ve got the recovery loaded onto the phone, we can then use it to install GerdaOS.
The main wrinkle in this otherwise smooth plan is that in order to install the custom recovery software we need to achieve root shell access because we can’t overwrite it otherwise. This is the main additional step and represents about half of the work. The best way to achieve root on the device is to sideload an app and that involves installing an older version of the Pale Moon web browser to use its Web IDE features.
So when we put that all together, we get the following:
- Setting up Pale Moon on our computer
- Configuring the phone for USB debugging
- Sideloading “Wallace” to achieve temporary root access
- Overwriting the recovery image via an adb root shell
- Flashing GerdaOS via the recovery image
Things you’ll need
- An old version of Pale Moon. I used 28.6.1 for GNU/Linux
adb
. I already had mine installed from the Devuan GNU/Linux repos- The phone to flash and a suitable USB cable
- A copy of each Gerda Recovery and the System Installer from Gerda.tech (in the Get GerdaOS section). These are zip files.
- Wallace, a KaiOS app used to achieve a temporary root shell. Download it from the Gerda.tech page.
You will need access to a terminal for this in order to use adb
to speak to the phone, and ultimately get root shell access. Going forward I will assume a GNU/Linux setup for a few things but if you know your platform you should be able to make it work.
Installing Pale Moon
The first step is to install Pale Moon on our computer. Sadly, not just any version of Pale Moon will do as we need to use the Web IDE to do our sideloading for us and newer version of Pale Moon no longer contain Web IDE.
My understanding is that a good bet is to go for Pale Moon version 28.6.1
, which you can find on the Pale Moon archives below:
Download the correct one for your platform, which for me was the x86_64.tar.bz2
file. I downloaded and extracted it to $HOME/opt/palemoon
.
Try to run it by executing the palemoon
binary. This is where I encountered my first error, copied below:
XPCOMGlueLoad error for file /home/matt/opt/palemoon/libxul.so:
libdbus-glib-1.so.2: cannot open shared object file: No such file or directory
Couldn't load XPCOM.
The solution is to install libdbus-glib
. At first I was a bit concerned because the libd
in the name made me think it had a dependency on systemd — which I don’t have installed — but luckily it’s not the case.
Your mileage may vary by distro, but I overcame this error on Devuan GNU/Linux daedalus by installing the libdbus-glib-1-2
package. Pale Moon opened without complaint after that and I breathed a sigh of relief.
Configuring the phone for USB debugging
Moving onto the actual phone now. We need to enable debugging mode to get it to speak to adb
and Pale Moon so we can sideload our app and get temporary root access.
Assuming you still have a stock KaiOS system installed, you can enter debug mode by using the keypad and entering special sequences of characters. Enter the following:
*#*#33284#*#*
If you’re paying attention, you’ll see that 33284
correlates to DEBUG
on the phone’s keypad. Once you’ve entered this sequence and hit dial you should see a little “bug” icon appear in the status bar meaning you’ve been successful.
Next, it’s a good idea to also enable USB storage. This heads off a few potential errors down the road. You can enable this in the settings menu.
Connecting the phone via adb
It’s at this point you should connect the phone to your computer via USB cable. Once you’ve done that, check you can see the device by running adb devices
.
Presuming success, you can now interact with the device much the same as you would if it were an Android device i.e. using adb push
to push files on to the sdcard, adb pull
to get them off etc. You can get a shell by running adb shell
, but it’s not (yet) a root shell so it isn’t particularly exciting or useful. If you open a shell, exit it.
An aside: making backups of stuff off the phone
It might be possible that you’ve already got some apps or data on the phone which you want to keep. If so, you should back these up by using adb pull
to back up relevant folders.
I didn’t do this because I was flashing a new/factory reset phone and my goal with the phone is to keep it as “dumb” as possible. Martin’s blog post has a good section on why and how you might do this, such as sideloading apps from the KaiOS store which you’ll lose access to otherwise.
- Making backups of apps from the GerdaOS flashing tutorial on Martin Kaptein’s blog
Sideloading Wallace to achieve a root shell
Apparently there’s a few ways to get temporary root access on KaiOS depending on the version of the firmware you’ve got installed. However, the only way I was able to do this consistently is through the Wallace app. This is a delightfully cheesy app whose entire purpose is to get you root access on your KaiOS device.
Because it’s not on the KaiOS store for obvious reasons we’re going to sideload it via Pale Moon’s Web IDE.
With your phone still connected, in a terminal run the following command:
adb forward tcp:6000 localfilesystem:/data/local/debugger-socket
This heads off an error when connecting the Web IDE to your phone apparently.
Fire up Pale Moon and use the menus to navigate to Tools -> Web Developer -> WebIDE
. Click the Remote Runtime button and check that the dialog box says localhost:6000
and then connect.
Next, download the Wallace application as linked in a previous section. It’s a zip file so extract it wherever.
Inside of Pale Moon again, click Open Packaged Web App and head to the directory of the unzipped application. You’re looking for the folder where the manifest.webapp
file is located.
The interface of the Web IDE will change to give you some details of the application. There may be a green circle next to the name of the application but this isn’t necessary; mine worked fine with an orange circle. If you hit the play button (the triangle one), Web IDE will deploy the app to the device and start running it.
When Wallace loads it presents a screen saying root me
and you will need to confirm by pressing the centre DPAD button. The screen will go black for a moment and then an edgy hacker face (apparently taken from Bladerunner) will fade into view. Once that’s finished fading in, you’re rooted!
We’re about halfway through the process now.
Using a root shell to install Gerda Recovery
Now that we have rooted the phone we can install the Gerda Recovery system by using a root shell from adb
. This requires that the phone is still connected via USB.
From your terminal, run the following:
$ adb shell
You should enter a root shell, which you can confirm if the prompt looks like this:
root@Nokia 8110 4G:/ #
The job here is to use our root privileges to overwrite the recovery software with Gerda Recovery. To do this we trust our old friend dd
. Inside of the root shell run the following command:
dd if=/sdcard/recovery-8110.img of=/dev/block/bootdevice/by-name/recovery bs=2048
Now just wait for dd
to finish its magic.
Rebooting to Gerda Recovery to install GerdaOS
Once dd
has done its thing, reboot the phone into recovery by turning it off and then holding DPAD UP when turning it back on. Inside the recovery menu, you can navigate using the DPAD and you select options by using the power key.
The gerda.tech website lists a number of options to install the main system, including building it from source. I have found that is a lot of faff you probably don’t need, so I advise you use the pre-built image linked from the gerda.tech site which is what I did.
This leaves two options really. The first is installing via the SD card, and the second is sideloading via adb
. Martin Kaptein went with the SD card route but this didn’t work for me. No matter how or when I loaded the gerda-os system installer zip file on to the SD card via adb
, Gerda Recovery failed to mount the SD card and aborted the install.
That left me with sideloading. Initially I thought I was scuppered because this also failed for me. The way sideloading works is that you choose this option on Gerda Recovery and — while the phone is still connected via USB! — run adb sideload $name-of-file
on your computer.
As noted, this failed for me until I rebooted the phone to KaiOS then rebooted back to Gerda Recovery. I’m not sure why, but afterwards running adb sideload
worked like a charm2. No matter how I tried I couldn’t get the internal SD Card to mount in recovery mode. Martin Kaptein mentioned that you need a blank SD card, so perhaps that was my missing piece. I’d think it odd if that’s the case because I could adb push $file /sdcard/
fine, and my understanding is that these systems abstract the internal storage under /sdcard/
as well. Whatever the issue with the SD cards, I did install GerdaOS successfully via sideloading it. It made me feel like a hacker.
Don’t reboot the phone yet, though! There’s one final step.
Factory reset
The final step is to perform a factory reset. This is listed as mandatory on both gerda.tech as well as Martin Kaptein’s blog. I’m not sure what would go wrong if you didn’t do this, but I suspect that it would do something like wiping GerdaOS and reinstalling KaiOS.
Select the Wipe Data/Factory Resest
option from the recovery and perform it. Once it’s done, you can reboot into GerdaOS and enjoy your private and lean feature phone.
Summary
In this post we replaced the data-leaking, bloated, install of KaiOS on a Nokia 8110 4G with GerdaOS. We achieved this by getting a temporary root shell on the device which allowed us to install a custom recovery system and then used that to install GerdaOS.