RSYNC REPOSITORIES
=================================================================================

RSYNC repositories are simple to serve and simple to use. In the repository
directory, there needs to be a '.rsync' file that points to the remote of the
repository. This is used in order to fetch changes from the upstream. '.rsync'
file looks like this for the core repository:

  +--------------------------------------------------------------------------+
  |                                                                          |
  | rsync://carbslinux.org/repo/core                                         |
  |                                                                          |
  +--------------------------------------------------------------------------+


RSYNC repositories have some few distinctions when it comes to fetching them.
Unlike GIT repositories, they don't have a defined "root" directory. When there
are multiple repositories in a shared repository (such as the Carbs Linux and
KISS Linux repositories), individual repositories need to have this '.rsync'
file. This doesn't, however, slow down operations. Fetching from rsync
repositories are still considerably faster and smaller.


Setting up an rsync repository
---------------------------------------------------------------------------------

Carbs Linux repositories automatically sync from the git repostitories and serve
it through the rsync daemon. Here is a sample shell script that I use in order to
sync repositories. Feel free to customize for your own use.

  +--------------------------------------------------------------------------+
  |                                                                          |
  | #!/bin/sh                                                                |
  | HOSTNAME=rsync://carbslinux.org/repo                                     |
  | GITDIR=/pub/git/repo                                                     |
  | SHAREDIR=/pub/share/repo                                                 |
  |                                                                          |
  | git -C "$GITDIR" pull                                                    |
  | rsync -aC --delete --include=core --exclude=.rsync \                     |
  |     "$GITDIR/" "$SHAREDIR"                                               |
  |                                                                          |
  | for dir in "$SHAREDIR/"*; do                                             |
  |     [ -d "$dir" ] || continue                                            |
  |     [ -f "$dir/.rsync" ] ||                                              |
  |         printf '%s/%s\n' "$HOSTNAME" "${dir##*/}" > "$dir/.rsync"        |
  | done                                                                     |
  |                                                                          |
  +--------------------------------------------------------------------------+


You can then create an 'rsync' user for serving the repositories.

  +--------------------------------------------------------------------------+
  |                                                                          |
  | $ adduser -SD rsync                                                      |
  |                                                                          |
  +--------------------------------------------------------------------------+


Create '/etc/rsyncd.conf' and a service configuration as well.

  +--------------------------------------------------------------------------+
  | /etc/rsyncd.conf                                                         |
  +--------------------------------------------------------------------------+
  |                                                                          |
  | uid = rsync                                                              |
  | gid = rsync                                                              |
  | address = example.com                                                    |
  | max connections = 10                                                     |
  | use chroot = yes                                                         |
  |                                                                          |
  | [repo]                                                                   |
  |         path = /pub/share/repo                                           |
  |         comment = My Repository                                          |
  |                                                                          |
  +--------------------------------------------------------------------------+

Create a service file:

  +--------------------------------------------------------------------------+
  | /etc/sysmgr/rsync or /etc/sv/rsync/run                                   |
  +--------------------------------------------------------------------------+
  |                                                                          |
  | #!/bin/sh                                                                |
  | exec rsync --daemon --no-detach                                          |
  |                                                                          |
  +--------------------------------------------------------------------------+


Switching to an rsync repository
---------------------------------------------------------------------------------

It is considerably easy to switch to the Carbs Linux rsync repository.

  +--------------------------------------------------------------------------+
  |                                                                          |
  | $ mkdir -p /path/to/repo                                                 |
  | $ rsync -az rsync://carbslinux.org/repo/ /path/to/repo                   |
  |                                                                          |
  +--------------------------------------------------------------------------+

This will fetch the repository to the given location, you can then add it to your
$CPT_PATH.