On Tue, Jul 12, 2011 at 08:41:53PM +0200, Thibaut VARENE wrote: > While debugging the old 'create-chroot.sh' script from pkern that was having > hickups, I finally realized that schroot behaves > apparently inconsistently depending on the cwd: > > This works: > buildd@envy:~$ schroot -c sid-ia64-sbuild -u root -- apt-get update > Hit http://debian.ens-cachan.fr sid InRelease > [...] > > This doesn't work: > buildd@envy:~/chroots$ schroot -c sid-ia64-sbuild -u root -- apt-get update > E: Failed to change to directory '/home/buildd/chroots': No such file or > directory > > >From what I can tell, trying to run schroot from any directory /below/ the > >home directory fails with the above error. > Running from "higher" directories (such as /, or /tmp) works. > > I've traced both schroot invocations with -v, there is absolutely no > difference (save of course for the session UUID) in the outputs.
This is known and expected behaviour. The reason is that when you enter the chroot, schroot will change you into the /same directory/ inside the chroot that you were in on the host system. When you run a login shell, it will try a set of fallback directories; but when you run a command it's not possible to do that (see below). If you're in a location present in both the chroot and on the host, e.g. /, /usr, /tmp etc., it will work just fine. If you don't bind mount /home and you're in /home/$user or in /srv/foobar, then the same path won't exist in the chroot, and schroot will bail out. The solution is to run schroot with the -d|--directory option to explictly specify the path you want inside the chroot. In this case, you can simply use "-d /" to run in the root. The reason we don't implement a fallback is because it would make the behaviour unpredictable. The exact logic is as follows: Chdir fallback behaviour: schroot [login shell] CWD → CWD Normal behaviour CWD → $HOME If CWD nonexistent and -p used CWD → passwd pw_dir If CWD nonexistent (or -p used and no $HOME exists) CWD → / None of the above exist *FAIL* If / nonexistent schroot [command] CWD → CWD Normal behaviour *FAIL* If CWD nonexistent No fallbacks should exist under any circumstances. schroot [--directory used] CWD → DIR Normal behaviour *FAIL* If DIR nonexistent No fallbacks should exist under any circumstances. dchroot [login shell or command] CWD → passwd pw_dir Normal behaviour (not if -d used) CWD → CWD If -d used CWD → / If CWD nonexistent and -d used *FAIL* If / nonexistent dchroot [--directory used] CWD → DIR Normal behaviour *FAIL* If DIR nonexistent No fallbacks should exist under any circumstances. dchroot-dsa [login shell or command] CWD → passwd pw_dir Normal behaviour CWD → / If no passwd_pw dir *FAIL* If / nonexistent dchroot-dsa [--directory used] CWD → DIR Normal behaviour *FAIL* If DIR nonexistent No fallbacks should exist under any circumstances. Note that --debug=notice will show the internal fallback list computed for the session. 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