/dev/blog/ID10T

Advertisement

Using Python Virtual Environments for Ansible Nodes

• Ansible and Linux • Comments

Did you ever need a different Python version on an Ansible Node? Or a different Python module version? I did.

The Ansible modules openssl_certificate and openssl_csr require pyOpenSSL >= 0.15. This is not the case for Red Hat Enterprise Linux 6 servers. The Python installation I wanted to use with Ansible needed to have an enabled Python SCL and an activated Python Virtual Environment (because I didn’t want to fiddle with the original SCL modules) before running its commands.

Therefore I created the small shell script python36-starter.sh:

#!/bin/bash
. /opt/rh/rh-python36/enable
. /opt/python-venv/bin/activate
exec python "$@"

It’s pretty much self-explanatory. By sourcing the enable and activate files of SCL and Virtual Environment, the correct pathes for Python binaries and libraries are set. Then the “new” Python binary is executed with all arguments the script was called with.

By adding the ansible_python_interpreter configuration parameter to the according host in the inventory this script will be used by Ansible in future runs.

[webservers]
prodweb
simuweb
testweb
webcert ansible_python_interpreter=/usr/local/bin/python36-starter.sh
xweb

This small hack could be extended even further. You could export environment variables in it or do some logging or auditing stuff. But keep in mind this is a dirty hack. Do not give up the freedom and clarity Ansible provides by overextending “quick and dirty” hacks.

Subnautica: Fix 0000000e Access Violation crash

• Gaming and Windows • Comments

Subnautica Banner Small

Subnautica is available for free on the Epic Game Store until 27th December. It was on my radar for quite some time, so I decided to try it out. Unfortunately on my PC the game crashed before even starting properly. At least it creates crash logs. While most of those were useless to me, one part was constant in all my tries:

Read from location 0000000e caused an access violation

This seems to be an error common in many Unity Engine games, not exclusive to Subnautica. Therefore a lot of people experienced this crash issue. Most search results on the Internet recommend disabling overlays. I did that for Steam, Discord, Riva Tuner and f.lux, to no avail.

Introducing Codebites

• Blog • Comments

YAML CodebiteThere is very little post activity on my Blog. Creating posts is no cakewalk, additionally I often don’t see the public interest for a lot of topics. That’s why I added a new feature to the Blog today, Codebites. Codebites are intended to be more “Memo like” posts than real Blog posts. As such, they will be “low detail” creations, the default Codebites site is thusly sorted by category. Little or even no explanatory text, just copy and pastes of solutions and - perhaps - the problem in itself. I hope to put out more of these bites than my current 12 blog posts per year.
As Codebites are a drastically different approach to normal blog posts, I don’t want to bother my current RSS feed subscribers with it (side note: I don’t know if anybody is even reading my RSS feed, I didn’t bother to add any tracking). The current “default feed” will stay the same, only containing full fledged Blog posts. I created two new feeds, one for Codebites only and one containing everything.

The first (rather trivial) Codebite is already online: Ansible: Add two lists, then filter with third list

In other news: I’m aware of the oversized Google Ads, I’ll look into solving that issue in the near future.

Fixing HTTP 405 errors with httpd 2.4 WebDAV

• httpd and Webdav • Comments

While updating an Apache httpd from 2.2 to 2.4 we encountered a strange problem. The web server is used as a reverse proxy for a WebDAV application. Therefore the original httpd 2.2 directive allowed a couple of WebDAV methods. It looked similarly to this:

<Location "/dav">
  <LimitExcept HEAD GET POST CONNECT PUT DELETE OPTIONS PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK TRACE>
    Order       deny,allow
    Allow       from all
  </LimitExcept>
</Location>

Adapting this to httpd 2.4 was not a big deal:

<Location "/dav">
  AllowMethods HEAD GET POST CONNECT PUT DELETE OPTIONS PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK TRACE
  Require all granted
</Location>

But this didn’t work as expected. While OPTIONS did work, PROPFIND, PROPPATCH, etc. were not. My tests with curl always returned HTTP 405.

curl -X PROPFIND https://example.org/dav
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method PROPFIND is not allowed for the URL /.</p>
</body></html>

As it turns out, there’s a bug report from 2013 in the Apache bug tracker for a similar issue. For whatever reason an enabled DirectoryIndex directive blocks the WebDAV methods. This bug has been fixed in the httpd 2.5 trunk, but not in http 2.4 (and probably never will). Therefore disabling DirectoryIndex is the mandatory workaround:

<Location "/dav">
  DirectoryIndex disabled
  AllowMethods HEAD GET POST CONNECT PUT DELETE OPTIONS PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK TRACE
  Require all granted
</Location>

As this issue didn’t arise until production hours and a quick fix was needed, I’ve yet to confirm if mod_dav and mod_dav_fs are even needed. I suspect they are not.

Using the Spotify Web player on Android

• Android and Web • Comments

A friend of mine asked me if it was possible to use the Spotify Web Player on his Android smartphone.

Spotify Android App

If you are like me and don’t use Spotify on mobile very often, you might not know that the free version of the Spotify app is heavily castrated. I’m not using it a lot, but if I understood correctly, you can’t properly play a playlist or one song, you get force fed “matching” songs. Also you can’t constantly skip songs. To push their Premium Account to you, Spotify additionally prevents mobile browsers from using their less limited Web player.

While I understand that Spotify wants to earn money, I heavily dislike the artificial limitations to push people to a paying account. If you can’t sell your Premium Account with a feature list, you should probably work on the list instead of artificially limiting the features on different devices. Especially the differentiation between PC and mobile browsers triggered me. Therefore I welcomed the challenge of convincing Spotifys Web player to work on Android.

Advertisement