So I was hoping to install the on-premise version of Sentry 9.0.0 on
my FreeBSD 11 box, but ran into a snag. I was using the
Installation with Python instructions, but it failed to build the
semaphore module (another user has an error dump available).
Unfortunately the official response is: We don’t support FreeBSD.
The key error seems to boil down to:
relocation R_X86_64_TPOFF32 against `a local symbol’ can not be used when making a shared object; recompile with -fPIC …/…/src/libsodium/.libs/libsodium.a: could not read symbols: Bad value cc: error: linker command failed with exit code 1 (use -v to see invocation) *** [randombytes] Error code 1
So it's a libsodium error, some more digging found that sodium was a dependency of rust_sodium, which nicely has the ability To use your own copy of libsodium, with the stipulation that you're using the same version they are.
Looking at their
shows they're using libsodium 1.0.16, and a check of the FreeBSD security/libsodium
Makefile shows the same version - so we're in business.
So after building and installing the libsodium port, I tried the Sentry install again with:
RUST_SODIUM_LIB_DIR=/usr/local/lib pip install -U sentry
and it worked! Overall the FreeBSD ports that need to be installed as build dependencies are:
databases/postgresql11-client devel/py-virtualenv@py27 graphics/jpeg lang/rust security/libsodium textproc/libxml2 textproc/libxslt
For additional runtime dependencies I've got:
databases/postgresql11-contrib (Needed for citext extension) databases/postgresql11-server databases/redis mail/exim sysutils/py-supervisor
After a long build, I got this warning (in red):
redis-py-cluster 1.3.6 has requirement redis==2.10.6, but you'll have redis 2.10.5 which is incompatible.
Looked at https://github.com/getsentry/sentry/blob/9.0.0/requirements-base.txt and found sentry wants redis < 2.10.6, and is OK with redis-py-cluster >= 1.3.4
Looked at https://github.com/Grokzen/redis-py-cluster/blob/1.3.4/requirements.txt and found that version is OK with redis >= 2.10.2
So the fix seems to be to downgrade redis-py-cluster slightly to a version that sentry is OK with, and is OK with the version of redis sentry wants.
pip install -U redis-py-cluster==1.3.4