diff mbox series

[v2,2/2] mdadm: catch sed substitution failure during install

Message ID 20260216221118.2240588-2-ankur.tyagi85@gmail.com
State Under Review
Headers show
Series [v2,1/2] mdadm: upgrade 4.4 -> 4.5 | expand

Commit Message

Ankur Tyagi Feb. 16, 2026, 10:11 p.m. UTC
From: Ankur Tyagi <ankur.tyagi85@gmail.com>

This patch is to validate a possible race condition theory during install.
Also fail the build if sed substitution still fails for further investigation.

Details: https://bugzilla.yoctoproject.org/show_bug.cgi?id=16166

[YOCTO #16166]

Signed-off-by: Ankur Tyagi <ankur.tyagi85@gmail.com>
---
 ...1-Makefile-install-rule-improvements.patch | 64 +++++++++++++++++++
 meta/recipes-extended/mdadm/mdadm_4.5.bb      | 13 +++-
 2 files changed, 76 insertions(+), 1 deletion(-)
 create mode 100644 meta/recipes-extended/mdadm/files/0001-Makefile-install-rule-improvements.patch

Comments

Alexander Kanavin Feb. 17, 2026, 9:39 a.m. UTC | #1
To be honest, I wouldn't start tweaking the code with patches just
yet. The existing code doesn't seem wrong, so we need to understand
where and how it breaks, otherwise how would we justify any changes to
upstream?

So I'd keep only the very last bit:

+        # temp change
+        install -m 644 ${S}/udev-md-raid-safe-timeouts.rules
${D}/${sysconfdir}/tmp-file
+
+        if grep -q "BINDIR" ${D}${datadir}/${BPN}/mdcheck; then
+            bberror "Build failed: 'BINDIR' placeholder found in mdcheck."
+            bbfatal_log "sed command in Makefile failed to execute correctly."
+        fi

tmp-file needs to increment every time a new version is sent. E.g.
tmp-file-2 etc.

Alex

On Mon, 16 Feb 2026 at 23:11, Ankur Tyagi via lists.openembedded.org
<ankur.tyagi85=gmail.com@lists.openembedded.org> wrote:
>
> From: Ankur Tyagi <ankur.tyagi85@gmail.com>
>
> This patch is to validate a possible race condition theory during install.
> Also fail the build if sed substitution still fails for further investigation.
>
> Details: https://bugzilla.yoctoproject.org/show_bug.cgi?id=16166
>
> [YOCTO #16166]
>
> Signed-off-by: Ankur Tyagi <ankur.tyagi85@gmail.com>
> ---
>  ...1-Makefile-install-rule-improvements.patch | 64 +++++++++++++++++++
>  meta/recipes-extended/mdadm/mdadm_4.5.bb      | 13 +++-
>  2 files changed, 76 insertions(+), 1 deletion(-)
>  create mode 100644 meta/recipes-extended/mdadm/files/0001-Makefile-install-rule-improvements.patch
>
> diff --git a/meta/recipes-extended/mdadm/files/0001-Makefile-install-rule-improvements.patch b/meta/recipes-extended/mdadm/files/0001-Makefile-install-rule-improvements.patch
> new file mode 100644
> index 0000000000..feb4c5d926
> --- /dev/null
> +++ b/meta/recipes-extended/mdadm/files/0001-Makefile-install-rule-improvements.patch
> @@ -0,0 +1,64 @@
> +From 21310a9249e21c3dbdb6a6b8e07e74bf0a4557bc Mon Sep 17 00:00:00 2001
> +From: Ankur Tyagi <ankur.tyagi85@gmail.com>
> +Date: Tue, 17 Feb 2026 08:41:48 +1300
> +Subject: [PATCH] Makefile: install rule improvements
> +
> +- Removed double install logic
> +- Use unique temp files
> +
> +Upstream-Status: Pending
> +
> +Signed-off-by: Ankur Tyagi <ankur.tyagi85@gmail.com>
> +---
> + Makefile | 30 ++++++++++++++----------------
> + 1 file changed, 14 insertions(+), 16 deletions(-)
> +
> +diff --git a/Makefile b/Makefile
> +index 788ff5d9..a4d4f178 100644
> +--- a/Makefile
> ++++ b/Makefile
> +@@ -298,30 +298,28 @@ install-man: mdadm.8 md.4 mdadm.conf.5 mdmon.8
> + install-udev: udev-md-raid-arrays.rules udev-md-raid-assembly.rules udev-md-raid-creating.rules \
> +               udev-md-clustered-confirm-device.rules
> +       @for file in $(UDEV_RULES); \
> +-      do sed -e 's,BINDIR,$(BINDIR),g' udev-$${file#??-} > .install.tmp.1 && \
> +-         $(ECHO) $(INSTALL) -D -m 644 udev-$${file#??-} $(DESTDIR)$(UDEVDIR)/rules.d/$$file ; \
> +-         $(INSTALL) -D -m 644 .install.tmp.1 $(DESTDIR)$(UDEVDIR)/rules.d/$$file ; \
> +-         rm -f .install.tmp.1; \
> ++      do \
> ++              srcfile=udev-$${file#??-} ; \
> ++              sed -e 's,BINDIR,$(BINDIR),g' $$srcfile > $$srcfile.tmp && \
> ++              $(INSTALL) -D -m 644 $$srcfile.tmp $(DESTDIR)$(UDEVDIR)/rules.d/$$file && \
> ++              rm -f $$srcfile.tmp ; \
> +       done
> +
> + install-systemd: systemd/mdmon@.service
> +       @for file in $(SYSTEMD_UNITS); \
> +-      do sed -e 's,BINDIR,$(BINDIR),g;s,MISCDIR,$(MISCDIR),g' systemd/$$file > .install.tmp.2 && \
> +-         $(ECHO) $(INSTALL) -D -m 644 systemd/$$file $(DESTDIR)$(SYSTEMD_DIR)/$$file ; \
> +-         $(INSTALL) -D -m 644 .install.tmp.2 $(DESTDIR)$(SYSTEMD_DIR)/$$file ; \
> +-         rm -f .install.tmp.2; \
> ++      do sed -e 's,BINDIR,$(BINDIR),g;s,MISCDIR,$(MISCDIR),g' systemd/$$file > systemd/$$file.tmp && \
> ++         $(INSTALL) -D -m 644 systemd/$$file.tmp $(DESTDIR)$(SYSTEMD_DIR)/$$file && \
> ++         rm -f systemd/$$file.tmp; \
> +       done
> +       @for file in mdadm.shutdown ; \
> +-      do sed -e 's,BINDIR,$(BINDIR),g' systemd/$$file > .install.tmp.3 && \
> +-         $(ECHO) $(INSTALL) -D -m 755  systemd/$$file $(DESTDIR)$(SYSTEMD_DIR)-shutdown/$$file ; \
> +-         $(INSTALL) -D -m 755  .install.tmp.3 $(DESTDIR)$(SYSTEMD_DIR)-shutdown/$$file ; \
> +-         rm -f .install.tmp.3; \
> ++      do sed -e 's,BINDIR,$(BINDIR),g' systemd/$$file > systemd/$$file.tmp && \
> ++         $(INSTALL) -D -m 755  systemd/$$file.tmp $(DESTDIR)$(SYSTEMD_DIR)-shutdown/$$file && \
> ++         rm -f systemd/$$file.tmp; \
> +       done
> +       @for file in mdcheck ; \
> +-      do sed -e 's,BINDIR,$(BINDIR),g' misc/$$file > .install.tmp.4 && \
> +-         $(ECHO) $(INSTALL) -D -m 755  misc/$$file $(DESTDIR)$(MISCDIR)/$$file ; \
> +-         $(INSTALL) -D -m 755  .install.tmp.4 $(DESTDIR)$(MISCDIR)/$$file ; \
> +-         rm -f .install.tmp.4; \
> ++      do sed -e 's,BINDIR,$(BINDIR),g' misc/$$file > misc/$$file.tmp && \
> ++         $(INSTALL) -D -m 755  misc/$$file.tmp $(DESTDIR)$(MISCDIR)/$$file && \
> ++         rm -f misc/$$file.tmp; \
> +       done
> +
> + install-bin: mdadm mdmon
> diff --git a/meta/recipes-extended/mdadm/mdadm_4.5.bb b/meta/recipes-extended/mdadm/mdadm_4.5.bb
> index b30d3d776e..bca70aeaf0 100644
> --- a/meta/recipes-extended/mdadm/mdadm_4.5.bb
> +++ b/meta/recipes-extended/mdadm/mdadm_4.5.bb
> @@ -14,6 +14,7 @@ SRC_URI = "git://git.kernel.org/pub/scm/utils/mdadm/mdadm.git;protocol=https;bra
>             file://mdadm.init \
>             file://0002-Create.c-include-linux-falloc.h-for-FALLOC_FL_ZERO_R.patch \
>             file://0001-raid6check.c-restripe.c-Use-64-bit-off_t-across-both.patch \
> +           file://0001-Makefile-install-rule-improvements.patch \
>             "
>
>  SRCREV = "8f0c7692d48414ff7b3fe927ce75799c65ef24b1"
> @@ -40,11 +41,21 @@ EXTRA_OEMAKE = 'CHECK_RUN_DIR=0 CWFLAGS="" CXFLAGS="${CFLAGS}" SYSTEMD_DIR=${sys
>  DEBUG_OPTIMIZATION:append = " -Wno-error"
>
>  do_install() {
> -        oe_runmake 'DESTDIR=${D}' install install-systemd
> +        install -d ${D}/${datadir}/
> +
> +        oe_runmake -j 1 'DESTDIR=${D}' install install-systemd
> +
>          install -d ${D}/${sysconfdir}/
>          install -m 644 ${S}/documentation/mdadm.conf-example ${D}${sysconfdir}/mdadm.conf
>          install -d ${D}/${sysconfdir}/init.d
>          install -m 755 ${UNPACKDIR}/mdadm.init ${D}${sysconfdir}/init.d/mdmonitor
> +        # temp change
> +        install -m 644 ${S}/udev-md-raid-safe-timeouts.rules ${D}/${sysconfdir}/tmp-file
> +
> +        if grep -q "BINDIR" ${D}${datadir}/${BPN}/mdcheck; then
> +            bberror "Build failed: 'BINDIR' placeholder found in mdcheck."
> +            bbfatal_log "sed command in Makefile failed to execute correctly."
> +        fi
>  }
>
>  do_compile_ptest() {
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#231226): https://lists.openembedded.org/g/openembedded-core/message/231226
> Mute This Topic: https://lists.openembedded.org/mt/117847720/1686489
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alex.kanavin@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
diff mbox series

Patch

diff --git a/meta/recipes-extended/mdadm/files/0001-Makefile-install-rule-improvements.patch b/meta/recipes-extended/mdadm/files/0001-Makefile-install-rule-improvements.patch
new file mode 100644
index 0000000000..feb4c5d926
--- /dev/null
+++ b/meta/recipes-extended/mdadm/files/0001-Makefile-install-rule-improvements.patch
@@ -0,0 +1,64 @@ 
+From 21310a9249e21c3dbdb6a6b8e07e74bf0a4557bc Mon Sep 17 00:00:00 2001
+From: Ankur Tyagi <ankur.tyagi85@gmail.com>
+Date: Tue, 17 Feb 2026 08:41:48 +1300
+Subject: [PATCH] Makefile: install rule improvements
+
+- Removed double install logic
+- Use unique temp files
+
+Upstream-Status: Pending
+
+Signed-off-by: Ankur Tyagi <ankur.tyagi85@gmail.com>
+---
+ Makefile | 30 ++++++++++++++----------------
+ 1 file changed, 14 insertions(+), 16 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 788ff5d9..a4d4f178 100644
+--- a/Makefile
++++ b/Makefile
+@@ -298,30 +298,28 @@ install-man: mdadm.8 md.4 mdadm.conf.5 mdmon.8
+ install-udev: udev-md-raid-arrays.rules udev-md-raid-assembly.rules udev-md-raid-creating.rules \
+ 		udev-md-clustered-confirm-device.rules 
+ 	@for file in $(UDEV_RULES); \
+-	do sed -e 's,BINDIR,$(BINDIR),g' udev-$${file#??-} > .install.tmp.1 && \
+-	   $(ECHO) $(INSTALL) -D -m 644 udev-$${file#??-} $(DESTDIR)$(UDEVDIR)/rules.d/$$file ; \
+-	   $(INSTALL) -D -m 644 .install.tmp.1 $(DESTDIR)$(UDEVDIR)/rules.d/$$file ; \
+-	   rm -f .install.tmp.1; \
++	do \
++		srcfile=udev-$${file#??-} ; \
++		sed -e 's,BINDIR,$(BINDIR),g' $$srcfile > $$srcfile.tmp && \
++		$(INSTALL) -D -m 644 $$srcfile.tmp $(DESTDIR)$(UDEVDIR)/rules.d/$$file && \
++		rm -f $$srcfile.tmp ; \
+ 	done
+ 
+ install-systemd: systemd/mdmon@.service
+ 	@for file in $(SYSTEMD_UNITS); \
+-	do sed -e 's,BINDIR,$(BINDIR),g;s,MISCDIR,$(MISCDIR),g' systemd/$$file > .install.tmp.2 && \
+-	   $(ECHO) $(INSTALL) -D -m 644 systemd/$$file $(DESTDIR)$(SYSTEMD_DIR)/$$file ; \
+-	   $(INSTALL) -D -m 644 .install.tmp.2 $(DESTDIR)$(SYSTEMD_DIR)/$$file ; \
+-	   rm -f .install.tmp.2; \
++	do sed -e 's,BINDIR,$(BINDIR),g;s,MISCDIR,$(MISCDIR),g' systemd/$$file > systemd/$$file.tmp && \
++	   $(INSTALL) -D -m 644 systemd/$$file.tmp $(DESTDIR)$(SYSTEMD_DIR)/$$file && \
++	   rm -f systemd/$$file.tmp; \
+ 	done
+ 	@for file in mdadm.shutdown ; \
+-	do sed -e 's,BINDIR,$(BINDIR),g' systemd/$$file > .install.tmp.3 && \
+-	   $(ECHO) $(INSTALL) -D -m 755  systemd/$$file $(DESTDIR)$(SYSTEMD_DIR)-shutdown/$$file ; \
+-	   $(INSTALL) -D -m 755  .install.tmp.3 $(DESTDIR)$(SYSTEMD_DIR)-shutdown/$$file ; \
+-	   rm -f .install.tmp.3; \
++	do sed -e 's,BINDIR,$(BINDIR),g' systemd/$$file > systemd/$$file.tmp && \
++	   $(INSTALL) -D -m 755  systemd/$$file.tmp $(DESTDIR)$(SYSTEMD_DIR)-shutdown/$$file && \
++	   rm -f systemd/$$file.tmp; \
+ 	done
+ 	@for file in mdcheck ; \
+-	do sed -e 's,BINDIR,$(BINDIR),g' misc/$$file > .install.tmp.4 && \
+-	   $(ECHO) $(INSTALL) -D -m 755  misc/$$file $(DESTDIR)$(MISCDIR)/$$file ; \
+-	   $(INSTALL) -D -m 755  .install.tmp.4 $(DESTDIR)$(MISCDIR)/$$file ; \
+-	   rm -f .install.tmp.4; \
++	do sed -e 's,BINDIR,$(BINDIR),g' misc/$$file > misc/$$file.tmp && \
++	   $(INSTALL) -D -m 755  misc/$$file.tmp $(DESTDIR)$(MISCDIR)/$$file && \
++	   rm -f misc/$$file.tmp; \
+ 	done
+ 
+ install-bin: mdadm mdmon
diff --git a/meta/recipes-extended/mdadm/mdadm_4.5.bb b/meta/recipes-extended/mdadm/mdadm_4.5.bb
index b30d3d776e..bca70aeaf0 100644
--- a/meta/recipes-extended/mdadm/mdadm_4.5.bb
+++ b/meta/recipes-extended/mdadm/mdadm_4.5.bb
@@ -14,6 +14,7 @@  SRC_URI = "git://git.kernel.org/pub/scm/utils/mdadm/mdadm.git;protocol=https;bra
            file://mdadm.init \
            file://0002-Create.c-include-linux-falloc.h-for-FALLOC_FL_ZERO_R.patch \
            file://0001-raid6check.c-restripe.c-Use-64-bit-off_t-across-both.patch \
+           file://0001-Makefile-install-rule-improvements.patch \
            "
 
 SRCREV = "8f0c7692d48414ff7b3fe927ce75799c65ef24b1"
@@ -40,11 +41,21 @@  EXTRA_OEMAKE = 'CHECK_RUN_DIR=0 CWFLAGS="" CXFLAGS="${CFLAGS}" SYSTEMD_DIR=${sys
 DEBUG_OPTIMIZATION:append = " -Wno-error"
 
 do_install() {
-        oe_runmake 'DESTDIR=${D}' install install-systemd
+        install -d ${D}/${datadir}/
+
+        oe_runmake -j 1 'DESTDIR=${D}' install install-systemd
+
         install -d ${D}/${sysconfdir}/
         install -m 644 ${S}/documentation/mdadm.conf-example ${D}${sysconfdir}/mdadm.conf
         install -d ${D}/${sysconfdir}/init.d
         install -m 755 ${UNPACKDIR}/mdadm.init ${D}${sysconfdir}/init.d/mdmonitor
+        # temp change
+        install -m 644 ${S}/udev-md-raid-safe-timeouts.rules ${D}/${sysconfdir}/tmp-file
+
+        if grep -q "BINDIR" ${D}${datadir}/${BPN}/mdcheck; then
+            bberror "Build failed: 'BINDIR' placeholder found in mdcheck."
+            bbfatal_log "sed command in Makefile failed to execute correctly."
+        fi
 }
 
 do_compile_ptest() {