自定义 bitbake bbapend 未正确附加 mender fstab 文件
Custom bitbake bbapend not correctly appending mender fstab file
我在我的 yocto 构建中使用 github.com/mendersoftware/meta-mender。我想使用 sed
和我自己图层中的 bbappend 文件来编辑 /etc/fstab。具体来说,meta-mender 目前正在提供他们自己的 fstab 文件并使用 base-files_3.%.bbappend
编辑它,我只想从生成的 /etc/fstab.
中删除 auto
关键字
问题是,当我在我的层中为 base-files_3.%.%.bbappend 提供我自己的 bbappend(我的层比 meta-mender 具有更高的优先级)时,meta-mender fstab 似乎没有根本无法创建,而是打开嵌入的库存。
这是我的 meta-layer/recipes-core/base-files/base-files_3.%.bbappend:
do_install_append(){
sed -i -e 's$.*@MENDER_BOOT_PART@.*$@MENDER_BOOT_PART@ /uboot @MENDER_BOOT_PART_FSTYPE@ defaults,sync 0 0$' ${D}${sysconfdir}/fstab
sed -i -e 's$.*@MENDER_DATA_PART@.*$@MENDER_DATA_PART@ /data @MENDER_DATA_PART_FSTYPE@ defaults 0 0$' ${D}${sysconfdir}/fstab
}
如果我 运行 bitbake -e base-files
,然后寻找 do_install 函数,你可以清楚地看到我的 sed
命令被正确地附加到 meta-mender/meta-mender-core/recipes-core/base-files/base-files_3:
do_install() {
for d in /boot /dev /bin /sbin /lib /etc /etc/default /etc/skel /lib /mnt /proc /home/root /run /usr /usr/bin /usr/share/doc/base-files-3.0.14 /usr/games /usr/include /usr/lib /usr/sbin /usr/share /usr/share/common-licenses /usr/share/dict /usr/share/info /usr/share/man /usr/share/misc /var /var/backups /var/lib /sys /var/lib/misc /var/spool /var/volatile /var/volatile/log /home /usr/src /var/local /media; do
install -m 0755 -d /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image$d
done
for d in /tmp /var/volatile/tmp; do
install -m 1777 -d /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image$d
done
for d in ; do
install -m 2775 -d /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image$d
done
for d in log tmp; do
ln -sf volatile/$d /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/var/$d
done
ln -snf ../run /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/var/run
ln -snf ../run/lock /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/var/lock
do_install_basefilesissue
rotation=`cat /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/rotation`
if [ "$rotation" != "0" ]; then
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/rotation /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/rotation
fi
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/fstab /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/fstab
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/filesystems /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/filesystems
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/usbd /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/default/usbd
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/profile /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/profile
sed -i 's#ROOTHOME#/home/root#' /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/profile
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/shells /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/shells
install -m 0755 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/share/dot.profile /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/skel/.profile
install -m 0755 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/share/dot.bashrc /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/skel/.bashrc
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/nsswitch.conf /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/nsswitch.conf
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/host.conf /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/host.conf
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/motd /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/motd
ln -sf /proc/mounts /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/mtab
install -d /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/uboot
install -d /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/data
sed -i -e 's$.*@MENDER_BOOT_PART@.*$@MENDER_BOOT_PART@ /uboot @MENDER_BOOT_PART_FSTYPE@ defaults,sync 0 0$' /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/fstab
sed -i -e 's$.*@MENDER_DATA_PART@.*$@MENDER_DATA_PART@ /data @MENDER_DATA_PART_FSTYPE@ defaults 0 0$' /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/fstab
}
然而,我的 /etc/fstab 看起来像这样:
# stock fstab - you probably want to override this with a machine specific one
/dev/root / auto defaults 1 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
tmpfs /run tmpfs
mode=0755,nodev,nosuid,strictatime 0 0
tmpfs /var/volatile tmpfs defaults 0 0
# uncomment this if your device has a SD/MMC/Transflash slot
#/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
如您所见,它完全跳过了 meta-menders 的 /etc/fstab 文件,只写了一个 stock 文件。
那么,您的 sed 表达式中的 .*@MENDER_BOOT_PART@.*
的计算结果是什么?
据我所知,您的 fstab 中没有与 .*@MENDER_BOOT_PART@.*
和 .*@MENDER_DATA_PART@.*
中任何一个匹配的内容。
如果我的理解是正确的,你可以使用类似于
的东西
echo "data" >> ${D}${sysconfdir}/fstab
我在我的 yocto 构建中使用 github.com/mendersoftware/meta-mender。我想使用 sed
和我自己图层中的 bbappend 文件来编辑 /etc/fstab。具体来说,meta-mender 目前正在提供他们自己的 fstab 文件并使用 base-files_3.%.bbappend
编辑它,我只想从生成的 /etc/fstab.
auto
关键字
问题是,当我在我的层中为 base-files_3.%.%.bbappend 提供我自己的 bbappend(我的层比 meta-mender 具有更高的优先级)时,meta-mender fstab 似乎没有根本无法创建,而是打开嵌入的库存。
这是我的 meta-layer/recipes-core/base-files/base-files_3.%.bbappend:
do_install_append(){
sed -i -e 's$.*@MENDER_BOOT_PART@.*$@MENDER_BOOT_PART@ /uboot @MENDER_BOOT_PART_FSTYPE@ defaults,sync 0 0$' ${D}${sysconfdir}/fstab
sed -i -e 's$.*@MENDER_DATA_PART@.*$@MENDER_DATA_PART@ /data @MENDER_DATA_PART_FSTYPE@ defaults 0 0$' ${D}${sysconfdir}/fstab
}
如果我 运行 bitbake -e base-files
,然后寻找 do_install 函数,你可以清楚地看到我的 sed
命令被正确地附加到 meta-mender/meta-mender-core/recipes-core/base-files/base-files_3:
do_install() {
for d in /boot /dev /bin /sbin /lib /etc /etc/default /etc/skel /lib /mnt /proc /home/root /run /usr /usr/bin /usr/share/doc/base-files-3.0.14 /usr/games /usr/include /usr/lib /usr/sbin /usr/share /usr/share/common-licenses /usr/share/dict /usr/share/info /usr/share/man /usr/share/misc /var /var/backups /var/lib /sys /var/lib/misc /var/spool /var/volatile /var/volatile/log /home /usr/src /var/local /media; do
install -m 0755 -d /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image$d
done
for d in /tmp /var/volatile/tmp; do
install -m 1777 -d /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image$d
done
for d in ; do
install -m 2775 -d /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image$d
done
for d in log tmp; do
ln -sf volatile/$d /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/var/$d
done
ln -snf ../run /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/var/run
ln -snf ../run/lock /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/var/lock
do_install_basefilesissue
rotation=`cat /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/rotation`
if [ "$rotation" != "0" ]; then
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/rotation /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/rotation
fi
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/fstab /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/fstab
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/filesystems /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/filesystems
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/usbd /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/default/usbd
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/profile /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/profile
sed -i 's#ROOTHOME#/home/root#' /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/profile
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/shells /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/shells
install -m 0755 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/share/dot.profile /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/skel/.profile
install -m 0755 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/share/dot.bashrc /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/skel/.bashrc
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/nsswitch.conf /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/nsswitch.conf
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/host.conf /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/host.conf
install -m 0644 /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/motd /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/motd
ln -sf /proc/mounts /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/mtab
install -d /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/uboot
install -d /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/data
sed -i -e 's$.*@MENDER_BOOT_PART@.*$@MENDER_BOOT_PART@ /uboot @MENDER_BOOT_PART_FSTYPE@ defaults,sync 0 0$' /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/fstab
sed -i -e 's$.*@MENDER_DATA_PART@.*$@MENDER_DATA_PART@ /data @MENDER_DATA_PART_FSTYPE@ defaults 0 0$' /home/user/Desktop/yocto/build/tmp/work/raspberrypi3-poky-linux-gnueabi/base-files/3.0.14-r89/image/etc/fstab
}
然而,我的 /etc/fstab 看起来像这样:
# stock fstab - you probably want to override this with a machine specific one
/dev/root / auto defaults 1 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
tmpfs /run tmpfs
mode=0755,nodev,nosuid,strictatime 0 0
tmpfs /var/volatile tmpfs defaults 0 0
# uncomment this if your device has a SD/MMC/Transflash slot
#/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
如您所见,它完全跳过了 meta-menders 的 /etc/fstab 文件,只写了一个 stock 文件。
那么,您的 sed 表达式中的 .*@MENDER_BOOT_PART@.*
的计算结果是什么?
据我所知,您的 fstab 中没有与 .*@MENDER_BOOT_PART@.*
和 .*@MENDER_DATA_PART@.*
中任何一个匹配的内容。
如果我的理解是正确的,你可以使用类似于
的东西 echo "data" >> ${D}${sysconfdir}/fstab