Set up a private /dev/pts in the chroot
This commit is contained in:
parent
3fd01b171a
commit
1017bd68ea
2 changed files with 14 additions and 2 deletions
|
@ -2017,11 +2017,11 @@ void DerivationGoal::initChild()
|
|||
bind-mount the host /dev. */
|
||||
if (dirsInChroot.find("/dev") == dirsInChroot.end()) {
|
||||
createDirs(chrootRootDir + "/dev/shm");
|
||||
createDirs(chrootRootDir + "/dev/pts");
|
||||
Strings ss;
|
||||
ss.push_back("/dev/full");
|
||||
ss.push_back("/dev/kvm");
|
||||
ss.push_back("/dev/null");
|
||||
ss.push_back("/dev/ptmx");
|
||||
ss.push_back("/dev/random");
|
||||
ss.push_back("/dev/tty");
|
||||
ss.push_back("/dev/urandom");
|
||||
|
@ -2065,6 +2065,19 @@ void DerivationGoal::initChild()
|
|||
if (pathExists("/dev/shm") && mount("none", (chrootRootDir + "/dev/shm").c_str(), "tmpfs", 0, 0) == -1)
|
||||
throw SysError("mounting /dev/shm");
|
||||
|
||||
/* Mount a new devpts on /dev/pts. Note that this
|
||||
requires the kernel to be compiled with
|
||||
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y (which is the case
|
||||
if /dev/ptx/ptmx exists). */
|
||||
if (pathExists("/dev/pts/ptmx") &&
|
||||
!pathExists(chrootRootDir + "/dev/ptmx")
|
||||
&& dirsInChroot.find("/dev/pts") == dirsInChroot.end())
|
||||
{
|
||||
if (mount("none", (chrootRootDir + "/dev/pts").c_str(), "devpts", 0, "newinstance,mode=0620") == -1)
|
||||
throw SysError("mounting /dev/pts");
|
||||
createSymlink("/dev/pts/ptmx", chrootRootDir + "/dev/ptmx");
|
||||
}
|
||||
|
||||
/* Do the chroot(). Below we do a chdir() to the
|
||||
temporary build directory to make sure the current
|
||||
directory is in the chroot. (Actually the order
|
||||
|
|
|
@ -42,7 +42,6 @@ Settings::Settings()
|
|||
useSubstitutes = true;
|
||||
useChroot = false;
|
||||
useSshSubstituter = false;
|
||||
dirsInChroot.insert("/dev/pts");
|
||||
impersonateLinux26 = false;
|
||||
keepLog = true;
|
||||
compressLog = true;
|
||||
|
|
Loading…
Reference in a new issue