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