This service is available only in Japanese-language.

パッケージ

libphpのPackageについて

PHPとapache2を動作させようと、PHPにapache2を追加したところエラーが発生しております。

ERROR: php-5.6.40-r0 do_package: QA Issue: php: Files/directories were installed but not shipped in any package:
/usr/libexec/apache2/modules/libphp5.so
※PHP ver7.3.4でも同様でした。

php-modphpの配置先がphp.iniを確認すると${libdir}/apache2となっており、
apache2はlibexecdirを参照するようになっているのではないかと考えております。
apache2の変更(ディレクトリ構成)に合わせて、php(php.inc)の修正が必要でしょうか?
それとも、apache2側で、/usr/libを参照させるように修正した方が良いのでしょうか?

良い方法がありましたら、ご教授願います。

Yocto Warrior
apache2 2.4.41
php 5.6.40(7.3.4)

IMAGE_INSTALL_append = " apache2 php php-cli php-modphp"
PACKAGECONFIG_append_pn-phpにapache2を追加しましたが、php-modphp読込でエラーが発生したため
php.incのPACKAGECONFIGに暫定的にapache2を追加しています。

No GNU_HASH in the ELF binary

自作アプリをコンパイルしていると、特定のアプリで
”No GNU_HASH in the ELF binary・・・ didn't pass LDFLAGS? [ldflags]”エラーが発生しました。
TARGET_CC_ARCH += "${LDFLAGS}"、FILES_${PN} = "${bindir}/*"、LDFLAGSをMakefileへ追加など、
実施してみましたがエラーは解消しませんでした。

ネットで調べると、回避策の一つとしてINSANE_SKIP_** = "ldflags"と記載があり、
実施するとコンパイルも無事完了しました。

Yoctoのシステムがデフォルトではsysvになっている(らしい)、
log.do_compileを確認すると--hash-style=gnuでモジュールを作成し、
readelfも.gnu.hashのセクションがあり、GNU_HASHになっているのでは?と考えており、
何が起こっているのか、わからない状況です。

こういった場合、INSANE_SKIPの対処で良いのでしょうか?

オプション
LDFLAGS=-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -fstack-protector-strong -Wl,-z,relro,-z,now
CXX=aarch64-poky-linux-g++ -fstack-protector-strong -Wformat -Wformat-security -Werror=format-security --sysroot=/home/****/1.0-r0/recipe-sysroot

makefile
$(CXX) -o ${CND_DISTDIR}/test-app.com $(LDFLAGS) ${OBJECTFILES} -lcap -lpq -lpthread

ビルドオプションの変更について

makefileファイル内でCCやCXX、LDFLAGSを変更しても、コンパイル直前でクロスコンパイル環境で上書きされます。
既存のクロスコンパイル環境に追加することはできましたが、一部のオプション(g++やsysrootなど)を採用しつつ
最適化(O)や-fstack-protector-strongなど一部削除したいオプションもあります。

どうすればクロスコンパイル環境のデフォルトオプションを削除・変更出来るでしょうか?

動的ライブラリのパッケージ追加方法について

今回はlibpq.soをimageに含める方法を探しています。

自作アプリケーションに依存関係を追加してコンパイル(DEPENDS += "postgresql )したところ、
自作アプリのrecipe-sysrootにはlibpq.so関連がusr/libに存在していました。
コンパイルも正常に終了しております。

対象のボード上で動作させたところ、ライブラリがusr/libに配置されていないことに気が付きました。
動的ライブラリ(*.so)をパッケージに追加するにはどのようにすれば良いでしょうか?
(do_install時に必要なsoファイルを追記しなければならないのでしょうか?)

レイヤー追加の失敗について

レイヤーを追加(bitbake-layers add-layer "../meta-openembedded/meta-networking")し、imageを作成したところ、
エラー(ERROR: Layer 'networking-layer' depends on layer 'meta-python', but this layer is not enabled in your configuration)が
発生しました。

meta-pythonが無いためなのだと思い、add-layer(bitbake-layers add-layer "../meta-openembedded/meta-python")したところ
エラー(raise CollectionError("Errors during parsing layer configuration"))が発生して追加できませんでした。
こういった場合、どういう対処が必要なのでしょうか?

拡張モジュールの追加方法について

拡張モジュールの追加する方法について質問させて頂きます。

●PACKAGECONFIG optionsのある場合
optionsを確認(https://layers.openembedded.org/)し、PACKAGECONFIG_appendで追加する方法で正しいでしょうか?

PACKAGECONFIG_append = " harfbuzz"
PACKAGECONFIG[harfbuzz] = "-system-harfbuzz,-qt-harfbuzz,harfbuzz"
PACKAGECONFIG = "openssl"
PACKAGECONFIG[openssl] = "--with-crypto_backend=openssl,,openssl"

●PACKAGECONFIG optionsの無い場合
現在php-mbstringの組み込みを予定しておりますが、正しい方法がわかりませんでした。
PHPとphp-mbstringを分離して組み込むのか、PHPのレシピを修正して1つのレシピに統合(パッケージ化)した方が良いのか。

良い方法がありましたら、ご教授願います。

bluez-obexdの追加

bluez-obexdパッケージを追加したいと考えているのですが、どのように対応すればよいのでしょうか?

yoctoに対応していないパッケージの追加について

Raspberry Pi CM3+ に GitHub で公開されているパッケージ pigpio をOSイメージに含めたく、recipetoolを使ってbbファイルを作成しました。
→recipetool create -o pigpio_git.bb --src-subdir=pigpio-experimental https://github.com/joan2937/pigpio.git

出来上がったファイルを独自レイヤーに移動して、以下のように改変しました。改変したのはそのままですと Makefile 中の prefix が /usr/local だったりとyoctoで用いるには不適当だと思ったためです。
--------
LICENSE = "CLOSED"
LIC_FILES_CHKSUM = ""

SRC_URI = "git://github.com/joan2937/pigpio.git;protocol=https"

# Modify these as desired
PV = "1.0+git${SRCPV}"
SRCREV = "4b2a1efdab378fc9831a5a9e48de3291bf83634b"

S = "${WORKDIR}/git"

# NOTE: no Makefile found, unable to determine what needs to be done
inherit pkgconfig cmake python-dir

# Specify any options you want to pass to cmake using EXTRA_OECMAKE:
EXTRA_OEMAKE += "'prefix = ${D}/usr/local'"
EXTRA_OEMAKE += "'exec_prefix = $(prefix)'"
EXTRA_OEMAKE += "'bindir = $(exec_prefix)/bin'"
EXTRA_OEMAKE += "'includedir = $(prefix)/include'"
EXTRA_OEMAKE += "'libdir = $(prefix)/lib'"
EXTRA_OEMAKE += "'mandir = $(prefix)/man'"

CFLAGS_prepend = "-I${S}/git -I${S}/recipe-sysroot/usr/include"
--------

cmakeを使用してビルドができるようでしたので、EXTRA_OEMAKE や CFLAGS_prepend を使って環境を書き換えて bitbake c0re-image-base を行いました。
すると、以下のエラーが発生しました。
--------
ERROR: pigpio-1.0+gitAUTOINC+4b2a1efdab-r0 do_compile: Function failed: do_compile (log file is located at /opt/rpi64/build/tmp/work/aarch64-poky-linux/pigpio/1.0+gitAUTOINC+4b2a1efdab-r0/temp/log.do_compile.6596)
ERROR: Logfile of failure stored in: /opt/rpi64/build/tmp/work/aarch64-poky-linux/pigpio/1.0+gitAUTOINC+4b2a1efdab-r0/temp/log.do_compile.6596
Log data follows:
| DEBUG: Executing shell function do_compile
| NOTE: VERBOSE=1 cmake --build /opt/rpi64/build/tmp/work/aarch64-poky-linux/pigpio/1.0+gitAUTOINC+4b2a1efdab-r0/build --target all -- -j 2
| [1/23] /opt/rpi64/build/tmp/work/aarch64-poky-linux/pigpio/1.0+gitAUTOINC+4b2a1efdab-r0/recipe-sysroot-native/usr/bin/aarch64-poky-linux/aarch64-poky-linux-gcc -Dpigpiod_if2_EXPORTS -O3 -Wall -pthread -fPIC -MD -MT CMakeFiles/pigpiod_if2.dir/pigpiod_if2.c.o -MF CMakeFiles/pigpiod_if2.dir/pigpiod_if2.c.o.d -o CMakeFiles/pigpiod_if2.dir/pigpiod_if2.c.o -c /opt/rpi64/build/tmp/work/aarch64-poky-linux/pigpio/1.0+gitAUTOINC+4b2a1efdab-r0/git/pigpiod_if2.c
| FAILED: CMakeFiles/pigpiod_if2.dir/pigpiod_if2.c.o
| /opt/rpi64/build/tmp/work/aarch64-poky-linux/pigpio/1.0+gitAUTOINC+4b2a1efdab-r0/recipe-sysroot-native/usr/bin/aarch64-poky-linux/aarch64-poky-linux-gcc -Dpigpiod_if2_EXPORTS -O3 -Wall -pthread -fPIC -MD -MT CMakeFiles/pigpiod_if2.dir/pigpiod_if2.c.o -MF CMakeFiles/pigpiod_if2.dir/pigpiod_if2.c.o.d -o CMakeFiles/pigpiod_if2.dir/pigpiod_if2.c.o -c /opt/rpi64/build/tmp/work/aarch64-poky-linux/pigpio/1.0+gitAUTOINC+4b2a1efdab-r0/git/pigpiod_if2.c
| /opt/rpi64/build/tmp/work/aarch64-poky-linux/pigpio/1.0+gitAUTOINC+4b2a1efdab-r0/git/pigpiod_if2.c:30:10: fatal error: stdio.h: No such file or directory
| #include <stdio.h>
| ^~~~~~~~~
| compilation terminated.
| [2/23] /opt/rpi64/build/tmp/work/aarch64-poky-linux/pigpio/1.0+gitAUTOINC+4b2a1efdab-r0/recipe-sysroot-native/usr/bin/aarch64-poky-linux/aarch64-poky-linux-gcc -Dpigpiod_if2_EXPORTS -O3 -Wall -pthread -fPIC -MD -MT CMakeFiles/pigpiod_if2.dir/command.c.o -MF CMakeFiles/pigpiod_if2.dir/command.c.o.d -o CMakeFiles/pigpiod_if2.dir/command.c.o -c /opt/rpi64/build/tmp/work/aarch64-poky-linux/pigpio/1.0+gitAUTOINC+4b2a1efdab-r0/git/command.c
| FAILED: CMakeFiles/pigpiod_if2.dir/command.c.o
| /opt/rpi64/build/tmp/work/aarch64-poky-linux/pigpio/1.0+gitAUTOINC+4b2a1efdab-r0/recipe-sysroot-native/usr/bin/aarch64-poky-linux/aarch64-poky-linux-gcc -Dpigpiod_if2_EXPORTS -O3 -Wall -pthread -fPIC -MD -MT CMakeFiles/pigpiod_if2.dir/command.c.o -MF CMakeFiles/pigpiod_if2.dir/command.c.o.d -o CMakeFiles/pigpiod_if2.dir/command.c.o -c /opt/rpi64/build/tmp/work/aarch64-poky-linux/pigpio/1.0+gitAUTOINC+4b2a1efdab-r0/git/command.c
| /opt/rpi64/build/tmp/work/aarch64-poky-linux/pigpio/1.0+gitAUTOINC+4b2a1efdab-r0/git/command.c:32:10: fatal error: stdio.h: No such file or directory
| #include <stdio.h>
| ^~~~~~~~~
| compilation terminated.
| ninja: build stopped: subcommand failed.
| WARNING: /opt/rpi64/build/tmp/work/aarch64-poky-linux/pigpio/1.0+gitAUTOINC+4b2a1efdab-r0/temp/run.do_compile.6596:1 exit 1 from 'eval ${DESTDIR:+DESTDIR=${DESTDIR} }VERBOSE=1 cmake --build '/opt/rpi64/build/tmp/work/aarch64-poky-linux/pigpio/1.0+gitAUTOINC+4b2a1efdab-r0/build' "$@" -- -j 2'
| ERROR: Function failed: do_compile (log file is located at /opt/rpi64/build/tmp/work/aarch64-poky-linux/pigpio/1.0+gitAUTOINC+4b2a1efdab-r0/temp/log.do_compile.6596)
ERROR: Task (/opt/rpi64/meta-local/recipes-support/pigpio/pigpio_git.bb:do_compile) failed with exit code '1'
NOTE: Tasks Summary: Attempted 4329 tasks of which 4328 didn't need to be rerun and 1 failed.
--------

単純に考えますと、ヘッダファイルが見つからないためですが、この場合、CFLAGS_prepend の改変が聞いていないと思われます。
このような場合、どのように対処すればよろしいでしょうか。

旧バージョンOSSを対象イメージへ追加する方法について

現在toasterを用いてhttpd(apach2)をイメージに追加しようと考えています。
ただし、現在選択しているYoctoバージョンはhttpdのバージョンが最新(Ver2.4.41)であるため
旧バージョンhttpd(apach2)をCustam Imageに追加出来る方法を模索しています。

httpdは依存関係も多くレシピを一から作成するのは大変だと思い、以下の方法を考えてみました。
①Gitからdora (Yocto Project 1.5)のVer2.4.6のレシピをClone
②ToasterでCloneしたmeta-openembeddedの中にあるmeta-webserverを新レイヤーとして追加
③ToasterのCustom imagesよりpackagesとして追加
上記③でToasterよりイメージ追加しようと思いましたが、該当のapach2が表示されませんでした。

そこで、事前にapach2をコンパイルすることでpackagesに表示されるのではないかと考え、
Toasterより対象レシピのbuildを実施したところ、依存関係のconfigでエラーが発生しました。
(他のエラーもありましたが、軽微なレシピ修正で対応しています)
現在この時点で止まっております。

こういった依存関係のあるOSS、旧バージョンOSSをコンパイルする場合、
どういった方法が良いのでしょうか?

uninativeに関して

Yoctoを使った組み込み向けの検討をしています
検討中、ターゲットに合わせてうまくbitbakeでrootfsが生成できない部分があり、
Logで調べると、classesのuninativeという機能が原因でうまくいっていない様子です。
uninativeを書き換えて、力業で動かないようにしたときは、うまくイメージが生成できるところまで確認しています。
具体的には以下の2行をコメントアウトしています。
---
Addhandler uninative_event_enable
Uninative_event_enable[eventmask] = "bb.event.ConfigParsed"
---

これに関して以下を教えていただきたいです。
・uninativeとはどのような機能なのでしょうか?(ドキュメントは読んだのですが機能が理解できませんでした)
・uninativeはデフォルトでenableのようですが、特定のレシピだけdisableにする方法あるでしょうか?

ページ