✶Update 09/2020✶ Omada Controller 3.2.10 for Debian, Raspbian and other Linux systems
Looking for Omada SDN Controller Linux version? It's here.
Last Update: 2020-09-07
[Update: To allow for version switching between different versions of the controller, V3.2.10 received an upgrade. You can install it over an existing V3.2.10 without losing data.]
I just made a .deb package with Omada Controller 3.2.10 for Debian, Raspbian and any other Linux system providing the dpkg installer. Please find the release notes at the end of this post.
This .deb package is in the tradition of the community version of Omada Controller, meaning it contains the same Java classes and remaining files as the official TP-Link version except for the binaries bundled with it (JRE, mongodb) and the start/stop script control.sh (which is replaced by my own version omadactl).
Prerequisites
You will need netstat (package: net-tools), curl and the native versions of JRE, jsvc and mongod (installed by default in Raspbian based on Stretch, unfortunately not so in Debian). Setting up the Oracle JRE and jsvc is left to you as an exercise; here are some suggestions:
Debian and any other Linux distribution:
Install mongodb from the standard repository and JRE8 from Oracle's website. As for jsvc, don't use the Debian binary package, it requires OpenJDK last time I checked this. Instead, get the source code for jsvc (command apt-get source jsvc), compile it and install jsvc manually. Sorry for this inconvenience, but TP-Link decided to use jsvc for Privilege Separation rather than the much more common standard start-stop-daemon or daemonize programs already present on almost any Linux system. Don't blame me for this – omadactl still can use both methods, but you need to use jsvc for Omada Controller versions V3.x.
Raspbian (see also »Limitations« below):
Oracle JRE8, jsvc and mongodb are pre-installed by default in Raspbian (make sure you did not explicitly choose OpenJDK as an alternative for the Oracle JRE). You can easily check whether the required programs are installed on your Raspbian:
$ 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)
$ update-java-alternatives -l
jdk-8-oracle-arm32-vfp-hflt 318 /usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt
$ mongod -version
db version v2.4.14
Thu Apr 30 12:49:28.060 git version: nogitversion
$
Donwload the all-architectures .deb package
Download https://rent-a-guru.de/ftp/omada-controller_3.2.10-3_all.deb
Compare the checksum of the downloaded .deb file for integrity:
$ 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
First, make a backup of your Omada Controller's settings before installing. Either use the web UI or copy the whole content of the subdirectory data in /opt/tplink/OmadaController to a backup directory. You can later move the data directory back into the new controller version.
Install the new version of Omada Controller with:
dpkg -i omada-controller_3.2.10-3_all.deb
After a successful installation the controller will be started automatically.
Notes:
- Ignore the warnings from dpkg about some directories which can't be deleted. dpkg will remove files from older versions of the same package omada-controller, but it won't delete the old database directory (unless you do a manual purge before installing). This means that your database and settings from previous versions of Omada Controller will be retained - you can copy the files in the data subdirectory over to the new version. See »Restoring Omada Controller settings« below.
- Installation directory is /opt/tplink/OmadaController-3.2.10. The symlink /opt/tplink/OmadaController is a short-hand alias to the installation directory.
- Start/stop script has been renamed from tpeap to omadactl (
deprecatedtpeap is still there, it's a symlink to omadactl).
Update: tpeap has been finally removed.
If installing using dpkg, you won't be able to switch between versions of Omada Controller using omadactl's switch command.
Update: The current release of V3.2.10 now allows to switch between this and any newer controller versions.
- Some options of omadactl have no effect with only one version of the controller installed, that is if you install the .deb-Package. dpkg will override the old version before installing the new one. However, since the installation directoy reflects the version (intentionally!), you find all settings in the data subdirectory of the old version's installation directory. See »Restoring Omada Controller settings« below.
- On my RasPi the start of the controller needs ~69 seconds (first time start: ~124 seconds). You might want to increase the standard time-out (70 sec.) for starting the controller if it needs more time on your RasPi (time depends on other active processes during the start). To change the default time-out, use omadactl -S num, where num is the new time-out in seconds. This command will store the new time-out permanently in omadactl's config file and exits immediately (without starting Omada Controller).
Restoring Omada Controller settings
There is an easy way to restore your controller's settings using omadactl. Let's say you want to update Omada Controller 3.2.9 to 3.2.10. The directory OmadaController-3.2.9 will be cleaned by dpkg before it installs the new version in a new directory OmadaController-3.2.10. However, user files will be retained (dpkg prints warnings about which directories are not removed). Now stop the new controller using omadactl and use omadactl with the copydb command:
omadactl -w stop
omadactl copydb OmadaController-3.2.9 OmadaController-3.2.10
This will copy all settings under the data subdirectory from the old version to the new version. Restart the controller and you will see all your EAPs, settings, maps etc. If everything works, you can safely remove the old directory using rm -rf OmadaController-3.2.9.
Limitations
Keep in mind that under Rasbian, which still is a 32-bit OS for compatibility with older Pis, mongodb has a 2GB limit for the size of the database. You could compile a 64-bit kernel / userland programs to get rid of this limit.
If Omada Controller doesn't start automatically on reboot of the RasPi, check with systemctl whether the omadad.service is enabled.
Omada Controller on RasPi is slooooooow, especially if initializing the environment at the first start. Start it with omadactl -W 240, note the time it needs to start (omadactl will print a message) and set the time + a 10 seconds reserve using omadactl -S num, where num is the new time-out in seconds (see the manpage).
More information
For help with omadactl see its manpage attached to this post or use the command: man omadactl2
For customization of omadactl see the config file /etc/default/omada.
Update: has been merged into file CONFIG in /opt/tplink/OmadaController.
For selection of the correct JRE see file CONFIG in /opt/tplink/OmadaController.
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
Release notes for omadactl version 3.0 in package 3.2.10-3
Bugs fixed:
- Fixed non-working verbose option (-v) in omadactl.
New features:
- Changed version dependencies for mongodb: The controller needs either mongodb v2.4 or mongodb-org v3.2.
Release notes for omadactl version 3.0 in package 3.2.10-2
Bugs fixed:
- Fixed a bug in the DEBIAN/control file.
New features:
- Updated omadactl and omadad to version 3.0. The files are no longer installed in /usr/bin and /etc/init.d, but are included in Omada Controller's home dir. The installer adds symlinks for those commands in /usr/bin and /etc/init.d.
- Enabled support in omadactl for switching between controller versions when more than one Omada Controller is installed.
- Merged /etc/default/omadad and /opt/tplink/OmadaController/CONFIG.
Release notes for Omada controller version 3.2.10-1
Bugs fixed by TP-Link:
- Fixed the bug that Omada Controller allow any user to read the files of controller.
- Fixed the bug that controller will report an error when Top Usage data is empty.
Have fun!
- Copy Link
- Subscribe
- Bookmark
- Report Inappropriate Content
Hi @Snc, the step-by-step instructions are in post #1 already, but overall setup varies slightly on different Java environments used in different Raspbian versions. Maybe you have a friend with a bit more Linux experience who can help you to follow the instructions in post #1?
- Copy Link
- Report Inappropriate Content
Thanks for the steps, looking forward to get this running.
I'm not too familiar w/ linux, but have most of the steps done, only thing I need help w/ right now is jsvc
As for jsvc, don't use the Debian binary package, it requires OpenJDK last time I checked this. Instead, get the source code for jsvc (command apt-get source jsvc), compile it and install jsvc manually.
Can you please provide the steps to compile and install jsvc manually? And where to install exacltly? Is there a compiled version already available somewhere to download?
$ sudo dpkg -i omada-controller_3.2.6-1_all.deb
Selecting previously unselected package omada-controller.
(Reading database ... 118004 files and directories currently installed.)
Preparing to unpack omada-controller_3.2.6-1_all.deb ...
Unpacking omada-controller (3.2.6-1) ...
Setting up omada-controller (3.2.6-1) ...
* /etc/init.d/omadad: could not find the Java launcher 'jsvc'.
Processing triggers for systemd (242-7ubuntu3.7) ...
Processing triggers for man-db (2.8.7-3) ...
karimkb@ubuntu:~$ jsvc
Command 'jsvc' not found, but can be installed with:
sudo apt install jsvc
Let me know.
Take Care
- Copy Link
- Report Inappropriate Content
@karimkb, just follow the instruction (apt install jsvc) from your Ubunut system to install jsvc. Probably it installs OpenJDK or Oracle JDK/JRE to satisfy the dependencies. Please test with the JDK/JRE it installs, even if it is OpenJDK.
If it doesn't work with the Java JRE, load the jsvc source code:
Uncomment the appropriate lines in /etc/apt/sources.list starting with a deb-src label.
Then use apt-get source jsvc to install the source. Compile it and install it (make install).
Probably you need to install the Oracle JRE from the Oracle website, but probably it's available in the Ubuntu repositories, too. To find out google for »Installing Oracel JRE in Ubuntu« or similar, there is almost certainly a step-by-step instruction for doing so.
- Copy Link
- Report Inappropriate Content
Thanks, I used that command, it installed openJDK along with it...I had already installed oracle jre 8, so I changed the default to be oracle...was able to install the deb file w/o any errors but the controller is not starting, mongod is not starting, I tested and mongodb is running and working as expected. Is there a log with specific reason as to why it failed to start mongo DB server? Are there any special permissions I would need to set?
2020-03-18 22:13:51 [main] [INFO]-[SubstituteLogger.java:169] - success to load configuration : log4j2.properties
2020-03-18 22:13:51 [main] [INFO]-[SubstituteLogger.java:169] - success to load configuration : jetty.properties
2020-03-18 22:13:51 [main] [INFO]-[SubstituteLogger.java:169] - success to load configuration : user.params.properties
2020-03-18 22:13:51 [main] [INFO]-[SubstituteLogger.java:169] - success to load configuration : mongodb.properties
2020-03-18 22:13:51 [main] [INFO]-[SubstituteLogger.java:169] - success to load configuration : netty.properties
2020-03-18 22:13:51 [main] [INFO]-[SourceFile:94] - going to start mongod.
2020-03-18 22:15:31 [main] [WARN]-[SourceFile:123] - Fail to start mongo DB server
2020-03-18 22:15:31 [main] [WARN]-[SourceFile:78] - com.tp_link.eap.start.a.a: Fail to start mongo DB server
com.tp_link.eap.start.a.a: Fail to start mongo DB server
at com.tp_link.eap.start.c.c.a(SourceFile:124) ~[eap-start-3.2.6.jar:?]
at com.tp_link.eap.start.c.a.e(SourceFile:75) [eap-start-3.2.6.jar:?]
at com.tp_link.eap.start.a.g(SourceFile:324) [eap-start-3.2.6.jar:?]
at com.tp_link.eap.start.a.y(SourceFile:410) [eap-start-3.2.6.jar:?]
at com.tp_link.eap.start.a.a(SourceFile:95) [eap-start-3.2.6.jar:?]
at com.tp_link.eap.start.a.h(SourceFile:350) [eap-start-3.2.6.jar:?]
at com.tp_link.eap.start.EapLinuxMain.b(SourceFile:79) [eap-start-3.2.6.jar:?]
at com.tp_link.eap.start.EapLinuxMain.start(SourceFile:36) [eap-start-3.2.6.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_241]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_241]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_241]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_241]
at org.apache.commons.daemon.support.DaemonLoader.start(DaemonLoader.java:241) [commons-daemon-1.1.0.jar:1.1.0]
2020-03-18 22:15:33 [main] [INFO]-[SourceFile:167] - mongod is not running
Here is what it shows for java/mongod
karimkb@ubuntu:/opt/tplink/OmadaController-3.2.6/logs$ java -version
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
karimkb@ubuntu:/opt/tplink/OmadaController-3.2.6/logs$ mongod -version
db version v3.6.8
git version: 8e540c0b6db93ce994cc548f000900bdc740f80a
OpenSSL version: OpenSSL 1.1.1c 28 May 2019
allocator: tcmalloc
modules: none
build environment:
distarch: x86_64
target_arch: x86_64
karimkb@ubuntu:/opt/tplink/OmadaController-3.2.6/logs$
- Copy Link
- Report Inappropriate Content
Additional error in log:
2020-03-19 00:15:50 [main] [ERROR]-[ContextLoader.java:350] - Context initialization failed
org.springframework.dao.DataAccessResourceFailureException: Timed out after 30000 ms while waiting for a server that matches WritableServerSelector. Client view of cluster state is {type=UNKNOWN, servers=[{address=127.0.0.1:27217, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused (Connection refused)}}]; nested exception is com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches WritableServerSelector. Client view of cluster state is {type=UNKNOWN, servers=[{address=127.0.0.1:27217, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused (Connection refused)}}]
As a test I tried to manually start mongod -port 27217, and that worked...left it running and then tried to run "sudo omadactl start" and it erroed out saying port 27217 is in use, which makes sense.
I just don't know what the cause is for the genric "connection refused" message.
- Copy Link
- Report Inappropriate Content
@karimkb, unfortunately Omada Controller wants to start mongod for itself.
You can neither use the existing mongod server for Omada controller nor run the two mongod services in parallel (what I consider a major bug in Omada controller's concept).
Work-around is to disable the mongod started by the system, albeit this is no solution when needing mongod services for other database-driven applications.
- Copy Link
- Report Inappropriate Content
Thanks for the reply and appricate your assistance.
I did not have mongodb set to auto startup, so there was no instance running, I manally started an instance for testing.
I figured I would start all over and maybe get a newer version of mongodb (instead of 3.6 ... move to 4.2), so uninstalled mongodb and traces of the omada controller package ... reinstalled latest mongodb and tried to run the .deb package again...but now it fails with Package mongodb is not installed :/
karimkb@ubuntu:~$ sudo dpkg -i omada-controller_3.2.6-1_all.deb
Selecting previously unselected package omada-controller.
(Reading database ... 118775 files and directories currently installed.)
Preparing to unpack omada-controller_3.2.6-1_all.deb ...
Unpacking omada-controller (3.2.6-1) ...
dpkg: dependency problems prevent configuration of omada-controller:
omada-controller depends on mongodb (>= 1.2.4); however:
Package mongodb is not installed.
dpkg: error processing package omada-controller (--install):
dependency problems - leaving unconfigured
Processing triggers for systemd (242-7ubuntu3.7) ...
Processing triggers for man-db (2.8.7-3) ...
Errors were encountered while processing:
omada-controller
karimkb@ubuntu:~$ mongod -version
db version v4.2.3
git version: 6874650b362138df74be53d366bbefc321ea32d4
OpenSSL version: OpenSSL 1.1.1c 28 May 2019
allocator: tcmalloc
modules: none
build environment:
distmod: ubuntu1804
distarch: x86_64
target_arch: x86_64
karimkb@ubuntu:~$ java -version
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
- Copy Link
- Report Inappropriate Content
@karimkb, did you install the mongodb meta package or did you install mongod-server package alone?
If the mongodb meta-package is indeed installed, but still not recognized by the omada-controller package, you can try the official Omada controller version from TP-Link, which contains the mongod binary.
The goal of the community version is to be architecture-independent, but if packet management fails, try to use TP-Link's x86-specific version. You could also unpack the official controller version without installing it and copy the mongod binary contained therein to /opt/tplink/OmadaController/bin if you want. See the manpage of dpkg for the command to unpack rather than to install a package.
- Copy Link
- Report Inappropriate Content
I don't know what the "meta" package is, I installed it using sudo apt install -y mongodb-org...which I'm assuming is the meta package.
Thanks for the instructions, but I think w/ my limited linux experince, these steps are a little over my head.
- Copy Link
- Report Inappropriate Content
Ok, figured it out, uninstalled latest version of mongo, installed version 3.6.8 again (with this version the deb package installed as expected, must be somehting w/ version 4)...looking at one of your prevoius posts, I had to get rid of the --nohttpinterface option from the mongodb.properties...after that the controller was able to start.
- Copy Link
- Report Inappropriate Content
Information
Helpful: 11
Views: 77841
Replies: 168