Lineage GSI for Kompakt

How to Install LineageOS 20 GSI on the Kompakt

WARNING This is a fairly extensive guide, please make sure you understand what you are doing before proceeding. It will require you wiping your device and all data. There is a backup tool provided but I won’t be able to help with all the platform and software oddities of the tools used here.

This guide details the process of installing LineageOS 20 (Android 13) GSI build (lineage-20.0-X-UNOFFICIAL-arm64_X.img) on the Mudita Kompakt. This version has been tested and is known to work on a global Kompakt. The latest security patch is from October, 2025.

Note: I’ve tried LineageOS 20 but LineageOS 21 or 22 may work too, but have not been tested. To try a newer version, follow these same steps using the newer image.

This should provide a vanilla Android experience: notifications, configurability, Google app support, and root access if you desire. Third party apps are more likely to work as well.

This is a fairly generic way to do this. If you’re worried, there will be further development down the line to make this a bit easier and more of and “out of the box experience” for Lineage on this device - stay tuned.

Prerequisites

  • A Mudita Kompakt on version 1.1.1
    • Unfortunately, something around the versions Mudita provided after this release make it difficult to install Android GSI. I would love to hear if there’s a solution to this from Mudita. In order to downgrade you will use mtkclient (or adb works too - but since you will want to backup it will be easier)
    • (GitHub - bkerler/mtkclient: MTK reverse engineering and flash tool) and its requirements (Windows, Linux or macOS) installed
  • ADB & Fastboot installed on your computer.
  • The GSI Image: lineage-20.0-X-UNOFFICIAL-arm64_X.img
  • Three files from this drive:
    • 1.1.1_partitions.zip - boot, dtbo, vbmeta, and vendor_boot images
    • 1.1.1_ota.zip - The OTA image you will flash after
    • vbmeta.img.empty - Required to disable verified boot, rename it to vbmeta.img
    • (Patched Magisk boot.img if you want to root with Magisk.)

Step 0: Backup your device and rollback to 1.1.1

This is essential! If anything goes wrong you can always re-write your original firmware, data, IMEI, etc back to your device. I won’t get too deep into the details of how to do it, as a lot of the explanation is included in the GitHub repository.

macOS Detail

If you are on macOS you will need to run the client with sudo like sudo python mtk_gui.py after following all the install requirements and activating the Python virtual environment.

The backup will take a long time if you backup your user partition (expect to wait an hour or so).

Using mtkclient

This is assuming you have updated to a later firmware > 1.1.1.

While I’m not entirely sure if there is any compatibility issue, this partition backup was created on with an NA version (thanks a lot Jordan!). I didn’t have any trouble installing and proceeding with my Kompakt global version. And big thanks to @flapke for the OTA and Magisk boots!

Backing up

  1. Open python mtk_gui.py (or sudo python mtk_gui.py on macOS).
  2. Turn off the Kompakt
  3. Press and hold power and volume down and hold while you plug in a USB-C cable
  4. Wait until the GUI detects the phone and shows the partitions
  5. Go to dump (to backup your phone) and dump all partitions.

Go get a coffee :slight_smile:

Rollback partitions to 1.1.1

  1. Afterwards, unzipped the 1.1.1_partitions.
  2. Instead of selecting all partitions, select only a select few partitions (e.g. boot, dtbo, vbmeta, vendor_boot) to write from mtkclient gui
  3. Write them!
  4. Once done, unplug and power on with the power button + volume up. You should get to a menu that lets you select fastboot mode to boot to.
  5. fastboot reboot recovery to get to recovery
  6. Select “Apply update from ADB”
  7. Flash the OTA update:
    adb sideload ./1.1.1_ota.zip
    

Afterwards on first boot you will see “Your device is corrupt, you need to reset” - this is expected.

Reset it and boot into a vanilla 1.1.1.

Step 1: Enable ADB and OEM Unlocking

Now you’re ready to actually do the install of Lineage.

Because we’ve rolled back to a generic, fresh state, we’ll need to unlock again.

  1. On the device, go to Settings > About phone.
  2. Tap Build number 7 times to enable Developer Options.
  3. Go to System > Developer options.
  4. Enable USB debugging.
  5. Enable OEM unlocking.
    • Note: An internet connection may be required for this option to appear.
    • If the “OEM unlocking” option is missing at the top, try changing the “Smallest width” (DPI) in Developer Options from 360 to 420. You can revert this change after enabling the option. For some reason the settings layout hides it.

Step 2: Unlock Bootloader

  1. Connect the Kompakt to your computer.
  2. Reboot to the bootloader:
    adb reboot bootloader
    
  3. Unlock the device:
    fastboot flashing unlock
    
  4. Press Volume Up on the device to confirm (there will be no visible prompt)

Stay on the same screen and proceed.

Step 3: Flash the GSI

  1. Disable Verified Boot (AVB):
    Flash the empty vbmeta image while in the bootloader to prevent the device from refusing to boot the custom image.

    fastboot --disable-verity --disable-verification flash vbmeta vbmeta.img
    
  2. Reboot to fastbootd:

    fastboot reboot fastboot
    

    The screen should change to a menu with “fastbootd”.

  3. Flash LineageOS:
    Erase the current system partition and flash the new image.

    fastboot erase system
    fastboot flash system lineage-20.0-20251021-UNOFFICIAL-arm64_bvN.img
    
  4. Wipe Data:
    To ensure a clean install and avoid migration issues:

    • Enter recovery.
    • Select Wipe data / factory reset from the fastbootd menu on your device.
    • Or you can fastboot -w to wipe data.
  5. Reboot:
    Select Reboot system now or run:

    fastboot reboot
    

You should now boot to Lineage!

Step 4: Post-Install Setup

Necessary System & Phh Treble Settings

Due to this being a generic build of Lineage, there are a few settings that need to be enabled in order to avoid crashes and more complete functionality. Below are the necessary settings.

System Settings:

  • Notifications > Notification Light > Disabled
  • Accessibility > Color and Motion > Remove animations

Phh Treble Settings:

Go to Settings > Phh Treble Settings to configure these recommended options:

Misc features:

  • Force navigation bar disabled > Enabled
  • Disable “Voice Call In” router > Enabled

IMS features:

  • Install IMS APK for MeditaTek S vendor > Install
  • Force the presence of 4G Calling setting > Enabled

Other Recommendations

Matt has a nice repo where all of the settings they enabled are saved!

Please let us know if you find any issues with these or have any suggestions!

Notable ones:

  • Rotation performance hint instead of touch > Enabled
  • Dynamic FPS > Enabled
  • Mediatek GED KPI support > Enabled
  • Disable SF GL backpressure > Enabled
  • Disable SF HWC backpressure > Enabled

Known Issues

  • eSIMs: Existing eSIMs persist, but adding/removing them is untested.
  • Notification Light: Will crash if activated.

Step 5: Appendix

You can find more support at the Dumbphones & More Discord server where there are more conversations happening about all things Dumbphone.

With full Android there’s a lot you can do depending on whether you installed Lineage with Google apps or not. You might be interested in installing these additional apps or getting root access.

  • Aurora Store: Access apps from the Google Play Store (I would spoof a Redmi 12 4G)
  • Droidify: A modern F-Droid client for open-source apps.

microG and Google support

  • microG: Install here. Setup instructions via their documentation, this will allow you to recieve push notifications from Google service enabled apps.

Root Access

  • Magisk: For root access, patch the boot.img from your stock firmware and flash the resulting magisk_patched.img via fastboot. You can use the included patched boot and flash it via fastboot.

Recovery

If for any reason you’ve run into an issue or you want to roll back to your stock firmware, it’s quite easy to do once you’ve made a backup with mtkclient.

  • Open mtkclient the same way - python mtk_gui.py
  • Go to “Write”
  • Select the folder where you saved the backup (all partitions should then automatically be selected)
  • Click write & wait some time
15 Likes

My modded kompakt runs LineageOS 20 and with the settings mentioned here it has been stable! I have not had any issues. I would suggest using inkos as there is a function you can enable that will do a eink refresh/wipe when you go home which is very handy. I personally dont really have a issues where I need to constantly wipe the screen though.

7 Likes

Is there any pictures of video of how lineage runs on it?

1 Like

Here is a video of my phone on LOS 21. I use Nova launcher and Blaux icons as I like the stark contrast. I have GAPPS (google playstore) installed but one can install LOS without GAPPS as well.

I too wish the phone had a faster CPU.

5 Likes

How much battery life do you get with LOS?

2 Likes

Wow. Scrolling is still horrible. Looks like this phone was made for static screen images only.

1 Like

About 1.5 days.

2 Likes

thanks for the write up, the lineage gsi is surprisingly stable. This convinced me to give the phone another try, I had to shelf it a few months ago because of dropped messages but maybe Lineage will work better!

FYI, since this is conveniently running 1.1.1, I’ll drop some scripts I wrote a few months ago for changing the lock screen. They are crude and I only tested them on 1.1.1 but maybe someone will find them useful

1 Like

I have followed the guide step by step but each time when i reach the end the phone boots to fastboot mode (lineageos is not loading). I triple checked everything and run the process many times but each time same result. Tried other images as well (with gapps for example) and same thing. Any thoughts?

1 Like

Were you able to roll back to Mudita OS 1.1.1? Or did you find any weirdness at any of the steps and do you have an NA version or Global?

1 Like

I rolled back to 1.1.1 from 1.1.4 successfully and followed all steps above. Global version. No matter what i have tried it always boots to fastboot mode instead of LineageOS in the last step. Is there a step missing in the above guide?

1 Like

Is this the screen you are seeing when you reboot?

If so try the Enter Recovery option then use adb command fastboot reboot

1 Like

No, your screenshot has the fastbootd menu, what i am seeing is just the word fastboot and i get this after i select reboot system now (step 3, substep 5 from the guide above). So basically i have finished everyrhing under step 3 and select “reboot system now” in fastbootd. The phone reboots and after a while it just displays fastboot and is stuck there. I can only restart and either enter recovery or go again to fastbootd. Normal reboot will get me again to fastboot, not lineageos. Same result if i simply use fastboot commands (as described above). And yes all the other steps appear to be executed as described above (no errors or issues to speak of). I suspect that either a step is missing in the guide or the problem is somehow the downgrade to 1.1.1 from 1.1.4 although it appears to be working as expected.

1 Like

Ok. Just to try and finally resolve this. I have run the whole procedure from scratch and reach a different error, see below my notes:

  1. Boot with volume down + power and use mtkclient to read all partitions (for backup). The phone is on 1.1.4.
  2. Use mtkclient to write boot.bin from 1.1.1_partitions.zip to boot_a, dtbo.bin to dtbo_a, vbmeta.bin to vbmeta_a and vendor_boot.bin to vendor_boot_a.
  3. Unplug phone and restart by pressing power button + volume up constantly.
  4. Phone restarts to a menu: “Select Boot Mode: [Recovery Mode], [Fastboot Mode], [Normal Boot]”. I connect the phone again to usb and try to run “fastboot reboot recovery” as instructed in step 10 but it fastboot returns “”. So instead I use the phone volume buttons to select “[Recovery Mode]”. The phone shows a dead android with “no command” underneath. I click volume up + power button and then the recovery menu is displayed.
  5. In the Recovery menu I select “Apply update from ADB”. I get a message: “Now send the package you want to apply to the device with “adb sideload ”…”
  6. I run “adb sideload ./1.1.1_ota.zip”. I get an error “adb: sideload connection failed: device unauthorized”. I see other people on the internet having the same issue. To overcome I unplug the phone, plug it in again, and run: “adb kill-server”. Then I run the adb sideload command and it succeeds. On the phone I see: “Install from ADB completed with status 0”.
  7. I unplug the phone and select “Reboot system now” from the Recovery menu. The phone reboots.
  8. The phone reboots again to the “Android Recovery” menu with an error: “Can’t load Android system. Your data may be corrupt”. This is expected. I have two options: “Try again”, “Factory data reset”. I select “Factory data reset” and confirm my selection. I get an “Erasing” screen and then the phone reboots.
  9. The phone reboots to the initial wizard of 1.1.1 (vanilla installation): “Welcome. Thank you for joining us!”. I select “English” as the language, and click “Skip” on the Wifi selection page, I agree on the Legal notes, skip the passcode setup and the quick tutorial. I get a “system update” page with “next” the only option. i click it. “checking MuditaOS k version”. “New version of MuditaOS K is available to download” with “update” as the only option. I click the “back” button instead and return to the main menu. I go to “Settings” → “About” and verify that I am on “MuditaOS K 1.1.1” Build number. Just in case I go into “airplane mode” as well (there is a SIM in my phone that is working).
  10. Click seven times on build number and then go “Developer options”. I enable “USB debugging”, change the width to 420 (for some reason it changes to “421” but, ok). I enable OEM unlocking as well. I connect the phone to the PC.
  11. “Allow USB debugging?” message pops up. I check the checkbox to always allow from this PC and allow it. I run: “adb reboot bootloader” and the phone restarts.
  12. After reboot the phone shows: “=> FASTBOOT mode…” at the bottom of a screen. I run “fastboot flashing unlock” and click the volume up button on the phone. The command on the PC returns: “(bootloader) Start unlock flow. OKAY [ 11.897s]. Finished. Total time: 11.913s.”.
  13. I disable AVB by running: “fastboot --disable-verity --disable-verification flash vbmeta vbmeta.img”. I am using the vbmeta.img.empty file from the Proton drive, renamed to vbmeta.img. The size of the file is 4Kb. The output of the command is: “Rewriting vbmeta struct at offset: 0
    Sending ‘vbmeta_b’ (4 KB) OKAY [ 0.067s]
    Writing ‘vbmeta_b’ OKAY [ 0.009s]
    Finished. Total time: 0.134s”
  14. I run “fastboot reboot fastboot”. The phone reboots to the fastbootd menu.
  15. I run “fastboot erase system”. I returns: “Erasing ‘system_a’ OKAY [ 0.455s]. Finished. Total time: 0.477s”
  16. I run “fastboot flash system fastboot flash system lineage-20.0-20251021-UNOFFICIAL-arm64_bgN-signed.img” (I want gapps). It runs successfully. It says “Sending parse ‘system_a’. Writing ‘system_a’”.
  17. I select “Enter recovery” from the fastbootd menu in the phone (I do not disconnect the phone from the PC). Then select “Wipe data/factory reset” from the Android Recovery menu and confirm my selection.
  18. The phone displays:
    – Wiping data…
    E:[libfs_mgr]Failed to mount /metadata: formatting: Invalid argument
    E:[libfs_mgr]fs_mgr_do_format: Format /dev/block/by-name/md_udc as ‘ext4’
    E:Open failed: /metadata/ota: No such file or directory
    Formatting /data…
    Formatting /metadata…
    Data wipe complete.
  19. I select “Reboot system now” from the Android Recovery menu. The phone reboots.
  20. After reboot I see the Mudita logo and then the message:
    Orange State
    Your device has been unlocked and can’t be trusted
    Your device will boot in 5 seconds.
  21. I see the Mudita logo again and then the message:
    dm-verity corruption
    Your device is corrupt.
    It can’t be trusted and may not work properly.
    Press power button to continue.
    Or, device will power off in 5s
  22. Click the power button the phone restarts and displays the same message as above. I am now stuck.
2 Likes

Is this the issue? vbmeta going to slot B and not slot A? Maybe try fastboot --disable-verity --disable-verification flash vbmeta --slot=all vbmeta.img

1 Like

Ok, I made some progress but we are not there (yet): After running the command above (to apply the “empty” vbmeta to both slots, I get:
Rewriting vbmeta struct at offset: 0
Sending ‘vbmeta_a’ (4 KB) OKAY [ 0.067s]
Writing ‘vbmeta_a’ OKAY [ 0.009s]
Rewriting vbmeta struct at offset: 0
Sending ‘vbmeta_b’ (4 KB) OKAY [ 0.067s]
Writing ‘vbmeta_b’ OKAY [ 0.009s]
Finished. Total time: 0.261s
Then I continue with the other steps but after the final reboot the phone goes automatically in fastboot mode (there is text at the bottom of a black screen saying: “=> FASTBOOT mode…”. I can reboot either by pressing the power button or running: “fastboot reboot” but still it returns to Fastboot mode.

2 Likes

try this

power off the phone, then press and hold the Power button + Volume Up button together until the “Select Boot Mode” screen appears, use Volume Up to highlight “Recovery Mode,” and Volume Down to select “OK,” which leads to the broken robot (no command) screen where you hold Power and briefly press Volume Up to enter the full menu, allowing you to select options like ‘Wipe data/factory reset’ with the Volume keys and Power button to confirm.

1 Like

Just tried this. I go to the Recovery menu as you said (after the broken robot screen) and select the wipe data option and then confirm. I then select reboot now but after reboot it lands into the Fastboot menu option again.

2 Likes

anyone experiencing Failed to find AVB_MAGIC at offset: 0?

Edit: Solved by trying a few times more. Now stuck at
Press power button to continue.
Or, device will power off in 5s

Edit2: Added the empty image to a. Now no corruption notifications, but infinite fastboot as arcana mentioned above.

Edit 3: did the whole thing over again and still ended up stuck at the fastboot mode.

1 Like

Does lineage allow MMS messaging? The reason I ask is because 1.10 apperantly don’t support MMS on Mudita’s SMS app.

1 Like