Bug#557197: [buildd-tools-devel] Bug#557197: Bug#557197: schroot -b doesn't work for chroots with type=block-device
tags 557197 + fixed-upstream patch pending thanks On Fri, Nov 20, 2009 at 11:36:00AM -0500, Evan Broder wrote: On Fri, Nov 20, 2009 at 6:40 AM, Roger Leigh rle...@codelibre.net wrote: On Fri, Nov 20, 2009 at 02:46:47AM -0500, Evan Broder wrote: Package: schroot Version: 1.3.1-1 Severity: important If I use schroot -b to create a session of a chroot with type=block-device, I get a valid chroot session name back, and the chroot is setup, but it's not recorded in /var/lib/schroot/session, and I can't then later run it. Just to double check, this is definitely version 1.3.1 from experimental, not the stable/unstable version? I thought this was fixed in 1.3.1, but I'll double check. It /should/ be creating a session file, but obviously isn't in your case. Fixed in git with the following patch; I'll make a new release shortly. Regards, Roger diff --git a/sbuild/sbuild-chroot-block-device-base.cc b/sbuild/sbuild-chroot-block-device-base.cc index 7010a49..d02a4f0 100644 --- a/sbuild/sbuild-chroot-block-device-base.cc +++ b/sbuild/sbuild-chroot-block-device-base.cc @@ -114,75 +114,6 @@ chroot_block_device_base::setup_env (chroot const chroot, env.add(CHROOT_DEVICE, get_device()); } -void -chroot_block_device_base::setup_lock (chroot::setup_type type, - bool lock, - intstatus) -{ - /* Only lock during setup, not exec. */ - if (type == EXEC_START || type == EXEC_STOP) -return; - - /* Lock is preserved through the entire session. */ - if ((type == SETUP_START lock == false) || - (type == SETUP_STOP lock == true)) -return; - - try -{ - if (!stat(this-device).is_block()) - { - throw error(get_device(), DEVICE_NOTBLOCK); - } - else - { -#ifdef SBUILD_FEATURE_UNION - /* We don't lock the device if union is configured. */ - const chroot *base = dynamic_castconst chroot *(this); - assert(base); - chroot_facet_union::const_ptr puni - (base-get_facetchroot_facet_union()); - assert(puni); - if (puni-get_union_configured()) - return; -#endif - - sbuild::device_lock dlock(this-device); - if (lock) - { - try - { - dlock.set_lock(lock::LOCK_EXCLUSIVE, 15); - } - catch (sbuild::lock::error const e) - { - throw error(get_device(), DEVICE_LOCK, e); - } - } - else - { - try - { - dlock.unset_lock(); - } - catch (sbuild::lock::error const e) - { - throw error(get_device(), DEVICE_UNLOCK, e); - } - } - } -} - catch (sbuild::stat::error const e) // Failed to stat -{ - // Don't throw if stopping a session and the device stat - // failed. This is because the setup scripts shouldn't fail - // to be run if the block device no longer exists, which - // would prevent the session from being ended. - if (type != SETUP_STOP) - throw; -} -} - sbuild::chroot::session_flags chroot_block_device_base::get_session_flags (chroot const chroot) const { diff --git a/sbuild/sbuild-chroot-block-device-base.h b/sbuild/sbuild-chroot-block-device-base.h index ff5cf49..bba299a 100644 --- a/sbuild/sbuild-chroot-block-device-base.h +++ b/sbuild/sbuild-chroot-block-device-base.h @@ -83,11 +83,6 @@ namespace sbuild protected: virtual void -setup_lock (chroot::setup_type type, - bool lock, - intstatus); - -virtual void get_details (chroot const chroot, format_detail detail) const; @@ -100,7 +95,6 @@ namespace sbuild keyfile const keyfile, string_list used_keys); - private: /// The block device to use. std::string device; }; diff --git a/sbuild/sbuild-chroot-block-device.cc b/sbuild/sbuild-chroot-block-device.cc index 2730e5e..680131a 100644 --- a/sbuild/sbuild-chroot-block-device.cc +++ b/sbuild/sbuild-chroot-block-device.cc @@ -111,6 +111,83 @@ chroot_block_device::setup_env (chroot const chroot, chroot_block_device_base::setup_env(chroot, env); } +void +chroot_block_device::setup_lock (chroot::setup_type type, +bool lock, +intstatus) +{ + /* Only lock during setup, not exec. */ + if (type == EXEC_START || type == EXEC_STOP) +return; + + /* Lock is preserved through the entire session. */ + if ((type == SETUP_START lock == false) || + (type == SETUP_STOP lock == true)) +return; + + try +{ + if (!stat(this-get_device()).is_block()) + { + throw error(get_device(),
Bug#557197: [buildd-tools-devel] Bug#557197: Bug#557197: schroot -b doesn't work for chroots with type=block-device
I tried building schroot out of git, and it doesn't seem to be fixing the bug for me - files in /var/lib/schroot/session still aren't getting created - Evan On Sun, Dec 13, 2009 at 9:38 AM, Roger Leigh rle...@codelibre.net wrote: tags 557197 + fixed-upstream patch pending thanks On Fri, Nov 20, 2009 at 11:36:00AM -0500, Evan Broder wrote: On Fri, Nov 20, 2009 at 6:40 AM, Roger Leigh rle...@codelibre.net wrote: On Fri, Nov 20, 2009 at 02:46:47AM -0500, Evan Broder wrote: Package: schroot Version: 1.3.1-1 Severity: important If I use schroot -b to create a session of a chroot with type=block-device, I get a valid chroot session name back, and the chroot is setup, but it's not recorded in /var/lib/schroot/session, and I can't then later run it. Just to double check, this is definitely version 1.3.1 from experimental, not the stable/unstable version? I thought this was fixed in 1.3.1, but I'll double check. It /should/ be creating a session file, but obviously isn't in your case. Fixed in git with the following patch; I'll make a new release shortly. Regards, Roger diff --git a/sbuild/sbuild-chroot-block-device-base.cc b/sbuild/sbuild-chroot-block-device-base.cc index 7010a49..d02a4f0 100644 --- a/sbuild/sbuild-chroot-block-device-base.cc +++ b/sbuild/sbuild-chroot-block-device-base.cc @@ -114,75 +114,6 @@ chroot_block_device_base::setup_env (chroot const chroot, env.add(CHROOT_DEVICE, get_device()); } -void -chroot_block_device_base::setup_lock (chroot::setup_type type, - bool lock, - int status) -{ - /* Only lock during setup, not exec. */ - if (type == EXEC_START || type == EXEC_STOP) - return; - - /* Lock is preserved through the entire session. */ - if ((type == SETUP_START lock == false) || - (type == SETUP_STOP lock == true)) - return; - - try - { - if (!stat(this-device).is_block()) - { - throw error(get_device(), DEVICE_NOTBLOCK); - } - else - { -#ifdef SBUILD_FEATURE_UNION - /* We don't lock the device if union is configured. */ - const chroot *base = dynamic_castconst chroot *(this); - assert(base); - chroot_facet_union::const_ptr puni - (base-get_facetchroot_facet_union()); - assert(puni); - if (puni-get_union_configured()) - return; -#endif - - sbuild::device_lock dlock(this-device); - if (lock) - { - try - { - dlock.set_lock(lock::LOCK_EXCLUSIVE, 15); - } - catch (sbuild::lock::error const e) - { - throw error(get_device(), DEVICE_LOCK, e); - } - } - else - { - try - { - dlock.unset_lock(); - } - catch (sbuild::lock::error const e) - { - throw error(get_device(), DEVICE_UNLOCK, e); - } - } - } - } - catch (sbuild::stat::error const e) // Failed to stat - { - // Don't throw if stopping a session and the device stat - // failed. This is because the setup scripts shouldn't fail - // to be run if the block device no longer exists, which - // would prevent the session from being ended. - if (type != SETUP_STOP) - throw; - } -} - sbuild::chroot::session_flags chroot_block_device_base::get_session_flags (chroot const chroot) const { diff --git a/sbuild/sbuild-chroot-block-device-base.h b/sbuild/sbuild-chroot-block-device-base.h index ff5cf49..bba299a 100644 --- a/sbuild/sbuild-chroot-block-device-base.h +++ b/sbuild/sbuild-chroot-block-device-base.h @@ -83,11 +83,6 @@ namespace sbuild protected: virtual void - setup_lock (chroot::setup_type type, - bool lock, - int status); - - virtual void get_details (chroot const chroot, format_detail detail) const; @@ -100,7 +95,6 @@ namespace sbuild keyfile const keyfile, string_list used_keys); - private: /// The block device to use. std::string device; }; diff --git a/sbuild/sbuild-chroot-block-device.cc b/sbuild/sbuild-chroot-block-device.cc index 2730e5e..680131a 100644 --- a/sbuild/sbuild-chroot-block-device.cc +++ b/sbuild/sbuild-chroot-block-device.cc @@ -111,6 +111,83 @@ chroot_block_device::setup_env (chroot const chroot, chroot_block_device_base::setup_env(chroot, env); } +void +chroot_block_device::setup_lock (chroot::setup_type type, + bool lock, + int status) +{ + /* Only lock during setup, not
Bug#557197: [buildd-tools-devel] Bug#557197: Bug#557197: Bug#557197: schroot -b doesn't work for chroots with type=block-device
On Sun, Dec 13, 2009 at 12:24:21PM -0500, Evan Broder wrote: I tried building schroot out of git, and it doesn't seem to be fixing the bug for me - files in /var/lib/schroot/session still aren't getting created The change was definitely committed, it's visible at http://git.debian.org/?p=buildd-tools/schroot.git;a=commitdiff;h=f6861681aef2728f12823911a4c17810d6f34445 This is in git://git.debian.org/buildd-tools/schroot.git, master branch. Commit f6861681. I tested that a session file was correctly created and deleted on session creation and ending. Did you build schroot as Debian packages or just by running ./configure? Is it possible you're running the old schroot? Regards, Roger -- .''`. Roger Leigh : :' : Debian GNU/Linux http://people.debian.org/~rleigh/ `. `' Printing on GNU/Linux? http://gutenprint.sourceforge.net/ `-GPG Public Key: 0x25BFB848 Please GPG sign your mail. signature.asc Description: Digital signature
Bug#557197: [buildd-tools-devel] Bug#557197: Bug#557197: Bug#557197: schroot -b doesn't work for chroots with type=block-device
I checked out the repository, ran ./bootstrap, then debuild -S, then sbuild, then installed the resulting packages. I've rebooted since installing the packages just to make sure there's no state sticking around. debu...@debuild:~$ dpkg-query -W schroot schroot 1.3.2-1~debathena1 debu...@debuild:~$ schroot -c device-test (device-test)debu...@debuild:~$ logout debu...@debuild:~$ schroot -bc device-test device-test-ccf0dd9a-580b-4f83-9c3d-2492fbda5b7b debu...@debuild:~$ schroot -rc device-test-ccf0dd9a-580b-4f83-9c3d-2492fbda5b7b E: device-test-ccf0dd9a-580b-4f83-9c3d-2492fbda5b7b: Chroot not found debu...@debuild:~$ tree -x /var/lib/schroot /var/lib/schroot |-- mount | `-- device-test-ccf0dd9a-580b-4f83-9c3d-2492fbda5b7b |-- session |-- union | |-- overlay | | `-- device-test-ccf0dd9a-580b-4f83-9c3d-2492fbda5b7b | `-- underlay | `-- device-test-ccf0dd9a-580b-4f83-9c3d-2492fbda5b7b `-- unpack 9 directories, 0 files Interestingly, I now can't clean up the mounts because they claim to be in use - that didn't use to be the case: debuild:~# umount /var/lib/schroot/mount/device-test-ccf0dd9a-580b-4f83-9c3d-2492fbda5b7b umount: /var/lib/schroot/mount/device-test-ccf0dd9a-580b-4f83-9c3d-2492fbda5b7b: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) debuild:~# lsof /var/lib/schroot/mount/device-test-ccf0dd9a-580b-4f83-9c3d-2492fbda5b7b debuild:~# fuser /var/lib/schroot/mount/device-test-ccf0dd9a-580b-4f83-9c3d-2492fbda5b7b - Evan On Sun, Dec 13, 2009 at 1:46 PM, Roger Leigh rle...@codelibre.net wrote: On Sun, Dec 13, 2009 at 12:24:21PM -0500, Evan Broder wrote: I tried building schroot out of git, and it doesn't seem to be fixing the bug for me - files in /var/lib/schroot/session still aren't getting created The change was definitely committed, it's visible at http://git.debian.org/?p=buildd-tools/schroot.git;a=commitdiff;h=f6861681aef2728f12823911a4c17810d6f34445 This is in git://git.debian.org/buildd-tools/schroot.git, master branch. Commit f6861681. I tested that a session file was correctly created and deleted on session creation and ending. Did you build schroot as Debian packages or just by running ./configure? Is it possible you're running the old schroot? Regards, Roger -- .''`. Roger Leigh : :' : Debian GNU/Linux http://people.debian.org/~rleigh/ `. `' Printing on GNU/Linux? http://gutenprint.sourceforge.net/ `- GPG Public Key: 0x25BFB848 Please GPG sign your mail. -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.10 (GNU/Linux) iEYEAREDAAYFAkslNn4ACgkQVcFcaSW/uEgjMgCg1cWWNbNRiJWMF5Ze3EUcdAyE KVwAn2MlqAwGVHTpDMXL/Hj46VtaQZR1 =HfTH -END PGP SIGNATURE- -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Bug#557197: [buildd-tools-devel] Bug#557197: Bug#557197: Bug#557197: Bug#557197: schroot -b doesn't work for chroots with type=block-device
[Please could you not top-post. Thanks!] On Sun, Dec 13, 2009 at 01:57:15PM -0500, Evan Broder wrote: I checked out the repository, ran ./bootstrap, then debuild -S, then sbuild, then installed the resulting packages. I've rebooted since installing the packages just to make sure there's no state sticking around. I've put a copy of the sources and debian packages here: http://www.codelibre.net/~rleigh/schroot/ Could you try them, or rebuild them as appropriate? I've verified they work for me. However, it looked from your description that you might additionally be using filesystem unions; is this the case? If so, please could you test without a union to see if this works? If it's broken only when unions are enabled, there's some issue writing out the session file when unions are enabled. Thanks, Roger -- .''`. Roger Leigh : :' : Debian GNU/Linux http://people.debian.org/~rleigh/ `. `' Printing on GNU/Linux? http://gutenprint.sourceforge.net/ `-GPG Public Key: 0x25BFB848 Please GPG sign your mail. signature.asc Description: Digital signature
Bug#557197: [buildd-tools-devel] Bug#557197: Bug#557197: Bug#557197: Bug#557197: schroot -b doesn't work for chroots with type=block-device
On Sun, Dec 13, 2009 at 2:33 PM, Roger Leigh rle...@codelibre.net wrote: [Please could you not top-post. Thanks!] On Sun, Dec 13, 2009 at 01:57:15PM -0500, Evan Broder wrote: I checked out the repository, ran ./bootstrap, then debuild -S, then sbuild, then installed the resulting packages. I've rebooted since installing the packages just to make sure there's no state sticking around. I've put a copy of the sources and debian packages here: http://www.codelibre.net/~rleigh/schroot/ Could you try them, or rebuild them as appropriate? I've verified they work for me. However, it looked from your description that you might additionally be using filesystem unions; is this the case? If so, please could you test without a union to see if this works? If it's broken only when unions are enabled, there's some issue writing out the session file when unions are enabled. Thanks, Roger I've tried with both your packages and mine - I get the same behavior, but you're right that it's only for union chroots. Without unions, schroot -b works on type=block-device chroots. However, union chroots of type=directory /do/ work - it's just a problem for chroots that are both union chroots and type=block-device. - Evan -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Bug#557197: [buildd-tools-devel] Bug#557197: Bug#557197: Bug#557197: Bug#557197: Bug#557197: schroot -b doesn't work for chroots with type=block-device
clone 557197 -1 retitle -1 schroot -b doesn't work for block-device chroots using unions tags 557197 + fixed-upstream pending thanks On Sun, Dec 13, 2009 at 04:12:37PM -0500, Evan Broder wrote: On Sun, Dec 13, 2009 at 2:33 PM, Roger Leigh rle...@codelibre.net wrote: [Please could you not top-post. Thanks!] On Sun, Dec 13, 2009 at 01:57:15PM -0500, Evan Broder wrote: I checked out the repository, ran ./bootstrap, then debuild -S, then sbuild, then installed the resulting packages. I've rebooted since installing the packages just to make sure there's no state sticking around. I've put a copy of the sources and debian packages here: http://www.codelibre.net/~rleigh/schroot/ Could you try them, or rebuild them as appropriate? I've verified they work for me. However, it looked from your description that you might additionally be using filesystem unions; is this the case? If so, please could you test without a union to see if this works? If it's broken only when unions are enabled, there's some issue writing out the session file when unions are enabled. I've tried with both your packages and mine - I get the same behavior, but you're right that it's only for union chroots. Without unions, schroot -b works on type=block-device chroots. However, union chroots of type=directory /do/ work - it's just a problem for chroots that are both union chroots and type=block-device. Thanks for checking. I'll have to have a further look to see what's different between the two types. Since this is actually two bugs relating to -b not creating session files: 1) block-device, now fixed and 2) block-device with unions, which is still outstanding, I'm cloning this into two separate bugs so they can be tracked independently. Regards, Roger -- .''`. Roger Leigh : :' : Debian GNU/Linux http://people.debian.org/~rleigh/ `. `' Printing on GNU/Linux? http://gutenprint.sourceforge.net/ `-GPG Public Key: 0x25BFB848 Please GPG sign your mail. signature.asc Description: Digital signature
Bug#557197: schroot -b doesn't work for chroots with type=block-device
Package: schroot Version: 1.3.1-1 Severity: important If I use schroot -b to create a session of a chroot with type=block-device, I get a valid chroot session name back, and the chroot is setup, but it's not recorded in /var/lib/schroot/session, and I can't then later run it. debuild:~# cat /etc/schroot/chroot.d/device [device-test] type=block-device description=device groups=root,sbuild root-groups=root,sbuild device=/dev/debuild/karmic-amd64-sbuild personality=linux debuild:~# schroot -c device-test (device-test)r...@debuild:~# logout debuild:~# schroot -bc device-test device-test-c65868ea-3443-489b-ad63-cd4dc1434d69 debuild:~# schroot -rc device-test-c65868ea-3443-489b-ad63-cd4dc1434d69 E: device-test-c65868ea-3443-489b-ad63-cd4dc1434d69: Chroot not found debuild:~# tree -x /var/lib/schroot /var/lib/schroot |-- mount | `-- device-test-c65868ea-3443-489b-ad63-cd4dc1434d69 |-- session |-- union | |-- overlay | `-- underlay `-- unpack 7 directories, 0 files debuild:~# mount | grep device-test-c65868ea-3443-489b-ad63-cd4dc1434d69 /dev/mapper/debuild-karmic--amd64--sbuild on /var/lib/schroot/mount/device-test-c65868ea-3443-489b-ad63-cd4dc1434d69 type ext3 (rw) proc on /var/lib/schroot/mount/device-test-c65868ea-3443-489b-ad63-cd4dc1434d69/proc type proc (rw) /dev/pts on /var/lib/schroot/mount/device-test-c65868ea-3443-489b-ad63-cd4dc1434d69/dev/pts type none (rw,bind) /dev/shm on /var/lib/schroot/mount/device-test-c65868ea-3443-489b-ad63-cd4dc1434d69/dev/shm type none (rw,bind) /home on /var/lib/schroot/mount/device-test-c65868ea-3443-489b-ad63-cd4dc1434d69/home type none (rw,bind) /tmp on /var/lib/schroot/mount/device-test-c65868ea-3443-489b-ad63-cd4dc1434d69/tmp type none (rw,bind) /afs on /var/lib/schroot/mount/device-test-c65868ea-3443-489b-ad63-cd4dc1434d69/afs type none (rw,bind) This doesn't occur with type=directory chroots. -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Bug#557197: [buildd-tools-devel] Bug#557197: schroot -b doesn't work for chroots with type=block-device
On Fri, Nov 20, 2009 at 02:46:47AM -0500, Evan Broder wrote: Package: schroot Version: 1.3.1-1 Severity: important If I use schroot -b to create a session of a chroot with type=block-device, I get a valid chroot session name back, and the chroot is setup, but it's not recorded in /var/lib/schroot/session, and I can't then later run it. Just to double check, this is definitely version 1.3.1 from experimental, not the stable/unstable version? I thought this was fixed in 1.3.1, but I'll double check. It /should/ be creating a session file, but obviously isn't in your case. Thanks, Roger -- .''`. Roger Leigh : :' : Debian GNU/Linux http://people.debian.org/~rleigh/ `. `' Printing on GNU/Linux? http://gutenprint.sourceforge.net/ `-GPG Public Key: 0x25BFB848 Please GPG sign your mail. signature.asc Description: Digital signature
Bug#557197: [buildd-tools-devel] Bug#557197: schroot -b doesn't work for chroots with type=block-device
Yeah, I'm using 1.3.1-1 from experimental. - Evan On Fri, Nov 20, 2009 at 6:40 AM, Roger Leigh rle...@codelibre.net wrote: On Fri, Nov 20, 2009 at 02:46:47AM -0500, Evan Broder wrote: Package: schroot Version: 1.3.1-1 Severity: important If I use schroot -b to create a session of a chroot with type=block-device, I get a valid chroot session name back, and the chroot is setup, but it's not recorded in /var/lib/schroot/session, and I can't then later run it. Just to double check, this is definitely version 1.3.1 from experimental, not the stable/unstable version? I thought this was fixed in 1.3.1, but I'll double check. It /should/ be creating a session file, but obviously isn't in your case. Thanks, Roger -- .''`. Roger Leigh : :' : Debian GNU/Linux http://people.debian.org/~rleigh/ `. `' Printing on GNU/Linux? http://gutenprint.sourceforge.net/ `- GPG Public Key: 0x25BFB848 Please GPG sign your mail. -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) iEYEARECAAYFAksGgDAACgkQVcFcaSW/uEgrxQCgmaSGZjRdq1aAeyf1nhgarXam MfcAnjrx5e/uAwtqJ4M1NUSQLmAOLfhO =dbWN -END PGP SIGNATURE- -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org