You may want to inform yourself about human rights in China.

On Sugar, a Sweeter Salt: Documentation

date: 2022-03-20
update: 2022-11-24

Before diving into example usage, reader may find below an excerpt from the documentation and from the code, to help fix ideas.

Yuanyang hani rice terrace panorama qingkou, Yunnan, China, 2012

Yuanyang hani rice terrace panorama qingkou, Yunnan, China, 2012 by Chensiyuan through – CC-BY-SA-4.0

Man page

Excerpt from sugar.1;

SUGAR(1)                    General Commands Manual                    SUGAR(1)

       sugar - a sweeter salt/ansible/chef

       sugar   [-mspqa]   [-d str]  [-r user:group]  [-c conf]  <server>  <cmd>

       sugar [-h]

       sugar.mkautos <server> <raw/> <ready/>

       sugar.imports <server> <raw/> <ready/>

       . β€˜which sugar.libβ€˜

       sugar is a simple remote machine administration tool, based  on  ssh(1),
       sh(1)  and  rsync(1).  In essence, it synchronizes server-specific local
       repositories to remote locations, and allows to  run  commands  on  said
       servers, eventually wrapped between locally executed hooks.

       The code is small and simple, and is likely a more precise documentation
       than this man page.

       -m     Interpret  server  as  an  awk(1)  pattern instead of as a server
              alias. Perform command on all servers matching the pattern.

       -s     Automatically synchronize  servers'  directories  before  running

       -p     Only  run pre-hooks, including the main pre-hook. Note that -s is
              ignored if -p is specified.

       -q     Only run post-hooks, including the main post-hook. Note  that  -s
              is ignored if -q is specified.

              If  both  -p and -q are specified, then pre-hooks are always exe‐
              cuted before post-hooks.

              This is because pre-hooks may setup things that will  be  removed
              by post-hooks.

              See also -a below.

       -a     Will  run the main pre-hook if -q has been specified, as it would
              otherwise not be run, which can be  troublesome  for  imported  (
              sugar.imports)  post-hooks,  which would then not be run, because

       -d str Defines, forward (to hooks and remotely  executed  scripts),  and
              set   to   str  a  $DEBUG  variable.   Note  that  sugar.lib  and
              sugar.mkautos interpret str as a list of one-character  flags:  x
              triggers  a set -x; d enables files dumping to stderr in the tem‐
              plate system.

       -r user:group
              Owner and group for remote $SUGARD, default to root:wheel. Can be
              overridden by setting $ROOT before starting sugar(1).

       -c conf
              Source conf if present, so that  we  can  override  e.g.   $PATH,
              $SUGARF, $SUGARD, $LSUGARD, $ROOT.

       -h     Display help message

       server Describes  the  server,  or  the potential servers if -m has been
              specified, on which to run cmd.

       cmd    Is the name of the executable we want to run.

              Are cmd's arguments.


A scoop of Matcha 抹茢

A scoop of Matcha 抹茢 by Evanhoever through – CC-BY-SA-4.0

Main loop

Excerpt from sugar:


lsmatches "$p" | while read s; do

	# Ensure there's a raw/ directory configured, fail
	# otherwise (common case is a symbolic link to a
	# versioned directory).
	if [ ! -d $raw ]; then
		fail "no raw directory for $s ($raw)"

	# Create/update ready directory from raw directory
	mkready $raw $ready

	# Only execute pre/post hooks
	if [ -n "$prehook" ] && [ -n "$posthook" ]; then
		prehooks  $1 $s $raw $ready
		posthooks $1 $s $raw $ready

	# Only execute post-hooks, eventually after the
	# main pre-hook if specified
	if [ -n "$posthook" ]; then
		if [ -n "$mprehook" ]; then
			mainhook pre     $s $raw $ready

		posthooks $1 $s $raw $ready

	# Run pre-hooks
	prehooks $1 $s $raw $ready

	# Only execute pre-hooks.
	if [ -n "$prehook" ]; then

	# Perform synchronisation if specified
	if [ -n "$sync" ]; then
		sync1 $s $raw $ready

	# Run the command on the given server
	run $s $@

	# Run post-hooks
	posthooks $1 $s $raw $ready

# Make it visually clear that everything went fine.
echo OK
Hotaru Wagashi, ε’Œθ“ε­, a Japanese sweet, at a teahouse in Toyama, Japan, 2014

Hotaru Wagashi, ε’Œθ“ε­, a Japanese sweet, at a teahouse in Toyama, Japan, 2014 by Japanexperterna through – CC-BY-SA-3.0

In the series:


By email, at mathieu.bivert chez: