This 4.9.0 source release provides Clean, baseline and CCS validation
configuration files. The baseline was captured from the matching internal
shipping build at ~/test/mt3600be_4.9.0/mt7987a. It may reference GL.iNet
proprietary packages and feeds that are not included in this public source
release.
The available open-source configuration builds the Clean image: it includes OpenWrt and other publicly redistributable components, but excludes GL.iNet proprietary modules and applications. Do not create a baseline configuration by guessing package selections from another firmware version. A matching baseline configuration must come from the corresponding 4.9.0 shipping build.
This source release defines three configuration purposes. All three files are available for 4.9.0, but they are not interchangeable:
Configuration captured from the matching internal shipping firmware build for audit and comparison purposes. It contains package selections for GL.iNet proprietary modules and applications, and is not a customer-buildable public configuration by itself.
Configuration for building the public open-source firmware image. GL.iNet proprietary applications and Web UI components are excluded.
Configuration for CCS verification. It enables public GPL/copyleft GL kernel components corresponding to the distributed firmware that can be built from this source release. The modules are selected as optional modules for source verification and are not enabled in the normal public firmware image.
GL.iNet proprietary applications and Web UI components are excluded.
Use a 64-bit, case-sensitive GNU/Linux environment. The reference environment verified for this source tree is:
Operating system: Ubuntu 22.04.5 LTS
Architecture: x86_64
GCC: 9.5.0
GNU Make: 4.3
Python: 3.10.12
Git: 2.34.1
Build as a regular user, not as root, and use a build path without spaces.
Do not build on a case-insensitive filesystem. When using WSL2, keep the source
tree in the Linux filesystem rather than under /mnt/c.
Recommended resources:
CPU: 4 cores minimum, 8 or more recommended
Memory: 8 GiB minimum, 16 GiB or more recommended
Disk: 30 GiB free minimum, 50 GiB or more recommended
Network: Internet access for feeds and source downloads
Two build methods are supported. Docker is recommended because it provides the same compiler and dependencies for every build. A native Ubuntu 22.04 build is also supported.
Install Docker Engine, then build the build-environment image from the repository root. Passing the current UID and GID allows the container to write build output without changing ownership of the source tree:
docker build \
--build-arg BUILD_UID="$(id -u)" \
--build-arg BUILD_GID="$(id -g)" \
-t gl-mt3600be-builder .Start the container with the repository mounted at /workspace:
docker run --rm -it \
-v "$PWD:/workspace" \
gl-mt3600be-builderRun the commands in Build the firmware inside the container. Build output remains in the repository on the host. This Docker workflow has been verified with a clean source tree to produce the GL-MT3600BE factory and sysupgrade images.
Install the native build dependencies:
sudo apt update
sudo apt install -y \
bash ca-certificates build-essential clang flex bison g++ gawk \
gcc-multilib g++-multilib \
gcc-9 g++-9 gcc-9-multilib g++-9-multilib \
gettext git ccache \
libncurses-dev libssl-dev libelf-dev \
python3 python3-distutils python3-setuptools \
rsync subversion swig unzip zlib1g-dev \
file wget perl quilt xz-utils zstd time xsltprocSelect GCC and G++ 9:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 90
sudo update-alternatives --set gcc /usr/bin/gcc-9
sudo update-alternatives --set g++ /usr/bin/g++-9The package names follow the OpenWrt build system setup for Ubuntu 22.04. If the prerequisite check reports a missing package, install that package before continuing.
Run from the repository root:
cd versions/4.9.0./scripts/feeds update -a
./scripts/feeds install -aFor the public open-source firmware:
cp configs/gl-mt3600be-open-source.config .config
make defconfig
make prereq
make -j"$(nproc)"The configs/gl-mt3600be-baseline.config file records the configuration
captured from the internal shipping build. It is provided for audit and
comparison only. Because this public source tree intentionally omits GL.iNet
proprietary packages referenced by that configuration, it is not a standalone
build configuration and must not be used with the build commands below.
For CCS validation of public GL GPL components:
cp configs/gl-mt3600be-ccs-validation.config .config
make defconfig
make prereq
make -j"$(nproc)"No GL.iNet-specific feed preparation script is required. The release-specific
configs/feed-package-sources.json records the source feed for each audited
source package. Standard feeds install -a selects these definitions and updates
old feed links automatically. An explicit feeds install -p selection takes
precedence. Keep this mapping and the pinned feed revisions together.
The default configuration selects public components from the shipped package inventory, including VPN tools, Samba, nginx, storage support and network utilities. Library package names with ABI suffixes are matched through their provided names. The proprietary GL applications and UI are omitted; retained GL kernel-module enablement and vendor runtime packaging remain separate.
OpenVPN, WireGuard, AmneziaWG and their userspace tools are selected. VPN connections and file shares still require configuration. The wifidog-ng kernel module is selected without its userspace portal. Restoring package selections does not restore the proprietary GL management interface.
The vendor runtime contains prebuilt drivers. Verify module loading, wireless, network access and application services on the device before deployment.
After a successful build, use this firmware image:
bin/targets/mediatek/mt7987/openwrt-mediatek-mt7987-glinet_gl-mt3600be-squashfs-sysupgrade.bin
Connect the computer to the GL-MT3600BE LAN. The router uses
192.168.8.1 by default.
When the router is running standard GL.iNet firmware, the locally built image can be uploaded from the GL.iNet web interface:
- Open
http://192.168.8.1and sign in. - Open System > Upgrade and select Local Upgrade.
- Select the generated
sysupgrade.binimage. - Do not retain settings when moving from standard GL.iNet firmware to the open-source firmware.
- Start the upgrade and wait for the router to reboot. Do not interrupt power.
Upload the firmware to the router:
scp -O \
bin/targets/mediatek/mt7987/openwrt-mediatek-mt7987-glinet_gl-mt3600be-squashfs-sysupgrade.bin \
root@192.168.8.1:/tmp/firmware.binThe -O option uses the legacy SCP protocol supported by Dropbear.
Log in to the router and start the upgrade:
ssh root@192.168.8.1
sysupgrade -n /tmp/firmware.binThe SSH connection closes while the router writes the image and reboots. Do
not interrupt power during this process. After the reboot, the open-source
firmware provides LAN and SSH access at 192.168.8.1.
The current default configuration does not include LuCI or the proprietary GL.iNet web interface. The GL.iNet web upgrade method is therefore available only while the device is still running standard GL.iNet firmware.
This tree preserves the vendor UFSD mount attempt. If it fails with ENODEV
(filesystem driver unavailable), block retries the detected filesystem type.
If that type is also unavailable in the kernel, the existing helper flow uses
/sbin/mount.ntfs, a compatibility link to the included ntfs-3g executable.
Other UFSD errors, including permission and I/O errors, do not trigger this
fallback. No UFSD binary is added by this change.
Compilation and simulated mount/error tests validate this fallback, but actual disk mounting and read/write behavior still require device testing.