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:
- Every file is downloaded and checked first; nothing changes before all of them are there.
- 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.
- 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. - 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.
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.
- 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-androidgoes to Android). The one exception is a new kernel frommu300-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:
| Choice | What it does |
|---|---|
| secure (default) | overwrites the whole Linux region and checks that it is empty. Takes a few minutes. |
| quick | erases only the filesystem headers; the files stay readable on the flash until the space is reused. |
| keep | leaves 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.)
- 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.
- Set a new password from your computer, without starting Linux. It keeps all your data:
tools/reset-password.sh # ubuntu, openwrt or both - Start Linux again with
su -c mu300-linuxin Android, or restart if Linux is the default.
Running the installer again and choosing update also sets the password you type.