Bug#520251: pbuilder: Pbuilder does not umount bindmounts when ssh connection dies

Stefan Fritsch sf at sfritsch.de
Wed Mar 18 11:46:18 UTC 2009


Package: pbuilder
Version: 0.181
Severity: important

When pbuilder is executed over ssh and the ssh connection dies, it won't
umount bind mounts and won't clean up the build dir. Unfortunately,
cowbuilder WILL cleanup the build dir, wiping all bind mounts. The
execution order is like this:

ssh -> sudo -> cowbuilder -> pbuilder

Because of the sudo, the SIGHUP will not be delivered to pbuilder.
However, pbuilder will get SIGPIPE when writing to stdout or stderr.
In addition, even when SIGPIPE is ignored, a write to stdout will give
EPIPE, which causes echo to return with an error.

Therefore, you

- need to catch sigpipe in addition to sighup
- need to ignore sigpipe and sighup in the cleanup handler
- need to set +x in the cleanup handler to avoid exiting just
  because echo returns an error.

The attached patch works for me but I have only edited
pbuilder-buildpackage and not the other commands.
-------------- next part --------------
diff -Nru /tmp/Clyhun1xsU/pbuilder-0.181x1/pbuilder-buildpackage /tmp/LAaYdkTAGv/pbuilder-0.181x2/pbuilder-buildpackage
--- pbuilder-0.181x1/pbuilder-buildpackage	2007-05-28 13:37:29.000000000 +0200
+++ pbuilder-0.181x2/pbuilder-buildpackage	2009-03-18 11:50:00.000000000 +0100
@@ -52,7 +52,7 @@
 
 echobacktime
 extractbuildplace 
-trap umountproc_cleanbuildplace_trap exit sighup
+trap umountproc_cleanbuildplace_trap exit sighup sigpipe
 loadhooks
 
 if [ ! -d "${BUILDRESULT}" ]; then
@@ -89,10 +89,10 @@
 createbuilduser
 echo "Installing the build-deps"
 executehooks "D"
-trap saveaptcache_umountproc_cleanbuildplace_trap exit sighup
+trap saveaptcache_umountproc_cleanbuildplace_trap exit sighup sigpipe
 checkbuilddep "$PACKAGENAME"
 save_aptcache
-trap umountproc_cleanbuildplace_trap exit sighup
+trap umountproc_cleanbuildplace_trap exit sighup sigpipe
 
 echo "Copying source file"
 copydsc "$PACKAGENAME" "$BUILDPLACE/tmp/buildd"
@@ -139,7 +139,7 @@
 fi
 
 if ! wait ${BUILD_PID}; then
-    trap umountproc_cleanbuildplace_trap exit sighup
+    trap umountproc_cleanbuildplace_trap exit sighup sigpipe
     eval "${KILL_WAIT_PID}"
     echo "pbuilder: Failed autobuilding of package" >&2
     executehooks "C"
@@ -149,10 +149,10 @@
     # build was successful
 fi
 
-trap umountproc_cleanbuildplace_trap exit sighup
+trap umountproc_cleanbuildplace_trap exit sighup sigpipe
 executehooks "B"
 save_aptcache
-trap cleanbuildplace_trap exit sighup
+trap cleanbuildplace_trap exit sighup sigpipe
 umountproc
 
 
@@ -166,6 +166,6 @@
 
 :
 cleanbuildplace
-trap - exit sighup
+trap - exit sighup sigpipe
 echobacktime
 exit 0
diff -Nru /tmp/Clyhun1xsU/pbuilder-0.181x1/pbuilder-modules /tmp/LAaYdkTAGv/pbuilder-0.181x2/pbuilder-modules
--- pbuilder-0.181x1/pbuilder-modules	2008-05-08 17:49:07.000000000 +0200
+++ pbuilder-0.181x2/pbuilder-modules	2009-03-18 11:50:39.000000000 +0100
@@ -464,23 +464,31 @@
 
 # all trap hooks that should lead to 'exit'; and error exit.
 function cleanbuildplace_trap () {
+    trap "" sigpipe sighup
+    set +e
     cleanbuildplace
-    trap - exit sighup
+    trap - exit sighup sigpipe
     exit 1
 }
 function saveaptcache_umountproc_cleanbuildplace_trap () {
+    trap "" sigpipe sighup
+    set +e
     saveaptcache_umountproc_cleanbuildplace
-    trap - exit sighup
+    trap - exit sighup sigpipe
     exit 1
 }
 function umountproc_cleanbuildplace_trap () {
+    trap "" sigpipe sighup
+    set +e
     umountproc_cleanbuildplace
-    trap - exit sighup
+    trap - exit sighup sigpipe
     exit 1
 }
 function umountproc_trap () {
+    trap "" sigpipe sighup
+    set +e
     umountproc
-    trap - exit sighup
+    trap - exit sighup sigpipe
     exit 1
 }
 


More information about the Pbuilder-maint mailing list