bbappend でレシピにパッチを当てる
blog
2019-4-1 12:42 JST

bbappend を使いレシピにパッチを当てる

ここでは、既存のレシピにパッチを当てる方法を記します。bitbake ではレシピに不具合あるいは追加的な記述をする場合、もとのレシピを直接書き換えるのではなく、新たなレシピ(bbappend)を追加しレシピにパッチを当てるという方式をとります。なお、前提としてつぎのように web の為の機能を local.conf に追加しているものとします。

IMAGE_INSTALL_append = " lighttpd lighttpd-module-fastcgi php php-cgi php-cli"

蛇足ですが、よく bb のファイルに VAR += " module" のように、わざわざ " " 空白を1つあけて += しているのを見受けられます。 += は空白を入れるのでその必要はないでしょう。一方 .= は空白をいれないので、空白を入れる必要があります。変数名_append や 変数名_prepend は .= と同じ効果を生むので空白をつける必要があります。
IMAGE_INSTALL では IMAGE_INSTALL += だとうまく IMAGE_INSTALL に反映されません。(恐らく評価順の問題) IMAGE_INSTALL_append = " openssh" のように _append を使う必要があるようです(要確認)。

ここで、php の php-fastcgi の機能を追加したいとします。./meta-openembedded/meta-oe/recipes-devtools/php/php.inc をみるとconfigure の引数に --enable-fastcgi がないことがわかります。

EXTRA_OECONF = "--enable-mbstring 
                --enable-wddx 
                --enable-fpm 
                --with-imap=${STAGING_DIR_HOST} 
                --with-gettext=${STAGING_LIBDIR}/.. 
                --with-imap-ssl=${STAGING_DIR_HOST} 
                --with-zlib=${STAGING_LIBDIR}/.. 
                --with-iconv=${STAGING_LIBDIR}/.. 
                --with-libxml-dir=${STAGING_BINDIR_CROSS} 
                ${COMMON_EXTRA_OECONF} 
"

ここで、php.inc を書き直すことは簡単ですが、bitbake ではそのようなことはしません。layer をつくり bbappend をつくり、パッチを当てます。

bbappend をつくる

bbappend の追加に先立ち layer を作る必要があります。詳細はこちら

php のパッチの為の php_5.4.14.bbappend を用意します。拡張子を除いたファイル名がパッチを当てる対象の bb ファイルと一致している必要があります。

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}_${PV}:"

EXTRA_OECONF += "--enable-fastcgi"

PRINC := "${@int(PRINC) + 1}"

ここでは、目的の EXTRA_OECONF に += で --enable-fastcgi を足していいます。

FILESEXTRAPATHS_prepend は更にソースのパッチを当てるときのファイルの場所を指定します。prepend なので FILESEXTRAPATHS という変数の前に差し込まれます。ここではソースのパッチを当てていないので意味はありません。(じゃここに書くなという話もある)

PRINC はバージョン番号をインクリメントしている(つもり)なんだけど、どうやら deprecated みたいだ。(じゃ削っておけという話もある)

The PR server is now the preferred way to handle PR changes based on the checksum of the recipe (including bbappend). The PRINC is now obsolete. Return a warning to the user.

Remove use of deprecated PRINC. The PR server should be used to automatically increment the PR.
See: PR_Service

bblayers.conf に設定を追加

あとは、bblayers.conf の BBLAYERS に ${BSPDIR}/unitec-ccs/meta-sby-zynq を追加し、bitbake <target> でターゲットを生成するだけです。