我按照以下步骤(取自此处和此处)在 Hyper-V 上运行的 Ubuntu Server 18.04.4 虚拟机上安装了 ONOS 2.3.0 :
- 首先,我安装了 Java 11(openjdk-11-jdk 和 openjdk-11-jre)、maven 和 curl;
- 然后我从这里下载了 ONOS 2.3.0并用
tar xzf onos-2.3.0.tar.gz
; - 最后,我导出了所需的环境变量
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
。
当我尝试使用命令./onos-service start
(从普通用户和 sudo 测试)启动它时,它给了我以下错误:
21:54:57.869 ERROR [onos-core-net] FrameworkEvent ERROR - org.onosproject.onos-core-net
org.osgi.framework.ServiceException: Service factory returned null. (Component: org.onosproject.store.cfg.DistributedComponentConfigStore (6))
at org.apache.felix.framework.ServiceRegistrationImpl.getFactoryUnchecked(ServiceRegistrationImpl.java:380)
at org.apache.felix.framework.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:247) org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834)
[...]
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1373)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308) at java.base/java.lang.Thread.run(Thread.java:834)
[...]
21:54:57.881 WARN [NettyMessagingService] Failed to bind TCP server to port 0.0.0.0:9876 due to {}
java.net.BindException: Address already in use
at java.base/sun.nio.ch.Net.bind0(Native Method)
[...]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:906)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at java.base/java.lang.Thread.run(Thread.java:834)
21:54:57.899 ERROR [onos-core-primitives] bundle org.onosproject.onos-core-primitives:2.3.0 (192)[org.onosproject.store.atomix.impl.AtomixManager(115)] : The activate method has thrown an exception
java.util.concurrent.CompletionException: java.net.BindException: Address already in use
at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:331)
[...]
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.net.BindException: Address already in use
at java.base/sun.nio.ch.Net.bind0(Native Method)
at java.base/sun.nio.ch.Net.bind(Net.java:455)
at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227)
at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:132)
at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:563)
... 12 more
连接到 karaf 实例并ssh -p 8101 karaf@localhost
确认 ONOS 正在工作(至少部分),Web 界面登录加载,但登录后它挂起说ONOS GUI not ready yet... please stand by...
。
有谁知道如何解决这个问题?
提前致谢。
2020 年 3 月 19 日更新:我在另一台使用 VirtualBox 的 PC 上按照完全相同的步骤准备了另一台虚拟机,并分配了较低的虚拟资源,并且它可以工作。老实说,我不明白为什么它在 Hyper-V 配置上失败。
更新 20-03-2020:我已经重新安装了 Ubuntu,直接从安装程序配置网络,以及 ONOS 离线的先决条件和依赖项(通过 下载到另一台机器上sudo apt install --download-only <package-name>
)并且它工作正常。我认为问题与网络配置中的某些内容有关,该配置无法让他识别端口 9876 上的自己的进程(请参阅上面的 WARN)。希望这对其他人有帮助。