[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#401603: d-i: i386 netinst installgui fails to boot due to broken file attribs in /dev

tags 401603 + pending
# lowering severity as the fix is already implemented for daily builds
severity 401603 important

On Wednesday 06 December 2006 10:05, Joey Hess wrote:
> If I run the build by hand (in fakeroot), it's crw-r--r-- all the way
> through, and is ok in the initrd. The next bi-daily build will have the
> info in the logs to see what happens there.

OK. I think I've got it.
The daily-build script does not actually run build_all in a single 
fakeroot invocation, but rather calls each target separately to be able 
to log them separately.
This is the root cause of the problem, that is further triggered by the 
fact that part of the build for the cdrom_gtk target is done as part of 
building cdrom_isolinux (I think to get the isolinux configuration files 

So essentially the two device files get created in the first fakeroot 
invocation (part of cdrom_isolinux build), but the initrd gets created in 
a separate fakeroot invocation.

This should be solvable making the daily-build script use fakeroots -i 
and -s options to save the state in ./tmp between build targets.
I've verified that the attached patch indeed solves the issue and 
committed it. A review would be welcome though.

Note that SOMETHING (tm) must have changed recently (probably in the 
kernel) to make this issue appear suddenly as the "error" in the build 
system has been there ever since we started building g-i from trunk (and 
there could easily be similar, but apparently unimportant issues 
elsewhere in images).


P.S. Joey, feel free to revert your Makefile, maybe after checking 
build_cdrom_gtk.log once after the next build. The error currently shows 
clearly at the top of that file.

Index: daily-build
--- daily-build	(revision 43198)
+++ daily-build	(working copy)
@@ -32,11 +32,22 @@
 	# Default to keeping 30 days of builds. Set to zero to keep all.
 # Overridable environment variables for building.
 if [ -z "$ROOTCMD" ]; then
+# Internal environment variables to keep file attributes between targets
+# when fakeroot is used.
+# As we start with an empty file, we can use -i also on first invocation.
+if [ "$ROOTCMD" = fakeroot ]; then
+	FRSAVE="$(mktemp -t d-i_daily-build.XXXXXX)"
+	trap 'rm -f $FRSAVE' 0 HUP INT QUIT TERM
 overview () {
 	LANG=C echo "$(dpkg --print-architecture) ($(date)) $(whoami)@$(hostname | cut -d . -f 1) $1" >> dest/overview.log
@@ -52,15 +63,17 @@
 	# Override $TARGETS with custom makefile targets.
 	if [ -z "$TARGETS" ]; then
-		TARGETS="$($ROOTCMD make all_list |grep '^build')"
+		TARGETS="$($ROOTCMD make all_list | grep '^build')"
 	$ROOTCMD make reallyclean > /dev/null
 	mkdir dest
 	touch dest/overview.log
+	# Save file attributes within this loop if fakeroot is used
 	for t in $TARGETS; do
 		header BUILDING IMAGE FOR $t > dest/$t.log
-		if $ROOTCMD make $t >> dest/$t.log 2>&1; then
+		if $ROOTCMD $ROOTCMDOPTS make $t >> dest/$t.log 2>&1; then
 			overview "$t success"
 			overview "$t failed"

Attachment: pgpAhY5rNBOBh.pgp
Description: PGP signature

Reply to: