Сборка ubus

Форум программистов
anpaza
Сообщения: 9
Зарегистрирован: 24 ноя 2018, 01:14

Сообщение anpaza » 02 дек 2018, 20:36

Пытаюсь собрать ubus.
Проблема в том, что после make install в каталоге
build_dir/target-aarch64_cortex-a53_glibc-2.27/ubus-2018-07-26-40e0931e/ipkg-install
появляется и каталог opt/, и каталог usr/.

 
/opt
/opt/sbin
/opt/sbin/ubusd
/opt/bin
/opt/bin/ubus
/opt/include
/opt/include/libubus.h
/opt/include/ubus_common.h
/opt/include/ubusmsg.h
/opt/lib
/opt/lib/libubus.so
/usr
/usr/lib
/usr/lib/lua
/usr/lib/lua/ubus.so
Свернуть

При этом библиотека lua-ubus устанавливается в usr/lib/lua/ubus.so
А библиотека libubus - в opt/lib/libubus.so.

Дальше происходит вот такое:

Код: Выделить всё

cp -fpR /home/zap/src/Android/entware/Entware/build_dir/target-aarch64_cortex-a53_glibc-2.27/ubus-2018-07-26-40e0931e/ipkg-install/usr/lib/*.so /home/zap/src/Android/entware/Entware/build_dir/target-aarch64_cortex-a53_glibc-2.27/ubus-2018-07-26-40e0931e/.pkgdir/libubus/lib/
cp: cannot stat '/home/zap/src/Android/entware/Entware/build_dir/target-aarch64_cortex-a53_glibc-2.27/ubus-2018-07-26-40e0931e/ipkg-install/usr/lib/*.so': No such file or directory


Естественно, ведь libubus.so находится в /opt а он его ищет в /usr.

В package/system/ubus/Makefile правило для установки lib/libubus.so выглядят не-opt-ифицировано:

Код: Выделить всё

define Package/libubus/install
        $(INSTALL_DIR) $(1)/lib
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so $(1)/lib/
endef


Похоже на "недо-opt-ифицированный" пакет. При этом, если судить по описанию libubus, это один из ключевых пакетов OpenWrt.
Он вообще должен собираться? Он вообще нужен? (пардон за детский вопрос, раньше не углублялся в OpenWrt).

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 02 дек 2018, 20:59

anpaza писал(а):Источник цитаты Похоже на "недо-opt-ифицированный" пакет.

Не все пакеты, которые в фидах или транке "opt-ифицированны", только те, что собираются.

Маленькая хитрость. Мы, перед тем, как выложить пакеты смотрим - нет ли чего вне /opt в папке staging_dir/target-xxxx/root-yyyy
Если есть, то "opt-ифицируем".

anpaza
Сообщения: 9
Зарегистрирован: 24 ноя 2018, 01:14

Сообщение anpaza » 02 дек 2018, 21:43

Понял, значит ubus просто не нужен.
Я его opt-ифицировал, но после этого не собралась библиотека libiwinfo -

Код: Выделить всё

include/iwinfo/utils.h:25:10: fatal error: libubus.h: No such file or directory

Не то, чтобы она мне нужна, но непонятно, откуда она хотела взять libubus.h, если он не был установлен ни в один из пакетов libubus, libubus-lua, ubus и ubusd (которые собираются из пакета ubus). В "больших" линупсах обычно есть ещё пакет с названием типа ubus-dev(el)?, который должен устанавливаться в buildroot, здесь же я такого не вижу. Как в OpenWrt принято поступать в таких случаях?

И ещё вопрос. Есть где-нибудь файл конфига, которым собираются пакеты с bin.entware.net? В принципе, можно действовать итерационно, но это утомительно.

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 02 дек 2018, 21:51

anpaza писал(а):Источник цитаты здесь же я такого не вижу. Как в OpenWrt принято поступать в таких случаях?

Должна быть правильная (opt-ифицированная) секция Build/InstallDev - именно там копируются файлы (хедеры и либы) необходимые для сборки зависимых пакетов.
anpaza писал(а):Источник цитаты Есть где-нибудь файл конфига, которым собираются пакеты с bin.entware.net?

В папке configs лежат конфиги для разных архитектур, о чем в wiki написано - https://github.com/Entware/Entware/wiki ... d-platform
Или я неправильно понял вопрос?

anpaza
Сообщения: 9
Зарегистрирован: 24 ноя 2018, 01:14

Сообщение anpaza » 02 дек 2018, 22:19

Да, правильно поняли вопрос. Забыл про вики entware, сочинял конфиг с нуля.
Теперь есть практически полный список оптифицированных пакетов.
Заметил, что пакет uci не оптифицирован. То есть, в optware настройка через luci не используется?
Жаль, хотел воспользоваться.

Насчёт InstallDev, такого раздела нет в Makefile от ubus. Хотя каким-то образом libubus.h попал в staging_dir/.../opt/include/. Но iwinfo искал его в /usr/include - ну, видимо, издержки недооптификации.

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 02 дек 2018, 23:08

anpaza писал(а):Источник цитаты То есть, в optware настройка через luci не используется?

Совершенно верно - не используется.
anpaza писал(а):Источник цитаты Насчёт InstallDev, такого раздела нет в Makefile от ubus.

Для случая сборки cmake есть операция по умолчанию.
anpaza писал(а):Источник цитаты Но iwinfo искал его в /usr/include

Скорее всего нужно допилить iwinfo.

PS Кстати тут - https://github.com/Entware/Entware/blob ... ake.mk#L79 может быть не до-opt-ифицировано.
Пакетов, где используется cmake немного и в них может быть переопределено действие по умолчанию
https://github.com/Entware/rtndev/blob/ ... kefile#L39

PPS Добавил на будущее про cmake сюда - https://github.com/Entware/Entware/projects/3

anpaza
Сообщения: 9
Зарегистрирован: 24 ноя 2018, 01:14

Сообщение anpaza » 03 дек 2018, 10:12

Касательно тикета - после оптификации ubus

на всякий случай diff
diff --git a/package/system/ubus/Makefile b/package/system/ubus/Makefile
index fb2d03d..ca4d8cb 100644
--- a/package/system/ubus/Makefile
+++ b/package/system/ubus/Makefile
@@ -47,30 +47,30 @@ define Package/libubus-lua
TITLE:=Lua binding for the OpenWrt RPC client
endef

-TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include -flto
+TARGET_CFLAGS += -I$(STAGING_DIR)/opt/include -flto
TARGET_LDFLAGS += -flto

CMAKE_OPTIONS = \
- -DLUAPATH=/usr/lib/lua
+ -DLUAPATH=/opt/lib/lua

define Package/ubus/install
- $(INSTALL_DIR) $(1)/bin
- $(CP) $(PKG_INSTALL_DIR)/usr/bin/ubus $(1)/bin/
+ $(INSTALL_DIR) $(1)/opt/bin
+ $(CP) $(PKG_INSTALL_DIR)/opt/bin/ubus $(1)/opt/bin/
endef

define Package/ubusd/install
- $(INSTALL_DIR) $(1)/sbin
- $(CP) $(PKG_INSTALL_DIR)/usr/sbin/ubusd $(1)/sbin/
+ $(INSTALL_DIR) $(1)/opt/sbin
+ $(CP) $(PKG_INSTALL_DIR)/opt/sbin/ubusd $(1)/opt/sbin/
endef

define Package/libubus/install
- $(INSTALL_DIR) $(1)/lib
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so $(1)/lib/
+ $(INSTALL_DIR) $(1)/opt/lib
+ $(CP) $(PKG_INSTALL_DIR)/opt/lib/*.so $(1)/opt/lib/
endef

define Package/libubus-lua/install
- $(INSTALL_DIR) $(1)/usr/lib/lua
- $(CP) $(PKG_BUILD_DIR)/lua/ubus.so $(1)/usr/lib/lua/
+ $(INSTALL_DIR) $(1)/opt/lib/lua
+ $(CP) $(PKG_BUILD_DIR)/lua/ubus.so $(1)/opt/lib/lua/
endef

$(eval $(call BuildPackage,libubus))
Свернуть


libubus.h проинсталлировался куда надо -
target-aarch64_cortex-a53_glibc-2.27/opt/include/libubus.h

Это потому, что в каталоге ubus-2018-07-26-40e0931e/ipkg-install, куда производится промежуточная инсталляция, всё и так лежит в /opt. Поэтому $(CP) $(PKG_INSTALL_DIR)/* $(1)/ просто копирует вместе с префиксом opt/ из ipkg-install/ в staging-dir/target/.

P.S. Вопрос немного не по теме - чем отличаются пакеты из bin/packages от bin/targets? В первом у меня пока около 35 мегабайт ipkg файлов, во втором - 278.

P.P.S. Ещё одно замечание не по теме - нашёл ошибку в оптификации пакета krb5. Вместо

Код: Выделить всё

CONFIGURE_ARGS += \
        --includedir='/opt/include/krb5' \

должно быть

Код: Выделить всё

CONFIGURE_ARGS += \
        --includedir='/opt/include' \

т.к. неправильно устанавливаются все хидеры:
так неправильно
opt/include/krb5
opt/include/krb5/krb5.h
opt/include/krb5/kdb.h
opt/include/krb5/profile.h
opt/include/krb5/gssapi.h
opt/include/krb5/verto.h
opt/include/krb5/kadm5
opt/include/krb5/kadm5/admin.h
opt/include/krb5/kadm5/chpass_util_strings.h
opt/include/krb5/kadm5/kadm_err.h
opt/include/krb5/krad.h
opt/include/krb5/verto-module.h
opt/include/krb5/gssrpc
opt/include/krb5/gssrpc/clnt.h
opt/include/krb5/gssrpc/auth_unix.h
opt/include/krb5/gssrpc/xdr.h
opt/include/krb5/gssrpc/rpc_msg.h
opt/include/krb5/gssrpc/pmap_rmt.h
opt/include/krb5/gssrpc/svc_auth.h
opt/include/krb5/gssrpc/pmap_clnt.h
opt/include/krb5/gssrpc/auth.h
opt/include/krb5/gssrpc/types.h
opt/include/krb5/gssrpc/auth_gssapi.h
opt/include/krb5/gssrpc/rename.h
opt/include/krb5/gssrpc/svc.h
opt/include/krb5/gssrpc/pmap_prot.h
opt/include/krb5/gssrpc/auth_gss.h
opt/include/krb5/gssrpc/netdb.h
opt/include/krb5/gssrpc/rpc.h
opt/include/krb5/krb5
opt/include/krb5/krb5/krb5.h
opt/include/krb5/krb5/plugin.h
opt/include/krb5/krb5/ccselect_plugin.h
opt/include/krb5/krb5/preauth_plugin.h
opt/include/krb5/krb5/clpreauth_plugin.h
opt/include/krb5/krb5/pwqual_plugin.h
opt/include/krb5/krb5/certauth_plugin.h
opt/include/krb5/krb5/kdcpolicy_plugin.h
opt/include/krb5/krb5/kadm5_auth_plugin.h
opt/include/krb5/krb5/locate_plugin.h
opt/include/krb5/krb5/kdcpreauth_plugin.h
opt/include/krb5/krb5/localauth_plugin.h
opt/include/krb5/krb5/hostrealm_plugin.h
opt/include/krb5/krb5/kadm5_hook_plugin.h
opt/include/krb5/gssapi
opt/include/krb5/gssapi/gssapi.h
opt/include/krb5/gssapi/gssapi_generic.h
opt/include/krb5/gssapi/gssapi_krb5.h
opt/include/krb5/gssapi/gssapi_ext.h
opt/include/krb5/gssapi/mechglue.h
Свернуть

А вот так - правильно (в моей Fedora)
/usr/include/gssapi
/usr/include/kdb.h
/usr/include/krad.h
/usr/include/krb5
/usr/include/krb5.h
/usr/include/gssapi.h
/usr/include/gssapi/gssapi.h
/usr/include/gssapi/gssapi_ext.h
/usr/include/gssapi/gssapi_generic.h
/usr/include/gssapi/gssapi_krb5.h
/usr/include/gssapi/mechglue.h
/usr/include/gssrpc
/usr/include/gssrpc/auth.h
/usr/include/gssrpc/auth_gss.h
/usr/include/gssrpc/auth_gssapi.h
/usr/include/gssrpc/auth_unix.h
/usr/include/gssrpc/clnt.h
/usr/include/gssrpc/netdb.h
/usr/include/gssrpc/pmap_clnt.h
/usr/include/gssrpc/pmap_prot.h
/usr/include/gssrpc/pmap_rmt.h
/usr/include/gssrpc/rename.h
/usr/include/gssrpc/rpc.h
/usr/include/gssrpc/rpc_msg.h
/usr/include/gssrpc/svc.h
/usr/include/gssrpc/svc_auth.h
/usr/include/gssrpc/types.h
/usr/include/gssrpc/xdr.h
/usr/include/kadm5
/usr/include/kadm5/admin.h
/usr/include/kadm5/chpass_util_strings.h
/usr/include/kadm5/kadm_err.h
/usr/include/krb5/ccselect_plugin.h
/usr/include/krb5/certauth_plugin.h
/usr/include/krb5/clpreauth_plugin.h
/usr/include/krb5/hostrealm_plugin.h
/usr/include/krb5/kadm5_hook_plugin.h
/usr/include/krb5/kdcpolicy_plugin.h
/usr/include/krb5/kdcpreauth_plugin.h
/usr/include/krb5/krb5.h
/usr/include/krb5/localauth_plugin.h
/usr/include/krb5/locate_plugin.h
/usr/include/krb5/plugin.h
/usr/include/krb5/preauth_plugin.h
/usr/include/krb5/pwqual_plugin.h
/usr/include/profile.h
Свернуть

Как результат - не компилируется дальше какой-то из пакетов, который делает #include <gssapi/gssapi.h>.

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 03 дек 2018, 16:45

anpaza писал(а):Источник цитаты libubus.h проинсталлировался куда надо -

Значит дефолт в cmake.mk правильный.
anpaza писал(а):Источник цитаты Вопрос немного не по теме - чем отличаются пакеты из bin/packages от bin/targets?

Одни стрипнутые, вторые нет.
anpaza писал(а):Источник цитаты т.к. неправильно устанавливаются все хидеры:

Заведу issue.

Аватара пользователя
TheBB
Сообщения: 119
Зарегистрирован: 31 авг 2015, 02:24
Откуда: 26 ~44.098,43.022

Сообщение TheBB » 03 дек 2018, 20:56

Это не ошибка. Это было сделано специально, чтоб не падала сборка tvheadend, т.к. он упорно цеплялся за profile.h от krb5.
Вопрос подключения недостающих хедеров решается "магическим заклинанием" - `TARGET_CFLAGS += -I$(STAGING_DIR)/opt/include/krb5` (по фен-шую - TARGET_CPPFLAGS)
А вот и тестовый запуск подоспел )))
часть лога

Код: Выделить всё

.../tvheadend/build.linux/src/main.o src/main.c
cc1: note: someone does not honour COPTS correctly, passed 2 times
In file included from src/main.c:51:0:
src/dvr/dvr.h:218:3: error: unknown type name 'profile_chain_t'
   profile_chain_t *de_chain;
   ^~~~~~~~~~~~~~~
In file included from src/main.c:73:0:
src/profile.h:138:3: error: conflicting types for 'profile_t'
 } profile_t;
   ^~~~~~~~~
In file included from src/dvr/dvr.h:27:0,
                 from src/main.c:51:
...
Свернуть
K Giga II NDMSv.2.06C/2.11D/2.15A + Entware-Keenetic/Entware&Gentoo; K DSL NDMSv.2.05C/2.11D + Entware-Keenetic/Entware&Debian 8.11/9.6

anpaza
Сообщения: 9
Зарегистрирован: 24 ноя 2018, 01:14

Сообщение anpaza » 04 дек 2018, 10:46

Нуу, это странное решение, глюки в tvheadend а корёжат kerberos :)
Может лучше поправить tvheadend, а то ведь кербероса могут пользовать самба, всякие там openldap и прочее.
Попробовал скомпилировать tvheadend на федоре, нормально подхватывается profile.h из src/ несмотря на наличие /usr/include/profile.h.
К тому же, везде стоит #include "profile.h" а не <profile.h>, и в командной строке есть -I с каталогом, в котором правильный profile.h, так что странно.
Надо бы разобраться, там наверняка фигня какая-то мелкая.


Вернуться в «Собираем софт сами (пакеты, прошивки)»

Кто сейчас на конференции

Всего 3 посетителя :: 0 зарегистрированных, 0 скрытых и 3 гостя (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (162) здесь было 16 ноя 2019, 18:33

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя