はじめに
- rootfs生成後、rootfsのあるファイルを削除したい等の要望がある人向け
方法
- rootfsを生成するレシピ(.bb/.bbappend)に以下のような文を追記する
- myfunctionは任意の関数名でOK
- 実行したい処理にシェルスクリプトを記載する
- yoctoの御作法的には、do_xxx等に処理を記載してrootfsに変更を加えるべき
- 何かしらの理由でyoctoの御作法が守れない場合の苦肉の策
myfunction() {
実行したい処理
}
ROOTFS_POSTPROCESS_COMMAND += "myfunction; "
動作確認
rootfsの/bin/viを削除してみる
- 通常ビルドでは、rootfsに/bin/viがあることを確認する
takeshi@X250:~/yocto/poky$ source oe-init-build-env
(略)
takeshi@X250:~/yocto/poky/build$ bitbake -k core-image-minimal
(略)
NOTE: Tasks Summary: Attempted 2654 tasks of which 2424 didn't need to be rerun and all succeeded.
Summary: There was 1 WARNING message shown.
takeshi@X250:~/yocto/poky/build$ mkdir rootfs
takeshi@X250:~/yocto/poky/build$ tar xvf tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.tar.bz2 -C rootfs/
(略)
takeshi@X250:~/yocto/poky/build$ ls rootfs/bin/
ash cpio fgrep mkdir pidof.sysvinit sleep uname
busybox date getopt mknod ping start_getty usleep
busybox.nosuid dd grep mktemp ping6 stat vi
busybox.suid df gunzip more ps stty watch
cat dmesg gzip mount pwd su zcat
chattr dnsdomainname hostname mountpoint rm sync
chgrp dumpkmap kill mountpoint.sysvinit rmdir tar
chmod echo ln mv run-parts touch
chown egrep login netstat sed true
cp false ls pidof sh umount
- core-image-minimal.bbに以下のような修正を加える
- yoctoの御作法的にはbbファイルに直接変更を加えるのはNG。core-image-minimal.bbappendを作成して修正すべき。
- 簡単化のために、今回はbbファイルを直接修正した
takeshi@X250:~/yocto/poky/build$ cat ../meta/recipes-core/images/core-image-minimal.bb | tail -n 5
rm_vi() {
rm ${IMAGE_ROOTFS}/bin/vi
}
ROOTFS_POSTPROCESS_COMMAND += "rm_vi; "
- ROOTFS_POSTPROCESS_COMMANDを追記したビルドでは、rootfsに/bin/viが無いことを確認する
takeshi@X250:~/yocto/poky/build$ bitbake -k core-image-minimal
(略)
takeshi@X250:~/yocto/poky/build$ rm -rf rootfs/
takeshi@X250:~/yocto/poky/build$ mkdir rootfs
takeshi@X250:~/yocto/poky/build$ tar xvf tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.tar.bz2 -C rootfs/
(略)
takeshi@X250:~/yocto/poky/build$ ls rootfs/bin/
ash chattr cpio dnsdomainname fgrep hostname mkdir mountpoint pidof.sysvinit rm sleep sync uname
busybox chgrp date dumpkmap getopt kill mknod mountpoint.sysvinit ping rmdir start_getty tar usleep
busybox.nosuid chmod dd echo grep ln mktemp mv ping6 run-parts stat touch watch
busybox.suid chown df egrep gunzip login more netstat ps sed stty true zcat
cat cp dmesg false gzip ls mount pidof pwd sh su umount