This is an old revision of the document!



OpenWRT 23.05.x with MESHdesk packages

  • 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.
  • To introduce a new device we will:
    1. We create an initial firmware image for development that contains all the required packages and files, but with centralized management disabled.
    2. Then we flash a device with this image and make the device-specific adjustments so that the device works as expected with central management.
    3. 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.

These steps are performed ONLY ONCE when you introduce new hardware.

  1. Build OpenWRT with the MESHdesk package (MESHdesk disabled).
  2. Flash your device.
  3. Prepare the wan_network file for this specific device.
  4. Prepare the meshdesk config file for this specific device.
  5. Prepare the captive_config.json file for this 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.


  1. Create OpenWRT firmware with the MESHdesk package, which contains the device-specific files for
    1. wan_network
    2. captive_config.json
    3. meshdesk
  2. 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.
  • 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.
    1. MESHdesk - This is the MESHdesk package that will be included in the SDK.
    2. files - This is the overwrite structure that contains files to be overwritten during the build process.
    3. luci-app-meshdesk - This is the Luci application that allows you to enable or disable centralized control of the device.
  • 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
  • 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.

  • The OpenWrt SDK has a cursors interface (much like Midnight Commander for the old school readers 8-O)
  • 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.
  • 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

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)
  • 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.
  • network/firmware/meshdesk.1708168189.txt.gz
  • Last modified: 2024/02/17 13:09
  • by system