RADIUSdesk

OpenWRT 19.07.x for RouterBOARD 750Gr3

Introduction

  • We created this page for the 19.07 release of OpenWRT since the CoovaChilli that comes standard included with this release of OpenWRT DOES NOT INCLUDE the JSON Interface (Utilised by RADIUSdesk).
  • Our instructions here will help you build your own built of OpenWRT which will include CoovaChilli that has the support for the JSON interface included.

Prepare the system

  • We assume you have a standard install of Ubuntu 18.04 or Ubuntu 20.04
  • Install the required packages to ensure the SDK can build the firmware
sudo apt-get update
sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl unzip mercurial

Create the location for the SDK

  • Our suggestion is to create a folder that will indicate the version of the firmware you'll be building.
  • Here we create a folder for the 19.07.6 release (The latest for the 19.07 branch).
# Create the working directory 
mkdir 19.07.6
# Change to our working directory 
cd 19.07.6

Checkout the SDK

  • Do a clean checkout of the OpenWRT repository
git clone https://git.openwrt.org/openwrt/openwrt.git
  • This repository has various branches. To see which branches are available and which one we are currently set to use, issue the following command.
#We may first need to change our directory to the openwrt directory
cd openwrt
git branch -a
#Also to see the tags 
git tag -l
  • We will be checking out the v19.07.6 tag.
git checkout v19.07.6
  • Confirm that this v19.07.6 is now checked out.
git branch
  • Update the package feeds
./scripts/feeds update

Install the required packages

  • Ensure the following packages are installed since they are required by the firmware
./scripts/feeds install coova-chilli
./scripts/feeds install luci
./scripts/feeds install luci-theme-material

Tweak CoovaChilli to include support for JSON

  • We will borrow some things from the config files inside the the master branch of OpenWRT to include the option for the JOSN interface when configuring the firmware before building it.
  • Edit the openwrt/feeds/packages/net/coova-chilli/Config.in to look like this (Repalce with this file)
Config.in
# CoovaChilli advanced configuration
 
if PACKAGE_coova-chilli
 
config COOVACHILLI_PROXY
	bool "Enable support for chilli proxy. Required for AAA Proxy through http"
	default n
 
config COOVACHILLI_REDIR
	bool "Enable support for redir server. Required for uamregex"
	default n
 
config COOVACHILLI_MINIPORTAL
	bool "Enable support Coova miniportal"
	default n
 
config COOVACHILLI_USERAGENT
	bool "Enable recording user-agent"
	default n
 
config COOVACHILLI_UAMDOMAINFILE
	bool "Enable loading of mass uamdomains from file"
	default n
 
config COOVACHILLI_LARGELIMITS
	bool "Enable larger limits for use with non-embedded systems"
	default n
 
config COOVACHILLI_JSONINTERFACE
	bool "Enable the JSON interface for the CoovaChilli Controller"
	default n
 
choice
	prompt "SSL library"
	default COOVACHILLI_NOSSL
 
config COOVACHILLI_NOSSL
	bool "No SSL support"
 
config COOVACHILLI_WOLFSSL
	bool "wolfSSL"
 
config COOVACHILLI_OPENSSL
	bool "OpenSSL"
 
endchoice
 
endif
  • Edit the openwrt/feeds/packages/net/coova-chilli/Makefile to look like this (Replace existing one)
Makefile
#
# Copyright (C) 2007-2018 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
 
include $(TOPDIR)/rules.mk
 
PKG_NAME:=coova-chilli
PKG_VERSION:=1.4
PKG_RELEASE:=10
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/coova/coova-chilli/tar.gz/$(PKG_VERSION)?
PKG_HASH:=987647a4c8efe7b1e2d7108d56068e3bd7830d326680f0eaa2c705e4c59c46d9
 
PKG_MAINTAINER:=Jaehoon You <teslamint@gmail.com>
PKG_LICENSE:=GPL-2.0-or-later
PKG_LICENSE_FILES:=COPYING
 
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=0
 
PKG_CONFIG_DEPENDS:= \
  COOVACHILLI_JSONINTERFACE \
  COOVACHILLI_LARGELIMITS \
  COOVACHILLI_MINIPORTAL \
  COOVACHILLI_NOSSL \
  COOVACHILLI_OPENSSL \
  COOVACHILLI_PROXY \
  COOVACHILLI_REDIR \
  COOVACHILLI_UAMDOMAINFILE \
  COOVACHILLI_USERAGENT \
  COOVACHILLI_WOLFSSL \
  IPV6
 
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/kernel.mk
 
define Package/coova-chilli
  SUBMENU:=Captive Portals
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:=+kmod-tun +librt +COOVACHILLI_MINIPORTAL:haserl \
  +COOVACHILLI_WOLFSSL:libwolfssl +COOVACHILLI_OPENSSL:libopenssl \
  +COOVACHILLI_JSONINTERFACE:libjson-c
  TITLE:=Wireless LAN HotSpot controller (Coova Chilli Version)
  URL:=https://coova.github.io/
  MENU:=1
endef
 
define Package/coova-chilli/description
	CoovaChilli is an open source access controller for wireless LAN
	access points and is based on ChilliSpot. It is used for authenticating
	users of a wireless (or wired) LAN. It supports web based login (UAM)
	which is today's standard for public HotSpots and it supports Wireless
	Protected Access (WPA) which is the standard of the future.
	Authentication,	authorization and accounting (AAA) is handled by your
	favorite radius server.
endef
 
define Package/coova-chilli/config
  source "$(SOURCE)/Config.in"
endef
 
define KernelPackage/ipt-coova
  URL:=http://www.coova.org/CoovaChilli
  SUBMENU:=Netfilter Extensions
  DEPENDS:=coova-chilli +kmod-ipt-core +libxtables
  TITLE:=Coova netfilter module
  FILES:=$(PKG_BUILD_DIR)/src/linux/xt_*.$(LINUX_KMOD_SUFFIX)
  AUTOLOAD:=$(call AutoProbe,xt_coova)
endef
 
define KernelPackage/ipt-coova/description
	Netfilter kernel module for CoovaChilli
	Includes:
	- coova
endef
 
DISABLE_NLS=
 
TARGET_CFLAGS += $(FPIC) -Wno-error
 
CONFIGURE_VARS += \
       ARCH="$(LINUX_KARCH)" \
       KERNEL_DIR="$(LINUX_DIR)"
 
MAKE_FLAGS += \
       ARCH="$(LINUX_KARCH)" \
       KERNEL_DIR="$(LINUX_DIR)"
 
MAKE_INSTALL_FLAGS += \
       ARCH="$(LINUX_KARCH)" \
       KERNEL_DIR="$(LINUX_DIR)" \
       INSTALL_MOD_PATH="$(PKG_INSTALL_DIR)"
 
define Build/Prepare
$(call Build/Prepare/Default)
	( cd $(PKG_BUILD_DIR) ; \
		[ -f ./configure ] || { \
			./bootstrap ; \
		} \
	)
endef
 
define Build/Configure
	$(call Build/Configure/Default, \
	$(if $(CONFIG_COOVACHILLI_PROXY),--enable,--disable)-chilliproxy \
	$(if $(CONFIG_COOVACHILLI_REDIR),--enable,--disable)-chilliredir \
	$(if $(CONFIG_COOVACHILLI_MINIPORTAL),--enable,--disable)-miniportal \
	$(if $(CONFIG_COOVACHILLI_USERAGENT),--enable,--disable)-useragent \
	$(if $(CONFIG_COOVACHILLI_LARGELIMITS),--enable,--disable)-largelimits \
	$(if $(CONFIG_COOVACHILLI_JSONINTERFACE),--enable,--disable)-libjson \
	$(if $(CONFIG_COOVACHILLI_JSONINTERFACE),--enable,--disable)-json \
	$(if $(CONFIG_COOVACHILLI_UAMDOMAINFILE),--enable,--disable)-uamdomainfile \
	$(if $(CONFIG_IPV6),--with,--without)-ipv6 \
	$(if $(CONFIG_COOVACHILLI_WOLFSSL),--with,--without)-cyassl \
	$(if $(CONFIG_COOVACHILLI_OPENSSL),--with,--without)-openssl \
	$(if $(CONFIG_PACKAGE_kmod-ipt-coova),--with-nfcoova) \
	)
endef
 
define Package/coova-chilli/conffiles
/etc/config/chilli
endef
 
define Package/coova-chilli/install
	$(INSTALL_DIR) $(1)/etc
	$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/chilli.conf $(1)/etc/
	$(INSTALL_DIR) $(1)/etc/chilli
	$(CP) $(PKG_INSTALL_DIR)/etc/chilli/* $(1)/etc/chilli/
	$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
	$(INSTALL_DATA) ./files/chilli.hotplug $(1)/etc/hotplug.d/iface/30-chilli
	$(INSTALL_DIR) $(1)/usr/sbin
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/chilli* $(1)/usr/sbin/
	$(INSTALL_DIR) $(1)/usr/lib/
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib*.so.* $(1)/usr/lib/
	$(if $(CONFIG_PACKAGE_kmod-ipt-coova), \
		$(INSTALL_DIR) $(1)/usr/lib/iptables; \
		$(CP) $(PKG_INSTALL_DIR)/usr/lib/iptables/lib*.so $(1)/usr/lib/iptables/ \
	)
	$(INSTALL_DIR) $(1)/etc/init.d
	$(INSTALL_BIN) files/chilli.init $(1)/etc/init.d/chilli
	$(INSTALL_DIR) $(1)/etc/config
	$(INSTALL_DATA) files/chilli.config $(1)/etc/config/chilli
endef
 
$(eval $(call BuildPackage,coova-chilli))
$(eval $(call KernelPackage,ipt-coova))

Select target system and model

  • Under the openwrt folder type:
make menuconfig
  • For Target System select MediaTek Ralink MIPS
  • For Subtarget select MT7621based boards
  • For Profile select Mikrotik RouterBOARD 750Gr3

Next we will select the packages to include

Select required packages

  • The default package selection by OpenWRT is pretty good to get a standard working firmware done.
  • We will do the following additional selections
Package Location Comment
coova-chilli Network → Captive Portals Select Enable the JSON interface for the CoovaChilli Controller, Enable support Coova miniportal and OpenSSL as SSL Library
luci Luci → Collections Required for web management
luci-theme-material Luci → Themes Modern theme as a nice-to-have
  • After that you can save and exit

Kick off the built

  • Everything is now in place to start the firmware built
  • Enter the following under the openwrt folder
make
  • If the build completes with success it will be located here:
ls -l bin/targets/ramips/mt7621/
total 9412
-rw-r--r-- 1 system system    1590 Feb 16 15:39 config.buildinfo
-rw-r--r-- 1 system system     343 Feb 16 15:39 feeds.buildinfo
-rw-r--r-- 1 system system    3196 Feb 16 15:41 openwrt-ramips-mt7621-device-mikrotik-rb750gr3.manifest
-rwxr-xr-x 1 system system 4692436 Feb 16 15:41 openwrt-ramips-mt7621-mikrotik_rb750gr3-initramfs-kernel.bin
-rw-r--r-- 1 system system 4915980 Feb 16 15:41 openwrt-ramips-mt7621-mikrotik_rb750gr3-squashfs-sysupgrade.bin
drwxr-xr-x 2 system system    4096 Feb 16 15:40 packages
-rw-r--r-- 1 system system     628 Feb 16 15:41 sha256sums
-rw-r--r-- 1 system system      18 Feb 16 15:39 version.buildinfo