Bazarr error – externally-managed-environment

ERROR (init:97) – BAZARR requirements.txt installation result: b’error: externally-managed-environment\n\n\xc3\x97 This environment is externally managed\n\xe2\x95\xb0\xe2\x94\x80> To install Python packages system-wide, try apt install\n python3-xyz, where xyz is the package you are trying to\n install.\n \n If you wish to install a non-Debian-packaged Python package,\n create a virtual environment using python3 -m venv path/to/venv.\n Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make\n sure you have python3-full installed.\n \n If you wish to install a non-Debian packaged Python application,\n it may be easiest to use pipx install xyz, which will manage a\n virtual environment for you. Make sure you have pipx installed.\n \n See /usr/share/doc/python3.11/README.venv for more information.\n\nnote: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing –break-system-packages.\nhint: See PEP 668 for the detailed specification.\n’

After upgrading from Debian 11 to Debian 12, my Bazarr service would not start. Initially, I was thrown off by messaging that indicated that Bazarr does not work with Python versions above 3.10.x – but I soon learned that to be false. I’m running version 1.2.4 of Bazarr, the latest general release at the time of this writing. Trying to solve this problem led me down a rabbit hole of various issues and potential solutions, all centered around creating a Python venv and obtaining Setuptools in a version different than what system-wide Debian provides. None of it quite worked.

Here is what fixed my problem:

  1. Install python3-full: sudo apt install python3-full
  2. Rename the EXTERNALLY-MANAGED file: sudo mv /usr/lib/python3.11/EXTERNALLY-MANAGED /usr/lib/python3.11/EXTERNALLY-MANAGED.old
  3. Download the latest Bazarr zip and expand it over my existing directory
    • wget
    • unzip /opt/bazarr/ (or wherever you have bazarr located)
  4. Install unrar: sudo apt install unrar
  5. Create a venv in my bazarr directory
    • cd /opt/bazarr (or wherever you have bazarr located)
    • python3 -m venv .venv
    • source .venv/bin/activate
  6. Install the requirements in the venv: python3 -m pip install --break-system-packages -r requirements.txt
  7. Finally, start Bazarr: python3 /opt/bazarr/
  8. Check to see if it starts successfully, if so, CTRL+C to stop it, and start the service version: sudo systemctl start bazarr

Installing EmuELEC on Kinhank Super Console X Max

The manufacturer-provided Linux operating system for the Super Console X Max is an old, botched-up version of CoreELEC. If you want something more stable and up to date, it’s easy to install EmuELEC.

Note: this process will erase the contents of your SD card, which will include any ROMs and game saves. Back up accordingly.

  1. Download the latest -Generic.tar.gz install from the EmuELEC download page
  2. Download and install balenaEtcher for your operating system
  3. Insert your SD card
  4. Copy the bios folder from your SD card and store it in a safe place on your computer hard drive.
  5. Launch balenaEtcher, select the EmuELEC tar.gz, select your SD card (Make sure you select the correct SD card, not your computer’s hard drive!!). Start the imaging process!
  6. When the SD card imaging process is complete, eject your SD card from your computer. Re-insert it into the computer and find your newly minted EMUElec install!
  7. Navigate to the device_trees folder. Copy the file sm1_905x3_4gb.dtb to the root of the EMUELEC partition
  8. Rename the copied file to dtb.img
  9. Eject your SD card
  10. Insert the SD card into the Super Console X Max and power it on
  11. The operating system will install, and create a secondary partition with the remaining drive space for storing your ROMs and BIOS files.
  12. When the Super Console X Max reaches the main screen, press Start and navigate to Quit and Power Off to turn off the Super Console X Max
  13. Eject the SD card and re-insert it into your computer
  14. Copy the bios folder your stored above to bios folder on the new large partition on your SD card.
  15. Fill the different game system folders with ROMs for the games you want
  16. Eject the SD card from your computer and re-insert it into the Super Console X Max.
  17. Boot the console and you should now find your games!

Death of the physical library

One of the unsung disasters of contemporary academic life is the death of the physical library. There are so many disasters in current year academia, I doubt as anyone else grouses much about this, but as a great enthusiast for the KNN algorithm, I will complain about it. My mid-late physics career had many happy […]

Death of the physical library

Feeding data to ADSB sites from dump1090-fa on a remote host

I recently bought a new Raspberry Pi 4 to, among other things, do a better job of feeding ADS-B data. I installed Raspberry Pi OS Aarch64 (ARM64) for the superior performance, but I ran into a conundrum: while dump1090-fa supports running on arm64, all of the ADS-B feeder applications (fr24feed, piaware, adsbexchange, opensky, etc) only support armhf architecture. But my old Raspberry Pi Model B (gen 1) wasn’t going anywhere, so rather than compromise on performance with my new Pi, I configured my old Pi to remotely feed the data to the different services. All of the below assume you have an existing, working ADS-B setup, and you’re only wanting to remote feed like I am.

First, I moved over my RTL-SDR dongle and installed dump1090-fa on my new RPi 4

sudo dpkg -i flightaware-apt-repository_1.1_all.deb
sudo apt-get update && sudo apt-get install dump1090-fa
sudo reboot

Now it’s time to reconfigure my feeder apps.


Modify the following config file:


Leave most of the existing contents there, but alter the following lines to instead read:

receiver-type other
receiver-host <IP of the new Raspberry Pi>
receiver-port 30005

Save the file and exit.


Modify the following config file:


Change the host line:

host="<IP of the new Raspberry Pi>:30002"

Save the file and exit.


Modify the following config file:


Under the [client] section, change this line:


Under the [network] section, change these line:

external_host=<IP o the new Raspberry Pi>

Save the file and exit.


The config file can be found here:


You’re probably detecting a pattern. In the config file, change any instance of ‘’ or ‘localhost’ to the IP address of the new Raspberry Pi.

  1. Open this URL in a browser: http://<old device IP>:30053/
  2. Click Settings
  3. Login to Go to the Receivers page, click your Receiver, and click the Configuration tab. You will find your Share code. Use that to Enable Configuration Mode on the Settings page on your local device.
  4. Accept your existing Share Code and Latitude/Longitude.
  5. Select the Beast receiver format, enter the <new IP address> and enter port 30005
  6. Click Complete Configuration


Run the following command to reconfigure opensky-feeder:

sudo dpkg-reconfigure opensky-feeder

The following should be pre-filled for you, as you go through the prompts:

  • Latitude
  • Longitude
  • Altitude
  • ‘default’ device type
  • OpenSky username
  • Existing Serial Number

For Dump1090 Feeder port: 30005

For Dump1090 Feeder host: <new Raspberry Pi IP address>


Reboot the old Raspberry Pi with sudo reboot

After booting back up, the old Pi is now feeding data from dump1090 on the new Pi!

Let me know if there are any ADSB feeder networks I’m missing in the comments below.

For GOG on Linux, use Minigalaxy

For other Linux gamers wishing GOG Galaxy had a client for Linux, there’s an open source project that provides most of the critical features, namely easy download install and updating. It’s called Minigalaxy and available for most distros.

It even allows you to install Windows-only games via Wine, and assuming you have DXVK configured for your Wine instance, I’ve found many games play reasonably well out of the box.

To install it on Fedora, simply enter: sudo dnf install minigalaxy
Then launch it, enter your account credentials, and you’re ready to go.

Find it on GitHub here:

2020 Chevy Bolt EV

My 12 year old Nissan Versa has been getting on in years, so it was time for a new car. Since our rooftop solar system is over-performing expectations and we’ve established a pretty significant power credit, and because there’s free charging at my office, we wanted to go full electric.

The electric vehicle with the best price for a 250+ mile range available in Arkansas is the Chevy Bolt EV. Alternatives would be the Hyundai Kona Electric or Kia e-Niro, but Hyundai and Kia refuse to sell or service electric vehicles in Arkansas. While a Tesla might be nice, they’re not a great value for the price, I can’t get it serviced locally, and there have been many headlines about questionable and inconsistent build quality.

For under $25K, I was able to get a 2020 Chevy Bolt EV LT with Driver Confidence I and II packages, and the Comfort and Convenience package, essentially the fully-loaded version of the standard trim.

It’s a quiet, comfortable, speedy little car. The instant acceleration is impressive, the storage space is solid, and it’s nice to have modern conveniences like Android Auto.

The dealer sold it to me with only 20% of a charge, but there was an Electrify America charging station 30 miles down the highway on my way home.

Home Rooftop Solar Panels in Arkansas

My spouse and I have wanted to reduce our carbon footprint and utilize renewable energy for a while, but it had to make sense. Our utility provider offers a “renewable investment” where we invest $$$ into their renewable implementation and we get X% off our bill – but this never made financial sense, it would never pay for itself. So we looked into installing rooftop solar. Our setup makes financial sense while also reducing our carbon footprint. Going Solar is Arkansas is definitely do-able.

The System


The panels are LG NeON 2 High-Efficiency 335W 60-cell photovoltaic solar panels. Total output capacity of the system is 8.04Kwh. The panels ratings include for high wind and baseball sized hail, which are important considerations in my region. They come with a 20-year parts guarantee, 25-year performance guarantee, and they are rated to produce 90% of their original output when they reach the 25 year mark.

Our system is grid-tied, meaning we supply our excess power generation into the grid, which accumulates as credit, and we pull on that accumulated credit at night, cloudy days, or seasons with higher utilization (like summer).

22 panels on the west roof (photo taken after 5pm)

Most of our West-facing rooftop is unshaded year-round, so there we have 22 panels, but for a 100% electricity use offset we needed 2 more panels. We had the option between placing panels in the Southwest corner of our roof and accept that they would be shaded during peak solar hours through portions of the year, or we could put the 2 panels on our South-facing gable over our garage, where they would be shaded through some of the morning but have more peak hours year-round. We went with the latter plan, so 22 panels on the west roof and 2 on the garage.

2 panels on the garage

The panels are mounted through the roof on railing that keeps them elevated from the roof, allowing them to stay cool while they absorb sunlight. The railing is also necessary to distribute the weight of the panels evenly on the roof. The panels themselves, by keeping direct sunlight from reaching the roof, should also help reduce indoor heat accumulation during warmer months.

Roof mounting during installation

Each panel connects to an Enphase IQ7 Microinverter underneath, and the wiring runs through the attic and to the Enphase control module near the electric meter.

Photovoltaic control system

Electricity goes both directly into our home and any excess goes into the grid. The Enphase control system tracks system production and grid utilization to provide realtime and long-term statistics on grid net usage/contribution. This information is directly available to the consumer through the Enphase Enlighten website and mobile app.

For those with more of a DIY/devops disposition, the solar controller has an undocumented API that some on Github have found ways to tap into directly. You can see my real-time solar production stats here.


There isn’t much to tell here.

  • We signed for the system in early/mid February.
  • February through March: The installers went through the regulatory approval process with the city and the POA.
  • Late March: physical installation completed in 1 day.
  • Mid April: the city inspected the installation.
  • At the end of April: the power company inspected the installation and installed the net meter.

Cost and Return on Investment

My Enlighten lifetime production statistics for the past 3 weeks

In the 3 weeks since starting, we have produced nearly 645kWh, and netted 356kWh into the grid. The goal is to net a decent excess of electricity in the Spring, so that in Summer there is credit to draw on in the event that production doesn’t cover the utilization created by air conditioning. Our installation didn’t complete in time to maximize that timetable for this calendar year, but we still seem to be on track to avoid large electricity bills this summer.

Total cost for the system, before the 26% Federal tax credit in 2020 and any sales incentives, is $33,305. The state of Arkansas allows for 20-year zero-down solar loans. During our first few years our solar payment will be only slightly higher than our previous average monthly electric bill.

With normal regular rate increases from the utility company, our prior electric bill would have exceeded our flat solar payment in approximately 7 years. That makes our return on investment occur somewhere near year 12 of owning the system. The solar loan requires that, to keep to our current monthly payment, we redirect our Federal solar tax credit into the solar loan to reduce the principle cost of the system.

Thanks to Arkansas’ generous 1:1 net metering rules, all excess power that we generate and do not use becomes a full per-watt credit on our account. With our particular power company, if we maintain a credit for 24 months, we can request a check for the wholesale rate of our excess power generation.

Our solar installation makes financial sense and has a sound return on investment, while also reducing our carbon footprint. Prohibiting factors for you going solar would be shade, minimal electricity usage, or exceedingly high electricity usage. I think higher usage actually makes it easier to go solar as a quicker return on investment, but the upfront price tag might be higher than most want.

With home appliances always becoming more efficient, and our system rated to produce 90% of its original output in 25 years, this system could last us for the rest of our lives.

Installer: Performance Guarantees and Service

For the installation of our system, we used SunPro out of North Little Rock. We chose them because:

  • SunPro guarantees the annual production of the systems they install, or they pay you the difference
  • They use top-tier panels from LG and offer them at the best prices
  • They guarantee the quality of their work for 20 years
  • SunPro’s parent company also does roofing, so they have a separate income stream from solar
  • SunPro has the largest footprint across the Southern United States for solar installers
  • Despite not living near Little Rock, their installation team was just as available and prompt as if they were local

SunPro also has a potentially lucrative referral system, where they will give both the referrer and the new customer cash just for taking a meeting, no obligation. If you’re interested, feel free to email me at erik [at]

To answer the most common questions I get:

  • So what happens if you need a new roof? The installers will take the panels down and store them for a flat rate, then put them back up when the roofing work is complete.
  • Why don’t you have batteries, isn’t the point to be off-grid? While many people do install solar panels to be off-grid, and solar companies will gladly sell home batteries to you, it doesn’t make sense as a financial return on investment. Batteries will double the cost of the solar installation.

Side-note: If you are interested in having some amount of off-grid power power during power outages, and have no shading potential, the SMA Sunny Boy line of string inverters offer 1 electrical outlet that can be powered directly from the panels. Some think of it as a gimmick, but I could see it being handy to charge phones or other emergency item during a power outage. As long as there is sunshine.

Enabling amdgpu on Fedora 31 for using Vulkan with R7 and R9 Radeon cards

For the AMD Radeon R9 390, Fedora will, by default, use the open source driver ‘radeon’ – which is generally sufficient for average workloads, but if you want to game, or want to use Vulkan, you probably want the AMD-written open source driver ‘amdgpu’. It is not just a matter of installing the driver, and some extra configuration will be required to utilize this driver for graphics cards in the Southern Islands and Sea Islands family of AMD cards, since support for these models is considered experimental.

The solution also varies depending on whether your card is Southern Islands or Sea Islands.

Card FamilyModelsModule Parameter
Southern IslandsHD7750-HD7970, R9 270, R9 280, R9 370X, R7 240, R7 250amdgpu.si_support=1
Sea IslandsHD7790, R7 260, R9 290, R7 360, R9 390amdgpu.cik_support=1

First, determine which kernel driver is currently in use: lspci -k | grep -EA3 'VGA|3D|Display'

If your Kernel driver in use result says amdgpu you’re working, there’s nothing for you to do except install Vulkan (if that’s your goal). If your result says radeon, read on.

  1. Install the amdgpu driver, along with Vulkan (both x64 and x86): sudo dnf install xorg-x11-drv-amdgpu mesa-vulkan-drivers.x86_64 mesa-vulkan-drivers.i686 vulkan-loader.x86_64 vulkan-loader.i686 vulkan-tools
  2. If you plan to use Vulkan with Wine: sudo dnf install wine-dvxk.x86_64 wine-dvxk.i686
  3. The GRUB Bootloader needs to be modified to (a) disable the ‘radeon’ driver for your card and (b) enable the module parameter for amdgpu. Edit /etc/default/grub append one of the following inside the quotes on the GRUB_CMDLINE_LINUX line:
    • For Southern Island cards: radeon.si_support=0 amdgpu.si_support=1
    • For Sea Island cards: radeon.cik_support=0 amdgpu.cik_support=1
  4. Build the GRUB config:
    • For EFI systems: sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
    • For BIOS systems: sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  5. Reboot.

If everything went according to plan, after reboot you should be able to login and run vulkaninfo without errors. Now you can install Lutris, use Proton on Steam, or do any of the other things that Vulkan allows.
If your GUI doesn’t load after reboot, you can restore your machine back to the previous configuration by pressing CTRL+ALT+F2, logging in, editing /etc/default/grub to remove the added text, and running grub2-mkconfig like before.

These instructions are intended for Fedora Linux, but with some minor modification to the grub2-mkconfig command, and substituting your package manager for dnf, you can probably adapt them to other Linux distributions.

For additional information, refer to the Arch or Gentoo wikis.

G Suite: Whoops! There was a problem loading more pages

Recently, a rash of users have received this error when trying to view more than the first page of a PDF in our corporate Gmail:

Error when viewing second page of PDF in Gmail

This problem started to appear toward the end of July 2019, and by mid-August it was company-wide. This timeline corresponds with the release of Chrome v76. Chome v76 introduces a change to Cross-Origin Requests, and while this change introduced some trouble for a number of Chrome Extensions, it can also negatively impact corporate G Suite environments who utilize certain restrictions in the Google Admin Console.

How to Fix this Error

First, verify that this is, indeed, the problem.

  • Open an email in Gmail with a multi-page PDF attachment, but do not click the attachment yet
  • Press CTRL+Shift+I to open the Developer console, and click to the Network tab
  • Click the PDF attachment and look at the results in the Network tab
  • One of the Red items that appear on the list should contain:
Access to XMLHttpRequest at '' from origin ' has been blocked by CORS policy: Request header field x-googapps-allowed-domains is not allowed by Access-Control-Allow-Headers in preflight response.

If you see the above, then this solution will work for you. To explain, settings exist in the G Suite Admin Console which can restrict the ability of a Chrome user, with Sync turned on, from logging into secondary accounts outside of an allowed set of domains. The requests to the Google Drive PDF viewer from Gmail come across as generic and not specific to your domain, and thus Chrome refuses to render the document. To solve the problem, this restriction in the Admin Console will need to be disabled by an administrator in your G Suite organization.

  • Open the Admin Console
  • Navigate to Devices – Chrome management – User and browser settings
  • Find Sign-in to secondary accounts and set it to Allow users to sign-in to any secondary Google Accounts
Allow users to sign-in to any secondary Google Accounts

Your organization more than likely utilizes a web filter, DLP platform, or firewall to restrict sign-in settings anyway, so this setting will do no harm.

How to block a DNF package update on Fedora

You know the new version of a package is a buggy mess and you don’t want to update, or you manually install an rpm that exists in the repos but you really want to keep the version you installed. There’s an easy way to do that!

Edit (as root) /etc/dnf/dnf.conf and add this line:

exclude = packagename1
exclude = packagename2

Save it. The next time DNF updates, your package won’t be updated! This will work with any distribution that uses DNF (Mageia, future versions of CentOS).