[Update 11/2020] Omada SDN Controller 4.2.4 for Devuan, Debian and other Linux systems
![](https://static-community.tp-link.com/icon/da60c5d6ab2a4c37b8c2c3a09db5cf0e.jpeg)
First Version: 2020-07-15
Last Update: 2020-11-20
In good old tradition of the community version of Omada Controller I just re-packaged latest Omada SDN Controller 4.2.4 for installation on Devuan, Debian and any other Linux system providing the dpkg installer.
There have been massive changes in the omadactl script and I took the opportunity to re-introduce switching between controller versions as introduced with Omada SW Controller V2.7 years ago. This means that you can install Omada SDN Controller without overwriting your existing controller and you can switch between all installed versions on the fly w/o the need to downgrade. I think this is handy if you want to just preview Omada SDN Controller for now.
However, it has its price: Omada Controller V3.2.10 needs to be updated, too, if you want to use this feature. What's more, only V3.2.10 is supported for switching, but future versions of SDN Controller community version will support this function, too (for this to work the version number of the software package needed to be moved to the package name). This means that the old versions will not automatically be removed when installing a new version. You can manually remove the old version if the newly installed one runs to your satisfaction.
Standard Disclaimer
The community version contains the original Omada SDN Controller from TP-Link, but with Privilege Separation enabled by default, as well as omadactl, which is an enhanced shell script used to start/stop and to manage the Omada SDN Controller server process. For a full list of the differences between the community and the official version see the section at the end of this post. TP-Link only supports their official version of the controller, but naturally this will affect the controller software in this community version, too. As for omadactl, this shell script is supported by me (R1D2) and bugs are fixed when reported.
Note that I can not give any support for installation of the software on a particular Linux system.
Please don't ask for step-by-step instructions or even videos on how to install the software. Every information needed to install the software is described in this post. If you cannot manage to get the software running on your Linux system, consider use of the OC200 or OC300 controller, which both also use Linux, but hide the details of the software setup.
Prerequisites
There are a few things to consider before installing Omada SDN Controller:
- As usual, you need Oracle JRE8, jsvc, mongodb, netstat (package net-tools) and curl.
Make sure you have those utilities installed before installing Omada SDN Controller. See the notes below.
- Important: If you want to adopt your EAPs, you need to update their firmwares.
See the posts from TP-Link in this forum and the Omada Controller Upgrade Guide which is included in the Omada SDN Controller package as well as attached to this post for your convenience.
MongoDB database
Omada SDN controller requires at least mongodb V3.2 or newer. The following packages are known to work (note the different package names!):
OS |
Package name |
Version (dpkg) |
---|---|---|
Devuan ASCII |
mongodb |
3.2.11-2+deb9u1 |
Debian 8 |
mongodb-org |
3.2.22 |
Debian 8 |
mongodb-org |
3.6.22 |
Note that only mongodb V3.2 or mongodb-org V3.2 supports both, the old Omada Controller V3.2.10 and the new SDN Controller V4.
- On Devuan ASCII just install the package mongodb from the repository.
- On Debian and related distributions follow the installation instructions on mongodb.org for either V3.2.22 if you want to switch between Omada Controller versions:
https://docs.mongodb.com/v3.2/tutorial/install-mongodb-on-debian/
- If you want run only Omada SDN Controller and need no compatibility of mongodb with Omada Controller V3.2.10, install mongodb-org V3.6 (or higher):
https://docs.mongodb.com/v3.6/tutorial/install-mongodb-on-debian/
Java Runtime Environment
It's recommended to use Oracle JRE. Some platforms offer a package in their repository, others don't. I prefer to donwload JRE8 from Oracle's website directly and to use the update-alternatives(8) mechanism to install the latest version. This is how it works:
- Download the 64-bit JRE for Linux (you don't need the full JDK).
- Extract the TAR archive into a directory of your choice (e.g. /opt/jvm).
- Install the JRE using update-alternatives:
update-alternatives --install /usr/bin/java java /opt/jvm/jre1.8.0_261/bin/java 261
Over the time your installed JRE packages might look like this:
# update-alternatives --list java
/opt/jvm/jre1.8.0_171/bin/java
/opt/jvm/jre1.8.0_181/bin/java
/opt/jvm/jre1.8.0_251/bin/java
/opt/jvm/jre1.8.0_261/bin/java
#
You can configure the version to use with the command update-alternatives --config java.
See the manpage of update-alternatives for more information.
Commons Daemon (jsvc)
You can try to install jsvc from the repository of your Linux distribution. However, last time I checked on Debian 8 jsvc required OpenJDK, which – if being installed – will configure itself as the default JRE using the update-alternatives mechanism. In this case I recommend to download the jsvc source and compile it instead of installing it via apt/apt-get. The jsvc binary actually does not require the OpenJDK, just the package jsvc is contained in depends on OpenJDK for whatever reasons.
Now for Omada SDN Controller: donwload the all-architectures .deb package
- Download the SDN controller from https://rent-a-guru.de/ftp/omada-sdn-controller-4.2.4_1_all.deb. Note the new package name, which starting with v4.2.4 contains the version number as part of its name.
- While you're at it, download the update for V3.2.10 from https://rent-a-guru.de/ftp/omada-controller_3.2.10-3_all.deb if you want to use switching between controllers. You can either install this update before or after installing the SDN Controller (see also the above note about mongodb versions supported by both, Omada Controller V3.2.10 and SDN Controller V4).
- Compare the checksums of the downloaded .deb files for integrity:
$ md5sum -b omada-sdn-controller-4.2.4_1_all.deb
a1d825befbb126dd9b868058205078a0 *omada-sdn-controller-4.2.4_1_all.deb
or:
$ sha256sum -b omada-sdn-controller-4.2.4_1_all.deb
d8414d75597322ecb7ca57cb293dfdfe7343f4e60365f8a6e6da09788ecfa77a *omada-sdn-controller-4.2.4_1_all.deb
- For the Omada Controller V3.2.10-3 package update:
$ md5sum -b omada-controller_3.2.10-3_all.deb
6b986ee67828d4c1e55d8dc6af1e8cbc *omada-controller_3.2.10-3_all.deb
or:
$ sha256sum -b omada-controller_3.2.10-3_all.deb
ef77aa88a3196d7663f35e59357a67833b86fa783923df480f56318ea84e5de2 *omada-controller_3.2.10-3_all.deb
Installation
Since SDN Controller has a new package name, your existing Omada Controller will not be overwritten, so it will retain all data. Again, read the Omada Controller Upgrade Guide to migrate your existing site to the new controller if you desire so.
Installing the V3.2.10 package update will also keep all settings, but to be on the safe site, make a backup before installing it. Please note that copying the database from an old controller to the new SDN Controller does not work; you need to migrate your site if you want to see the settings in the new controller.
Optional step (can be left out or executed at a later time if you're in a hurry): upgrade Omada Controller V3.2.10 if you have installed it:
dpkg -i omada-controller_3.2.10-3_all.deb
Now install Omada SDN Controller with the following command:
dpkg -i omada-sdn-controller-4.2.4_1_all.deb
Note that installing this package will overwrite the files /usr/bin/omadactl, /etc/init.d/omadad and /etc/default/omadad in an existing V3.2.10 installation if you left out the optional step above. Due to changes in Omada SDN Controller the locations of those files needed to be changed, too. They are now contained in Omada Controller's home directory (/opt/tplink/OmadaController).
In order to allow different versions of the Omada SDN Controller installed at the same time, the version number is now part of the package name. For example, your list of installed controller versions might look like this:
$ dpkg -l | fgrep omada
ii omada-controller 3.2.10-3 all Omada Controller for TP-Link's ...
ii omada-sdn-controller 4.1.5-2 all Omada SDN Controller for ...
ii omada-sdn-controller-4.2.4 1 all Omada SDN Controller for ...
$
Version switching
Now for the switching part. Try the following command (you can shorten »version« to just »v«):
$ omadactl -l version
Currently installed versions:
EAP Controller 2.7.0
Omada Controller 3.2.10
Omada Controller 4.1.5
Omada Controller 4.2.4 (current)
$
Next, try the switch command (as root):
# omadactl stop
Stopping Omada SDN Controller
# omadactl switch 3.2.10
Switched to 'OmadaController-3.2.10'. Now restart Omada Controller to activate it.
# omadactl switch 4.2.4
Switched to 'OmadaController-4.2.4'. Now restart Omada Controller to activate it.
#
That's my way of doing »downgrades« in just no time.
Starting/stopping the controller
You can start the controller synchronously (option -w) or asynchronously (no option) with omadactl:
# omadactl -w start
Starting Omada SDN Controller .................................................................................................
Omada SDN Controller started successfully after 43 seconds.
Direct your browser to http://your_hostname:8088 for accessing Omada SDN Controller.
#
On my embedded system it needs ~94 to ~99 seconds to start, on my Debian server it needs ~43 seconds, YMMV. You can specify a timeout with option -W sec when starting the controller synchronously and you can set the default timeout permanently with option -S sec (w/o starting the controller). The default timeout has been raised to 120 seconds for the SDN controller. The initial setup of the database will require more time at the very first start of Omada Controller.
To stop the controller use the stop command. To show it's status use the status command (obvious, isn't it?):
# omadactl stop
Stopping Omada SDN Controller
# omadactl status
Omada SDN Controller is not running
# omadactl start
Starting Omada SDN Controller
# omadactl status
Omada SDN Controller is still initializing, please wait ...
#
The script /etc/init.d/omadad will start the controller asynchronously at boot time to avoid delaying the boot sequence. You could use this command to start or stop the controller, too, but omadactl gives you much more functions. See the manpage for more information.
Changes in package omada-sdn-controller-4.2.4_1
- Moved version number to the package name to allow different versions of the same software to co-exist.
- Fixed double sourcing of OmadaController/CONFIG and /etc/default/omada in omadactl.
- Removed obsolete code from omadactl.
Changes in package omada-sdn-controller-4.1.5-2
- Fixed non-working verbose option (-v) in omadactl.
- Fixed dump and restore options of omadactl.
- Fixed bug in omadactl for getting properties.
- Fixed version dependencies for mongodb: The SDN Controller requires the package mongodb-org v3.2 or better.
Changes in package omada-sdn-controller-4.1.5-1
- Initial version.
- Modified omadactl to work with Omada SDN Controller.
Changes in package omada-controller-3.2.10-3
- Fixed non-working verbose option (-v) in omadactl.
- Fixed version dependencies for mongodb: The (old) Omada Controller requires either the package mongodb v2.4 or mongodb-org v3.2.
Changes in package omada-controller-3.2.10-2
- Changed location of duplicate files in different controller packages.
- Fixed version dependencies for mongodb to accept package mongodb-org.
Changes in package omada-controller-3.2.10-1
- Initial version.
More information
- For help with omadactl see its manpage: man omadactl
- For customization of omadactl see the config file CONFIG in the controller's home directory (/etc/default/omadad is gone).
- For a list of all files installed by the .deb package use the command: dpkg -L omada-controller
- If you want to uninstall this .deb package (except the database and other files created at run-time), use the »remove« option of dpkg: dpkg -r omada-controller
- If you want to uninstall this .deb package (including the database and other files created at run-time), use the »purge« option of dpkg: dpkg -P omada-controller
- For the release notes of Omada SDN Controller, the Omada Controller Upgrade Guide and the changelog for omadactl see the directory /usr/share/doc/omada-controller-4.1.5.
Differences and commonalities between official SDN Controller and Community Version (CV)
- The CV uses exactly the same JAVA class files from the official version, but is architecture-independend, that means it does not include any bundled binaries. Therefore you have to use up-to-date binaries for the required utilities which are most often installed on your Linux system anyway (curl, netstat, mongod, jsvc, java and a JRE of your choice). SDN Controller V4.1.5 finally removed previously bundled binaries as well as I always did suggest for its predecessors V2.x/V3.x.
- Official version 4.1.5 released 2020-07-13 has two bugs which prevent the controller from starting if Privilege Separation is used. If Privilege separation is not used, both bugs cause creation of a directory outside the Omada Controller's home directory with root ownership. Those bugs have been fixed in the CV already and have been reported to TP-Link.
- The CV automatically creates a role account »omadad« when installing the .deb-Package in order to enforce Privilege Separation, which is standard on UNIX/Linux for every server process started at boot time. To avoid the risk of potential root exploits you do not want to run the controller with admin privileges once it has been started.
- The CV uses improved shell scripts omadactl(8) and /etc/init.d/omadad for starting/stopping and managing the server. Both scripts replace the control.sh script found in the official version, which since version 3.x has incorporated a few critical, but not all mechanisms offered by omadactl.
- The CV's directory tree has much stricter file permissions which deny access for ordinary users to sensitive data such as certificates, properties, the controller's database and backups created with omadactl.
- The CV allows to have several controller versions installed at the same time and omadactl offers an easy way to switch between those instances on the fly.
- The CV uses the file CONFIG in Omada Controller's home directory for version- and system-dependend settings used by omadactl.
- omadactl allows to create backups from the command line using the mongodump(1) and mongorestore(1) utilities, thus enabling scheduled backups using the cron(8) daemon.
- omadactl allows to copy the database files from one version to another version, thus cloning the settings. Note: Direct database copies do not work for the transition from Omada Controller (V3) to Omada SDN Controller (V4).
- omadactl allows to raise or lower the Linux kernel's scheduling priority (niceness) for the Omada server process at start time or for an instance already running.
Enjoy! Sunshine!
Attached file: Omada Controller Upgrade Guide (also included in the package).
- Copy Link
- Subscribe
- Bookmark
- Report Inappropriate Content
Hi Roby, cool, thanks for the info!
- Copy Link
- Report Inappropriate Content
that is interesting... Super long as u said the setup.. But most interesting, thks for posting the link! 😍
- Copy Link
- Report Inappropriate Content
I have been running the Docker version for about a week. Happy to report I have not yet run into any issues. Thanks @Ronald1965!
- Copy Link
- Report Inappropriate Content
@R1D2 I have been struggling to install java 8 on a debian 9 system. It seems that every link I find in google is using some deprecated repository, or it can't find java 8 and why don't you go ahead and use 11?
Can someone, for the love of linux, please just tell me the commands I need to use to install java 8 on a debian system? Or at least what is the package name that apt install won't choke on? Or a good repository?
I have tried installing this controller on Centos, Ubuntu and now Debian, and every single one of them has some problem like it can't find java_home, or it's using java 11, or something.
It would be nice to have a step by step (and I mean every step, not just "Oh, install java") to get this thing running on Linux. I have it running on Windows with absolutely no problems. I'd love to use linux, but everything is just a sea of google searches every time I try to do something. Sorry for the rant.
Thanks,
chili
- Copy Link
- Report Inappropriate Content
chili-bean wrote
or it can't find java 8 and why don't you go ahead and use 11?
Because Omada SDN Controller requires JRE8. Complain to TP-Link, please.
I have tried installing this controller on Centos, Ubuntu and now Debian, and every single one of them has some problem like it can't find java_home, or it's using java 11, or something.
I don't know CentOS or Ubuntu, but at least the latter is Debian-based and Debian in their endless wisdom decided to not support Oracle JRE8 in their repos. They prefer OpenJDK. Complaints need to go to the Debian maintainers.
Now, Debian is a Linux, but Linux is not Debian. If those guys dictate what users can install and what not, it's not the fault of Linux.
And please don't argue with me about Windows, you will lose against someone like me who never ever had to use crappy DOS/Windows in meanwhile 40 years IT business. In the late 1980ies Microsoft even did distribute the (much better) Xenix system, what back then was what Linux is today: the most often used UNIX system. MS did not develop Xenix (thank's God), they just were a distributor among others.
Yeah, and they had DOS. With flat files filesystem, no directories. They developed DOS further on their Xenix-based development machines to have something to make money out of crap. You could have bought Xenix from them, but then they could not force you to buy more software only available from MS.
They soon noticed that they need directories in DOS b/c the filesystem got kind of messy over the time and so MS did stole the idea of directories (among other ideas) from Xenix, but changed the '/' (slash character) to '\' (backslash character) in pathnames just to annoy people and make them dependent on Microsoft's DOS. Those guys at MS are pretty good sales people, but no real developers at all.
Where we are today? Since WinNT MS uses UNIX under the hood for the OS (requirement of governmental customers in the U.S.: Windows must be POSIX-compatible, i.e. understand UNIX/Linux system calls, else governmental institutions would not buy it anymore).
So what you have today after 40 years permanent annoyance with Microsoft software is a still crappy Windows graphical UI software on top of a stable, reliable UNIX-like (and POSIX-compliant) »real« operating system kernel. 40 years money-spending to MS to just come from Xenix to UNIX with the whole pathology of MS. For me it was way cheaper, no single cent spent to MS!
Can someone, for the love of linux, please just tell me the commands I need to use to install java 8 on a debian system?
- Go straight to the Oracle website. They even provide a nice web address for it: https://www.java.com/en/download/manual.jsp
- Select and download the JRE for Linux x64. Ignore the weird suffix (.gz), it's a gzip'ed TAR archive (.tgz). Oracle people are Windows guys (sic!).
- As root, create a directory of your choice, I recommend: /opt/jvm
- Change into the new directory and, still as root, extract the TAR archive: tar xvzf jre-8u261-linux-x64.gz (replace with the actual name of the filr you did save the download in).
- Now install JRE in a way compatible with a parallel installation of OpenJDK or whatever you have from a Debian repository. This will avoid replacement of the java symlink when installing another JRE from a repository:
# update-alternatives --install /usr/bin/java java /opt/jvm/jre1.8.0_261/bin/java 261
update-alternatives: using /opt/jvm/jre1.8.0_261/bin/java to provide /usr/bin/java (java) in auto mode
# ^D
Finally check which version will be executed when you run the »java« executable. See also the manpage of update-alternatives to learn about this concept:
$ which java
/usr/bin/java
$ ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 Aug 23 2018 /usr/bin/java -> /etc/alternatives/java
$ ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 30 Aug 6 20:41 /etc/alternatives/java -> /opt/jvm/jre1.8.0_261/bin/java
$ java - version
java version "1.8.0_261"
Java(TM) SE Runtime Environment (build 1.8.0_261-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode)
$
Done. Pretty easy if you go to the primary source for Oracle's JRE8.
- Copy Link
- Report Inappropriate Content
I wish I had saved the detailed steps from my Ubuntu 18.04 install but I had to enter the path to openjdk-8-jre in several config files to get it to work
I see that @R1D2 posted instructions for Oracle Java while I was composing this and got distracted!
- Copy Link
- Report Inappropriate Content
@R1D2 Thank you. I did have to use "update-alternatives --config java" to switch from version 11, which was apparently installed on my system.
Also, I didn't mean to say windows was all that great, what I meant was that I double-click on a .exe file and it installs everything I need first time. No cruising google or forums to get it to work. As you can see, I would prefer to use linux as it's much nicer for controllers etc (no constant reboots for updates, or bloated disk usage/memory usage), but it's just so darn hard sometimes.
- Copy Link
- Report Inappropriate Content
chili-bean wrote
what I meant was that I double-click on a .exe file and it installs everything I need first time. No cruising google or forums to get it to work.
Yes, it installs everything needed with each new application. The surprise begins when trying to run two applications at the same time which installed their own copies of mongodb or different drivers for the same hardware adapter. Suddenly »something doesn't work since last week anymore«.
For example, see this thread where a customer bought a Pharos CPE and replaced it three times by a new device b/c his Windows PC refuses to connect to the web UI. I guess his system got so screwed up over the time, that even a web browser doesn't work anymore as expected. Typical recommendation at the end: remove the OS, re-install from the beginning. And remember two reboot seven dozen times during installation.
Did you know that MS did hide a big movie in their Office product, which shows you their office rooms in Redmond if you manage to find the secret keycode to start playing this movie? They waste your disk space with such a crap, don't even tell you about it and at the end one wonders why the new Windows version needs much more disk space and more RAM, forcing you to buy a new PC. Big business for MS, waste of time for the customer.
I worked with colleagues who had to support Windows (I gave Linux trainings, this was their main business). About 70% of their time those colleagues had been hunting for bugs, misconfigurations, broken registries, missing drivers etc. etc. Only 30% of their time was spent for productive work.
Now we will see what happens if MS finishes »their own Linux« currently being »developed« there (that means being »infiltrated with standards-breaking code«). You can bet that it won't interoperate easily with other open systems. MS has a long history of bringing FUD to the IT, breaking common open standards and always make their own thing. The notation of »their own Linux« alone discloses their agenda.
Back to Omada Controller: Until v4.1.5 Omada Controller for Linux came bundled with (some) prerequisites such as JRE and a pretty out-of-date version of mongodb, too. It was directly ported 1:1 from Windows. Since this did interfere with system-provided mongodb on Linux I urged R&D to use the system-provided packages instead. But the issue is still not resolved fully b/c Omada Controller starts its own instance of mongodb instead of just connecting to an already runing one provided by the system. This still needs to be changed IMO.
Anyway, on distributions like Raspbian (a Debian fork) or Devuan (another Debian fork) installation of Omada Controller is just a matter of installing the .deb package and it runs out of the box.
Recently Debian lost many developers and maintainers from their core team when introducing systemd in Debian, which is a good example for doing software the wrong way by following the Windows philosophy. Everything you can think of is going to be integrated in systemd.
The list of bugs and exploits in systemd grows every day and sysadmins learn to waste an increasing amount of their time just for hunting bugs in systemd. The core members from Debian who left the project are now working on the systemd-free Devuan project. Take a look at this distribtuion (https://devuan.org/) if you want a stable system suitable for use on servers.
But don't worry with the big Linux learning curve. Every day you learn more and after some time you can always find a solution very quickly to solve any task using Linux. At least you should now be able to run Omada Controller on your Debian system, provided you have the latest stable distribution which supports a modern mongodb.
- Copy Link
- Report Inappropriate Content
Hi @unmesh,
if OpenJDK uses the update-alternatives mechanism (resp. update-java-alternatives on some systems), the java binary should set all required evironment variables automatically (at least it does so with Oracle JRE8). Just make sure the correct alternative has been selected.
Maybe, in OpenJDK you have to set JAVA_HOME expliciltly. Just assign it the top-level directory of your Java JRE or JDK. You can find out this location by using dpkg with the list options (-l and -L). Then set JAVA_HOME in the CONFIG file present in Omada Controller's top-level directory /opt/tplink/OmadaController for versions 3.2.10 and 4.1.5 (file /etc/default/omadad in previous versions).
- Copy Link
- Report Inappropriate Content
- Copy Link
- Report Inappropriate Content
![](https://static-community.tp-link.com/icon/da60c5d6ab2a4c37b8c2c3a09db5cf0e.jpeg)
Information
Helpful: 4
Views: 47466
Replies: 139
Voters 4
![voter's avatar](/avatar/avatar-9.png)
![voter's avatar](/avatar/avatar-4.png)
![voter's avatar](/avatar/default.png)
![voter's avatar](/avatar/avatar-12.png)