Добавление php-curl в сборку Yocto

Я создавал собственный образ с помощью Yocto и wpewebkit для использования в докере. Мне нужно запустить локальный веб-сервер с php, с чем я справился без проблем. Мне нужно использовать curl в моем проекте, и у меня установлены apache2, php, modphp и curl. Все, что мне нужно, это php-curl, но я не могу найти, как его установить. Кто-нибудь знает, как или если я могу это сделать? Я приложил все свои усилия для поиска в Google нескольких фраз, но я нахожу только то, как установить php-curl с помощью apt-get или yum, или я получаю ссылки на мета- * каталоги, к которым у меня есть доступ в моих файлах сборки в любом случае.

Если это вообще поможет, это пользовательское изображение было основано на изображении, предоставленном из следующего проекта на GitHub: https://github.com/resin-io-playground/resin-wpe/tree/master/base.-image. Я уже говорил с разработчиком, и их знания PHP ограничены.

РЕДАКТИРОВАТЬ № 1: Прогресс до сих пор, пришлось обновить файл curl.bb, чтобы правильно включить libcurl-dev, а затем работал с предложением @pmod включить curl в сборку php. Казалось, все работает нормально, пока я не получил следующую ошибку:

| ../php-7.1.9/configure: line 386: test: please: integer expression expected
| configure: error: reinstall
| ../php-7.1.9/configure: line 275: return: please: numeric argument required
| ../php-7.1.9/configure: line 285: exit: please: numeric argument required
| NOTE: The following config.log files may provide further information.
| NOTE: /base-image/build/tmp-glibc/work/x86_64-linux/php-native/7.1.9-r0/build/config.log
| ERROR: configure failed
| WARNING: /base-image/build/tmp-glibc/work/x86_64-linux/php-native/7.1.9-r0/temp/run.do_configure.29590:1 exit 1 from 'exit 1'
| ERROR: Function failed: do_configure (log file is located at /base-image/build/tmp-glibc/work/x86_64-linux/php-native/7.1.9-r0/temp/log.do_configure.29590)
ERROR: Task (virtual:native:/base-image/build/../meta-openembedded/meta-oe/recipes-devtools/php/php_7.1.9.bb:do_configure) failed with exit code '1'

Редактировать № 2: я добавил все, что мне не хватало. Я получаю ту же ошибку, что и выше, когда функция do_configure во время сборки php не работает. Я публикую ниже то, что у меня есть в моем файле curl.bb (мне пришлось добавить это), то, что у меня есть в моем файле php.inc, и файлы curl, расположенные в промежуточном каталоге.

завиток.bb:

PACKAGES =+ "lib${BPN} lib${BPN}-native lib${BPN}-dev lib${BPN}-dev-native"

FILES_lib${BPN} = "${libdir}/lib*.so.*"

FILES_lib${BPN}-dev = "${includedir} \
                       ${libdir}/lib*.so \
                       ${libdir}/lib*.a \
                       ${libdir}/lib*.la \
                       ${libdir}/pkgconfig \
                       ${datadir}/aclocal \
                       ${bindir}/*-config"

php.inc:

EXTRA_OECONF_append = " --with-curl=${libdir}/.."
DEPENDS_${PN} += "libcurl-dev libcurl-dev-native"

Промежуточный каталог PHP:

/installeddeps/curl-native
/installeddeps/curl-native.b77f37db31cf2391919a12c5c9774bff
/installeddeps/curl-native.complete
/usr/share/aclocal/libcurl.m4
/usr/bin/curl-config
/usr/bin/crossscripts/curl-config
/usr/bin/curl
/usr/lib/pkgconfig/libcurl.pc
/usr/lib/libcurl.so
/usr/lib/libcurl.a
/usr/lib/libcurl.so.4.4.0
/usr/lib/libcurl.so.4
/usr/include/curl
/usr/include/curl/curl.h
/usr/include/curl/curlrules.h
/usr/include/curl/curlbuild.h
/usr/include/curl/curlver.h
/usr/include/curl/easy.h

person Julian V    schedule 13.12.2017    source источник
comment
Если вы используете Docker, вы можете использовать # docker-php-ext-install curl в своем Dockerfile или контейнере после его запуска (github.com/docker-library/docs/tree/master/).   -  person Flo    schedule 14.12.2017
comment
Вы пытались создать рецепт для php-curl? Если да, то покажите его нам вместе со своим провалом, в противном случае попробуйте его создать.   -  person Anders    schedule 14.12.2017
comment
@Flo Я попробовал, и это не сработало. Обычно это работает, за исключением того, что я использую wpewebkit, а большинство пакетов недоступны в образе, включая apt-get. Все это должно быть встроено в образ.   -  person Julian V    schedule 14.12.2017
comment
@ Андерс Андерс, я не знаю, как создать рецепт для php-curl. Я думаю, что у Йокто уже должен быть рецепт, а мне трудно его найти.   -  person Julian V    schedule 14.12.2017


Ответы (1)


Согласно руководству по php, функция PHP/cURL включается на этапе настройки php с помощью --with-curl=[dir].

Я проверил включаемый файл основного рецепта php .inc и не смог найти такой параметр конфигурации. Итак, попробуйте создать в рабочем слое файл php_%.bbappend (или добавьте его прямо в конец php.inc для проверки):

EXTRA_OECONF_append_class-target = " --with-curl=${STAGING_LIBDIR}/.."
DEPENDS_append_class-target = " curl"

Обратите внимание, что пакет curl среди DEPENDS, поскольку он необходим на этапе сборки.

Я не думаю, что вам нужно обновлять рецепт curl с помощью ПАКЕТОВ и ФАЙЛОВ, pkg_config должен позаботиться об этом.

person pmod    schedule 15.12.2017
comment
Я сделал это, и вот что я получил: ОШИБКА: Ничего RPROVIDES 'libcurl-dev-native' (но virtual:native:/meta-openembedded/meta-oe/recipes-devtools/php/php_7.1.9.bb RDEPENDS на или иным образом требует этого) - person Julian V; 21.12.2017
comment
Я понял, что файл curl.bb не включает все для libcurl-dev, поэтому я добавил их и попробовал еще раз, но получил другую ошибку: Task (virtual:native:/meta-openembedded/meta-oe/recipes-devtools/php /php_7.1.9.bb:do_configure) не удалось с кодом выхода «1» - person Julian V; 21.12.2017
comment
@JulianV, пожалуйста, попробуйте DEPENDS_ вместо RDEPENDS, потому что во время сборки требуется libcurl-dev. Кроме того, я не уверен, почему вы думаете, что curl.bb не включает все, должен быть curl-target.inc, который содержит то, что необходимо - person pmod; 22.12.2017
comment
@JulianV, если у вас все еще есть ошибка настройки для php - хорошо посмотреть журнал, но, скорее всего, это может быть одно из невыполненных требований из первой ссылки: в промежуточном каталоге должен быть /usr/include/easy.h /usr /include/curl.h, /usr/lib/libcurl.a - person pmod; 22.12.2017
comment
Судя по ошибкам, которые я получил, казалось, что отсутствуют зависимости, и я обнаружил в curl.bb, что пакет libcurl-dev и все файлы .so и .a были исключены, которые я снова включил правильно. На данный момент я считаю, что моя основная проблема связана с --with-curl=[dir]. Я считаю, что мне нужно найти правильное расположение каталога, на которое можно указать, и со мной все будет в порядке. - person Julian V; 22.12.2017
comment
@JulianV, какую версию рецепта завивки вы используете? Можете ли вы вообще найти libcurl.a в промежуточном каталоге? - person pmod; 22.12.2017
comment
Я использую версию 7.54.1-r0. Я запустил команду find, и вот файлы в каталоге php-native: ./build/libcurl | ./recipe-sysroot-native/usr/share/aclocal/libcurl.m4 | ./recipe-sysroot-native/usr/lib/pkgconfig/libcurl.pc | ./recipe-sysroot-native/usr/lib/libcurl.so ./recipe-sysroot-native/usr/lib/libcurl.a | ./recipe-sysroot-native/usr/lib/libcurl.so.4.4.0 | ./рецепт-sysroot-native/usr/lib/libcurl.so.4 - person Julian V; 22.12.2017
comment
@JulianV Я обновил свой ответ, я думаю, что вместо libdir следует использовать STAGING_LIBDIR, и я добавил class-target, чтобы изолировать это только для целевой сборки. Не уверен, почему у вас есть php-native - я предполагаю, что вы создаете php для цели или ....? - person pmod; 28.12.2017
comment
ты был абсолютно прав. Образ успешно создан, и я без проблем смог использовать php-curl! Я использовал php-native, потому что без него сборка не работала, но после перехода на STAGING_LIBDIR он больше не требовался. Спасибо большое! - person Julian V; 28.12.2017