This is an old revision of the document!
OpenWRT 23.05.x with MESHdesk packages
Follow these instructions to include the MESHdesk package on devices that can run OpenWRT version 23.05.x
Minimum hardware requirements
- The minimum hardware requirements are:
- 16M Flash
- 64M RAM
- Although the system can potentially support hardware with fewer resources, support is no longer practical in 2024.
- The hardware does not need to be equipped with a radio.
- Hardware without radios can be managed with APdesk.
- Mediatek and Atheros / Qualcomm SOC devices are supported.
- Other target systems are also supported, but have not yet been thoroughly tested.
- If you are not sure if your hardware works, please visit the OpenWrt website and check it. The list of supported hardware is constantly expanding.
- Next, let us look at the steps you need to take to compile OpenWrt with the included MESHdesk package.
Steps when adding new hardware
Explanation of our modus operandi (MO)
- To introduce a new device we will:
- We create an initial firmware image for development that contains all the required packages and files, but with centralized management disabled.
- Then we flash a device with this image and make the device-specific adjustments so that the device works as expected with central management.
- We can then use these optimized files to create a production image for the device that contains the device-specific files.
- This approach allows us to:
- Minimize the risk of bricking the device (a factory reset resets the device to a normal running OpenWrt)
- Allow fine tuning of the device without having to create and flash a new firmware image every time we make a change.
First development firmware
These steps are performed ONLY ONCE when you introduce new hardware.
- Build OpenWRT with the MESHdesk package (MESHdesk disabled).
- Flash your device.
- Prepare the wan_network file for this specific device.
- Prepare the meshdesk config file for this specific device.
- Prepare the captive_config.json file for this specific device.
To better structure the documentation, we have set up special pages describing these files, including their function and their adaptation to your specific device.
This is a one-time process. Once you have customized the files, you can skip this step in the future and simply use the device-specific files if you need to create new firmware for the same hardware.
Production Firmware
- Create OpenWRT firmware with the MESHdesk package, which contains the device-specific files for
- wan_network
- captive_config.json
- meshdesk
- Flash your device with the production firmware.
- So without further ado, let us start with the first development firmware.
- We will take a Xiaomi 4A 100M access point as an example device.
- You can use the hardware of your choice and simply apply the same principles.
Checkout the MESHdesk code
- Most of the packages you can include when building OpenWrt firmware are either part of the SDK or can be included via the package feeds, which are also part of the SDK.
- You can also include packages that are not part of the SDK or the feeds.
- The MESHdesk package is one such package.
- The MESHdesk package is hosted on Github as part of a git repository.
- This git repository also contains the other elements that we will use in the development of our firmware (the Luci application and some additional files)
- Check out the openwrt-meshdesk package from the Github repository.
#Do this in the working directory e.g. cd 23.05.2 (on the same level as the openwrt directory) git clone https://github.com/RADIUSdesk/openwrt-meshdesk.git openwrt-meshdesk
- The repository consists of three main components. Each of them is located in its own folder.
- MESHdesk - This is the MESHdesk package that will be included in the SDK.
- files - This is the overwrite structure that contains files to be overwritten during the build process.
- luci-app-meshdesk - This is the Luci application that allows you to enable or disable centralized control of the device.
Copying the three components
- The MESHdesk folder must be copied under the package folder (openwrt/package).
#cd to the working directory cp -R ./openwrt-meshdesk/MESHdesk ./openwrt/package
- The files folder needs to sit directly under the openwrt folder (root level).
#cd to the working directory cp -R ./openwrt-meshdesk/files ./openwrt
- The luci-app-meshdesk folder needs to be copied under the feeds/luci/applications folder.
#cd to the working directory cp -R ./openwrt-meshdesk/luci-app-meshdesk ./openwrt/feeds/luci/applications
Updating the available packages
- Since we added a Luci application, we need to tell the SDK about it.
- After you copied the packages across issue the following command:
#cd to the working directory cd ./openwrt scripts/feeds update -i #Install the package to make it visible scripts/feeds install luci-app-meshdesk
- The result is that the MESHdesk Luci application will be listed as one of the available Luci applications.
Select Packages To Include With Firmware
- The OpenWrt SDK has a cursors interface (much like Midnight Commander for the old school readers
)
- To start this cursors interface up you need to cd from the working directory to the openwrt directory.
- Then issue the following:
#cd to the working directory cd openwrt make menuconfig
- Here you will select the hardware architecture of the device you want to build the firmware for and also its model.
- Also select the following packages when building the firmware.
- When selecting a package there are the options to build it as a module (M) or fully include it (*).
- Make sure you select with the (*) option to fully include the package.
- Package names in bold are required.
- The Mosquitto packages are for MQTT support.
- The Batman packages are for mesh support.
Package selection
| Location | Package | Comment |
|---|---|---|
| Base system | MESHdesk | |
| Kernel Modules → Network Support | kmod-batman-adv | Keep the default options |
| Kernel Modules → Netfilter Extensions | kmod-nft-bridge | Include if you want to block or speed limit users |
| Languages → Lua | lua-mosquitto | |
| Languages → Lua | libiwinfo-lua | |
| Languages → Lua | luasocket | |
| Libraries | libuci-lua | |
| Luci → Collections | luci | |
| Luci → Modules | luci-compat | Needs this modules for our package VERY IMPORTANT |
| Luci → Applications | luci-app-meshdesk | Luci App to enable and disable central management |
| Luci → Themes | luci-theme-material | Modern theme that is easy to customize |
| Luci → Libraries | luci-lib-httpclient | |
| Luci → Libraries | luci-lib-httpprotoutils | |
| Luci → Libraries | luci-lib-json | |
| Luci → Libraries | luci-lib-jsonc | |
| Network → Captive Portals | coova-chilli | Select OpenSSL as SSL Library. Also select Enable the JSON interface.. and ..Coova miniportal… |
| Network → File Transfer | curl | |
| Network → Firewall | iptables-nft | Very important for backward compatibly of iptables |
| Network → Routing and Redirection | relayd | |
| Network → WirelessAPD | wpad IEEE 802.1x Auth/Supplicant (built-in full) | Un-select wpad-basic also required for Hotspot 2.0 |
| Network | batctl-full | Un-select batctl-default |
| Network | mosquitto-client-ssl | Note the CLIENT package |
| Network | iw-full | Required for Hotspot 2.0 |
- After you selected these packages you can save the configuration and issue make to build the firmware.
- The completed firmware will be located under the openwrt/bin/target/<architecture> folder.
- In our case we will use openwrt/bin/targets/ramips/mt76x8/openwrt-ramips-mt76x8-xiaomi_mi-router-4a-100m-squashfs-sysupgrade.bin
- The firmware you just built will be standard OpenWrt in effect and you can flash your hardware as with normal OpenWRT then access it on 192.168.1.1.
- Username and Password is root and admin for Luci and ssh.
- The next section will cover the files you have to attend to for the specific hardware tweaks.
Note on Warnings
- When you issue the make command these warnings might pop-up.
- They are harmless and can be ignored.
WARNING: Makefile 'package/utils/busybox/Makefile' has a dependency on 'libpam', which does not exist WARNING: Makefile 'package/utils/busybox/Makefile' has a dependency on 'libpam', which does not exist WARNING: Makefile 'package/utils/busybox/Makefile' has a build dependency on 'libpam', which does not exist WARNING: Makefile 'package/network/services/lldpd/Makefile' has a dependency on 'libnetsnmp', which does not exist WARNING: Makefile 'package/utils/policycoreutils/Makefile' has a dependency on 'libpam', which does not exist WARNING: Makefile 'package/utils/policycoreutils/Makefile' has a dependency on 'libpam', which does not exist WARNING: Makefile 'package/utils/policycoreutils/Makefile' has a build dependency on 'libpam', which does not exist make[2]: Entering directory '/home/system/Documents/fw_sdk/23.05.2/openwrt/scripts/config' make[2]: 'conf' is up to date. make[2]: Leaving directory '/home/system/Documents/fw_sdk/23.05.2/openwrt/scripts/config' make[1] world make[2] target/compile make[3] -C target/linux compile
Files to tweak
Use ssh to gain access to the device in order to tweak these files.
- Once the tweaks are completed we can test everything out.
- Log onto your device using Luci (http://192.168.1.1)
- The following image shows how to point the device to the controller using the GUI.
- Point the device to your controller and reboot it.
- If all goes well it will show up in Unknown Nodes.
- If it is a new hardware type add it to the controller as described here: Hardwares (Again Once Off)
The Production Built
- If everything on the device work as intended you can use those tweaked files to build a final version of the firmware for the specific hardware.
- Copy the files to a temporary folder on the machine where you are building the firmware.
- Use the following as a lookup for the location inside the SDK where the tweaked files need to go.
Files
| On Device | On SDK |
|---|---|
| /etc/MESHdesk/configs/wan_network | openwrt/package/MESHdesk/files/MESHdesk/configs/ |
| /etc/config/meshdesk | openwrt/package/MESHdesk/files/MESHdesk/ |
| /etc/MESHdesk/configs/captive_config.json | openwrt/package/MESHdesk/files/MESHdesk/configs/ |
| /etc/MESHdesk/reporting/report_to_server.lua | openwrt/package/MESHdesk/files/MESHdesk/reporting |
- This brings us to the end of the page on how to build MESHdesk firmware for specific hardware.

