Skip to content

Releases: dikeckaan/mu300-linux

MU300 Linux v2026.10.16

Choose a tag to compare

@dikeckaan dikeckaan released this 10 Oct 07:51
5582413

What's new

  • The VPN is a module of its own: dikeckaan/mu300-linux-vpn. mu300-vpn, its profiles and engines (Xray, hev-socks5-tunnel, sing-box; mihomo as an add-on) moved out of the images into one package that installs on Ubuntu and OpenWrt, from the device's own connection (sudo mu300-extra install vpn) or from a file (sudo mu300-extra install vpn --from mu300-linux-vpn.tar.gz). The kernel support (TUN, WireGuard, nftables) stays in mu300-linux. The VPN now gets its own releases, without waiting for a mu300-linux release.
  • Updating from an earlier release keeps your VPN. mu300-update apply installs the module and links it into the new systems before the reboot; your profiles and settings stay where they are. If the device uses the VPN and the module cannot be downloaded, the update stops before it changes anything and says how to copy the module to the device (/mnt/mu300-disk/.mu300-update/vpn/, or MU300_VPN_MODULE=FILE).
  • Fail closed without the module. On a system whose VPN is on with its kill switch and whose module is missing, mobile data and the Wi-Fi client stay down instead of connecting in the clear; the panel and mu300-toolkit say why and offer the install. install.sh and install.ps1 default the VPN question to yes when the system they replace uses the VPN, and refuse "no" when its kill switch is on. A Magisk zip keeps a module already on the device, and refuses to replace a system whose kill switch is on when there is none.

Tested on the U30 Air (OpenWrt, kernel 7.2: update from v2026.10.15 with the VPN on, same exit IP after the reboot; the update refused while no module could be had) and on the F50 (Ubuntu 24.04, kernel 6.18: update, the module installed online and from a file, removed, the kill switch failing closed).

Everything of v2026.10.15 is in here too: Locked Linux, the SMS forwarding hook, the IPv6 relay after the carrier renumbers, SMS messages moving off the SIM.

Known issues

  • A rare silent hard hang at boot on 6.18 (about 1 boot in 20): the device falls back to Android (unless Linux is locked: then it boots Linux again); su -c mu300-linux in Android brings Linux back (docs/FINDINGS.md 31m).
  • Under sustained Wi-Fi load the vendor driver logs edma_pending_q_buffer full / push link fail while it drops packets; the transfer completes (the same on v2026.10.11).
  • Updating from v2026.10.14 or older prints "could not arm the Linux slot for a trial": the older mu300-next-boot does not know --trial. The fallback to Android after failed boots still works; v2026.10.15 and newer do not print it.
  • Suspend with the hotspot up returns at once (hostapd's alarm timer). Some carriers drop UDP and DPI-block OpenVPN.

Prebuilt images for ./install.sh (ZTE F50 / MU300 and ZTE U30 Air; the installer recognises which). Check your device
first with ./install.sh --check.

file contents
mu300-kernel.tar.gz Linux 5.4.254 Image and modules (with the U30 Air's own in modules-u30air/), static busybox and logdw for the boot image, and the generic boot ramdisk segment mu300-update uses
mu300-kernel-6.18.tar.gz mainline Linux 6.18 (longterm) for mu300-update kernel 6.18: Image, modules, generic boot ramdisk segment
mu300-kernel-7.2.tar.gz mainline Linux 7.2 (newest stable) for mu300-update kernel 7.2: the same parts
mu300-ubuntu-rootfs.tar.gz Ubuntu 24.04 LTS root filesystem
mu300-ubuntu-26.04-rootfs.tar.gz Ubuntu 26.04 LTS root filesystem
mu300-openwrt-rootfs.tar.gz OpenWrt 25.12.5 root filesystem
mu300-openwrt-luci-rootfs.tar.gz OpenWrt 25.12.5 with the MU300 control panel (luci-app-mu300 by kanoqwq, Aurora theme by eamonxg)
mu300-extra-lang.tar.gz LuCI and the MU300 panel in more languages (OpenWrt only; English, Turkish and Chinese are in the images): mu300-extra install lang on the device, or System > Languages in the panel; LuCI's catalogs from the OpenWrt 25.12.5 feed, the panel's AI-translated
mu300-update the on-device updater of this release (mu300-update apply switches to it before it changes anything)
(the VPN) not part of this release: the VPN toolkit (mu300-vpn with Xray-core, hev-socks5-tunnel, sing-box; mihomo as vpn-mihomo) is the module of https://github.com/dikeckaan/mu300-linux-vpn - mu300-extra install vpn on the device, or the installer's question, takes its latest release

The images contain no proprietary files: the installer pulls the Wi-Fi/Bluetooth firmware and the Android
modem/GPU userspace from your own device and adds them during installation.

Built from 5582413 with kernel/build-all.sh and tools/make-release.sh.
Corresponding source (GPL): kernel https://github.com/Enceka/android_kernel_zte_ums9620_mifi_u30air/tree/b50db5b6224c11db42a246e8fcdaad1e1d59f478 ,
Wi-Fi/Bluetooth/Mali modules https://github.com/realme-kernel-opensource/realme_C51_C53_Narzo-N53-AndroidT-kernel-source/tree/4381465ccaf87fcf3215b9cd42f4a685df40e5e0 ,
patches in kernel/patches. Ubuntu, OpenWrt and busybox packages come from their distributions' archives;
Aurora (luci-theme-aurora 1.4.0) from https://github.com/eamonxg/luci-theme-aurora/releases/tag/v1.4.0.

MU300 Linux v2026.10.15

Choose a tag to compare

@dikeckaan dikeckaan released this 09 Oct 18:01
52093b2

What's new

  • Locked Linux. mu300-next-boot lock (or "Lock Linux" on the panel's home page) keeps Linux for good: the device never goes to Android by itself, not after failed boots 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). Android is only by hand - "Switch to Android" on the panel or mu300-next-boot android. A new kernel from an update still gets its first boots on trial, so a kernel that does not start falls back, and the first good boot locks again. mu300-next-boot unlock goes back to the failed-boot attempts (README "Locked Linux"). Off by default.
  • SMS forwarding hook. Every received message that lands in the panel's SMS store runs /etc/mu300/sms-hook when it is executable, with SMS_FROM, SMS_DATE, SMS_TEXT and SMS_ID - forward to PushPlus, a webhook or Telegram from there (#70). On openwrt-luci use it instead of sms watch, which reads the SIM the pool now empties.
  • IPv6 relay after the carrier renumbers: every /64 the cellular bearer holds is routed to the LAN, not only the first one, and a /64 that left the bearer loses its route - clients on the new prefix no longer lose IPv6 until a WAN restart (#87; the old prefix lingering on clients is the relay's and is still open).

Everything of v2026.10.14 is in here too: SMS messages move off the SIM into the panel's store, rollback-boot brings back the modules of the image it restores, and before that the VPN profiles, the fixes from users' reports, and the OpenWrt package updates.

Known issues

  • A rare silent hard hang at boot on 6.18 (about 1 boot in 20): the device falls back to Android (unless Linux is locked: then it boots Linux again); su -c mu300-linux in Android brings Linux back (docs/FINDINGS.md 31m).
  • Under sustained Wi-Fi load the vendor driver logs edma_pending_q_buffer full / push link fail while it drops packets; the transfer completes (the same on v2026.10.11).
  • Suspend with the hotspot up returns at once (hostapd's alarm timer). Some carriers drop UDP and DPI-block OpenVPN.

Prebuilt images for ./install.sh (ZTE F50 / MU300 and ZTE U30 Air; the installer recognises which). Check your device
first with ./install.sh --check.

file contents
mu300-kernel.tar.gz Linux 5.4.254 Image and modules (with the U30 Air's own in modules-u30air/), static busybox and logdw for the boot image, and the generic boot ramdisk segment mu300-update uses
mu300-kernel-6.18.tar.gz mainline Linux 6.18 (longterm) for mu300-update kernel 6.18: Image, modules, generic boot ramdisk segment
mu300-kernel-7.2.tar.gz mainline Linux 7.2 (newest stable) for mu300-update kernel 7.2: the same parts
mu300-ubuntu-rootfs.tar.gz Ubuntu 24.04 LTS root filesystem
mu300-ubuntu-26.04-rootfs.tar.gz Ubuntu 26.04 LTS root filesystem
mu300-openwrt-rootfs.tar.gz OpenWrt 25.12.5 root filesystem
mu300-openwrt-luci-rootfs.tar.gz OpenWrt 25.12.5 with the MU300 control panel (luci-app-mu300 by kanoqwq, Aurora theme by eamonxg)
mu300-extra-vpn.tar.gz the VPN engines, not part of the images: mu300-extra install vpn on the device (or the installer's question) puts them on the Linux partition; Xray-core 26.3.27, hev-socks5-tunnel 2.17.1, sing-box 1.14.1
mu300-extra-vpn-mihomo.tar.gz mihomo (Clash.Meta) 1.19.32, the engine of mu300-vpn's mihomo profiles (Clash/mihomo YAML subscriptions): mu300-extra install vpn-mihomo on the device (mu300-vpn fetches it itself when a mihomo profile is turned on)
mu300-extra-lang.tar.gz LuCI and the MU300 panel in more languages (OpenWrt only; English, Turkish and Chinese are in the images): mu300-extra install lang on the device, or System > Languages in the panel; LuCI's catalogs from the OpenWrt 25.12.5 feed, the panel's AI-translated
mu300-update the on-device updater of this release (mu300-update apply switches to it before it changes anything)

The images contain no proprietary files: the installer pulls the Wi-Fi/Bluetooth firmware and the Android
modem/GPU userspace from your own device and adds them during installation.

Built from 52093b2 with kernel/build-all.sh and tools/make-release.sh.
Corresponding source (GPL): kernel https://github.com/Enceka/android_kernel_zte_ums9620_mifi_u30air/tree/b50db5b6224c11db42a246e8fcdaad1e1d59f478 ,
Wi-Fi/Bluetooth/Mali modules https://github.com/realme-kernel-opensource/realme_C51_C53_Narzo-N53-AndroidT-kernel-source/tree/4381465ccaf87fcf3215b9cd42f4a685df40e5e0 ,
patches in kernel/patches. Ubuntu, OpenWrt and busybox packages come from their distributions' archives;
sing-box from https://github.com/SagerNet/sing-box/releases, Xray from https://github.com/XTLS/Xray-core/releases,
hev-socks5-tunnel from https://github.com/heiher/hev-socks5-tunnel/releases,
mihomo from https://github.com/MetaCubeX/mihomo/releases,
Aurora (luci-theme-aurora 1.4.0) from https://github.com/eamonxg/luci-theme-aurora/releases/tag/v1.4.0.

MU300 Linux v2026.10.14

Choose a tag to compare

@dikeckaan dikeckaan released this 09 Oct 11:51
a5da67f

What's new

  • SMS: received messages move off the SIM into the panel's store. The SIM holds a few dozen messages and a full one takes no more, so new messages - and the later parts of long ones - were lost. mu300-sms sync (run by mu300-smsd on every new message) now deletes from the SIM what it has stored in /etc/mu300/sms-pool, each slot only after the copy is on the disk and only while it still holds the message that was stored; the parts of a long message stay until it is whole. On a full SIM (35/35) the first sync frees it, and parts that were waiting arrive.
  • mu300-update rollback-boot brings back the kernel modules of the image it restores. Two builds of one kernel release (6.18.55 of two releases) share the modules directory; rolling back left the old kernel with the new modules, and such a device did not start Linux (it fell back to Android). The replaced set is now kept with the previous boot image and restored with it, also when writing a new image fails.

Everything of v2026.10.13 is in here too: VPN profiles and five engines behind mu300-vpn, the three fixes from users' reports (docs/FINDINGS.md 38), OpenWrt images with the feed's package updates, and the stock trustos image moved to the Internet Archive.

Known issues

  • A rare silent hard hang at boot on 6.18 (about 1 boot in 20): the device falls back to Android; su -c mu300-linux there brings Linux back (docs/FINDINGS.md 31m).
  • Under sustained Wi-Fi load the vendor driver logs edma_pending_q_buffer full / push link fail while it drops packets its queue to the chip cannot take; the transfer completes (measured the same on v2026.10.11).
  • Suspend with the hotspot up returns at once (hostapd's alarm timer). Some carriers drop UDP and DPI-block OpenVPN.

Prebuilt images for ./install.sh (ZTE F50 / MU300 and ZTE U30 Air; the installer recognises which). Check your device
first with ./install.sh --check.

file contents
mu300-kernel.tar.gz Linux 5.4.254 Image and modules (with the U30 Air's own in modules-u30air/), static busybox and logdw for the boot image, and the generic boot ramdisk segment mu300-update uses
mu300-kernel-6.18.tar.gz mainline Linux 6.18 (longterm) for mu300-update kernel 6.18: Image, modules, generic boot ramdisk segment
mu300-kernel-7.2.tar.gz mainline Linux 7.2 (newest stable) for mu300-update kernel 7.2: the same parts
mu300-ubuntu-rootfs.tar.gz Ubuntu 24.04 LTS root filesystem
mu300-ubuntu-26.04-rootfs.tar.gz Ubuntu 26.04 LTS root filesystem
mu300-openwrt-rootfs.tar.gz OpenWrt 25.12.5 root filesystem
mu300-openwrt-luci-rootfs.tar.gz OpenWrt 25.12.5 with the MU300 control panel (luci-app-mu300 by kanoqwq, Aurora theme by eamonxg)
mu300-extra-vpn.tar.gz the VPN engines, not part of the images: mu300-extra install vpn on the device (or the installer's question) puts them on the Linux partition; Xray-core 26.3.27, hev-socks5-tunnel 2.17.1, sing-box 1.14.1
mu300-extra-vpn-mihomo.tar.gz mihomo (Clash.Meta) 1.19.32, the engine of mu300-vpn's mihomo profiles (Clash/mihomo YAML subscriptions): mu300-extra install vpn-mihomo on the device (mu300-vpn fetches it itself when a mihomo profile is turned on)
mu300-extra-lang.tar.gz LuCI and the MU300 panel in more languages (OpenWrt only; English, Turkish and Chinese are in the images): mu300-extra install lang on the device, or System > Languages in the panel; LuCI's catalogs from the OpenWrt 25.12.5 feed, the panel's AI-translated
mu300-update the on-device updater of this release (mu300-update apply switches to it before it changes anything)

The images contain no proprietary files: the installer pulls the Wi-Fi/Bluetooth firmware and the Android
modem/GPU userspace from your own device and adds them during installation.

Built from a5da67f with kernel/build-all.sh and tools/make-release.sh.
Corresponding source (GPL): kernel https://github.com/Enceka/android_kernel_zte_ums9620_mifi_u30air/tree/b50db5b6224c11db42a246e8fcdaad1e1d59f478 ,
Wi-Fi/Bluetooth/Mali modules https://github.com/realme-kernel-opensource/realme_C51_C53_Narzo-N53-AndroidT-kernel-source/tree/4381465ccaf87fcf3215b9cd42f4a685df40e5e0 ,
patches in kernel/patches. Ubuntu, OpenWrt and busybox packages come from their distributions' archives;
sing-box from https://github.com/SagerNet/sing-box/releases, Xray from https://github.com/XTLS/Xray-core/releases,
hev-socks5-tunnel from https://github.com/heiher/hev-socks5-tunnel/releases,
mihomo from https://github.com/MetaCubeX/mihomo/releases,
Aurora (luci-theme-aurora 1.4.0) from https://github.com/eamonxg/luci-theme-aurora/releases/tag/v1.4.0.

MU300 Linux v2026.10.13

Choose a tag to compare

@dikeckaan dikeckaan released this 09 Oct 09:29
bfd8c6e

What's new

  • VPN profiles and five engines behind one command. mu300-vpn keeps profiles now (mu300-vpn profile import takes a VLESS/VMess/Trojan/Shadowsocks link, a raw Xray or sing-box JSON, a Clash/mihomo YAML, a WireGuard .conf or an OpenVPN .ovpn - as a file, or from stdin with - so nothing is left on the disk; use switches, check validates, export gives the file back) and runs each on its engine - Xray, sing-box, mihomo (mu300-extra install vpn-mihomo), WireGuard, OpenVPN - with the same kill switch, the same routes and Tailscale-through-the-tunnel for all of them. Your existing vpn.conf becomes the legacy profile on the first run; nothing changes until you add another. Raw configs never reach an engine as written: they are parsed, held to an allowlist and re-emitted, every listener on loopback, no control API of any kind (docs/FINDINGS.md 26f, README "VPN").
  • Three fixes from your reports (docs/FINDINGS.md 38): the installer no longer hangs on a device whose partition table reaches the end of the eMMC (#43, #52, #65; uninstall.sh, reset-password.sh and both PowerShell scripts too); on OpenWrt the RNDIS port joins the bridge before the LAN address is taken off it, so a USB host and the Wi-Fi clients get served (#45); on the 5.4 kernel the firewall's first ruleset has the LAN and the wan masquerade, and the reload that every ifup triggers no longer fails on the flowtable (#67, #61).
  • OpenWrt images carry the feed's package updates of the build day: LuCI 26.280, mbedtls 3.6.7, the 2026-08 CA bundle, iwinfo, ucode, cgi-io - what the package manager used to list as updates on the first look.
  • The stock trustos image left the repository: it is on the Internet Archive now (https://archive.org/details/zte-f50-mu300-trustos-ZYV1.0.0B09, same file, same sha256), stock/README.md has the hash and the restore steps.
  • Releases can be built on GitHub Actions (maintainers: Actions → Release; docs/BUILD.md).

Known issues

  • A rare silent hard hang at boot on 6.18 (about 1 boot in 20): the device falls back to Android; su -c mu300-linux there brings Linux back (docs/FINDINGS.md 31m).
  • Suspend with the hotspot up returns at once: hostapd's 3 s alarm timer refuses the sleep. Take the hotspot down first.
  • Some carriers drop UDP and DPI-block OpenVPN, so WireGuard and OpenVPN profiles may never handshake on them; the TCP-based engines (Xray, sing-box, mihomo) do (docs/FINDINGS.md 26f).
  • On 5.4 a firewall reload that is not an ifup's (saved in LuCI, fw4 reload, mu300-vpn's own) still fails while the flowtable is there: nft delete flowtable inet fw4 ft; fw4 reload.

Prebuilt images for ./install.sh (ZTE F50 / MU300 and ZTE U30 Air; the installer recognises which). Check your device
first with ./install.sh --check.

file contents
mu300-kernel.tar.gz Linux 5.4.254 Image and modules (with the U30 Air's own in modules-u30air/), static busybox and logdw for the boot image, and the generic boot ramdisk segment mu300-update uses
mu300-kernel-6.18.tar.gz mainline Linux 6.18 (longterm) for mu300-update kernel 6.18: Image, modules, generic boot ramdisk segment
mu300-kernel-7.2.tar.gz mainline Linux 7.2 (newest stable) for mu300-update kernel 7.2: the same parts
mu300-ubuntu-rootfs.tar.gz Ubuntu 24.04 LTS root filesystem
mu300-ubuntu-26.04-rootfs.tar.gz Ubuntu 26.04 LTS root filesystem
mu300-openwrt-rootfs.tar.gz OpenWrt 25.12.5 root filesystem
mu300-openwrt-luci-rootfs.tar.gz OpenWrt 25.12.5 with the MU300 control panel (luci-app-mu300 by kanoqwq, Aurora theme by eamonxg)
mu300-extra-vpn.tar.gz the VPN engines, not part of the images: mu300-extra install vpn on the device (or the installer's question) puts them on the Linux partition; Xray-core 26.3.27, hev-socks5-tunnel 2.17.1, sing-box 1.14.1
mu300-extra-vpn-mihomo.tar.gz mihomo (Clash.Meta) 1.19.32, the engine of mu300-vpn's mihomo profiles (Clash/mihomo YAML subscriptions): mu300-extra install vpn-mihomo on the device (mu300-vpn fetches it itself when a mihomo profile is turned on)
mu300-extra-lang.tar.gz LuCI and the MU300 panel in more languages (OpenWrt only; English, Turkish and Chinese are in the images): mu300-extra install lang on the device, or System > Languages in the panel; LuCI's catalogs from the OpenWrt 25.12.5 feed, the panel's AI-translated
mu300-update the on-device updater of this release (mu300-update apply switches to it before it changes anything)

The images contain no proprietary files: the installer pulls the Wi-Fi/Bluetooth firmware and the Android
modem/GPU userspace from your own device and adds them during installation.

Built from bfd8c6e with kernel/build-all.sh and tools/make-release.sh.
Corresponding source (GPL): kernel https://github.com/Enceka/android_kernel_zte_ums9620_mifi_u30air/tree/b50db5b6224c11db42a246e8fcdaad1e1d59f478 ,
Wi-Fi/Bluetooth/Mali modules https://github.com/realme-kernel-opensource/realme_C51_C53_Narzo-N53-AndroidT-kernel-source/tree/4381465ccaf87fcf3215b9cd42f4a685df40e5e0 ,
patches in kernel/patches. Ubuntu, OpenWrt and busybox packages come from their distributions' archives;
sing-box from https://github.com/SagerNet/sing-box/releases, Xray from https://github.com/XTLS/Xray-core/releases,
hev-socks5-tunnel from https://github.com/heiher/hev-socks5-tunnel/releases,
mihomo from https://github.com/MetaCubeX/mihomo/releases,
Aurora (luci-theme-aurora 1.4.0) from https://github.com/eamonxg/luci-theme-aurora/releases/tag/v1.4.0.

MU300 Linux v2026.10.12

Pre-release

Choose a tag to compare

@dikeckaan dikeckaan released this 09 Oct 07:18
94e71e2

Superseded by v2026.10.13 (same kernels; the OpenWrt images there carry the feed's package updates). Kept as a prerelease. A report of sprd-wlan TX-queue messages on this release was looked into on 2026-10-09: the same messages appear under load on v2026.10.11 and v2026.10.13 alike (the vendor driver dropping packets while its queue to the chip is full; the transfer completes), so they are not a regression of these releases.

What's new

  • The U30 Air charges on the mainline kernels: a driver for its bq256xx charger IC. Under 6.18 and 7.2 the battery never charged before (the IC ran on its power-on defaults and was never told to); it does now, and the panel shows the capacity correctly.
  • Power profiles (mu300-power, and System → Power in the panel): with nobody connected for N minutes the hotspot, the modem (EN-DC off, LTE only, or the radio off) and the LEDs go down; the Wi-Fi key, a computer on USB or a Wi-Fi client wakes everything. A boot the charger started stays a quiet charging boot until the Wi-Fi key is pressed; a battery temperature guard and an optional 80 % charge limit protect the U30 Air's battery. Measured on the U30 Air: 0.97 W idle with everything on → 0.85 W with the LEDs off → 0.45 W with the hotspot off → 0.33 W LTE-only. The F50 has no battery, and mu300-power no longer shows the fuel gauge's made-up one.
  • Tickless kernel and system suspend on 6.18/7.2: NO_HZ_IDLE, and echo mem > /sys/power/state puts the AP to sleep through PSCI while the modem keeps running (experimental; sleep only with the hotspot down, see Known issues; docs/FINDINGS.md 37). Suspend-safe PCIe, WCN and PMIC watchdog drivers.
  • TTL control that keeps the fast path: mu300-ttl set 64 is a tc rule on the mainline kernels, so flow offloading stays on (nftables on 5.4); mu300-ttl off removes it. New Cellular → TTL page in the panel.
  • README and FINDINGS refreshed - what the project is and does today, checked against the code - and a disclaimer: this is a hobby project, at your own risk.
  • mu300-ussd: a reply timer fix (a budget of T seconds is at least T seconds).

Known issues

  • A rare silent hard hang at boot on 6.18 (about 1 boot in 20): the device falls back to Android; su -c mu300-linux there brings Linux back (docs/FINDINGS.md 31m).
  • Suspend with the hotspot up returns at once: hostapd's 3 s alarm timer (and the Wi-Fi chip's WAKE# line) refuse the sleep. Take the hotspot down first.
  • Some carriers block UDP, so OpenVPN and other UDP tunnels may not pass; the TCP-based engines (Xray, sing-box) do.

Prebuilt images for ./install.sh (ZTE F50 / MU300 and ZTE U30 Air; the installer recognises which). Check your device
first with ./install.sh --check.

file contents
mu300-kernel.tar.gz Linux 5.4.254 Image and modules (with the U30 Air's own in modules-u30air/), static busybox and logdw for the boot image, and the generic boot ramdisk segment mu300-update uses
mu300-kernel-6.18.tar.gz mainline Linux 6.18 (longterm) for mu300-update kernel 6.18: Image, modules, generic boot ramdisk segment
mu300-kernel-7.2.tar.gz mainline Linux 7.2 (newest stable) for mu300-update kernel 7.2: the same parts
mu300-ubuntu-rootfs.tar.gz Ubuntu 24.04 LTS root filesystem
mu300-ubuntu-26.04-rootfs.tar.gz Ubuntu 26.04 LTS root filesystem
mu300-openwrt-rootfs.tar.gz OpenWrt 25.12.5 root filesystem
mu300-openwrt-luci-rootfs.tar.gz OpenWrt 25.12.5 with the MU300 control panel (luci-app-mu300 by kanoqwq, Aurora theme by eamonxg)
mu300-extra-vpn.tar.gz the VPN engines, not part of the images: mu300-extra install vpn on the device (or the installer's question) puts them on the Linux partition; Xray-core 26.3.27, hev-socks5-tunnel 2.17.1, sing-box 1.14.1
mu300-extra-lang.tar.gz LuCI and the MU300 panel in more languages (OpenWrt only; English, Turkish and Chinese are in the images): mu300-extra install lang on the device, or System > Languages in the panel; LuCI's catalogs from the OpenWrt 25.12.5 feed, the panel's AI-translated
mu300-update the on-device updater of this release (mu300-update apply switches to it before it changes anything)

The images contain no proprietary files: the installer pulls the Wi-Fi/Bluetooth firmware and the Android
modem/GPU userspace from your own device and adds them during installation.

Built from 94e71e2 with kernel/build-all.sh and tools/make-release.sh.
Corresponding source (GPL): kernel https://github.com/Enceka/android_kernel_zte_ums9620_mifi_u30air/tree/b50db5b6224c11db42a246e8fcdaad1e1d59f478 ,
Wi-Fi/Bluetooth/Mali modules https://github.com/realme-kernel-opensource/realme_C51_C53_Narzo-N53-AndroidT-kernel-source/tree/4381465ccaf87fcf3215b9cd42f4a685df40e5e0 ,
patches in kernel/patches. Ubuntu, OpenWrt and busybox packages come from their distributions' archives;
sing-box from https://github.com/SagerNet/sing-box/releases, Xray from https://github.com/XTLS/Xray-core/releases,
hev-socks5-tunnel from https://github.com/heiher/hev-socks5-tunnel/releases,
Aurora (luci-theme-aurora 1.4.0) from https://github.com/eamonxg/luci-theme-aurora/releases/tag/v1.4.0.

MU300 Linux v2026.10.11

Choose a tag to compare

@dikeckaan dikeckaan released this 06 Oct 15:12
5a89237

What's new

  • LuCI in your language: a language switch in LuCI and the MU300 panel; English (the default), Turkish and Chinese are built in, and 46 languages in all come with mu300-extra install lang or the panel's System → Languages page.
  • U30 Air battery tile in the panel, with the instantaneous power in watts.
  • KVM and a full router module set on 6.18/7.2: /dev/kvm, WireGuard (tools and LuCI), SQM, PPTP/L2TP, 6in4/6rd/DS-Lite, GRE, VXLAN, ipset, USB Ethernet adapters, modems and storage, NTFS/exFAT/btrfs/CIFS/NFS, dm-crypt and containers (the mainline kernel bundles now carry ~360 of the kernel's own modules).
  • Tailscale through the VPN tunnel: with mu300-vpn on, Tailscale's own traffic goes through the tunnel too (TAILSCALE=0 in the VPN settings to opt out).
  • mu300-atd and mu300-ussd: reply timer fixes (a budget of T seconds is now at least T seconds, not up to the next second boundary).

Known issues

  • A rare silent hard hang at boot on 6.18 (about 1 boot in 20): the device falls back to Android; su -c mu300-linux there brings Linux back (docs/FINDINGS.md 31m).
  • A card inserted while Linux runs is only seen after a reboot.

Prebuilt images for ./install.sh (ZTE F50 / MU300 and ZTE U30 Air; the installer recognises which). Check your device
first with ./install.sh --check.

file contents
mu300-kernel.tar.gz Linux 5.4.254 Image and modules (with the U30 Air's own in modules-u30air/), static busybox and logdw for the boot image, and the generic boot ramdisk segment mu300-update uses
mu300-kernel-6.18.tar.gz mainline Linux 6.18 (longterm) for mu300-update kernel 6.18: Image, modules, generic boot ramdisk segment
mu300-kernel-7.2.tar.gz mainline Linux 7.2 (newest stable) for mu300-update kernel 7.2: the same parts
mu300-ubuntu-rootfs.tar.gz Ubuntu 24.04 LTS root filesystem
mu300-ubuntu-26.04-rootfs.tar.gz Ubuntu 26.04 LTS root filesystem
mu300-openwrt-rootfs.tar.gz OpenWrt 25.12.5 root filesystem
mu300-openwrt-luci-rootfs.tar.gz OpenWrt 25.12.5 with the MU300 control panel (luci-app-mu300 by kanoqwq, Aurora theme by eamonxg)
mu300-extra-vpn.tar.gz the VPN engines, not part of the images: mu300-extra install vpn on the device (or the installer's question) puts them on the Linux partition; Xray-core 26.3.27, hev-socks5-tunnel 2.17.1, sing-box 1.14.1
mu300-extra-lang.tar.gz LuCI and the MU300 panel in more languages (OpenWrt only; English, Turkish and Chinese are in the images): mu300-extra install lang on the device, or System > Languages in the panel; LuCI's catalogs from the OpenWrt 25.12.5 feed, the panel's AI-translated
mu300-update the on-device updater of this release (mu300-update apply switches to it before it changes anything)

The images contain no proprietary files: the installer pulls the Wi-Fi/Bluetooth firmware and the Android
modem/GPU userspace from your own device and adds them during installation.

Built from 5a89237 with kernel/build-all.sh and tools/make-release.sh.
Corresponding source (GPL): kernel https://github.com/Enceka/android_kernel_zte_ums9620_mifi_u30air/tree/b50db5b6224c11db42a246e8fcdaad1e1d59f478 ,
Wi-Fi/Bluetooth/Mali modules https://github.com/realme-kernel-opensource/realme_C51_C53_Narzo-N53-AndroidT-kernel-source/tree/4381465ccaf87fcf3215b9cd42f4a685df40e5e0 ,
patches in kernel/patches. Ubuntu, OpenWrt and busybox packages come from their distributions' archives;
sing-box from https://github.com/SagerNet/sing-box/releases, Xray from https://github.com/XTLS/Xray-core/releases,
hev-socks5-tunnel from https://github.com/heiher/hev-socks5-tunnel/releases,
Aurora (luci-theme-aurora 1.4.0) from https://github.com/eamonxg/luci-theme-aurora/releases/tag/v1.4.0.

MU300 Linux v2026.10.10

Choose a tag to compare

@dikeckaan dikeckaan released this 06 Oct 04:18
dd8a064

What's new

  • SD card installs: Linux can live on a microSD card instead of the eMMC (kernel 5.4, 6.18 and 7.2 all boot from it).
  • Magisk flashable zips: install or update from Android with Magisk, no computer needed (attached below once built).
  • OpenWrt with the control panel as a third system next to Ubuntu and plain OpenWrt (mu300-os openwrt-luci).
  • VPN engines as an extra: no longer inside the images; mu300-extra install vpn puts Xray, sing-box and hev-socks5-tunnel on the device (the installer asks).
  • Wi-Fi client: join another Wi-Fi network and share it as the uplink; WPA3 networks are told apart (WPA2/WPA3 mixed mode works, WPA3-only needs a driver with SAE).
  • F50 LEDs as ZTE's Android shows them: network blue on 4G, white on 5G, red without service, and the Wi-Fi LED.
  • Kernels 6.18.55 (longterm) and 7.2.9 (newest stable) for mu300-update kernel 6.18|7.2.
  • Driver fixes on 5.4 (IPA delegate, SIPC, Wi-Fi PCIe post-init, Wi-Fi MAC address) and a Wi-Fi power-on/off race that could panic at boot fixed on all kernels; mu300-update keeps the vendor files on busybox systems; the Magisk installer keeps your passwords on an update.

Known issues

  • A rare silent hard hang at boot on 6.18 (about 1 boot in 20): the device falls back to Android; su -c mu300-linux there brings Linux back (docs/FINDINGS.md 31m).
  • A card inserted while Linux runs is only seen after a reboot.

Prebuilt images for ./install.sh (ZTE F50 / MU300 and ZTE U30 Air; the installer recognises which). Check your device
first with ./install.sh --check.

file contents
mu300-kernel.tar.gz Linux 5.4.254 Image and modules (with the U30 Air's own in modules-u30air/), static busybox and logdw for the boot image, and the generic boot ramdisk segment mu300-update uses
mu300-kernel-6.18.tar.gz mainline Linux 6.18 (longterm) for mu300-update kernel 6.18: Image, modules, generic boot ramdisk segment
mu300-kernel-7.2.tar.gz mainline Linux 7.2 (newest stable) for mu300-update kernel 7.2: the same parts
mu300-ubuntu-rootfs.tar.gz Ubuntu 24.04 LTS root filesystem
mu300-ubuntu-26.04-rootfs.tar.gz Ubuntu 26.04 LTS root filesystem
mu300-openwrt-rootfs.tar.gz OpenWrt 25.12.5 root filesystem
mu300-openwrt-luci-rootfs.tar.gz OpenWrt 25.12.5 with the MU300 control panel (luci-app-mu300 by kanoqwq, Aurora theme by eamonxg)
mu300-extra-vpn.tar.gz the VPN engines, not part of the images: mu300-extra install vpn on the device (or the installer's question) puts them on the Linux partition; Xray-core 26.3.27, hev-socks5-tunnel 2.17.1, sing-box 1.14.1
mu300-update the on-device updater of this release (mu300-update apply switches to it before it changes anything)

The images contain no proprietary files: the installer pulls the Wi-Fi/Bluetooth firmware and the Android
modem/GPU userspace from your own device and adds them during installation.

Built from dd8a064 with kernel/build-all.sh and tools/make-release.sh.
Corresponding source (GPL): kernel https://github.com/Enceka/android_kernel_zte_ums9620_mifi_u30air/tree/b50db5b6224c11db42a246e8fcdaad1e1d59f478 ,
Wi-Fi/Bluetooth/Mali modules https://github.com/realme-kernel-opensource/realme_C51_C53_Narzo-N53-AndroidT-kernel-source/tree/4381465ccaf87fcf3215b9cd42f4a685df40e5e0 ,
patches in kernel/patches. Ubuntu, OpenWrt and busybox packages come from their distributions' archives;
sing-box from https://github.com/SagerNet/sing-box/releases, Xray from https://github.com/XTLS/Xray-core/releases,
hev-socks5-tunnel from https://github.com/heiher/hev-socks5-tunnel/releases,
Aurora (luci-theme-aurora 1.4.0) from https://github.com/eamonxg/luci-theme-aurora/releases/tag/v1.4.0.

MU300 Linux v2026.10.08

Choose a tag to compare

@dikeckaan dikeckaan released this 29 Sep 05:50

What's new

Fixes

  • F50: the heat alarm no longer goes off at every boot. Under the mainline kernels, the F50 reports a battery it does not have, at 75 °C, and since v2026.10.04 the LED alarm went on at every boot and never stopped. The alarm now reads the battery on the U30 Air only; the processor's temperature still counts on both devices.
  • Heat alarm: a second siren could be left running and flash along with the new one. A siren now stops by itself when it is no longer the current one.

Thanks to the F50 user who reported the heat alarm with all the readings.

Prebuilt images for ./install.sh (ZTE F50 / MU300 and ZTE U30 Air; the installer recognises which). Check your device
first with ./install.sh --check.

file contents
mu300-kernel.tar.gz Linux 5.4.254 Image and modules (with the U30 Air's own in modules-u30air/), static busybox and logdw for the boot image, and the generic boot ramdisk segment mu300-update uses
mu300-kernel-6.18.tar.gz mainline Linux 6.18 (longterm) for mu300-update kernel 6.18: Image, modules, generic boot ramdisk segment
mu300-kernel-7.2.tar.gz mainline Linux 7.2 (newest stable) for mu300-update kernel 7.2: the same parts
mu300-ubuntu-rootfs.tar.gz Ubuntu 24.04 LTS root filesystem
mu300-ubuntu-26.04-rootfs.tar.gz Ubuntu 26.04 LTS root filesystem
mu300-openwrt-rootfs.tar.gz OpenWrt 25.12.5 root filesystem
mu300-update the on-device updater of this release (mu300-update apply switches to it before it changes anything)

The images contain no proprietary files: the installer pulls the Wi-Fi/Bluetooth firmware and the Android
modem/GPU userspace from your own device and adds them during installation.

Built from 1a69a41 with kernel/build-all.sh and tools/make-release.sh.
Corresponding source (GPL): kernel https://github.com/Enceka/android_kernel_zte_ums9620_mifi_u30air/tree/b50db5b6224c11db42a246e8fcdaad1e1d59f478 ,
Wi-Fi/Bluetooth/Mali modules https://github.com/realme-kernel-opensource/realme_C51_C53_Narzo-N53-AndroidT-kernel-source/tree/4381465ccaf87fcf3215b9cd42f4a685df40e5e0 ,
patches in kernel/patches. Ubuntu, OpenWrt and busybox packages come from their distributions' archives;
sing-box from https://github.com/SagerNet/sing-box/releases, Xray from https://github.com/XTLS/Xray-core/releases,
hev-socks5-tunnel from https://github.com/heiher/hev-socks5-tunnel/releases.

MU300 Linux v2026.10.07

Pre-release

Choose a tag to compare

@dikeckaan dikeckaan released this 29 Sep 05:39

Withdrawn: this build was published by mistake without its fix. Use v2026.10.08.

Prebuilt images for ./install.sh (ZTE F50 / MU300 and ZTE U30 Air; the installer recognises which). Check your device
first with ./install.sh --check.

file contents
mu300-kernel.tar.gz Linux 5.4.254 Image and modules (with the U30 Air's own in modules-u30air/), static busybox and logdw for the boot image, and the generic boot ramdisk segment mu300-update uses
mu300-kernel-6.18.tar.gz mainline Linux 6.18 (longterm) for mu300-update kernel 6.18: Image, modules, generic boot ramdisk segment
mu300-kernel-7.2.tar.gz mainline Linux 7.2 (newest stable) for mu300-update kernel 7.2: the same parts
mu300-ubuntu-rootfs.tar.gz Ubuntu 24.04 LTS root filesystem
mu300-ubuntu-26.04-rootfs.tar.gz Ubuntu 26.04 LTS root filesystem
mu300-openwrt-rootfs.tar.gz OpenWrt 25.12.5 root filesystem
mu300-update the on-device updater of this release (mu300-update apply switches to it before it changes anything)

The images contain no proprietary files: the installer pulls the Wi-Fi/Bluetooth firmware and the Android
modem/GPU userspace from your own device and adds them during installation.

Built from 4403f37 with kernel/build-all.sh and tools/make-release.sh.
Corresponding source (GPL): kernel https://github.com/Enceka/android_kernel_zte_ums9620_mifi_u30air/tree/b50db5b6224c11db42a246e8fcdaad1e1d59f478 ,
Wi-Fi/Bluetooth/Mali modules https://github.com/realme-kernel-opensource/realme_C51_C53_Narzo-N53-AndroidT-kernel-source/tree/4381465ccaf87fcf3215b9cd42f4a685df40e5e0 ,
patches in kernel/patches. Ubuntu, OpenWrt and busybox packages come from their distributions' archives;
sing-box from https://github.com/SagerNet/sing-box/releases, Xray from https://github.com/XTLS/Xray-core/releases,
hev-socks5-tunnel from https://github.com/heiher/hev-socks5-tunnel/releases.

MU300 Linux v2026.10.06

Choose a tag to compare

@dikeckaan dikeckaan released this 28 Sep 21:36

What's new

Fixes

  • U30 Air: a U30 Air could restart every ten minutes after it was sent back to Linux from Android (su -c mu300-linux). A timer left over from a test build stayed in the boot image and is now switched off by every update.
  • Windows installer: with Git's default core.autocrlf=true, install.ps1 failed with an empty device log, because the scripts it sends to the device had Windows line endings. Scripts now always go to the device with Unix line endings (#7).
  • Wi-Fi: iw station dump, iwinfo assoclist and LuCI's "Associated Stations" now list the clients of the hotspot, and iwinfo shows its channel (it said "Channel: 0"). Signal strength is not shown: the Wi-Fi firmware does not report it (#8).

U30 Air: NFC on and off. sudo mu300-nfc on / off is the same switch as in ZTE's web interface, so a device with NFC switched off no longer needs Android to turn it on. sudo mu300-nfc says when it is off.

Prebuilt images for ./install.sh (ZTE F50 / MU300 and ZTE U30 Air; the installer recognises which). Check your device
first with ./install.sh --check.

file contents
mu300-kernel.tar.gz Linux 5.4.254 Image and modules (with the U30 Air's own in modules-u30air/), static busybox and logdw for the boot image, and the generic boot ramdisk segment mu300-update uses
mu300-kernel-6.18.tar.gz mainline Linux 6.18 (longterm) for mu300-update kernel 6.18: Image, modules, generic boot ramdisk segment
mu300-kernel-7.2.tar.gz mainline Linux 7.2 (newest stable) for mu300-update kernel 7.2: the same parts
mu300-ubuntu-rootfs.tar.gz Ubuntu 24.04 LTS root filesystem
mu300-ubuntu-26.04-rootfs.tar.gz Ubuntu 26.04 LTS root filesystem
mu300-openwrt-rootfs.tar.gz OpenWrt 25.12.5 root filesystem
mu300-update the on-device updater of this release (mu300-update apply switches to it before it changes anything)

The images contain no proprietary files: the installer pulls the Wi-Fi/Bluetooth firmware and the Android
modem/GPU userspace from your own device and adds them during installation.

Built from fa13a36 with kernel/build-all.sh and tools/make-release.sh.
Corresponding source (GPL): kernel https://github.com/Enceka/android_kernel_zte_ums9620_mifi_u30air/tree/b50db5b6224c11db42a246e8fcdaad1e1d59f478 ,
Wi-Fi/Bluetooth/Mali modules https://github.com/realme-kernel-opensource/realme_C51_C53_Narzo-N53-AndroidT-kernel-source/tree/4381465ccaf87fcf3215b9cd42f4a685df40e5e0 ,
patches in kernel/patches. Ubuntu, OpenWrt and busybox packages come from their distributions' archives;
sing-box from https://github.com/SagerNet/sing-box/releases, Xray from https://github.com/XTLS/Xray-core/releases,
hev-socks5-tunnel from https://github.com/heiher/hev-socks5-tunnel/releases.