tags 401603 + pending # lowering severity as the fix is already implemented for daily builds severity 401603 important thanks
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 right). 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). Cheers, FJP 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. NUM_KEEP=30 fi + # Overridable environment variables for building. if [ -z "$ROOTCMD" ]; then ROOTCMD="fakeroot" fi +# 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. +ROOTCMDOPTS="" +if [ "$ROOTCMD" = fakeroot ]; then + FRSAVE="$(mktemp -t d-i_daily-build.XXXXXX)" + trap 'rm -f $FRSAVE' 0 HUP INT QUIT TERM + ROOTCMDOPTS="-i $FRSAVE -s $FRSAVE" +fi + 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')" fi $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" else overview "$t failed"
pgpnVC14sSdIl.pgp
Description: PGP signature