2016-02-17 1 views
1

Я хочу добавить содержимое сценария оболочки в тело функции pkg_preinst _ $ {PN} или pkg_postinst _ $ {PN} (рецепт BitBake пакета программного обеспечения).BitBake: Как использовать содержимое сценария оболочки как тело функций pkg_postinst или pkg_preinst?

Например, давайте рассмотрим этот "PREINST" сценарий оболочки:

$ cat PREINST 
#! /bin/sh 
chmod +x /usr/bin/mybin 

Выполнение простая команда 'кошка' внутри функции pkg_preinst не работает:

pkg_preinst_${PN}() { 
    cat ${S}/path/to/PREINST 
} 

В Таким образом, содержимое файла .spec для созданного пакета rpm не является ожидаемым:

%pre 
cat /Full/Path/To/Variable/S/path/to/PREINST 

Как вы можете видеть,% pre section не содержит реального содержимого файла PREINST, просто включает в себя команду «cat».

Можно ли каким-либо образом включить содержимое файла PREINST в сгенерированный файл .spec?

Спасибо заранее!

+0

Я нашел файл poky/meta/classes/package_rpm.bbclass, где определен метод write_specfile. Этот метод, по-видимому, считывает значение ключа «pkg_preinst», значение которого представляется прединст-скриптом. Но я не могу изменить значение этого ключа, чтобы изменить его значение. Это: d.setVar ("pkg_preinst", "hello world")) не работает – aicastell

ответ

0

Наконец я решил эту проблему, предваряя этот код do_package задачи:

do_package_prepend() { 
    PREINST_path = "${S}/${MYMODULE}/PREINST" 
    POSTINST_path = "${S}/${MYMODULE}/POSTINST" 
    PREINST = open(PREINST_path, "r") 
    POSTINST = open(POSTINST_path, "r") 
    d.setVar("pkg_preinst", PREINST.read()) 
    d.setVar("pkg_postinst", POSTINST.read()) 
} 

Он изменяет «pkg_preinst» и «pkg_postinst» ключи «D» глобального словаря с содержанием каждого файла PREINST и POSTINST как ценность. Теперь это работает! :)