Résolution de problèmes de lancement de vieux jeux Linux sur des distributions récentes

Les jeux ont des dépendances: Donc certains jeux 32 bits dépendent de librairies 32 bits. Il est impératif de les installer pour pouvoir jouer à ces jeux.

Il n'est pas rare qu'en lançant un ancien jeu de GOG, HumbleBundle ou itch.io le jeu se plaigne de librairies manquantes (.so) sur les distributions récentes, car les développeurs n'ont pas révisé et recompilé leurs jeux en prenant en compte l'évolution des systèmes d'exploitation. Erreur typique:

./start.sh 
Running Hyper Light Drifter
./HyperLightDrifter.x86: error while loading shared libraries: libcrypto.so.1.0.0: cannot open shared object file: No such file or directory

Ce que le jeu est en train de vous dire, c'est qu'il a besoin de la librairie libcrypto.so.1.0.0. Or cette dernière a totalement disparu des distributions Debian et dérivées récentes (Ubuntu, Linux Mint, etc.).

C'est pour cela que je vous propose cette ligne pour installer un bon nombre de librairies qui satisferont la majorité des jeux 32 bits.

sudo apt install libc6:i386 libasound2:i386 libasound2-data:i386 libasound2-plugins:i386 libstdc++6:i386 libx11-6:i386 libxau6:i386 libxcb1:i386 libxcursor1:i386 libxdmcp6:i386 libxext6:i386 libxfixes3:i386 libxinerama1:i386 libxrandr2:i386 libxrender1:i386 libglu1:i386 libcurl3:i386 libgtk2.0-0:i386 libopenal1:i386 libxtst6:i386 libssl1.0.0:i386 libnss3:i386 libgconf-2-4:i386
Le préfixe :386 signifique que c'est la version 32 bits de la librairie qu'ont veut installer. Les jeux qui se plaignent de librairie manquant ne vous indiqueront pas s'il veulent la 32 ou 64 bits (cela dépend de l'exécutable du jeu ; voir plus loin dans cette page).

Le soucis est que d'une version d'une distribution à l'autre, certains de ces paquets disparaissent des dépôts officiels et ne sont donc plus installables. (Donc à vous de retirer de cette ligne les paquets qui n'existent plus dans votre distribution.)

Il existe un moyen de résoudre ce problème de dépendance à des librairies et paquets qui n'existent plus. Mais c'est un petit jeu d'enquête. Nous prendrons pour exemple ci-dessous le jeu HyperLight Drifter et 2x0ng mais cette méthode peut s'appliquer à d'autres jeux et logiciels.

Exemple avec HyperLight Drifter

Nous allons prendre ici l'exemple d'HyperLight Drifter sous Ubuntu 20.04.

Ce jeu est en 32 bits. Si votre jeu est en 64 bits, il faut retirer les i386 et choisir les paquets pour l'architecture amd64, ainsi que les librairies 64 bits.

On va prendre l'installeur de chez GOG, gog_hyper_light_drifter_2.6.0.7.sh. Il s'agit d'un jeu 32 bits.

Après installation, dans le répertoire du jeu, vous verrez un fichier deps.txt: Les développeurs ont gentiment indiqué les dépendances à installer.

libc6:i386 libasound2:i386 libasound2-data:i386 libasound2-plugins:i386 libcurl3:i386 libgtk2.0-0:i386 libopenal1:i386 libglu1:i386

Donc un petit apt install et le problème est réglé ? Malheureusement non: Le paquet libcurl3:i386 ne semble plus exister dans les dépôts d'Ubuntu 20.04.

>sudo apt install libcurl3:i386
E: Le paquet « libcurl3:i386 » n'a pas de version susceptible d'être installée

Installez tout de même les autres paquets:

sudo apt install libc6:i386 libasound2:i386 libasound2-data:i386 libasound2-plugins:i386 libgtk2.0-0:i386 libopenal1:i386 libglu1:i386

Essayons de lancer le jeu:

./start.sh 
Running Hyper Light Drifter
./HyperLightDrifter.x86: error while loading shared libraries: libcrypto.so.1.0.0: cannot open shared object file: No such file or directory

Cherchons s'il n'y aurait pas un autre paquet dans les dépôts de notre distribution qui aurait ce fichier.

Visiblement, on a réglé le problème de la libcrypto.so.1.0.0, mais il lui manque maintenant autre chose.

Le message d'erreur n'est pas forcément très explicite mais là libcurl.so.4 est en train de vous parler. Ce qui veut dire que le jeu a démarré en utilisant libcurl4. On sait que le jeu nécessite libcurl3. On va donc aller récupérer aussi de force libcurl.so.3.

Même méthode de recherche, on trouve le paquet https://packages.debian.org/stretch/libcurl3 et on télécharge sa version i386. On décompresse et on copie tous les fichiers de libcurl3_7.52.1-5+deb9u12_i386/usr/lib/i386-linux-gnu dans le répertoire du jeu également.

On relance le jeu:

LD_LIBRARY_PATH=$(pwd) ./start.sh 
Running Hyper Light Drifter
./HyperLightDrifter.x86: error while loading shared libraries: libssh2.so.1: cannot open shared object file: No such file or directory

Problème de libcurl3 résolu ! Mais oui, il veut encore une autre lib. Oui, c'est encore à vous d'aller la chercher à la main.

Continuez ainsi pour chaque librairie manquante. Oui, c'est long, c'est chiant. En fait vous êtes en train de faire à la main la résolution des dépendances comme le fait habituellement le gestionnaire de paquets de votre distribution.

Pour HyperLight Drifter, on sera allé télécharger à la main les fichiers suivants:

On démarre maintenant le jeu:

LD_LIBRARY_PATH=$(pwd) ./start.sh 
Running Hyper Light Drifter

***************************************
*     YoYo Games Linux Runner V1.3    *
***************************************	 
CommandLine: -game game.unx
...

Miracle, il fonctionne !

Exemple avec 2x0ng

(Site web: https://dto.itch.io/2x0ng)

Pour résumer, pour ce jeu on pourra se contenter de ce qu'il y a dans les dépôts d'Ubuntu 20.04:

sudo apt install libsdl1.2debian:i386 libsdl-gfx1.2-dev:i386 libsdl-mixer1.2-dev:i386 libsdl-ttf2.0-0:i386 libsdl-image1.2:i386

Testé avec succès avec:

Cette méthode de recherche des packages manquants a été appliquée avec succès sur des jeux qui ne voulaient pas démarrer: