The other night I wanted to upload some photo's to my
on our home NAS (a Synology DS416, let's call it
but reality decided otherwise:
$ git annex copy --to mallorca path/to/nice-picture-01.jpg fatal: Run with no arguments or with -c cmd git-annex-shell: git-shell failed (unable to check mallorca) failed
Cue a lengthy debugging session digging through git-over-SSH, several layers of login-shells and other redirection stumbling blocks.
I finally ended up on this bug report (by the way: not thanks to googling, which delivered very poorly, but from grepping through the git-annex source code) which points to this changelog note:
git-annex (8.20211028) upstream; urgency=medium This version of git-annex removes support for communicating with git-annex remotes that have version 6.20180312 or older installed.
Yep, that sound like my problem (local and remote version drifted too far apart):
- locally, on my laptop, I run version 10.20220624 (recently updated with Homebrew)
- the Synology NAS is stuck at version 6.20161212 (later releases don't run anymore)
Because I have no idea yet how to upgrade git-annex on the NAS-side I'm currently forced to downgrade laptop-side. Shouldn't be that big of an issue if you're using a package manager like Homebrew, right? Right? Turns out that Homebrew does not support easy installing of an older version of a package, e.g. by adding some kind of version constraint, as found in other package managers. There are ways to achieve installing old Homebrew formulas, but it's not trivial, barely/poorly documented while the wrong (and now defunct) way still ranks a lot higher in search results.
Anyway, as explained in this Homebrew discussion, you have to create a new "tap" of your own, "extract" the desired version of the Homebrew formula to it and install it from there. I tried that to install git-annex version 8.20211011, and in honor of Saint Murphy, the compilation failed:
==> cabal v2-install --jobs=4 --max-backjumps=100000 --install-method=copy --installdir=/usr/local/Cellaremail@example.com/8.20210903/bin --flags=+S3 Last 15 lines from /Users/stefaan/Library/Logs/Homebrewfirstname.lastname@example.org/02.cabal: Remote/GitLFS.hs:461:46: error: • Couldn't match expected type ‘LFS.ServerSupportsChunks -> RequestBody’ with actual type ‘RequestBody’ • In the first argument of ‘send’, namely ‘body’ In the second argument of ‘($)’, namely ‘send body sha256 size’ In a stmt of a 'do' block: forM_ (LFS.objects resp) $ send body sha256 size | 461 | send body sha256 size | ^^^^ cabal: Failed to build git-annex-8.20210903. See the build log above for details.
Cue another session trying to figure out compilation problems
with a language (Haskell) and build system (Cabal) I don't know.
By luck, I found out there is a compile flag
GitLfs I could turn off
to work around that compilation problem and have a complete build.
Finally, after way too many hours deep down in the alien, hostile caverns of other people's code and systems, I have a working build of an old enough git-annex version. Hashtag party hat.
For posterity, I preserved my Homebrew tap for this git-annex version at github.com/soxofaan/homebrew-git-annex: email@example.com which can be installed with:
brew tap soxofaan/git-annex brew install firstname.lastname@example.org
Because I still had the original, latest git-annex version installed (10.20220624), I got a warning that the original symlinks were not automatically updated. Instead, I had to do the unlinking/relinking manually with
brew unlink git-annex brew link --overwrite email@example.com
Ok, that's enough for now. Time to be productive again. I hope.