conf/178978: Race in make release when make system/bootonly target with -j > 1

Garrett Cooper yaneurabeya at gmail.com
Sat May 25 18:20:02 UTC 2013


>Number:         178978
>Category:       conf
>Synopsis:       Race in make release when make system/bootonly target with -j > 1
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat May 25 18:20:01 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator:     Garrett Cooper
>Release:        10-CURRENT
>Organization:
EMC Isilon
>Environment:
FreeBSD fuji-current.local 10.0-CURRENT FreeBSD 10.0-CURRENT #1 r+4f99885-dirty: Thu May 16 15:52:49 PDT 2013     root at fuji-current.local:/usr/obj/usr/src/sys/FUJI-NOCOMPAT  i386
>Description:
make distribution can fail with -j > 1 if installworld/make hierarchy hasn't completed because multiple targets are being executed in parallel with -j > 1. The error I ran into was the following:

install: target directory `/rel//etc' does not exist
usage: install [-bCcpSsUv] [-f flags] [-g group] [-m mode] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               [-B suffix] [-l linkflags] [-N dbdir]
               file1 file2
       install [-bCcpSsUv] [-f flags] [-g group] [-m mode] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               [-B suffix] [-l linkflags] [-N dbdir]
               file1 ... fileN directory
       install -dU [-vU] [-g group] [-m mode] [-N dbdir] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               directory ...
cap_mkdb: /rel//etc/login.conf.db: No such file or directory
install: target directory `/rel//etc' does not exist
usage: install [-bCcpSsUv] [-f flags] [-g group] [-m mode] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               [-B suffix] [-l linkflags] [-N dbdir]
               file1 file2
       install [-bCcpSsUv] [-f flags] [-g group] [-m mode] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               [-B suffix] [-l linkflags] [-N dbdir]
               file1 ... fileN directory
       install -dU [-vU] [-g group] [-m mode] [-N dbdir] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               directory ...
install: target directory `/rel//etc' does not exist
usage: install [-bCcpSsUv] [-f flags] [-g group] [-m mode] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               [-B suffix] [-l linkflags] [-N dbdir]
               file1 file2
       install [-bCcpSsUv] [-f flags] [-g group] [-m mode] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               [-B suffix] [-l linkflags] [-N dbdir]
               file1 ... fileN directory
       install -dU [-vU] [-g group] [-m mode] [-N dbdir] [-o owner]
               [-M log] [-D dest] [-h hash] [-T tags]
               directory ...
*** [distribution] Error code 64

make: stopped in /rel/usr/src/etc
1 error

make: stopped in /rel/usr/src/etc
*** [distribution] Error code 2

make: stopped in /rel/usr/src
1 error

make: stopped in /rel/usr/src
*** [distribution] Error code 2

make: stopped in /rel/usr/src
--- installworld ---
>How-To-Repeat:
cd /usr/src/release; env MAKE_FLAGS=-j16 sh generate-release.sh head /rel/
>Fix:


Patch attached with submission follows:

>From c001d588658a8cd6327afbdf52b7bdc982992292 Mon Sep 17 00:00:00 2001
From: Garrett Cooper <yanegomi at gmail.com>
Date: Sat, 25 May 2013 11:05:21 -0700
Subject: [PATCH] Fix a race condition between make distribution and
 installworld

installworld must finish before distribution can complete.

Signed-off-by: Garrett Cooper <yanegomi at gmail.com>
---
 release/Makefile | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/release/Makefile b/release/Makefile
index 975f70e..6932166 100644
--- a/release/Makefile
+++ b/release/Makefile
@@ -138,8 +138,10 @@ tests.txz:
 system: packagesystem
 # Install system
 	mkdir -p release
-	cd ${WORLDDIR} && ${IMAKE} installkernel installworld distribution \
+.for t in installkernel installworld distribution
+	cd ${WORLDDIR} && ${IMAKE} $t \
 	    DESTDIR=${.OBJDIR}/release WITHOUT_RESCUE=1 WITHOUT_KERNEL_SYMBOLS=1
+.endfor
 # Copy distfiles
 	mkdir -p release/usr/freebsd-dist
 	cp *.txz MANIFEST release/usr/freebsd-dist
@@ -157,7 +159,8 @@ system: packagesystem
 bootonly: packagesystem
 # Install system
 	mkdir -p bootonly
-	cd ${WORLDDIR} && ${IMAKE} installkernel installworld distribution \
+.for t in installkernel installworld distribution
+	cd ${WORLDDIR} && ${IMAKE} $t \
 	    DESTDIR=${.OBJDIR}/bootonly WITHOUT_AMD=1 WITHOUT_AT=1 \
 	    WITHOUT_BIND_DNSSEC=1 WITHOUT_BIND_ETC=1 WITHOUT_BIND_MTREE=1 \
 	    WITHOUT_BIND_NAMED=1 WITHOUT_GAMES=1 WITHOUT_GROFF=1 \
@@ -165,6 +168,7 @@ bootonly: packagesystem
 	    WITHOUT_NCP=1 WITHOUT_TOOLCHAIN=1 WITHOUT_PROFILE=1 \
 	    WITHOUT_INSTALLIB=1 WITHOUT_RESCUE=1 WITHOUT_DICT=1 \
 	    WITHOUT_KERNEL_SYMBOLS=1
+.endfor
 # Copy manifest only (no distfiles) to get checksums
 	mkdir -p bootonly/usr/freebsd-dist
 	cp MANIFEST bootonly/usr/freebsd-dist
-- 
1.8.2.3



>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list