Как правильно использовать альтернативы обновления класса Yocto?Linux

Ответить
Anonymous
 Как правильно использовать альтернативы обновления класса Yocto?

Сообщение Anonymous »

Буду признателен за любую помощь с update-альтернативами класса Yocto: просто не могу понять, как его можно использовать и какие там правильные опции.
Проблема проста: мне нужно установить nginx-debug (моя собственная сборка с конфигурацией --with-debug) и non-debug nginx в один целевой образ, поэтому -debug version может иметь приоритет (через ALTERNATIVE_PRIORITY), и у меня будет возможность удалить его с помощью dnf (поэтому оставляя изображение только с неотладочной версией). Другими словами, мне нужна одна основная символическая ссылка, скажем, /usr/sbin/nginx, которая могла бы указывать на две разные цели: debug (nginx создан с поддержкой отладки) и без отладки (простая сборка) в разное время, без каких-либо дальнейших модификаций, скажем, модулей systemd.
Я заглянул в вышеупомянутый класс и написал следующий код ( просто части двух рецептов):
nginx.bb — неотладочная версия; он должен отображаться как файл по умолчанию с именем /usr/sbin/nginx

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

# I rename built binary of nginx to nginx.1 in do_install() task
...
inherit update-alternatives
# Lower the priority so we could override it with nginx-debug
ALTERNATIVE_PRIORITY = "10"
ALTERNATIVE:${PN} = "nginx"

# Am I correct here? Should I specify [nginx] in all statements here?
ALTERNATIVE_TARGET[nginx] = "${sbindir_native}/nginx.1"
ALTERNATIVE_LINK_NAME[nginx] = "${sbindir_native}/nginx"

FILES:${PN} += "/"
CONFFILES:${PN} = "${sysconfdir}/${BPN}"
INSANE_SKIP:${PN} = "libdir"
nginx-debug.bb — отладочная версия; его можно установить отдельно с помощью dnf (по умолчанию он не включен), поэтому я ожидаю, что /usr/sbin/nginx будет указывать на его двоичный файл при установке.

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

# Again, I setup built process and rename binary artifact to nginx-debug in do_install()
inherit update-alternatives

# This recipe should be a default one, substituting original binary
ALTERNATIVE_PRIORITY = "100"
ALTERNATIVE:${PN} = "nginx"
ALTERNATIVE_TARGET[nginx] = "${sbindir_native}/nginx-debug"
ALTERNATIVE_LINK_NAME[nginx] = "${sbindir_native}/nginx"

# Make package maximum lightweight
PACKAGES = "${PN}"
FILES:${PN} += "${sbindir_native}"
INHIBIT_PACKAGE_STRIP = "1"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
И я должен сказать, что это каким-то образом работает, но я не могу выполнить команду dnf Remove nginx-debug, как она мне дает:

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

+ set -e
+ update-alternatives --remove nginx /usr/sbin/nginx-debug
mv: '/usr/sbin/nginx-debug' and '/usr/sbin/nginx-debug' are the same file
Кроме того, если я устанавливаю версию nginx (не отладочную) в чистую систему, она не устанавливает никаких АЛЬТЕРНАТИВ, а записывает свой двоичный файл. И я не могу понять, почему так происходит. Не могли бы вы помочь мне понять следующее:
  • Правиль ли я с TARGET и LINK_NAME, учитывая, что мне нужно выполнить задачу по предоставлению двух двоичных файлов с одной ссылкой?< /li>
    В чем может быть проблема с удалением пакета? Я правильно понимаю варианты для ALTERNATIVE_TARGET и ALTERNATIVE_LINK_NAME?
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/791 ... -correctly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»