belle avancée
(je pensais que tu allais faire une news sur KDE 4.4 avant x) )
pour les delta packages, n'est-il pas mieux d'en faire un par version logiciel ? au lieu de le faire lorsque l'utilisateur le demande (comme je l'ai compris
).
Bonjour
,
Aujourd'hui, j'ai une bonne nouvelle. Non, Setup beta n'est pas encore sorti, car deux fonctionnalités manquent encore, mais il y a d'autres choses intéressantes.
Tout d'abord, depuis le passage à Git, Setup a bénéficié de très grosses avancées. J'ai également eu le temps de me familiariser avec cet outil, et de créer plein de branches en local
(autre trucs : git clone sur une clef USB pour rapidos sauvegarder tout son travail avec l'historique, Git <3 )
Dans le respect total de la GPL et dérivées, quand on fournit un binaire, il faut absolument fournir les sources. Pour fournir cette possibilité, mais également pour permettre aux utilisateurs de recompiler leurs paquets, Setup gère maintenant les paquets sources.
Un paquet source est une petite archive contenant le metadata.xml ainsi que les différents fichiers et patches nécessaires à la construction d'un paquet. Par contre, les sources n'y sont pas, le fichier metadata.xml contient simplement la méthode pour les télécharger. Ainsi, on reste à jour avec l'upstream, qui peut d'ailleurs être un dépôt constamment en mouvement, comme un dépôt Git ou Subversion.
Depuis fin décembre, début janvier (donc juste après l'alpha1), Setup sait récupérer automatiquement le paquet source d'un paquet binaire, et le placer dans le dossier courant. Il suffit alors de le désempaqueter avec tar, puis de lancer «setup binaries metadata.xml» pour obtenir un paquet recompilé. En exportant correctement différentes variables d'environnement et en modifiant le metadata.xml, il est possible de tuner le paquet pour son processeur, d'y ajouter des patches persos, de changer les options de compilation, la source du paquet, de lui supprimer des dépendances, etc.

Une autre fonctionnalité, présente dans quelques autres gestionnaires de paquets, mais plus agréable dans Setup, est le tag des paquets. Ces tags peuvent venir de l'empaqueteur (intégration à KDE, si le paquet a une licence douteuse à approuver, s'il nécessite un redémarrage), ou de l'utilisateur (ne pas installer, ne pas mettre à jour, ne pas supprimer, je le veux).
Voici une description plus poussée de ces tags :
.Tout ceci permet un contrôle fin des paquets. C'est une belle grosse fonctionnalité, contribuant au confort d'utilisation de Setup
.


Petite amélioration de RepositoryManager et de la v4. Maintenant, quand un paquet est importé dans une distribution, son changelog est enregistré dans la base de donnée. Ainsi, il devient possible de le consulter en ligne, même sans devoir utiliser Logram. De plus, cet affichage est traduit dans la langue courante du site. Pour y accéder, allez à la page du paquet, puis cliquez sur «Modifications : Voir» dans la liste des attributs.

Logram est une distribution rolling release, ce qui veut dire qu'elle est constamment mise à jour. Cela implique deux choses. Tout d'abord, il y a beaucoup de mouvement dans les paquets, plein de mises à jour, de suppressions, d'installations, en fonction des dépendances mises à jour. Ensuite, on garde longtemps sa distribution. Les distributions fonctionnant avec un système de version encouragent les utilisateurs à les réinstaller tous les 6 mois ou tous les ans. Une distribution rolling release s'installe une fois et se garde des années.
Cependant, pour que cette distribution continue de fonctionner correctement même après des années, il faut qu'elle soit propre. Le premier pas en ce sens est la suppression automatique des paquets qui ne sont plus nécessaires.
Setup garde, pour chaque paquet, un compteur d'utilisation. Par exemple, si A et B dépendent de C et sont tout deux installés, C aura son compteur à 2. Si A et B sont supprimés, C attrape un score de zéro. Ensuite, si C est wanted, on ne fait rien. Sinon, on indique à l'utilisateur qu'il n'est plus nécessaire. «Setup autoremove» se chargera de présenter une liste comme celle de la mise à jour, où l'utilisateur peut choisir quels paquets garder, et quels paquets supprimer.

Avant la sortie de Setup alpha2, puis de la beta1, il faut encore deux fonctionnalités, qui seront très utiles.
Comme précisé dans mon journal Quelques jours/semaines de silence, je travaille actuellement à l'élaboration d'un algorithme de différences binaires parfait, c'est à dire calculant les plus petites différences. Pour cela, les algorithmes les plus recherchés sont utilisés, comme ceux entrant en jeu dans la bio-informatique, l'optimisation de compilateurs, les calculs de probabilités, le raisonnement spatial, etc.
Une branche Git locale contient les quelques centaines de lignes implémentant un diff basique, qui fonctionne, mais souffre d'un gros défaut : la mémoire. Prenons un exemple, la différence entre l'exécutable initng en version Git de septembre et la version Git de janvier. Cet exécutable fait 87 Kio. BSDiff me sort un patch de 8 Kio. Pas mal, mais comme je l'avais une fois dit, bsdiff compresse ce patch en BZip2, ce qui m'empêche de le recompresser en XZ après. 6 patches de 10 Kio feront un paquet delta de 60 Kio, peu importe la manière dont je le comprime. Il est rejeté pour cela.
Vient ensuite Setup Diff. En mode «consommation faible de mémoire», il me sort un patch de près de 200Kio, 40 Kio compressé en XZ. C'est déjà pas mal, surtout que 6 patches de 100 Kio feront un paquet delta de 600 Kio, pouvant par exemple être ramené à 40 ou 50 Kio par compression
. Maintenant, en mode «bonne compression», il me sort l'incroyable patche de 40 Kio, mais après avoir consommé 1,5 Gio de RAM
! Bon, ok, ça compresse bien, mais hors de question de faire swapper un serveur pour un bête fichier de 80 Kio, non non non (qu'est-ce qui arriverait si je devais réempaqueter une version différente d'une image de 2Mio, devrais-je consommer 1000 To de RAM ?)
Il faut donc que je trouve un moyen de réduire ceci, mais là où la RAM ne gène pas, Setup surpasse largement bsdiff. Les différences entre un fichier XML de 8Kio prennent 45 octets avec Setup, compressé en LZMA. Bsdiff me demande quant à lui 194 octets
.
Une fois cet algo fait, on pourra profiter de jolis paquets delta permettant une mise à jour rapide et sûre.
Un nouveau type de dépôts, prévu depuis longtemps, doit aussi faire son arrivée. Il faudra permettre aux utilisateurs d'installer des paquets depuis un CD, pour ainsi lui permettre de télécharger des Add-On CD, puis d'installer des paquets sur des machines non-reliées à Internet.
Néanmoins, ceci nécessite quelques modifications dans Setup :
La difficulté est de monter ce CD. Hors de question malheureusement d'utiliser Solid ou tout autre machin lié à KDE. Il faut utiliser du Qt pur, et d'autres libs. Si quelqu'un me trouve comment savoir si un CD est inséré, le monter ou l'éjecter grâce à l'API DBus de udev, alors je n'aurai plus trop de mal. En effet, Qt fournit QtDBus, donc c'est facile
. Utiliser mount ne suffit pas, car il faut savoir si le CD a été monté par l'autorun de KDE, informer éventuellement KDE que le CD est monté (udev le fait), etc.
Et voici la bonne nouvelle : j'ai décidé de tout doucement commencer à créer les paquets, dans les prochains jours. Au début, ça ira doucement, car il me faudra modifier quelque peu Setup (lui ajouter des scripts automatiques, changer de petits machins, etc). Ainsi, j'espère que pour la semaine prochaine (vacances ce carnaval, mais si c'est comme l'année dernière, les français seront en vacances avant et après mois, aucun pendant
) on aura une infrastructure permettant de facilement créer des paquets, et les uploader sur le serveur. Vérifiez donc le petit cadre «Derniers paquets» de la page d'accueil, qui pourrait bientôt contenir des trucs du genre «bash», «sed», «gcc», et autres machins pas trop passionnants.
Viendra ensuite la compilation du noyau (utilisant BFS
), la création d'un initrd, la compilation de Qt, de KDE, etc. Il faudra ensuite que je me familiarise avec Casper et autres, pour créer un LiveCD testable, mais non-installable. Il faudra ensuite que je publie une image disque compressée à recopier fichiers pas fichiers, pour qu'on puisse développer pour Logram par Logram, y compris un installateur.
D'ailleurs, il sera temps de penser à une infrastructure d'installation graphique des paquets, normalement pas basée sur Shaman (il est trop lent et trop abstrait, il refait ce que liblpackages fait déjà). Il faudra faire ça bien, par exemple un simple shell graphique utilisant QtScript pour construire son interface. Ainsi, il sera simple de créer l'interface de gestion des paquets simple, avancée, niveau add-ons, d'installation, etc. N'importe qui pourra personnaliser son interface très facilement
.
Patience, patience
.
| Author | Message |
|---|---|
danman
|
|
|
Heureux d'être là
Group : Member |
belle avancée pour les delta packages, n'est-il pas mieux d'en faire un par version logiciel ? au lieu de le faire lorsque l'utilisateur le demande (comme je l'ai compris |
steckdenis
|
|
Ça marche !
|
T'as pas compris. Les delta packages sont crée quand on importe dans un dépôt la mise à jour d'un logiciel. Setup ne télécharge ensuite que le delta entre les deux versions. Néanmoins, l'import se fait sur le serveur, donc il ne faut pas que le serveur swappe simplement pour ça KDE le fait depuis 10 ans. |
danman
|
|
|
Heureux d'être là
Group : Member |
si j'ai bien compris : -Mme Michou veut mettre a jour magellan -Elle ouvre une console; setup upgrade magellan (par exemple, je ne connais pas encore setup) -Le serveur voit qu'une mise a jour est disponible -Il compare les deux versions -Il envoit un diff des deux versions dans ce cas imagine : -M Danman, qui ne fait pas attention a son system veut le mettre a jour apres une installation -Il ouvre une console; setup upgrade * -le serveur voit 2xx mises a jour disponibles -M Danman, en meme temps, fait la mise a jour sur ses 10 autres ordinateurs (j'en ai que deux mais c'est un exemple) -Le serveur se retrouve avec 2000 diff a faire sauf si je n'ai toujours pas compris x) 2eme version : -M linkdd, en bon mainteneur, ajoute la nouvelle version de son navigateur web Cream -Le serveur l'importe, compare a l'autre version, fait un diff, et voila je penche plutot pour la version 2 :-° mais, dans le dernier cas, pourquoi ne pas faire un diff qui consomme le moins possible et crée un "gros" fichier, puis l'optimiser ? |
steckdenis
|
|
Ça marche !
|
C'est bien évidemment la 2eme solution utilisée ! Non mais, surtout pas surcharger un mirroir. Et dans ce cas, il faut le diff le plus léger possible, car l'utilisateur le DL vite, donc se met facilement à jour (donc son Logram marche mieux, donc il en fait plus la pub), et ça consomme moins de bande passante. Comment as-tu pu imaginer utiliser une solution comme la première KDE le fait depuis 10 ans. |
jokester
|
|
Group : Member |
J'ai pu lire dans tes journeaux sur linuxfr que tu avais fait pas mal de tests avec llvm et clang... Qu'en sera t-il pour leur utilisation dans un dépôt Logram ? L'architecture pourrait être la suivante : sources de init-ng -> compilé avec llvm sur le Logram server farm -> diff d'une version à l'autre -> compression tar.xz -> download par setup de la diff -> extraction du xz -> compilation dédiée à l'architecture avec clang Bonne fin de semaine, Jk |
steckdenis
|
|
Ça marche !
|
C'est effectivement un truc de la sorte. En fait, pour un paquet LLVM, il y aura simplement un tag "llvm" qui dira à Setup que tout fichier installé et se terminant par .bc devra être transformé en un beau binaire optimisé pour l'architecture. Il n'y a donc pas trop de différences sachant que le diff prend des fichiers binaires, de quelque natures qu'ils soient KDE le fait depuis 10 ans. |
danman
|
|
|
Heureux d'être là
Group : Member |
c'est vrai, comment j'ai pu dans ce cas autant faire un depot expres pour les deltas packages (sachant que le logiciel en lui meme peut aussi etre mis a jour dans les autres depots ?) |
steckdenis
|
|
Ça marche !
|
danman, ça ne sert à rien, puisque justement les deltas doivent être à portée de main. Le but est de faciliter la mise à jour, pour que l'utilisateur aime PS: Phase 1 du LFS ok, je suis dans le chroot et je compile la suite, jusqu'à Qt pour avoir Setup, puis je recompile tout pour Setup KDE le fait depuis 10 ans. |
jokester
|
|
Group : Member |
Du coup, on pourra permettre à l'utilisateur de choisir une branche ? 64 bits, 32 bits... Si celui-ci a une architecture particulière (arm par exemple) on lui proposera d'office l'utilisation des paquets tagués llvm ? Dans le cas ou l'utilisateur utilise la branche 64 bits, pourra-il affiner ses préférences, pour qu'un paquet spécifique bénéficie de la branche llvm (pour des raisons d'optimisation par exemple) ? Sinon je viens de lire un article qui pourrait-être intéressant pour la distibution : Ksplice Uptrack Qu'en penses-tu ? |
steckdenis
|
|
Ça marche !
|
Ksplice Uptrack semble payant Sinon, les paquets LLVM seront dans un dépôt spécial. Il existeront aussi pour i686, x86_64, etc. La raison est simple : les programmes utilisent de l'inline-assembly, le sizeof(void *) n'a pas la même taille, et des optimisations sont faites à la compilation en fonction du proc (exemple : Qt qui utilise MMX, SSE et SSE2 si détectés). Pour tout cela, le bytecode LLVM doit servir à avoir un machin bien optimisé pour le processeur de l'utilisateur, ainsi que pour sa famille de processeur. Ainsi, pas de mauvaises surprises, et des performances de dingue KDE le fait depuis 10 ans. |
linkdd
|
|
Logram, c'est la liberté, la liberté d'enlever KDE
|
Salut, M. linkdd est souvent absent en ce moment (pourtant c'est les vacances Oo). Mais j'attend impatiemment de pouvoir créer des paquets simplement que je puisse m'activer un peu la dessus. Bon je vois que steckdenis a commencé la LFS que je voulais faire :-° Bonne nouvelle pour Setup. PS: Tu pourrais venir un peu plus souvent sur IRC (le monde geekesque t'attend) ;) Il vaut mieux se taire et passer pour un con que l'ouvrir et ne laisser aucun doute |
jokester
|
|
Group : Member |
|