My intention is simple. I want to install ProtonMail Bridge so that I can use Thunderbird to send emails. The reality, as it turns out, is that this is a huge mission on my Arch machine.
First point of call is of course the AUR. It has every package you can dream of, and protonmail-bridge is no exception. Wonderful! I start off very happily with:
yay -Sa protonmail-bridge
Which starts off very promisingly, compiles all kinds of binaries, but then abruptly fails with a python stacktrace of all things:
A little looking around reveals that the error happens during testing of a dependency called sentry-native
. I researched the package and found out that it's the Sentry SDK used for telemetry basically. Sad that it's required, but alas.
Okay so the SDK has python tests and they're failing. I tried searching for Sentry related webpages referencing the "NoneType" error at the bottom of the trace, but came up with nothing.
Then I started looking around the actual stacktrace's files and saw that the error itself happened in a python package called pytest-asyncio. It's a python plugin used to test concurrency. Don't ask me where or why a native C++ SDK uses python concurrency, but we move.
A little more searching lead to this GitHub issue reported only a month ago. It contains a stacktrace exactly like the one I'm experiencing. Reading through the thread I learned that the error happens when arbitrary .txt files are mixed in with python tests.
The issue was introduced with pytest-asyncio version 0.23.0, released about a month ago (the day before the error was reported). The fix was made in version 0.23.2, but sadly the buggy versions were not yanked from the various repos where they were published. This is important, because it's the reason why I'm experiencing this error (more on this below).
So now I know what the root cause is, and that the fix exists out there. But how to get it? I checked the sentry AUR repo to see if pytest-asyncio was a dependency, but it's not!
Darn. I cd
'd into the build directory (~/.cache/yay/sentry-native/src/sentry-native
) looking for a python virtual environment I could bump, but no such luck.
I then headed over to the pytest-asyncio README to see if I could perhaps do a global install of the latest version. Their recommendation is to simply pip install pytest-asyncio
, but of course that would have been too easy:
Flippit. I decided to do a pacman search to try find a pytest-asyncio package that can be installed externally, as this polite error message suggests. And lo and behold:
Sure as day, there's a pacman package for v0.23.2 of the library we need. And on the right there you can see my system had the buggy 0.23.1 version installed.
After installing the new version I ran the sentry install again, and hallelujah it works!
Next I installed protonmail bridge with the command I initially tried and it worked!
Now how do I set it up headlessly? Long story short, some hero posted a link to a guide on how to set it up directly on the AUR repo. Legend.
That lead to another rabbit hole I won't bore you with, but you get the idea. Arch has a lot of management overhead. Do I regret running Arch? Not for a second. I love tinkering with my OS, and I love how tinkerable Arch is. Not meant for GUI dependent users, but as a tech enthusiast / power user, I'm thoroughly enjoying the experience, however counterintuitive that may seem.