Я работаю над проектом opendaylight, который использует apache karaf. В начале программы мне нужно, чтобы karaf установил некоторые функции. В настоящее время (и это работает) я вручную набираю это в оболочке, и устанавливаются функции:
$ bin/karaf
Apache Karaf starting up. Press Enter to open the shell now...
100% [========================================================================]
Karaf started in 9s. Bundle stats: 409 active, 410 total
________ ________ .__ .__ .__ __
\_____ \ ______ ____ ____ \______ \ _____ ___.__.| | |__| ____ | |___/ |_
/ | \\____ \_/ __ \ / \ | | \\__ \< | || | | |/ ___\| | \ __\
/ | \ |_> > ___/| | \| ` \/ __ \\___ || |_| / /_/ > Y \ |
\_______ / __/ \___ >___| /_______ (____ / ____||____/__\___ /|___| /__|
\/|__| \/ \/ \/ \/\/ /_____/ \/
Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown OpenDaylight.
opendaylight-user@root>feature:install odl-restconf odl-mdsal-apidocs odl-openflowplugin-flow-services-rest odl-openflowplugin-app-table-miss-enforcer odl-openflowplugin-nxm-extensions odl-restconf-all odl-openflowplugin-flow-services
opendaylight-user@root>
Все это работает. Однако мне нужно, чтобы установка этой функции происходила при запуске автоматически. Я знаю, что существует файл shell.init.script
, и я попытался добавить эту строку в его нижнюю строку:
feature:install odl-restconf odl-mdsal-apidocs odl-openflowplugin-flow-services-rest odl-openflowplugin-app-table-miss-enforcer odl-openflowplugin-nxm-extensions odl-restconf-all odl-openflowplugin-flow-services
Но когда я это делаю, я получаю следующую ошибку :
/opt/opendaylight-0.11.0/etc/shell.init.script: Command not found: feature:install
Мне также известно, что добавление элемента featuresBoot к org.apache.karaf.features.cfg
featuresBoot = odl-restconf
(я сократил его до одной функции для простоты тестирования )
И я получаю эту ошибку:
org.apache.felix.resolver.reason.ReasonException: Unable to resolve root: missing requirement [root] osgi.identity; osgi.identity=odl-restconf; type=karaf.feature; version="[1.10.0,1.10.0]"; filter:="(&(osgi.identity=odl-restconf)(type=karaf.feature)(version>=1.10.0)(version<=1.10.0))" [caused by: Unable to resolve odl-restconf/1.10.0: missing requirement [odl-restconf/1.10.0] osgi.identity; osgi.identity=odl-restconf-nb-rfc8040; type=karaf.feature; version="[1.10.0,1.10.0]" [caused by: Unable to resolve odl-restconf-nb-rfc8040/1.10.0: missing requirement [odl-restconf-nb-rfc8040/1.10.0] osgi.identity; osgi.identity=odl-restconf-common; type=karaf.feature; version="[1.10.0,1.10.0]" [caused by: Unable to resolve odl-restconf-common/1.10.0: missing requirement [odl-restconf-common/1.10.0] osgi.identity; osgi.identity=odl-mdsal-broker; type=karaf.feature; version="[1.10.0,1.10.0]" [caused by: Unable to resolve odl-mdsal-broker/1.10.0: missing requirement [odl-mdsal-broker/1.10.0] osgi.identity; osgi.identity=org.opendaylight.controller.sal-binding-broker-impl; type=osgi.bundle; version="[1.10.0,1.10.0]"; resolution:=mandatory [caused by: Unable to resolve org.opendaylight.controller.sal-binding-broker-impl/1.10.0: missing requirement [org.opendaylight.controller.sal-binding-broker-impl/1.10.0] osgi.wiring.package; filter:="(&(osgi.wiring.package=org.osgi.service.blueprint)(version>=1.0.0)(!(version>=2.0.0)))"]]]]]
Итак, я могу сказать, что karaf по крайней мере подтверждает shell.init.script и org. apache .karaf.features. CFG, однако я явно использую неправильный синтаксис. Я исчерпал свой поиск в Google, чтобы найти правильный синтаксис или найти примеры этого. На самом деле, когда я решаю эту проблему в Google, я получаю советы в духе файла «use shell.init.script», без примера или ссылки на документацию по его использованию.
Для Например, вот аналогичный вопрос скрипт для запуска команд при запуске apache karaf , но ответы на самом деле не являются полными или полными. Я не знаю, куда поместить предложенные команды, et c.
В любом случае, я надеюсь, что кто-то здесь сможет показать мне, какую команду c можно использовать в shell.init.script или org. apache .karaf.features.cfg для достижения sh этой цели. (Цель - эквивалентная команда инициализации для выполнения sh того, что я могу успешно сделать вручную, как отмечено в верхней части)
Обновление: я также попробовал этот тип команды:
echo "feature:install odl-restconf odl-mdsal-apidocs odl-openflowplugin-flow-services-rest odl-openflowplugin-app-table-miss-enforcer odl-openflowplugin-nxm-extensions odl-restconf-all odl-openflowplugin-flow-services" | /opt/opendaylight-0.11.0/bin/karaf
Что тоже не сработало. Я не получаю никаких сообщений об ошибках, я просто знаю, что мой restconf не работает. Как ни странно, я видел, как все функции попадают в оболочку karaf, и оболочка, похоже, зависает (похоже, что она обрабатывает команду), но нет - go после того, как курсор вернулся ко мне.
Благодаря @jamo, его ответ привел меня к ответу. Мне нужно было только добавить это в etc / org. apache .karaf.features.cfg:
featuresBoot = odl-restconf,odl-mdsal-apidocs,odl-openflowplugin-flow-services-rest,odl-openflowplugin-app-table-miss-enforcer,odl-openflowplugin-nxm-extensions,odl-restconf-all,odl-openflowplugin-flow-services, 25921329-8d07-420b-af13-94948bf1a78d
Я считаю, что у трюка был финальный 25921329-8d07-420b-af13-94948bf1a78d
, который шестнадцатеричное значение в файле cfg по умолчанию, и я гарантирую, что оно осталось там.