phacility/phabricator · error · Exception
%s subprocess exited before emitting a protocol frame.
Error message
%s subprocess exited before emitting a protocol frame.
What it means
identifyRepository() launches 'svnserve -t' (sudo'd to the daemon user) just to capture the server greeting frame; if the exec channel closes before any frame arrives, the subprocess died instantly. This is almost always environmental: svnserve is not installed, not on the PATH the SSH session exposes, or crashes immediately as the executing user.
Source
Thrown at src/applications/diffusion/ssh/DiffusionSubversionServeSSHWorkflow.php:84
$exec_message = $exec_channel->read();
if ($exec_message !== null) {
$messages = $exec_protocol->writeData($exec_message);
if ($messages) {
$message = head($messages);
$raw = $message['raw'];
// Write the greeting frame to the client.
$io_channel->write($raw);
// Kill the subprocess.
$future->resolveKill();
break;
}
}
if (!$exec_channel->isOpenForReading()) {
throw new Exception(
pht(
'%s subprocess exited before emitting a protocol frame.',
'svnserve'));
}
}
$io_protocol = new DiffusionSubversionWireProtocol();
while (true) {
PhutilChannel::waitForAny(array($io_channel));
$io_channel->update();
$in_message = $io_channel->read();
if ($in_message !== null) {
$this->peekBuffer .= $in_message;
if (strlen($this->peekBuffer) > (1024 * 1024)) {
throw new Exception(
pht(
'Client transmitted more than 1MB of data without transmitting '.View on GitHub (pinned to 5720a38cfe)
Solutions
- Install the subversion server package and confirm 'svnserve --version' runs
- Add the svnserve binary's directory to the 'environment.append-paths' Phabricator config so SSH sessions can resolve it
- Reproduce as the executing user (sudo -u <daemon user> svnserve --version) and fix permissions or PATH based on what fails
- Check the sudo rule PhabricatorDaemon::sudoCommandAsDaemonUser relies on when the workflow is not running as root
Example fix
# before: sshd starts sessions with a minimal PATH; svnserve lives in /usr/local/bin $ which svnserve (empty) # after: extend the search path Phabricator uses for subprocesses $ ./bin/config set environment.append-paths '["/usr/local/bin"]' $ which svnserve /usr/local/bin/svnserve
Defensive patterns
Strategy: validation
Validate before calling
$svnserve = Filesystem::resolveBinary('svnserve');
if (!$svnserve) {
throw new Exception(
pht('svnserve not found; install it and extend environment.append-paths.'));
} Prevention
- Run Phabricator's environment/smoke checks after OS package changes on hosts serving SVN
- Pin and monitor subversion binaries; verify the daemon user can execute svnserve during deploy
When it happens
Trigger: phabricator-user or daemon-user environment cannot find the svnserve binary; the subversion server package is missing on the application host; svnserve exists but is not executable by the sudo target user.
Common situations: Fresh installs where subversion tools were never installed; non-interactive sshd sessions with a minimal PATH requiring 'environment.append-paths'; OS upgrades that removed or relocated the binary.
Related errors
- Analyzing or decrypting SSH keys requires the "ssh-keygen" b
- Expected `%s`!
- No `%s` or `%s` binary was found in %s. You must install Nod
- Before you can set up or use LDAP, you need to install the P
- This repository is read-only over SSH.
AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21).
Data as JSON: /api/errors/ff470fd25b98a930.
Report an issue: GitHub.