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
- OpenZFSonOSX version 2.4.2
-
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)
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.6Note, 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 acceptAmazed 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
/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.
~ % 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>
> 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>