Accueil / Informatique / Repackager une application Electron pour Linux

Repackager une application Electron pour Linux

Problème : tu as une appli Electron qui n'a pas de version Linux, alors que tu es sous Linux et que tu veux utiliser cette application.

Solution : jouer avec des commandes pour transformer la version Mac OS de l'app en AppImage.

Récupérer le fichier .dmg et l'extraire

Les apps Electron pour Mac OS X sont souvent packagées sous forme de fichier .dmg. Ces fichiers sont juste des archives qui contiennent tous les fichiers de l'application. On peut donc les extraire facilement avec 7z x fichier.dmg (ou une application graphique).

Une fois que c'est fait, on se retrouve avec plein de fichiers, mais il n'y en a qu'un seul qui va vraiment nous intéresser : TRUC.App/Resources/app.asar (TRUC c'est le nom de l'application en général).

Ce fichier c'est une archive du code JavaScript/HTML/CSS et de toutes les ressources dont l'appli a besoin pour fonctionner.

L'idée ça va être de packager une application Electron en lui disant "mon code est déjà archivé, et il est dans ce fichier".

Utiliser electron-builder

electron-builder est un outil qui permet de packager des applications Electron. En général on s'en sert sur du code pas encore archivé, mais heureusement il y a une option si jamais le code est déjà dans un fichier .asar.

Pour l'installer :

  • on installe Node.js et NPM (avec le gestionnaire de paquet de la distrib en général)
  • on crée un "faux" paquet NPM (pour ne pas tout installer globalement, et sinon electron-builder râle quand on le lance)
  • on installe Electron : npm install --save --dev electron
  • on installe electron-builder : npm install --save --dev electron-builder

On le lance :

npx electron-builder --pd TRUC.app/Contents/Resources/app.asar -l AppImage

Le --pd c'est pour dir « Prebuilt Dir » et le -l c'est pour « Linux ». Normalement, ça va générer un fichier AppImage dans dist/.

Et si ça marche pas ?

Parce que oui, quand j'ai voulu faire ça, ça a pas du tout marché, electron-builder est mal codé et plante quand on utilise --pd (ou je sais juste pas m'en servir).

Du coup : j'ai créé une fausse application Electron (touch index.js). Je l'ai packagée comme si tout était normal (npx electron-builder -l AppImage).

Ensuite, j'ai demandé à l'AppImage de s'extraire elle-même : ./dist/TRUC.AppImage --appimage-extract

Ça a créé un dossier squashfs-root avec tous les fichiers de l'AppImage. Il n'y a plus qu'à remplacer le fichier .asar avec celui qui viens de la version Mac :

cp TRUC.app/Contents/Resources/app.asar squashfs-root/resources/app.asar

Et à tout repackager avec appimagetool (procédure d'installation si besoin) :

appimagetool squashfs-root/ TRUC.appimage

Et voilà, si vous faites ./TRUC.appimage tout devrait se lancer comme il faut.