1

Hop, un premier projet perso à présenter : Moneta, un émulateur de miroirs applicatifs.

Le but est d'avoir sur un même site web différents types de dépôts (pour l'instant : Debian/Ubuntu, Yum, Python et Maven ) pour y publier ses propres paquets, afin de pouvoir installer ses propres paquets de la même façon que les paquets classiques, sans avoir à les mélanger avec des miroirs des dépôts officiels. A priori, c'est plutôt ciblé pour un intranet que pour internet, si possible avec authentification Kerberos.
Il va donc reproduire toutes les URL nécessaires au fonctionnement du miroir choisi.

On peut créer un nouveau dépôt en deux clics, en choisissant les groupes pouvant uploader les paquets. On peut donc facilement avoir un dépôt par projet, avec des droits spécifiques. On pourrait également mettre des droits en lecture, mais quasiment aucun système ne le permet sad 
Uploader un paquet se fait en une requête cURL, sachant qu'on peut ajouter ultérieurement une signature (GPG ou OpenSSL).
Accessoirement, l'utilisation des miroirs est systématiquement expliquée sur la page d'accueil des miroirs émulés.
index.png
apt.png

Pour le code, c'est du Python + Django, je ne me suis pas posé trop de questions ^^

doc incomplète
Github

Pour l'instant, ça fait uniquement Python, Maven, Aptitude et Yum, je pense rajouter deux-trois trucs plus tard (Ruby, notamment).
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

2

(enfin, je suis preneur de vos solutions pour déployer et installer vos projets ^^)
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

3

L'idée est très bonne smile C'est amusant ça me semble en opposition complète avec la mode actuelle qui est d'écrire son propre package manager pour chaque nouvelle sous-techno un minimum utilisée (voire en écrire plus d'un, tant qu'à faire).

Tu as ré-implémenté certains (tous?) des protocoles utilisés, ou bien tu t'es basé sur les implémentations existantes à chaque fois ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4

Merci ^^
En effet, je trouve ça assez pénible d'avoir autant de miroirs que de technos, et il n'est pas évident d'avoir la même méthode de déploiement pour ses propres applis que pour les paquets classiques quand on ne veut pas les mettre sur les miroirs officiels.

J'ai tout réimplémenté, mais au final c'est assez peu de boulot. En gros, à chaque fois il y a trois trucs à faire :
* ouvrir le paquet pour extirper ses métadonnées (sauf que pour les .jar, ce n'est pas franchement normalisé en pratique, il faut donc les passer en paramètres à l'upload),
* (yum et apt) générer les fichiers d'index : c'est essentiellement remplir des template avec les métadonnées récupérées donc pas grand-chose à faire,
* répondre aux différentes URL demandées : c'est le plus facile, soit il faut envoyer le fichier demandé, soit un des fichiers d'index, soit un template de quelques lignes.

En pratique, le plus pénible est soit d'extirper les métadonnées (le .deb est en fait un .ar contenant des .tar.gz, et j'ai dû implémenter le format .ar en python), soit de comprendre le format des miroirs (qui est très rarement documenté).

J'ai pensé faire Ruby, qui a un format de miroir tout bête, mais dont le fichier d'index est un objet Ruby sérialisé (donc pas du tout conçu pour être utilisé avec un autre langage). Ils auraient pu prendre du JSON compressé…

Et globalement, aucun système de packaging (à ma connaissance) ne permet d'authentification correcte des machines. APT est le mieux à ce niveau, il permet quand même d'utiliser des certificats SSL. Sinon, Maven permet le login / mdp (chouette…), et c'est tout sad
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

5

OK, donc c'est facilement extensible à d'autres technos... bon à savoir, je trouve le package manager officiel de .NET (NuGet) complètement pourri donc peut-être qu'un jour si j'ai le courage... smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

Qu'a-t-il de pourri ? Je n'ai jamais fait de .Net, et encore moins de NuGet.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

7

Il n'a pas été conçu initialement pour gérer les dépendances sur plus d'un niveau. Du coup il est souvent incapable de s'en sortir quand l'un des tes paquets dépend d'un autre, ou bien que deux paquets ont une dépendance commune mais pas sur la même version. Comme ce défaut remonte assez tôt dans la conception, ils ont pu résoudre les bugs "faciles" (par exemple pendant un moment il croyait détecter des dépendances circulaires et refusait de continuer), mais il en reste qui ont assez peu de chances d'être corrigés proprement un jour. Au final c'est un gestionnaire de paquets que je trouve de très mauvaise qualité, et malheureusement c'est celui qui a été choisi pour être intégré par défaut à Visual Studio (peut-être parce que c'était le seul).
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

8

Zeph (./7) :
Il n'a pas été conçu initialement pour gérer les dépendances sur plus d'un niveau.
hum
C'est quand même assez dingue d'avoir fait un choix de conception pareil pour un gestionnaire de packages, surtout à notre époque.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

9

C'est quand même franchement bizarre d'avoir pris un truc comme ça hum

Surtout quand il y a des paquets et des gestionnaires de paquets relativement indépendants de la techno (rpm + dnf est pas mal, par exemple)
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

10

Deux liens trouvés rapidement, j'imagine qu'il doit y avoir quelques autres tonnes d'articles qui expliquent pourquoi NuGet est si pourri : http://arstechnica.com/civis/viewtopic.php?f=20&t=1229439 ; http://www.blogcoward.com/archive/2012/12/23/More-fun-with-Nuget-or-NuGet-Still-Sucks.aspx
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

11

12

Kick : Kevin Kofler kické(e) par Zeph
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

13

mais du coup, si je comprends bien, c'est plutôt le client nuget qui est foireux, non ?
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

14

C'est surtout ça oui, je ne sais pas si les specs ont été assez épargnées de ces défauts pour pouvoir faire un client qui marche mieux, mais c'est probable.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

15

Ça voudrait dire qu'il y a des specs, ça serait déjà un bon signe grin
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

16

J'ai regardé un peu plus en détail le packaging Ruby.

Je trouve quand même vraiment dommage que le serveur et les packages soient totalement liés au langage :
* l'index du miroir est du Ruby sérialisé (avec des classes spécifiques Ruby),
* le fichier décrivant chaque package est du Ruby également, donc pénible à parser.

grrrrr
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

17

On peut comprendre qu'ils n'aient pas pensé que ça pouvait être gênant, mais c'est quand même un choix dommage. C'est difficile à déserialiser, des classes Ruby ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

18

Zeph (./17) :
On peut comprendre qu'ils n'aient pas pensé que ça pouvait être gênant, mais c'est quand même un choix dommage. C'est difficile à déserialiser, des classes Ruby ?

Le format de la sérialisation n'est pas spécialement compliqué (je viens de faire une lib Python pour le faire, même s'il n'est pas documenté — tout comme le code source, d'ailleurs), mais il faut que les classes correspondantes existent en Python. Autant c'est facile pour des classes comme int/float/array/hash, autant c'est moins évident quand c'est du « Gem::Version » :/ (et c'est d'autant plus inutile que cette classe ne contient que le numéro de version).
Le fichier d'index aurait très bien pu être du JSON (c'est une liste de triplets de string), ça n'aurait rien changé pour eux.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

19

J'ai finalement fait le miroir Ruby, mais il y a un appel à Ruby directement pour générer un fichier (comme c'est à l'upload d'un gem, ce n'est pas trop grave).

J'en ai profité pour faire miroir Jetbrains pour les plugins IntelliJ ou PyCharm, on peut donc maintenant faire des miroirs Debian/Ubuntu, Yum, Python, Ruby, Jebtains et Maven. Prochaine étape : miroir Shinken pour les packs de supervision.

Pour NuGet, ça n'a pas l'air compliqué à faire, je vais peut-être le rajouter.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant