URL: https://linuxfr.org/news/play-it-2-12-api-gui-et-jeux-videos Title: ./play.it 2.12 : API, GUI et jeux vidéos Authors: vv222 Davy Defaud, ZeroHeure, play0ad, BAud, Florent Zara, theojouedubanjo, HS-157 et TintinL Date: 2019-03-19T20:05:07+01:00 License: CC By-SA Tags: playit, jeux, jeux_linux et jeu_vidéo Score: 4 **./play.it** est un logiciel libre qui automatise la construction de paquets natifs pour plusieurs familles de distributions à partir d’installateurs [sans DRM](https://fr.wikipedia.org/wiki/Gestion_des_droits_numériques "Digital Rights Management — Gestion des droits numériques") pour une collection de jeux commerciaux. Les paquets ainsi générés s’installent ensuite en utilisant les outils standards fournis par la distribution (notamment *APT*, *pacman*, *emerge*). Une description plus complète est proposée par cette dépêche publiée en 2018 sur votre site préféré : [./play.it installe vos jeux sans prise de tête](https://linuxfr.org/news/play-it-installe-vos-jeux-sans-prise-de-tete). Il s’est écoulé plus d’un an depuis la sortie de la version **2.11**, qui remonte à janvier 2019, nous allons donc passer rapidement sur les ajouts de la **2.12** pour plutôt nous attarder sur les divers aspects de **./play.it** qui nous ont occupé pendant tout ce temps, et dont le code lui‑même ne représente en fait qu’une petite partie. ---- [Présentation sur LinuxFr.org](https://linuxfr.org/news/play-it-installe-vos-jeux-sans-prise-de-tete) [Site officiel](https://www.dotslashplay.it/) [Dépôts officiels sur notre forge](https://forge.dotslashplay.it/play.it) ---- Nouveautés de la version 2.12 ============================= Même si nous n’allons pas en faire le cœur de cette dépêche, ce serait dommage de ne pas lister les nouveautés de cette nouvelle version. Comparée à nos mises à jour habituelles, celle‑ci est tout particulièrement massive, en bonne partie parce que l’intégration de nouveautés a tourné au ralenti pendant presque deux ans. On trouve donc dans cette mise à jour certaines contributions qui remontent à aussi loin que fin 2018 ! Le journal des modifications apportées par cette version 2.12 se trouve sur [notre forge](https://forge.dotslashplay.it/play.it/scripts/-/releases/2.12.0), en anglais. Mais nous vous en avons préparé une traduction en français ici‑même : * nouvelles options : * `--output-dir` : définit le répertoire de destination des paquets générés, * `--overwrite` : remplace les paquets si ils existent déjà, * `--icons` : inclure ou non les icônes dans les paquets ; * modifications de la commande principale `play.it` : * retrait de `$XDG_RUNTIME_DIR` de la liste des chemins possibles pour le répertoire de travail temporaire, * évite la recherche de scripts dans des répertoires qui ne sont pas censés en contenir, * retrait de lʼidentification des archives par empreinte MD5 ; * modifications liées aux archives : * lors de lʼutilisation de `unzip`, seuls les fichiers utiles sont extraits, * ajout de la possibilité de passer des archives renommées, * ajout de la gestion des archives **LHA** ; * Modifications liées aux moteurs : * nouveau moteur : **ResidualVM**, * nouveau moteur : *runtime* **Mono** fourni par le système, * **DOSBox** : utilisation de `$PLAYIT_DOSBOX_BINARY` dans les lanceurs si cette variable est définie ; * modifications liées aux paquets : * ajout de la possibilité de définir des scripts de post‑installation et pré‑suppression par paquet via des variables dédiées, * **Arch Linux** : amélioration de la cohérence du nommage des paquets 32 bits ; * nouvelles fonctions internes : * `version_target_is_older_than` : vérifie si la version de la bibliothèque visée par le script courant est plus ancienne quʼune version donnée, * `toupper` : convertit les noms de fichiers dʼune arborescence en lettres capitales ; * nouveaux mots‑clés pour définir des dépendances : * `libgdk_pixbuf-2.0.so.0`, * `libglib-2.0.so.0` / `libgobject-2.0.so.0`, * `libmbedtls.so.12`, * `libpng16.so.16`, * `libopenal.so.1` (synonyme d’`openal`), * `libSDL2-2.0.so.0` (synonyme de `sdl2`), * `libturbojpeg.so.0`, * `libuv.so.1`, * `libvorbisfile.so.3` (synonyme de `vorbis`), * `libz.so.1` ; * nettoyage et améliorations diverses : * réorganisation complète de tout le code lié à lʼaffichage de messages, * abandon des derniers chemins codés en dur, liés à la gestion des icônes et des lanceurs *.desktop*, * utilisation de valeurs par défaut différentes selon le système cible pour le chemin dʼinstallation des paquets, * activation forcée de lʼoption `errexit` lors de lʼinitialisation de la bibliothèque, * utilisation de `dirname` et `basename` au lieu des _built‑in_ correspondant du _shell_. Migration du développement ========================== Historique ----------- Comme beaucoup de projets libres, le développement de **./play.it** a débuté sur un coin de disque dur, ce qui a sans surprise conduit à la perte de tout historique antérieur au 30 mars 2016 (version **1.13.15**) suite à une fausse manipulation sur lʼunique copie existante du code. La leçon immédiatement tirée de cette gaffe a été que ce qui nʼest pas partagé nʼest pas pérenne, et cʼest ce qui a motivé la mise en place dʼun dépôt Git public. La facilitation du travail collaboratif nʼa donc été quʼune conséquence de cette recherche de pérennité, et pas la raison originale du partage. Suite à ça, le développement de **./play.it** a été hébergé successivement sur plusieurs forges mutualisées : - **GitHub**, quʼon ne présente plus, pas tant un choix réfléchi quʼun choix par défaut ; - une instance de **Gogs** maintenue par _[debian-fr.xyz](https://www.debian-fr.xyz/)_, communauté dont le développeur principal de **./play.it** était déjà très proche ; - **Framagit**, la fameuse instance de **GitLab** maintenue par **[Framasoft](https://framasoft.org/)**. Forge dédiée ------------ Au fil du temps, **./play.it** a commencé à se diviser en plusieurs dépôts pour maintenir plus efficacement les différents aspects du projet. À ça se sont ajoutés des besoins particuliers au niveau des tests automatisés. Et, bien sûr, une furieuse envie de comprendre comment fonctionne une forge logicielle. Nous avons donc monté une forge sur un serveur dédié, grandement aidés de ce côté par le boulot de dingue de [lʼéquipe qui maintient GitLab au sein de Debian](https://wiki.debian.org/gitlab). En retour, nous essayons à lʼoccasion de [leur donner un coup de main](https://salsa.debian.org/ruby-team/gitlab/-/merge_requests/5). Hasard du calendrier, cette migration a eu lieu peu de temps avant lʼarticle « [Déframasoftisons Internet !](https://framablog.org/2019/09/24/deframasoftisons-internet/) » annonçant la fin programmée (mais pas pour tout de suite) de **Framagit**. Cette instance auto‑hébergée se trouvait sur un VPS loué chez [**Digital Ocean**](https://www.digitalocean.com/) jusque mi‑juillet 2020, et a depuis migré sur un autre VPS loué cette fois‑ci chez [**Hetzner**](https://www.hetzner.com/). Pour une machine virtuelle similaire et un niveau de service qui semble comparable, ce changement de prestataire permet de diviser par deux les coûts de l’hébergement de cette forge. Coût, pour rappel, payé par une personne seule, les dons financiers sont donc d’autant plus appréciés qu’ils sont très rares. À la grande surprise de notre administrateur système, cette dernière migration n’a pris qu’une petite poignée d’heures sans interruption de service visible par nos contributeurs. Accès à la forge ---------------- Cette nouvelle forge est accessible sur _[forge.dotslashplay.it](https://forge.dotslashplay.it/)_. Les inscriptions y sont ouvertes au public, en contrepartie nous vous demandons de ne pas en abuser, en particulier nous ne souhaitons pas héberger de projets sans rapport avec **./play.it**. Des exceptions sont tout de même mises en place pour nos contributeurs réguliers, dont nous hébergeons certains projets personnels. Bref, si vous voulez profiter de cette forge pour héberger vos projets, le prérequis est dʼavoir fait avancer **./play.it** dʼune manière ou dʼune autre. API === La collection de jeux gérés grossissant sans cesse, nous avons lancé le développement d’une [API publique](https://api.dotslashplay.it/) permettant d’accéder à tout un tas d’informations liées à **./play.it**. Cette API, qui n’est pas encore stabilisée, est simplement une interface à une base de données versionnée listant la totalités des scripts **./play.it**, des archives gérées, et des jeux installables par ce biais. Des liens sont bien sûr faits entre ces éléments, ce qui permet de l’utiliser pour répondre à des requêtes du type : « Quels paquets doivent être disponibles sur mon système pour installer _[Cæsar Ⅲ](https://fr.wikipedia.org/wiki/Caesar_III)_ ? » ou « Quels sont les jeux gratuits gérés via [DOSBox](https://fr.wikipedia.org/wiki/DOSBox) ? ». À l’origine développée pour servir de support au nouveau site Web en cours de développement (on en cause un peu plus loin dans cette dépêche), cette API devrait faciliter le développement de divers outils autour de **./play.it**. En particulier, celle‑ci sera utile à qui souhaiterait construire un gestionnaire de jeux vidéo complet (téléchargement, installation, lancement, etc.) utilisant **./play.it** comme une de ses briques de base. Pour ceux qui sont curieux du côté technique, il s’agit d’une API basée sur [**Lumen**](https://lumen.laravel.com/) effectuant des requêtes sur une base de données [**MariaDB**](https://fr.wikipedia.org/wiki/MariaDB), le tout auto‑hébergé sur une [**Debian Sid**](https://fr.wikipedia.org/wiki/Debian). Non seulement le code de l’API est versionné sur [notre forge](https://forge.dotslashplay.it/play.it/api), mais aussi la structure *et* le contenu de la base de données, ce qui permettra à ceux qui le souhaitent de facilement en installer une version locale. Nouveau site Web ================ Basé sur l’API que nous venons d’évoquer, un nouveau site Web est en cours de préparation et devrait à terme remplacer notreb [site Web actuel](https://www.dotslashplay.it/) basé sur [**DokuWiki**](https://www.dokuwiki.org/start?id=fr:dokuwiki). En effet, si l’absence de base de données et la structure en fichiers plats de DokuWiki semblait attirante [quand **./play.it** ne gérait encore qu’une poignée de jeux](https://debian-facile.org/utilisateurs:vv222), cet avantage s’est transformé en inconvénient à mesure que la collection de jeux gérés par **./play.it** a grossi. Nous parlerons probablement plus en détails de ce site Web lors de la prochaine dépêche pour la sortie de la version **2.13** de **./play.it**, mais vous pouvez déjà jeter un œil sur une [démo publique](https://dev.website.dotslashplay.it/) de la version en cours de développement sur [notre forge](https://forge.dotslashplay.it/play.it/website). Si vous souhaitez donner un coup de main de ce côté, des [tâches prioritaires](https://forge.dotslashplay.it/play.it/website/-/issues?milestone_title=1.0) ont été identifiées pour obtenir un nouveau site Web permettant de remplacer celui actuellement en activité. Et pour ceux qui s’intéressent à la technique, ce site Web est développé en **PHP** en se basant sur le cadriciel [**Laravel**](https://laravel.com/). La version en cours de développement est hébergée pour l’instant sur la même [**Debian Sid**](https://fr.wikipedia.org/wiki/Debian) que l’API. GUI === Une remarque assez régulière qui nous a été faite sur le projet est que, si lʼobjectif est de rendre lʼinstallation des jeux accessible à nʼimporte qui sans bagage technique particulier, devoir lancer des scripts dans le terminal reste quand même quelque chose dʼassez intimidant. Ce à quoi notre réponse a été jusque‑là que le projet nʼavait pas pour vocation à intégrer une interface graphique par lui‑même ([principe **KISS**](https://fr.wikipedia.org/wiki/Principe_KISS "Keep it simple, stupid"), encore et toujours), mais quʼil devrait, à terme, être assez facile de développer une interface graphique tierce pour se greffer dessus. Eh bien, il se trouve que cʼest désormais chose faite. À peu près vers le moment de parution de notre [dernière dépêche](https://linuxfr.org/news/play-it-2-11-gentoo-flatpak-et-jeux-videos), lʼun de nos contributeurs, se basant sur lʼAPI dont nous venons de parler, a développé un petit prototype qui nous a semblé suffisamment utilisable pour mériter un peu de mise en avant. :-) Concrètement, il sʼagit dʼun petit bout de code **Python 3** (lʼ[IHM](https://fr.wikipedia.org/wiki/Interactions_homme-machine "Interface homme‑machine") entièrement en shell POSIX, cʼest pour plus tard :-°), utilisant **GTK 3** (et quand même un terminal VTE pour afficher le retour des commandes utilisées, mais lʼutilisateur nʼa jamais à aller taper quoi que ce soit dedans, en dehors éventuellement de son mot de passe _root_ pour lʼinstallation des paquets). Cela a dʼailleurs permis de vérifier que, comme nous lʼavancions, ce serait assez simple, puisquʼun script de moins de 500 lignes de code (écrit rapidement en cours de week‑end) suffit à faire le travail ! Bien entendu, ce projet d’interface graphique reste indépendant du projet principal, et maintenu dans [un dépôt séparé](https://forge.dotslashplay.it/play.it/gui). Il nous paraît intéressant de le mettre en avant pour faciliter lʼutilisation de **./play.it**, mais ça nʼempêche absolument pas dʼautres projets du même genre de voir le jour, par exemple en se basant sur un autre langage ou sur une autre bibliothèque graphique (nous nʼavons, globalement, aucun attachement particulier à Python ni à GTK). Lʼutilisation de cette [IHM](https://fr.wikipedia.org/wiki/Interactions_homme-machine "interfaces homme‑machine") se passe en trois étapes : tout dʼabord, une liste des jeux proposés est affichée, directement listée par notre API. Il suffit alors de choisir dans la liste (éventuellement à lʼaide de la barre de recherche) le jeu que lʼon veut installer. On passe alors sur une deuxième vue, qui affiche la liste des fichiers requis. Dans le cas où plusieurs alternatives sont possibles, lʼutilisateur choisit celle qui lʼintéresse le plus. Tous ces fichiers doivent se trouver dans un même répertoire, la barre dʼadresse en haut permettant de choisir lequel utiliser (cliquer sur le bouton dʼouverture en haut à droite permet dʼobtenir une fenêtre de navigation). Une fois que ceux‑ci sont présents (sʼils sont téléchargeables, ils seront automatiquement récupérés par le logiciel), on peut passer à la troisième étape, qui consiste simplement à regarder **./play.it** faire son travail. :-) Ceci fait, un simple clic sur le bouton en bas à gauche permet un premier lancement du jeu (même si, à partir de là, celui‑ci est intégré dans votre système comme dʼhabitude, et donc il nʼy a plus besoin de passer par cet outil). Pour télécharger les fichiers manquants le cas échéant, lʼIHM utilise, selon ce qui est disponible sur le système, **wget**, **curl** ou **aria2c** (ce dernier présentant lʼavantage de gérer également les torrents), dont les retours seront affichés dans le terminal lors de la troisième phase, juste avant lʼexécution des scripts. Pour lʼélévation de droits nécessaire à lʼinstallation des paquets, `sudo` est préféré sʼil est présent (avec lʼoption permettant de lancer une application tierce pour demander le mot de passe, si la variable dʼenvironnement correspondante est définie, ce qui est sans doute plus convivial), sinon cʼest `su` qui sera utilisé. Naturellement, toute suggestion d'amélioration sera lue avec plaisir. Nouveaux jeux ============= Évidemment, une dépêche comme celle‑ci ne serait pas complète sans la liste des jeux ajoutés à notre collection depuis la sortie de la version **2.11**, la voici donc : * _7 Billion Humans_ * _Agatha Christie: The ABC Murders_ * _Age of Mythology Demo_ * _Among the Sleep_ * _Anomaly: Warzone Earth_ * _Another Lost Phone: Lauraʼs Story_ * _Assault Android Cactus_ * _Baba Is You_ * _Blade Runner_ * _Bleed_ * _Bleed 2_ * _Blocks that matter_ (anciennement géré par ./play.it 1.x) * _Butcher Demo_ * _Capsized_ * _Cayne_ * _Cineris Somnia_ * _Commandos 3: Destination Berlin_ * _Diablo_ * _Din’s Curse_ * _Divine Divinity_ (anciennement géré par ./play.it 1.x) * _Duet_ (anciennement géré par ./play.it 1.x) * _Earthworm Jim_ * _Edna & Harvey: The Breakout — Anniversary Edition_ * _Element4l_ * _Factorio — Demo_ * _Finding Paradise_ * _Firewatch_ * _FlatOut 2_ * _Forced_ * _Forgotton Anne_ * _Freelancer Demo_ * _Frostpunk_ * _Full Throttle Remastered_ * _Giana Sisters: Twisted Dreams_ * _Gibbous — A Cthulhu Adventure_ * _Gorogoa_ * _Indiana Jones and the Last Crusade_ * _Into the Breach_ * _Kerbal Space Program_ * _LEGO Batman: The Videogame_ * _Lego Harry Potter Years 1-4_ * _Maniac Mansion_ * _Metal Slug 3_ (anciennement géré par ./play.it 1.x) * _MIND: Path to thalamus_ * _Minecraftn 4K_ * _Minit_ * _MonkeynIslandn4: Escape from Monkeynn Island_ * _Multiwinia_ (anciennement géré par ./play.it 1.x) * _Mushroom 11_ * _Myst: Masterpiece Edition_ (anciennement géré par ./play.it 1.x) * _Neverwinter Nights: Enhanced Edition_ * _Overgrowth_ * _Perimeter_ * _Populous: Promised Lands_ (anciennement géré par ./play.it 1.x) * _Populous 2_ (anciennement géré par ./play.it 1.x) * _Prison Architect_ * _Q.U.B.E. 2_ * _Quern — Undying Thoughts_ * _Rayman Origins_ * _Retro City Rampage_ (anciennement géré par ./play.it 1.x) * _RiME_ * _Satellite Reign_ (anciennement géré par ./play.it 1.x) * _Star Wars: Knights of the Old Republic_ (anciennement géré par ./play.it 1.x) * _Starship Titanic_ * _SteamWorld Quest: Hand of Gilgamech_ * _Stellaris_ * _Ancient Relics Story Pack_ * _Apocalypse_ * _Arachnoid Portrait Pack_ * _Distant Stars Story Pack_ * _Federations_ * _Horizon Signal_ * _Humanoids Species Pack_ * _Leviathans Story Pack_ * _Lithoids Species Pack_ * _Megacorp_ * _Plantoids Species Pack_ * _Synthetic Dawn Story Pack_ * _Utopia_ * _Strike Suit Zero_ * _Sundered_ * _Sunless Skies_ * _Cyclopean Owl DLC_ * _Symphony_ * _Tangledeep_ * _Tengami_ * _Tetrobot and Co._ * _The Adventures of Shuggy_ * _The Aquatic Adventure of the Last Human_ * _The Count Lucanor_ * _The First Tree_ * _The Longing_ * _The Pillars of the Earth_ * _The Witcher_ (anciennement géré par ./play.it 1.x) * _The Witcher 3: Wild Hunt_ * _Tonight We Riot_ * _Toren_ * _Touhou Chireiden ~ Subterranean Animism — Demo_ * _Touhou Hifuu Nightmare Diary ~ Violet Detector_ * _Triple Triad Gold_ * _Vambrace: Cold Soul_ * _VVVVVV_ (anciennement géré par ./play.it 1.x) * _War for the Overworld_ (le jeu de base était déjà géré, de nouvelles extensions ont été ajoutées) : * _Heart of Gold_ * _Seasonal Worker Skins_ * _The Under Games_ * _Warcraft: Orcs & Humans_ * _Warhammer 40,000: Dawn of War — Winter Assault Demo_ * _Warhammer 40,000: Gladius — Relics of War_ * _Warlords Battlecry II_ (anciennement géré par ./play.it 1.x) * _Wing Commander_ (anciennement géré par ./play.it 1.x) * _Wing Commander II_ (anciennement géré par ./play.it 1.x) * _Yooka Laylee_ * _Zak McKracken and the Alien Mindbenders_ Si votre jeu favori n’est toujours pas inclus à la collection de ceux gérés par **./play.it**, il est temps d’en faire la demande via [l’espace dédié sur notre forge](https://forge.dotslashplay.it/play.it/games/-/issues?label_name%5B%5D=new+game). Le seul critère d’acceptation est que ledit jeu existe dans une version sans gestion des droits numériques (DRM). Et ensuite ? =========== Notre équipe est inépuisable, le boulot sur la [future version 2.13](https://forge.dotslashplay.it/play.it/scripts/-/merge_requests/927) a donc déjà commencé… Quelques objectifs importants sont au programme pour cette prochaine version : * la mise au placard définitive et complète de **./play.it 1.14**, qui est encore utilisée pour [une vingtaine de jeux](https://forge.dotslashplay.it/play.it/games/-/issues/93) ; * la mise en service de la version initiale du [nouveau site Web](https://forge.dotslashplay.it/play.it/website/-/milestones/1) ; * la rédaction de [documentation](https://forge.dotslashplay.it/play.it/doc/-/wikis/home) à destination de nos utilisateurs, mais aussi des potentiels contributeurs ; * enfin, depuis le temps qu’on attend ça, [la gestion des CD‑ROM](https://forge.dotslashplay.it/play.it/scripts/-/milestones/23) ! Si vos attentes ne font pas partie de cette liste, n’hésitez pas à le signaler dans les commentaires de cette dépêche. ;)