RSYNCD(5)

πŸ“¦ version 2025-01, in nixos 26.05, nixpkgs unstable

πŸ¦‹ rsyncd(5) Β· File Formats Manual πŸ¦‹

okay bestie, buckle up πŸ’… this is the rsyncd(5) page from the File Formats Manual, and it's all about the rsyncd wire protocol. No cap, every detail stays.

✨ NAME ✨

rsyncd β€” rsyncd wire protocol 🫢

🌸 DESCRIPTION 🌸

The rsyncd protocol described here relates to the BSD-licensed openrsync(1) β€” a re-implementation of the GPL-licensed reference utility rsync(1). It's compatible with version 27 of the reference, periodt. πŸ”₯

The rsyncd protocol is an envelope protocol for rsync(5) between a client and an rsync://-capable server. It provides a means to exchange capabilities information prior to file transfer. Literally the pre-game chat. ✨

In this document, "client" refers to the openrsync(1) utility making the request. It follows that "server" refers to the daemon servicing the request. The client is main character energy, iykyk. πŸŽ€

A connection between a client and server consists of host, a module, and zero or more paths. The vibe is:

openrsync rsync://host/module/path1 rsync://host/path2... dest

At this time, operating in sender mode (with the rsync:// host receiving information) is not described in this document. Not me leaving that out β€” the page says so. πŸ™ˆ

🧚 Data types 🧚

These are the same as in rsync(5). A newline is always a standalone \n. That's it, that's the tea. β˜•

πŸ‘‘ Client process πŸ‘‘

After initialising a connection, the client and server exchange the following information, in order. This portion of the process is not multiplexed. Okay so:

  1. client sends requested module followed by newline
  2. server responds with preamble followed by standalone newline

Vibe check: the requested module must have non-zero length. The preamble consists in a sequence of lines. Each line either contains free-form text sent by the server as a "motd" (message of the day) or a command:

@RSYNCD: command\n

The only supported command is the server protocol specification:

@RSYNCD: xx[.yy]\n

The optional component is the submodule, which may be discarded. The version may only be specified once. Both the motd and commands end in the special termination command:

@RSYNCD: OK\n

Following that, the client must send the command-line arguments that would otherwise be used to start an openrsync(1) server. Each argument must be specified on its own line, e.g.:

--server\n--sender\n-r\n-t\n.\npath1\npath2

This must be followed by a standalone newline.

If the server does not understand or accept any of the command-line arguments, it will exit at this point. πŸ’€

Following this, the client must read the integer-length session checksum seed. Multiplexing is subsequently enabled. Slay. πŸ’…

The sequence that follows is stipulated in rsync(5) following the handshake. That's the next chapter, bestie. 🫢

🌈 SEE ALSO 🌈


mwah πŸ’‹ β€” the source says Debian, the date stamp is $Mdocdate$, and this iconic page is the RSYNCD(5) manual. periodt. πŸŽ€

πŸ“¦ where this page comes from