diff --git a/src/context/unshare.rs b/src/context/unshare.rs index 6909d0a..8f70667 100644 --- a/src/context/unshare.rs +++ b/src/context/unshare.rs @@ -172,9 +172,12 @@ impl UnshareDriver { cmd.arg("--map-user=65536") .arg("--map-group=65536") + .arg("--mount-proc") .arg("--pid") .arg("--ipc") .arg("--uts") + .arg("--user") + .arg("--cgroup") .arg("--map-auto") .arg("-r") .arg("--mount") @@ -186,7 +189,11 @@ impl UnshareDriver { cmd.arg("-w").arg(dir); } - cmd.arg("--").arg(program).args(args); + cmd.arg("--").arg("bash").arg("-c").arg(format!( + "mount -t devpts devpts /dev/pts; mount --bind /dev/pts/ptmx /dev/ptmx; {} {}", + program, + args.join(" ") + )); cmd } diff --git a/src/deb/ephemeral.rs b/src/deb/ephemeral.rs index 1fb0722..573ff90 100644 --- a/src/deb/ephemeral.rs +++ b/src/deb/ephemeral.rs @@ -79,6 +79,7 @@ impl EphemeralContextGuard { .command("mmdebstrap") .arg("--variant=buildd") .arg("--mode=unshare") + .arg("--include=mount") .arg("--format=tar") .arg(series) .arg(tarball_path.to_string_lossy().to_string()) @@ -112,7 +113,7 @@ impl EphemeralContextGuard { impl Drop for EphemeralContextGuard { fn drop(&mut self) { - log::debug!("Cleaning up ephemeral context..."); + log::debug!("Cleaning up ephemeral context ({:?})...", &self.chroot_path); // Reset to normal context if let Err(e) = context::manager().set_current(&self.previous_context) { log::error!("Failed to restore context {}: {}", self.previous_context, e);