Python für das alte Debian 8 und 9

Man braucht Python 3.7 unter Debian 8 oder 9. Die beiden unterstützen das aber nicht.
Man kompiliert Python aus den Quellen, das scheitert wieder an OpenSSL.

Willkommen in meiner verrückten Welt der Linux Installationen.


Der Support von älteren Betriebssystem wird von Softwareherstellern sträflichst vernachlässigt. Denn wenn auf Industriehardware ein bestimmtes System vorgeschrieben ist, kann man nicht einfach zum USB-Stick greifen und ein neues OS aufziehen.

Man muss also die Software dazu bringen, auf dem alten System zu laufen.

In meinem Fall war die Anforderung:

  • Debian 8
  • Python 3.7
  • SSL Python Bibliothek und pip zum Download weiterer Pakete.

Nach einer Menge von Fehlschlägen möchte ich das Ergebnis nicht verheimlichen.

Die bei Debian vorhandene OpenSSL 1.0.2 Bibliothek ist ebenfalls zu alt und muss erneuert werden bevor Python kompiliert werden kann. Wir müssen also:

  1. Eine Build-Umgebung bereitstellen
  2. OpenSSL Quellen herunterladen und durchbauen
  3. OpenSSL ins System integrieren
  4. Python Quellen herunterladen und durchbauen
  5. Python ins System integrieren

Meine wichtigste Erkenntnis war:

Ja nicht ldconfig -v vergessen !!!!

Installationsprozedur

  1. Build-Umgebung bereitstellen:
    Ich habe die Installation generell als root laufen lassen. Vermutlich wird es mit sudo aber auch
    funktionieren.
    1apt install build-essential checkinstall \
    2    libreadline-gplv2-dev libncursesw5-dev \
    3    libsqlite3-dev tk-dev libgdbm-dev \
    4    libc6-dev libbz2-dev wget curl 
    
  2. OpenSSL Quellen herunterladen und durchbauen:
    Ich habe mich OpenSSL 1.1.1f gewählt und lasse die Datei direkt aus dem Netz laden. Die Quellen werden in /usr/src gebaut.
     1cd /usr/src
     2wget http://www.openssl.org/source/old/1.1.1/openssl-1.1.1f.tar.gz
     3tar -xf openssl-1.1.1f.tar.gz
     4cd openssl-1.1.1f
     5./config shared --prefix=/usr/local/
     6make -j8
     7make install
     8mkdir lib
     9cp ./*.so ./lib
    10cp ./*.so.* ./lib
    11cp ./*.a ./lib
    12cp ./*.pc ./lib
    
  3. OpenSSL ins System integrieren:
    Die vorherige Installationsprozedur reicht nicht aus, dass andere Programme OpenSSL finden, deshalb muss nun
    1ldconfig -v
    

    ausgeführt werden. Es garantiert, dass OpenSSL’s *.so Dateien geladen werden können.

  4. Python Quellen herunterladen und durchbauen:
    Mein Wahl fiel auf Python 3.7.9, welches beim Kompilieren den Pfad zu OpenSSL benötigt.
    1cd /usr/src
    2wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tar.xz
    3tar -xf Python-3.7.9.tar.xz
    4cd Python-3.7.9
    5./configure --with-openssl=/usr/src/openssl-1.1.1f
    6make -j8
    7make altinstall
    
  5. Python ins System integrieren:
    Das Tool update-alternatives soll nun alle Links so einrichten, dass Python im System gefunden werden kann:
    1update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.7 1
    2update-alternatives --config python3
    3update-alternatives --install /usr/bin/pip3 pip3 /usr/local/bin/pip3.7 1
    4update-alternatives --config pip3
    

    Wer möchte, dass Python 3 auch gleich Python 2 ersetzt, kann wie folgt fortfahren:

    1update-alternatives --install /usr/bin/python python /usr/local/bin/python3.7 1
    2update-alternatives --config python
    3update-alternatives --install /usr/bin/pip pip /usr/local/bin/pip3.7 1
    4update-alternatives --config pip
    

    Aber Vorsicht: Es kann dann auch zu Störungen kommen, wenn Python 2 Scripts ausgeführt werden.

Die Prozedur hat bei mir sowohl unter Debian 8 als auch unter Debian 9 funktioniert.

Debian 10 hat zum Glück beide Programmversionen schon in seinem Repository. Hier reicht ein einfaches
apt install python3 python3-pip
(Ja, so einfach kann es eben auch gehen)

Fazit

Wie schon erwähnt hat mich das fehlende ldconfig -v viel Zeit gekostet. Denn Python kompiliert ansonsten ganz brav durch und meint am Ende im Kommentar, dass SSL nicht zur Verfügung steht, weil die nötigen Libs nicht gefunden wurden.

Das Problem bemerkt man erst, wenn man die ersten Scripts ausführt, die dann an HTTPS und Co scheitern.