====== Building the MESHdesk firmware on LEDE to include LuCI ======
===== Introduction =====
* LuCI is the standard Web User Interface that comes with OpenWRT.
* LuCI comes with a few themes to choose from.
* LuCI is easy to extend and uses MVC architecture.
* If the device you plan to install the MESHdesk firmware on has 8M Flash or more, you can include LuCI with the firmware.
---------------
===== Adding LuCI to the MESHdesk build =====
* We assume you have followed the instructions in the Wiki Page to build the MESHdesk firmware using LEDE.
* The instructions on this page will be progressive, stating with the basics and then cover the more advanced things under their own heading.
* We start with the basics first.
==== Install the LuCI package. ====
* These instructions is to include the plain vanilla LuCI with your MESHdesk firmware.
cd ~/lede/source
./scripts/feeds update
./scripts/feeds install luci
* Run the **make menuconfig** pattern.
* Go to **LuCI -> Collections** select to include **luci**.
* By selecting this collection we ensure all the required dependent packages are automatically included.
* Save and exit the cursors interface.
* Run the **make** command and make sure it compiles fine.
* Next we will create a build with the **meshdesk** application.
==== Include the MESHdesk application ====
* The LuCI package by default include some bundled applications. They are located under **~/lede/source/feeds/luci/applications/**
* These applications are named according to the convention luci-app-.
* If we want to include any of these bundled applications, we have to do two things.
* We need to install the application eg ./scripts/feeds install luci-app-coovachilli
* We then need to select the application under the Luci configuration when we run the **make menuconfig** pattern.
* In our case we will actually be adding our own application to the already existing bundles of applications.
#Create the following directories
mkdir ~/lede/source/feeds/luci/applications/luci-app-meshdesk/
mkdir ~/lede/source/feeds/luci/applications/luci-app-meshdesk/luasrc/
mkdir ~/lede/source/feeds/luci/applications/luci-app-meshdesk/luasrc/controller
mkdir ~/lede/source/feeds/luci/applications/luci-app-meshdesk/luasrc/model
mkdir ~/lede/source/feeds/luci/applications/luci-app-meshdesk/luasrc/model/cbi
* Under ~/lede/source/feeds/luci/applications/luci-app-meshdesk/ create a **Makefile** with the following contents:
#
# Copyright (C) 2008-2015 The LuCI Team
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-meshdesk
# Version == major.minor.patch
# increase "minor" on new functionality and "patch" on patches/optimization
PKG_VERSION:=5.0.0
# Release == build
# increase on changes of translation files
PKG_RELEASE:=5
PKG_LICENSE:=Apache-2.0
PKG_MAINTAINER:=Dirk van der Walt
# LuCI specific settings
LUCI_TITLE:=LuCI Support for MESHdesk firmware
LUCI_DEPENDS:=+luci-mod-admin-full
LUCI_PKGARCH:=all
define Package/$(PKG_NAME)/config
# shown in make menuconfig
help
$(LUCI_TITLE)
.
Version: $(PKG_VERSION)-$(PKG_RELEASE)
$(PKG_MAINTAINER)
endef
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature
* Under ~/lede/source/feeds/luci/applications/luci-app-meshdesk/luasrc/controller create **meshdesk.lua** controller with the following contents:
-- Copyright 2016 Dirk van der Walt
-- Licensed to the public under the Apache License 2.0.
module("luci.controller.meshdesk", package.seeall)
function index()
local cc
cc = entry( { "admin", "system", "meshdesk" }, cbi("meshdesk"), _("Cloud Controller"), 90)
end
* Under ~/lede/source/feeds/luci/applications/luci-app-meshdesk/luasrc/model/cbi create **meshdesk.lua** CBI file with the following contents:
m = Map("meshdesk", translate("Cloud Controller"), translate("Supply the following details"))
d = m:section(NamedSection,"settings", "settings","Activation" ) -- info is the section called info in cbi_file
a = d:option(ListValue, "mode", "Mode");
a.optional=false;
a.rmempty = false;
a:value("off","OFF");
a:value("mesh","Mesh");
a:value("ap","AP");
local s_internet = m:section(NamedSection,"internet1","internet","Settings");
local protocol = s_internet:option(ListValue,"protocol", "Protocol");
protocol:value("http","HTTP");
protocol:value("https","HTTPS");
local ip = s_internet:option(Value,'ip','IP Address','IP Address of Cloud Controller');
m.on_parse = function(self)
-- all written config names are in self.parsechain
local current_mode = uci.get("meshdesk", "settings", "mode");
local new_mode = a:formvalue("settings")
if(current_mode ~= new_mode)then
if(new_mode == 'off')then
nixio.fs.copy("/etc/MESHdesk/configs/wireless_original","/etc/config/wireless");
nixio.fs.copy("/etc/MESHdesk/configs/network_original","/etc/config/network");
end
end
end
return m
* Now we completed all the files needed for our LuCI application.
* Next we need to inform our build environment about this new kid on the block.
* For this we issue the following command:
# -i : Recreate the index only. No feed update from repository is performed.
~/lede/source/scripts/feeds update -i
* Now we can install the application
~/lede/source/scripts/feeds install luci-app-meshdesk
* Run the **make menuconfig** pattern and go to **LuCI -> Applications** and select **luci-app-meshdesk**.
* At this stage you also might want to check that the **mode** of the MESHdesk firmware is set to **off** as specified in the initial instructions on the different **mode** options.
* This will ensure you can reach the device on the LEDE default IP Address 0f 192.168.1.1 on the LAN port.
* Save this changes and do another **make** to confirm it compiles right.
* Next we will cover the changing and modifying of the theme.
==== Modify the LuCI theme ====
* LuCI comes by default with the **Bootstrap** theme.
* Themes are like fashion, and music, what is hot today is old news in a year or two.
* The current cool theme is **Material** and LuCI has a Material theme available for us to use.
* Again like the LuCI applications we have to first install the theme and then select it.
~/lede/source/scripts/feeds install luci-theme-material
* Run **make menuconfig** and go to **Luci -> Collections**.
* Deselect **luci**. This will allow you to go back one step and de-select the **luci-theme-bootstrap** and select **luci-theme-material** under **Themes**.
* Save the configuration and do another **make** to confirm it compiles right.
* You might want to do some of your own branding on the header and the footer of the theme.
* For the header edit the following file: **~/lede/source/feeds/luci/themes/luci-theme-material/luasrc/view/themes/material/header.htm**.
* Look for this bit:
<%=boardinfo.hostname or "?"%>
* You might want to change it to this:
MESHdesk
* For the footer edit the following file: **~/lede/source/feeds/luci/themes/luci-theme-material/luasrc/view/themes/material/footer.htm**.
* Look for this bit:
* You might want to change it to this:
* After these changes you can do the **make** routine to confirm it compiles.
* Once the compile if finish you can flash it and give it a spin. The Meshdesk application is refered to as **Cloud Controller** under the **System** menu.
{{ :user_guide:md:luci-app-meshdesk.png?nolink |}}