First things first ‐ installing znapzend - xenophon61/Znapzend-recipes-for-mixed-MacOS-Linux-environment GitHub Wiki

MacOS running Sonoma 14.6.1, upgraded to Tahoe 26.2.1

Homebrew install

  • znapzend installed via Homebrew with a simple brew install znapzend
  • apply the fix for the homebrew.mxcl.znapzend.plist, as outlined here*

Useful commands:

  • restarting the znapzend daemon (the "kill -HUP" doesn't work in MacOS)

sudo brew services restart znapzend

  • the error log can be found at

tail /usr/local/var/log/znapzend.err.log

  • checking the state of the daemon:

sudo launchctl list | grep znap

should return a status of "0"

41833 0 homebrew.mxcl.znapzend

Note, 11-Aug-26: for the life of me, I could not apply the fix mentioned above in order for the znapzend daemon to be able to locate the zfs command. Removed the brew version of znapzend and switched to installation from source (currently 0.23.6)

Installation from source, straight from the znapzend Github: this was required for Tahoe

Download the git to your home folder, and then issue a sudo su

ZNAPVER=0.23.6
wget https://github.com/oetiker/znapzend/releases/download/v${ZNAPVER}/znapzend-${ZNAPVER}.tar.gz
tar zxvf znapzend-${ZNAPVER}.tar.gz
cd znapzend-${ZNAPVER}
./configure --prefix=/opt/znapzend-${ZNAPVER}
make
make install
ls -la /opt
for x in /opt/znapzend-${ZNAPVER}/bin/*; do ln -fs ../../../$x /usr/local/bin/; done

sudo cp init/org.znapzend.plist /Library/LaunchDaemons
sudo launchctl load /Library/LaunchDaemons/org.znapzend.plist
sudo launchctl list | grep znap
znapzend --version
znapzend version 0.23.6

Note, 11-Aug-26: under Tahoe 26.2.1, wget required a brew install. The XCode command line tools (e.g. make), however, could not be installed, despite following the relevant prompts. One has to issue the following commands for "make" to be recognized:

sudo xcodebuild -runFirstLaunch
sudo xcodebuild -license accept

Amazed by the difficulty!

Stopping and starting the org.znapzend daemon (in /Library/LaunchDaemons) is done as follows, and differs slightly from the included prompt to send a kill -HUP command:

sudo launchctl bootout system /Library/LaunchDaemons/org.znapzend.plist
sudo launchctl list | grep znap
sudo launchctl bootstrap system /Library/LaunchDaemons/org.znapzend.plist
sudo launchctl list | grep znap
22578	0	org.znapzend

Older remarks follow, may or may not be necessary any more.

Remember to check the section regarding init scripts. For OS X, however, launchctl requires the "bootstrap" command, rather than "load" as indicated below:

~ % sudo launchctl unload /Library/LaunchDaemons/org.znapzend.plist
~ % sudo launchctl list | grep znap
~ % sudo launchctl load -w /Library/LaunchDaemons/org.znapzend.plist
~ % sudo launchctl list | grep znap
31477	0	org.znapzend

System Preferences:Security to allow full disk access for the following

/bin/sh
/bin/zsh

/usr/bin/ssh
/usr/local/zfs/bin/zed
/usr/local/zfs/bin/zfs
/usr/local/bin/znapzend

Not sure if this is required in Tahoe, but included so as to be on the safe side.

The znapzend daemon plist

~ % cat /Library/LaunchDaemons/org.znapzend.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>EnvironmentVariables</key>
	<dict>
		<key>PATH</key>
		<string>/usr/local/zfs/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
	</dict>
	<key>KeepAlive</key>
	<dict>
		<key>Crashed</key>
		<false/>
	</dict>
	<key>Label</key>
	<string>org.znapzend</string>
	<key>ProgramArguments</key>
	<array>
		<string>/opt/znapzend-0.23.6/bin/znapzend</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
	<key>StandardErrorPath</key>
	<string>/var/log/org.znapzend.stderr</string>
	<key>StandardOutPath</key>
	<string>/var/log/org.znapzend.stdout</string>
	<key>ThrottleInterval</key>
	<integer>30</integer>
</dict>
</plist>

homebrew version of the above is as follows:

> cat /Library/LaunchDaemons/homebrew.mxcl.znapzend.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>EnvironmentVariables</key>
	<dict>
		<key>PATH</key>
		<string>/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/zfs/bin</string>
	</dict>
	<key>KeepAlive</key>
	<true/>
	<key>Label</key>
	<string>homebrew.mxcl.znapzend</string>
	<key>LimitLoadToSessionType</key>
	<array>
		<string>Aqua</string>
		<string>Background</string>
		<string>LoginWindow</string>
		<string>StandardIO</string>
		<string>System</string>
	</array>
	<key>ProgramArguments</key>
	<array>
		<string>/usr/local/opt/znapzend/bin/znapzend</string>
		<string>--connectTimeout=120</string>
		<string>--logto=/usr/local/var/log/znapzend/znapzend.log</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
	<key>StandardErrorPath</key>
	<string>/usr/local/var/log/znapzend.err.log</string>
	<key>StandardOutPath</key>
	<string>/usr/local/var/log/znapzend.out.log</string>
	<key>WorkingDirectory</key>
	<string>/usr/local/var/run/znapzend</string>
</dict>
</plist>
⚠️ **GitHub.com Fallback** ⚠️