Updates, safety and going back to Android

How the device stays up to date, why a failed start cannot strand you, and every way between Android and Linux.

Updating

The device updates itself from a published release, without a computer. It looks for a new release at start-up and every 6 hours and tells you at login and in mu300-toolkit, but it never installs one by itself.

sudo mu300-update check           # your version and the newest release
sudo mu300-update apply           # system, kernel and boot image; then restart
sudo reboot

The same is in mu300-toolkit under System > Software update. What happens:

  1. Every file is downloaded and checked first; nothing changes before all of them are there.
  2. The new system is unpacked beside the old one and swapped in only at the end, so an interrupted download cannot leave a half-updated system.
  3. Your settings, users, /usr/local, the Wi-Fi and modem files from your device, and the installed extras are carried over. The VPN module is brought to its latest release, its core and its engines as one set.
  4. The kernel and boot image are updated too. A new kernel gets its first starts on the usual attempts, so one that does not start sends the device back to Android on its own.

The kernel can be changed the same way: sudo mu300-update kernel 6.18 (or 5.4, 7.2), then restart. See choosing a kernel.

Updating from v2026.09.27 or older

Fetch the new updater first, then update; do both right after a restart (older boot images can lose mobile data after a few quiet minutes):

sudo curl -fL https://github.com/dikeckaan/mu300-linux/releases/latest/download/mu300-update -o /opt/mu300/bin/mu300-update
sudo mu300-update apply

On OpenWrt, as root:

wget -O /opt/mu300/bin/mu300-update https://github.com/dikeckaan/mu300-linux/releases/latest/download/mu300-update
mu300-update apply

A computer works too: run the installer again and answer update. It reinstalls the systems, writes a fresh boot image and keeps your settings and data.

Packages you installed yourself (apk add, apt install) are not in the release's image. The update lists them, keeps their OpenWrt settings aside so they cannot act without their program, and the new system installs them again at its first boot once it is online. mu300-user-packages status shows what came back (in the control panel: System → Packages after an update); mu300-update apply --no-reinstall skips it. On Ubuntu the apt sources you added (a PPA) are kept too. All of this from v2026.10.20 on.

On Ubuntu with the web panel extra, a new image has no Cockpit in it: the first boot after the update puts it back in the background (from the extra's own copy when it has one, else from Ubuntu's archive once online); mu300-panel status says where it is.

Rolling back

The previous version is kept as <os>.old until you clean it up, and the previous boot image is kept too.

sudo mu300-update rollback        # back to the previous system
sudo mu300-update rollback-boot   # back to the previous kernel and boot image
sudo mu300-update clean           # delete the kept previous version

The safety net

Think of a parachute that opens by itself. Every time the device starts Linux, it uses up one try. About 30 seconds after the USB network and SSH are up, Linux confirms the start and all tries are back. A start that never gets that far (the power goes, the battery runs out, Linux hangs) keeps its try used. When the tries run out, the next start is Android.

What happens when the device starts The device starts Linux as a trial. If Linux comes up, the boot is confirmed and the count of tries is full again. If it does not, one try is used up; when the tries run out, the device starts Android by itself. Power on The bootloader starts Linux and uses up one try Is Linux up within about a minute? USB network and SSH yes Boot confirmed: all tries are back You use Linux no Not confirmed: one try fewer Tries left? yes next start no Android starts by itself Tries: 1 to 6 (5 unless you chose otherwise). Locked Linux never goes back on its own.
  • You choose the number at install, 1 to 6, 5 by default; 6 is the most the bootloader's counter holds.
  • When Linux does not come up at all, the device also returns to Android by itself.
  • Locked Linux turns the parachute off on purpose: the device never goes to Android by itself, not after failed starts and not when the system does not start (it then waits on USB with a telnet shell, where sh /run/to-android goes to Android). The one exception is a new kernel from mu300-update, which still gets the usual attempts for its first starts. Also "Lock Linux" on the control panel's home page.
sudo mu300-next-boot attempts 3  # failed starts before Android, 1 to 6
sudo mu300-next-boot lock        # keep Linux whatever happens
sudo mu300-next-boot unlock      # back to the attempts
sudo mu300-next-boot status

To Android and back

From Linux to Android

sudo mu300-next-boot android
sudo reboot

Or "Switch to Android" on the control panel. Without a computer or a login: cut the power while it is starting, as many times in a row as your attempts (see below).

From Android to Linux

su -c mu300-linux                # in Android: restart into Linux
su -c 'mu300-linux status'       # which system is on which slot

Or the Action button of the "MU300 Linux" module in the Magisk app. The installer adds the module; it writes only the same 32 bytes of misc the installer does.

The control panel warns when band or cell locks are still set before switching to Android, because the modem keeps them in its own memory and Android would use them too. "Reset all to automatic" on the Locks page (unisoc-modem lock reset) clears them.

Switching between the Linux systems themselves: sudo mu300-os ubuntu, openwrt or openwrt-luci, then restart.

Uninstalling

With the device back in Android, from your computer:

./uninstall.sh                # macOS / Linux
.\uninstall.ps1               # Windows (PowerShell)
uninstall.cmd                 # Windows (cmd)

It makes Android the boot system again, restores the second boot partition and erases the Linux filesystem. Your Android data is left alone. If the device is running Linux when you start, it offers to restart it into Android first. You choose how thoroughly to erase:

ChoiceWhat it does
secure (default)overwrites the whole Linux region and checks that it is empty. Takes a few minutes.
quickerases only the filesystem headers; the files stay readable on the flash until the space is reused.
keepleaves the Linux filesystem alone; it simply never starts again.

A Linux filesystem on the SD card gets its own question: erase (the default, overwrites its first 64 MiB) or keep. A card with any other filesystem is never touched. If you shrank userdata on the 32 GB variant, it offers to grow it back; that is off by default, asks twice, and erases Android's data again.

A forgotten password

You do not need to log in to get out. (While Linux is locked, unplugging during start-up does not bring Android back; the README then points to step 2, the computer route.)

  1. Back to Android: unplug the device about ten seconds after it powers on, then plug it in again. Do it as many times in a row as your failed-start number (5 by default). The device sees unfinished starts and falls back to Android by itself.
  2. Set a new password from your computer, without starting Linux. It keeps all your data:
    tools/reset-password.sh            # ubuntu, openwrt or both
  3. Start Linux again with su -c mu300-linux in Android, or restart if Linux is the default.

Running the installer again and choosing update also sets the password you type.