You are here -> Home Logram et son site » Installation de paquets depuis un fichier

Installation de paquets depuis un fichier

Le 6/12/2009 à 19h54 by steckdenis, in Logram et son site, 4 commentaries

Bonjour :) ,

L'avant-dernière fonctionnalité principale qui était sur ma TODO-List avant la 0.1 vient d'arriver. Elle sera suivie par une autre, et encore une autre (mais pas principale).

Depuis quelques minutes, Setup sait installer des paquets directement depuis un fichier .tlz, sans devoir passer par un dépôt. C'est une tâche qui semble simple, mais qui a nécessité une quantité impressionnante de refactoring dans Setup. Voici, pour ceux qui ont la tête bien accrochée, la liste de ce qui a été nécessaire :

  • Package devient une classe abstraite, héritée par DatabasePackage et FilePackage
  • Le reste est adapté pour ça
  • Des fichiers ont été renommés, beaucoup. Par exemple, on n'utilise plus «libpackage.h», mais «packagesystem.h». La classe PackageSystemPrivate a également été renommée en DatabaseReader, pour former une paire avec DatabaseWriter.
  • FilePackage n'utilise pas de processus, non non non, il utilise directement libarchive, que j'ai découvert au passage. C'est d'ailleurs une dépendance supplémentaire pour Setup.

Les screenshots

Comme toujours, voici la dose nécessaire de screenshots :

Affichage des informations d'un paquet, depuis un fichier de paquet. L'interface est la même. En fait, Setup ne sait même pas que le paquet dont il affiche les informations ne vient pas du dépôt, grâce à l'héritrage des classes permis par le C++ :D :

FileShowPkg

Affichage des fichiers d'un paquet, l'archive étant correctement lue :

FileShowFiles

Le solveur de dépendances a été adapté pour gérer les paquets venant des fichiers. Ça n'a pas été spécialement simple, mais ça marche :) :

FileAddPkg

Question posée par le paquet de test «initng», qui prouve que tout marche impeccablement bien :) :

FileInstallPkgQuestion

Et bien entendu, ça marche :) :

FileLs

La suite

À venir, dans les prochains jours (examens bientôt finis, bientôt les vacances, houra !) :

  • Gestion des deltas. Je dois encore voir comment les faire légers, mais intelligents (donc qu'on n'ait pas besoin d'avoir l'ancien paquet en cache, donc que ce ne soit pas un simple bsdiff)
  • Changement du format des paquets, pour le rendre plus simple (tout dans le fichier XML). Cela va être possible grâce à LibArchive, qui va me permettre de gérer les paquets en C++, et non-plus en script shell. Ainsi, des opérations plus complexes pourront être faites, comme une transormation DOM, des templates, etc.
  • Cette utilisation du C++ va permettre de recoder un Repoma gérant directement la base de donnée MySQL de la v4 (ou une SQLite, on pourra normalement choisir). Ainsi, avec une BDD, la gestion des dépôts sera bien plus intelligente et rapide. C'est également la porte ouverte à la génération d'ensemble de métadonnées, permettant par exemple d'avoir la liste de tous les fichiers de tous les paquets, leurs notes, leurs catégories, la gestion des commentaires, etc. Tout cela avec intégration dans la v4, bien entendu (et donc ça amènera un début de libv4integration, permettant à un prog C++ de s'interfacer avec la v4, que du bon !)
  • GUI, basée sur Shaman, le gestionnaire de paquets de Chakra. La spécificité est que Shaman2, qui sera utilisé, est conçu pour être indépendant de la distrib, mais parfaitement intégré à KDE ! Il repose sur des backends et des plugins, et Logram pourra donc développer un backend libpackage, et quelques plugins pour les foncionnalités qui manquent. D'ailleurs, si un Chakraiste devait me lire, et qu'il sait facilement s'exprimer en anglais, qu'il me contacte par MP, j'aurais un petit service à lui demander :-° .

La partie «BDD et C++» est la plus grosse. Normalement, la gestion de Shaman ne devrait pas être trop complexe. Il en résultera un Setup plus puissant, plus stable, plus rapide, et plus riche en fonctionnalités. D'ailleurs, voici quelques idées sur le long terme :

  • Intégration de Setup dans KDevelop. Un des buts de Logram est de présenter au monde un Logiciel Libre unifée et accueillant. Pour cela, il y aura entre autre des développements sur KDevelop pour le mettre au niveau de Visual Studio. Qui n'a pas rêvé de créer ses paquets par simple glisser/déposer ? (pour info, VS.NET le permet, ah que de bons souvenirs :-° )
  • Assistant de compilation. On prend un .tar.gz contenant les sources d'un programme, on clique dessus dans Konqueror, on appuie sur Suivant»Suivant»etc, et c'est prêt. Ainsi, même si un paquet ne se trouve pas dans la distrib, les utilisateurs novices pourront le compiler depuis les sources.

Commentaries

Author Message
code lyoko fan
# le 7/12/2009 à 3h11
Dev de Logram DE, quand il peut...
Website
Group : Codeur

Du bon travail, comme d'hab! (on commence à s'en lasser :p )

Et sinon, comment accèder à Setup depuis l'UI? Comment avance t-elle?

linkdd
# le 7/12/2009 à 12h43
Logram, c'est la liberté, la liberté d'enlever KDE
Avatar
Group : Packageur

Je n'aurais qu'une question.

Les dépendances du paquet local, seront-elles téléchargés ou doivent-elles être installé également manuellement ?

Si jamais nous avons le paquet local A qui dépend de B, ainsi que le paquet local B, si l'on tente d'installer A, installera-t-il B situé dans le dépot ou le B dans le répertoire du paquet A ?

Ce serait plutot simple, il suffit de demander au solveur (si l'on est entrain d'installer un paquet local) de vérifier si un paquet local B est disponible si oui l'ajouter aux dépendances.

Dans la base de données, le paquet local A est installé, il faudrait un champ pour préciser qu'il est local et non issue du dépot (un ~ devant le nom ?), comment marche la suppression et la mise à jour de ce paquet dans ce cas ?

Cordialement, David Delassus

Il vaut mieux se taire et passer pour un con que l'ouvrir et ne laisser aucun doute

steckdenis
# le 7/12/2009 à 13h07
Ça marche !
Avatar
Group : Administrateur

code lyoko fan: La GUI n'existe pas encore (enfin Shaman oui, mais encore rien en rapport avec Setup). C'est dit dans la news, toit de même.

Linkdd: les dépendances sont téléchargées depuis le dépot, l'architecture de Setup ne permet pas autre-chose. Si tu permets d'avoir des dépendances depuis le dossier courant, déjà c'est une énorme faille de sécurité, mais en plus ça obligerait Setup à faire des vérifications pour chaque paquet. Installer 3 paquets, 18 branches, 50 paquets dans chaque, et t'as 900 appels à QFile::exist, donc 900 appels à la fonction stat(), qui nécessite un accès disque. Ce serait tuer les performances :-° (surtout que ce serait même en plus un QDir::List, car on ne sait pas quelle version du paquet serait dans le dossier courant).

KDE le fait depuis 10 ans.

linkdd
# le 7/12/2009 à 18h15
Logram, c'est la liberté, la liberté d'enlever KDE
Avatar
Group : Packageur

steckdenis: nan tu as pas compris ce que j'ai voulu dire. Le paquet initng depend de libinitng, tu regarde dans dans la bdd etc... tu récupère le nom de l'archive libinitng-...-x86_64.tlz, tu regarde si elle existe dans le répertoire courrant. Cependant je n'avais effectivement pas pensé dans le cas ou le paquet possède nombre de dépendance, effectivement ca tue ^^

La solution adopté par apt est de ne pas installer le paquet local si les dépendances ne sont pas satisfaites. Pas la meilleure à mon gout.

L'utilité d'une telle fonctionnalité et de permettre à l'utilisateur de ne pas avoir besoin d'internet, seulement si l'on télécharge les dépendances sur internet, ca enlève de l'interêt.

Il vaut mieux se taire et passer pour un con que l'ouvrir et ne laisser aucun doute