Votre cas d'usage n'est pas le cadre de cet article. :-)
Et pour être honnête, ce cas d'usage n'est pas mon coeur de métier.
Concernant Nix, je ne sais pas.
Concernant Guix, les fonctionnalités pour ce genre de cas d'usage ne sont pas encore totalement mature pour être utilisé en production. Pour faire simple la réponse est guix deploy et voici quelques pointeurs :
Au niveau sysadmin, pour la gestion des paquets, un intérêt est le rollback et les profils (ce qui est fait par des solutions comme modulefiles ou virtualenv).
(en passant il n'y a pas besoin d'être superutilisateurs pour installer des paquets et il n'y a pas de problème)
Ensuite, si on utilise Guix System (ou Nix OS), le rollback s'applique aussi aux services.
Il y a les fichiers manifest qui permettent de déclarer ses paquets en spécifiant un commit Guix particulier (un channel). Donc sur n'importe quelle machine, il est trivial d'instancier exactement la même configuration.
DevOps et SRE n'est pas mon coeur de métier donc je ne sais pas.
Pour vous donner un exemple concret, il faudrait que vous décriviez un problème concret et votre actuelle solution concrète.
Oui c'est un mythe les histoires de parenthèses et de Lisp. Comme avec le C par exemple, il faut juste faire un effort d'indentation et tout se passe bien.
Et si on est totalement honnête, la seule chose vraiment pénible est de converser les parenthèses balancées. Mais cela se résout avec tout bon éditeur de texte.
Notez que les définitions des paquets paraissent plus difficiles qu'avec Nix parce que j'ai fait un peu de zèle. ;-)
Si c'est pour aller un peu plus quand dans un commentaire ici, je voudrais nettoyer un peu les choses alors. :-)
Disons avoir un guix.scm propre pour construire master (quelque soit le commit).
Savoir pourquoi il ya un Seg Fault avec guix environment.
Regarder de plus près pourquoi cpprestsdk ne compile pas avec Boost 1.70. Parce que normalement, ca devrait ! Par exemple, par défaut il ya -Werror et … il y a beaucoup de warnings. :-) Donc je vais re-essayer un peu ce qui évitera de ressortir une vieille version de Boost et simplifiera le brol. Chose que je ne voulais pas faire initialement parce que bon cpprestsdk c'est loin de mes affaires. Mais maintenant au point où j'en suis… :-)
Faire l'équivalent de la dernière partie avec le conteneur, toussa.
Bon si je ne suis pas sorti du bois d'ici la milieu de semaine prochaine, c'est que j'aurais eu d'autres préoccupations plus urgentes. ;-)
Dans ce cas, reprenez ce que vous voudrez. :-)
Idem que dans l'autre section, on suppose que l'on se trouve dans le dossier contenant le fichier guix.scm sinon il faut indiquer ledit chemin ou utiliser un channel.
Guix
guix build --load-path=. mymathserver
guix install --load-path . mymathserver
Cependant, je préféres installer dans un profil séparer du profil courant. Par exemple,
Il n'y a pas vraiment de default.nix. Il y a 2 solutions pour faire la même chose :
soit un channel (qui peut être local ou à distance)
soit utiliser --load-path pour ajouter (prepend) un dossier dans la recherche des paquets.
Disons que l'on a cloné le dépôt mymathserver et que l'on se trouve dans le dossier. Et dans ce dossier, il y a aussi un fichier, disons guix.scm qui contient les définitions (voir autres sections).
Guix
guix environment --load-path=. mymathserver
mkdir mybuild
cd mybuild
cmake ..
make
Mais ./mymathserver retourne Segmentation fault. A investiguer…
(define-module(linuxfr)#:use-module(guixdownload)#:use-module(guixgit-download)#:use-module(guixpackages)#:use-module(guixbuild-systemcmake)#:use-module(gnupackagestls)#:use-module(gnupackagescompression))(define-publiccpprestsdk(package(name"cpprestsdk")(version"v2.10.14")(source(origin(methodgit-fetch)(uri(git-reference(url"https://github.com/microsoft/cpprestsdk")(commitversion)))(file-name(git-file-namenameversion))(sha256(base32"0z1yblqszs7ig79l6lky02jmrs8zmpi7pnzns237p0w59pipzrvs"))))(build-systemcmake-build-system)(native-inputs`(("websocketpp",my-websocketpp)("boost",boost-old)("openssl",openssl)("zlib",zlib)))(arguments'(#:tests?#f;; Warnings not always addressed by upstream, see:;; https://github.com/microsoft/cpprestsdk/issues/724#:configure-flags'("-DWERROR=OFF")))(synopsis"C++ REST SDK by Microsoft")(description"The C++ REST SDK is a Microsoft project for cloud-basedclient-server communication in native code using a modern asynchronous C++ APIdesign. This project aims to help C++ developers connect to and interact withservices.")(home-page"https://github.com/microsoft/cpprestsdk")(license#f)))
Le projet jouet mymathserver dépend de cpprestsdk qui est le point sensible à empaqueter car le code n'est pas très robuste. Pour s'en convaincre, il suffit d'aller faire un tour sur les issues GitHub.
Donc, il faut un peu tricoter avec la version de Boost.
Du côté de Guix, le paquet websocketpp est dans disponible après la bonne version de Boost. Donc on pourrait s'en sortir avec guix time-machine. Mais beaucoup de substituts ne sont plus disponibles donc il y aurait beaucoup de compilations à faire—ce qui n'est pas un problème en soi mais pas le but ici.
Bref! en plus du projet jouet mymathserver et de cpprestsdk comme dans l'article initial, j'ai "empaqueté" websocketpp et une vieille version de boost. Empaqueter est un bien grand mot puisque ce sont les vieux paquets dépoussiérés à coup de git show.
Finalement, on compare des pommes et des oranges puisque le tour d'horizon a été fait avec ce qui était facile pour Nix (2 paquets personnalisés) et donc dans une autre configuration, cela aurait été Nix qui aurait dû fournir plus de paquets personnalisés. Donc il faut s'arrêter après les 2 mêmes paquets, les 2 autres derniers sont juste là pour éviter de recompiler le monde entier.
Ceci dit, avec ces définitions, on est capable de reproduire la première partie.
Le fichier disons /tmp/test/linuxfr.scm contient les paquets personnalisés ci-dessous.
Pour tout construire, il faut faire:
guix build -L /tmp/test mymathserver
En terme de reproductibilité, si vous utilisez la time-machine :
vous devriez compiler au bit près la même chose que moi. Donc normalement, vous devriez avoir: /gnu/store/hqhsc61v4xpj1ld0dwvf8gabxr3x0dwc-mymathserver-0.1 comme résultat. Sinon, il ya une source de non-déterminisme.
Je ferai un autre commentaire pour donner l'équivalent des commandes. :-)
(define-module(linuxfr)#:use-module(guixdownload)#:use-module(guixgit-download)#:use-module(guixpackages)#:use-module(guixbuild-systemcmake);; boost#:use-module(guixbuild-systemgnu)#:use-module(gnupackages)#:use-module(gnupackagesperl)#:use-module(gnupackagespython)#:use-module(gnupackagesshells)#:use-module(gnupackagesicu4c)#:use-module(gnupackagestls)#:use-module(gnupackagescompression)#:use-module(gnupackagescheck))(define-publicmymathserver(package(name"mymathserver")(version"0.1")(source(origin(methodgit-fetch)(uri(git-reference(url"https://gitlab.com/nokomprendo/mymathserver")(commit(string-append "v"version))))(file-name(git-file-namenameversion))(sha256(base32"0vvq2z2pjdr7dm6s4d6a3ikp7lw391lk4mdlqd18rgmr2jqfhl0b"))))(build-systemcmake-build-system)(arguments'(#:tests?#f))(native-inputs`(("boost",boost-old)("cpprestsdk",cpprestsdk)("gtest",googletest)("openssl",openssl)))(synopsis"Toy example")(description"Nothing relevant")(home-page"https://gitlab.com/nokomprendo/mymathserver")(license#f)))(define-publiccpprestsdk(package(name"cpprestsdk")(version"v2.10.14")(source(origin(methodgit-fetch)(uri(git-reference(url"https://github.com/microsoft/cpprestsdk")(commitversion)))(file-name(git-file-namenameversion))(sha256(base32"0z1yblqszs7ig79l6lky02jmrs8zmpi7pnzns237p0w59pipzrvs"))))(build-systemcmake-build-system)(native-inputs`(("websocketpp",my-websocketpp)("boost",boost-old)("openssl",openssl)("zlib",zlib)))(arguments'(#:tests?#f;; Warnings not always addressed by upstream, see:;; https://github.com/microsoft/cpprestsdk/issues/724#:configure-flags'("-DWERROR=OFF")))(synopsis"C++ REST SDK by Microsoft")(description"The C++ REST SDK is a Microsoft project for cloud-basedclient-server communication in native code using a modern asynchronous C++ APIdesign. This project aims to help C++ developers connect to and interact withservices.")(home-page"https://github.com/microsoft/cpprestsdk")(license#f)));;;;;; End here. ;;; Below hack to build cpprestsdk with the correct versions;;; without rebuilding the world.;;;(define-publicmy-websocketpp(package(name"websocketpp")(version"0.8.1")(source(origin(methodgit-fetch)(uri(git-reference(url"https://github.com/zaphoyd/websocketpp.git")(commitversion)))(file-name(git-file-namenameversion))(sha256(base32"12ffczcrryh74c1xssww35ic6yiy2l2xgdd30lshiq9wnzl2brgy"))))(build-systemcmake-build-system)(native-inputs`(("boost",boost-old)("openssl",openssl)))(arguments'(#:configure-flags'("-DBUILD_TESTS=ON")#:phases(modify-phases%standard-phases(add-after'install'remove-tests(lambda*(#:keyoutputs#:allow-other-keys)(let* ((install-dir(assoc-refoutputs"out"))(bin-dir(string-append install-dir"/bin")))(delete-file-recursivelybin-dir)#t))))))(home-page"https://www.zaphoyd.com/websocketpp/")(synopsis"C++ library implementing the WebSocket protocol")(description"WebSocket++ is a C++ library that can be used to implementWebSocket functionality. The goals of the project are to provide a WebSocketimplementation that is simple, portable, flexible, lightweight, low level, andhigh performance.")(license#f)));license:bsd-3(define-publicboost-old(package(name"boost")(version"1.67.0")(source(origin(methodurl-fetch)(uri(string-append"mirror://sourceforge/boost/boost/"version"/boost_"(string-map(lambda (x)(if (eq? x#\.)#\_x))version)".tar.bz2"))(sha256(base32"1fmdlmkzsrd46wwk834jsi2ypxj68w2by0rfcg2pzrafk5rck116"))(patches'("/tmp/test/patches/boost-fix-icu-build.patch"))))(build-systemgnu-build-system)(inputs`(("icu4c",icu4c)("zlib",zlib)))(native-inputs`(("perl",perl)("python",python-2)("tcsh",tcsh)))(arguments`(#:tests?#f#:make-flags(list "threading=multi""link=shared";; Set the RUNPATH to $libdir so that the libs find each other.(string-append "linkflags=-Wl,-rpath="(assoc-ref%outputs"out")"/lib");; Boost's 'context' library is not yet supported on mips64, so;; we disable it. The 'coroutine' library depends on 'context',;; so we disable that too.,@(if (string-prefix?"mips64"(or (%current-target-system)(%current-system)))'("--without-context""--without-coroutine""--without-coroutine2")'()))#:phases(modify-phases%standard-phases(delete'bootstrap)(replace'configure(lambda*(#:keyinputsoutputs#:allow-other-keys)(let ((icu(assoc-refinputs"icu4c"))(out(assoc-refoutputs"out")))(substitute*'("libs/config/configure""libs/spirit/classic/phoenix/test/runtest.sh""tools/build/doc/bjam.qbk""tools/build/src/engine/execunix.c""tools/build/src/engine/Jambase""tools/build/src/engine/jambase.c")(("/bin/sh")(which"sh")))(setenv"SHELL"(which"sh"))(setenv"CONFIG_SHELL"(which"sh"))(invoke"./bootstrap.sh"(string-append "--prefix="out);; Auto-detection looks for ICU only in traditional;; install locations.(string-append "--with-icu="icu)"--with-toolset=gcc"))))(replace'build(lambda*(#:keymake-flags#:allow-other-keys)(apply invoke"./b2"(format#f"-j~a"(parallel-job-count))make-flags)))(replace'install(lambda*(#:keymake-flags#:allow-other-keys)(apply invoke"./b2""install"make-flags))))))(home-page"http://www.boost.org")(synopsis"Peer-reviewed portable C++ source libraries")(description"A collection of libraries intended to be widely useful, and usableacross a broad spectrum of applications.")(license#f)));; (license (license:x11-style "http://www.boost.org/LICENSE_1_0.txt";; "Some components have other similar licences."))
C'est une bonne idée de comparer avec Guix. Si tu as le temps de nous faire un retour, ce serait chouette.
Tout ca va dépendre si Microsoft fait bien le travail pour empaqueter cpprestsdk. Avoir la version de Boost avec laquelle vous avez compilé aide déjà pas mal. :-)
Quelles versions avez-vous utilisé ?
En particulier pour Boost.
Comme je trouve la comparaison intéressante, j'ai fait quelques tests avec Guix. Mais avec Boost@1.70 j'ai un message d'erreur à la compilation de cpprestsdk. Et comme je ne voudrais pas passer trop de temps à empaqueter cette "chose" pour laquelle je n'ai pas un vif intérêt. :-)
Rien que ça ? Faudrait se calmer un peu, non ? Tu as vu la lumière et tout ce que les gens peuvent dire qui ne seraient pas dans ton sens ne sont que rhétorique ?
Ahaha j'adore… <3
Pour le reste, vu que cela ne vous intéresse apparemment pas, pas la peine que je prenne du temps pour répondre.
Comme le disait une certaine émission, à une certaine époque: c'est fini et vous pouvez reprendre une activité normale. :-)
En Pré-Scriptum: j'ai pas suivi les liens, je vais le faire, ça semble super intéressant. Je ne fais que réagir à tes arguments ici, qui sont intéressants.
Peut-être commencez par cela. ;-)
pardon, on m'a appris a considérer le mot sécurité comme un buzzword, quand il est tout seul.
Ça protège de quoi, et dans quelles limitations?
Attaque Trusting Trust par exemple.
Arf… pardonnes donc le pauvre auto-didacte que je suis du manque de connaissances théorique…. mais je renifle ici quand même… euh, pour être poli, 3 mots mis ensembles pour impressionner la galerie. Désolé si c'est crû. En fait, non, pas tant désolé que ça, ce coin du web reste un coin ou je peux m'exprimer et apprendre sans faussetés.
Au temps pour moi. Désolé.
Il faut entendre tout processus de traitement numérique utilisé en Science. Cela va de la simulation numérique (météo, méca, etc.) à l'étude génétique des cancers par exemple.
Aujourd'hui, tous les champs de la Science utilisent à un moment ou un autre un logiciel (ou plusieurs) et souvent le résultat (scientifique) est plus "dû" au traitement numérique qu'à l'observation elle-même.
Or la méthode scientifique n'est pas appliquée à la gestion desdits logiciels. Donc finalement, est-ce encore de la Science ? (question ouverte qui n'appelle pas de réponse :-))
(Méthode scientifique est pompeux et ne réfère à pas grand chose de bien définie : voir toute la philosophie des sciences ;-))
Mais, oui, on sait, tu peux être espionné dès lors que tu confies ton hard a un autre. On sait, même le CPU peut leak… ça fait que 2 ans qu'on a des preuves, certes.
Mais, y'a un moment, soit on fait abstinence, soit on reste un minimum optimiste, non? A noter que, j'ai lu 1984.
On ne parle pas du hard qui est une question en soi. Déjà uniquement avec le soft, ca suffit.
Pour être explicite, le compilateur peut introduire une backdoor à la compilation. Et comme un compilateur est lui même le résultat d'une compilation, ladite backdoor peut être ainsi propagée. D'où la question du bootstrap.
Au quotidien, oui clairement on s'en fiche un peu. Enfin moi cela ne me dérange pas d'utiliser GHC parce qu'Haskell c'est chouette ;-) alors que le compilateur GHC n'est pas encore bootstrappable (à ma connaissance) donc potentiellement une source de fragilité en terme de sécurité.
Et sinon, oui le hardware est une question. Il y a des projets qui essaie justement d'avoir du hard bootstrappable. Mais je ne suis pas sûr de suffisamment bien comprendre pour l'expliquer. :-)
Tu parles de science. Je te parle d'ingénierie. C'est p'tet la qu'on se comprend pas, je suis pas assez intelligent pour la science, mais je reste captivé par l'idée de supprimer toute contrainte inutile a l'humain. Il parait aussi que je suis pas idiot, mais, je connais pas de scientifique.
Bref, à quoi ça sert?
Traduction libre d'une réponse Alan Cox :-) L'ingénierie ne requiert pas de science. La science aide beaucoup mais les gens construisait des mûrs en brique parfaitement bien bien avant qu'ils sachent pourquoi le ciment fonctionne. https://lkml.org/lkml/2001/12/1/110
Donc on peut construire des choses incroyables sans science. :-)
Cependant la science (en tant que méthode) se repose de plus en plus sur l'ingénierie (en tant que technique) et tout devient un peu mélangé.
Bref, la question que vous posez sort du cadre de Guix et de LinuxFr et prendrait un peu plus qu'un commentaire pour y répondre. Êtes-vous dispo pour une bière ? ;-)
Je crois que RPM est capable de faire du transactionnel.
Atta… tu compares RPM, un format de fichier, avec APT, un exécutable et… nix, une distro?
Justement, parlons simples, parlons binaires, ça ressemble a quoi le format de nix?
Pour moi RPM c'est Red hat Package Manager et APT c'est Advanced Package Tools. Donc mes excuses si c'est un raccourci mais je voulais dire RPM pour toute l'infrastructure RedHat (et consort), un peu comme je pourrais aussi dire APT pour tout l'écosystème Debian. Abus de langage.
Remarquez que dans tous les commentaires, j'ai parlé de Guix en tant que gestionnaire de paquets et jamais vraiment en tant que distribution. C'est une autre histoire.
Personnellement, j'utilise Guix (gestionnaire de paquets) avec une distribution Debian stable. Debian me fournit principalement le noyau linux et le système de fichiers, plus quelques autres trucs comme des pilotes etc.. Bref!
Tout ca pour dire que je crois que le gestionnaire de paquets RedHat (et/ou consort) permet de faire du transactionnel.
Guix fait l'hypothèse (forte) qu'il y a suffisamment de stabilité dans le noyau, le système de fichiers, etc. pour ne pas influencer sur la transparence binaire. Mais oui il y a une question pertinente sur l'effet du hardware.
Tu vois, c'est justement par l'intermédiaire de Nix que j'ai appris cette faiblesse. Et de mon job. Je suis tellement curieux… j'ai cherché, j'ai voulu reproduire cette fiabilité supposée, et… j'ai trouvé que c'était de la poudre aux yeux.
Parce que le soft (le kernel est un soft) sous linux ne permets pas cette hypothèse. Et Nix/Guix l'affirment a chaque fois comme forte.
J'aime pas ça, c''est pas honnête.
Qu'est-ce qui n'est pas honnête ?
Et juste pour comprendre. Vous avez pris 2 hardwares différents et mis dessus 2 versions différentes du noyau linux avec 2 versions différents du système de fichiers. Ensuite, vous avez mis dans ces 2 environnements différents exactement la même chaîne de compilation, bit à bit identique, du compilateur au linker en passant la Glibc. Puis vous avez compilé le même code source dans ces 2 environnements et vous n'obtenez pas le même binaire identique bit à bit, est-ce cela ?
Si oui, je suis intéressé par connaitre le matériel en question, les versions des noyaux en questions, des systèmes de fichiers, de la chaîne de compilation et de ce que vous avez compilé. Du coup, je serais intéressé que vous me contactiez en privée. :-)
Parce que oui c'est possible mais c'est rare. :-)
Et je n'ai pas encore vu de mes propres yeux de tel cas.
Cependant, qui peut le plus peut le moins. ;-)
Pitié, non… Un dev sys ne seras jamais un bon dev web, un architecte ne sera jamais un bon maçon, et vice versa. Cette expression je la prend comme une forme de mépris. C'est désagréable, même si je sais que je l'ai moi aussi commise, cette erreur.
On peut avoir les notions des métiers adjacents, mais jamais on ne les fait aussi bien que des pros.
Le qui se réfèrait à "gestionnaire de paquets". :-)
Merci pour vos commentaires.
J'espère que vous prendrez le temps de tester Guix parce que notre discussion là est beaucoup plus large de ce qu'apporte le gestionnaire de paquets Guix comparé à ce qui existe (avec Debian par exemple). Et je ne voudrais pas qu'avec cette déviation, certes intéressante, vous ayez une fausse impression de ce que Guix fait/est.
On m'a dis la même de la PO (Programmation Object). Mais je suis resté à la POO (Programmation Orientée Objet). Parce que forcer une façon de penser, c'est brider.
Sauf erreur de ma part personne n'a pas parlé de POO en présentant de Guix. C'est vous en lisant inherit et héritage qui extrapolez.
J'ai l'impression que l'on s'amuse plus à une joute rhétorique que vraiment chercher à comprendre ce que fait l'outil et comment il fonctionne. Mais bon, c'est le jeu sur LinuxFr. ;-)
J'espère que tu espères pas convaincre des devs expérimentés en leur présentant un système nouveau qui a déjà des artefacts mis en avant? Parce que, bon, les artefacts, on (enfin, je) les accepte que quand ils sont obligatoire, hein.
Au point que, pour mes collègues j'ai écrit un script pour générer des .deb à partir d'un fichier ini-style. Certes, des debs castrés, mais ça marche et c'est simple.
Idem ici. Vous découpez le cheveux en 4 alors que je vous ai donné un exemple concret avec GnuPG de ce que c'était. De quelle était l'idée derrière.
Donc au lieu de juger et comparer l'idée (technique) avec par exemple Debian, vous faites de la rhétorique sur un mot en réponse à un autre commentaire en essayant de trouver une "faille" dans la présentation (mots) de ladite idée. Pourquoi pas mais je ne suis pas convaincu de là où cela mène. :-)
C'est une astuce pour réécrire partiellement une recette de construction. Je ne vois pas en quoi cela casse la composition. En revanche oui, cela peut rendre plus fragile certains paquets.
Désolé, tu viens de contre-vendre le projet.
Moi, ce que je veux, c'est une distro qui concurrence la solidité et la simplicité réelle de debian. Et par simplicité réelle, j'entends… comment dire… ouvres donc un ficher .deb, tu verras.
Je suis désolé pour vous parce que vous passez à côté d'un changement de paradigme en terme de gestion de paquets à cause de simples arguments de rhétorique.
Et si l'on cherche la petite bête, les méta-paquets de chez Debian présentent exactement le même type de fragilité mais cela ne semble pas vous poser de problème. Mais je dis ca, je dis rien. ;-)
Bref, j'ai essayé de répondre au mieux aux commentaires en présentant les concepts et en mettant des liens pointant vers la documentation.
Honnêtement, si vous n'avez pas envie d'aller voir par vous même, je ne vois pas trop ce que moi je peux faire de plus ; à part troller. :-)
Ou il y a une autre option paraphrasant vos mots :
Il suffit de dire qu'on doit essayer de changer ça parce qu'on en a pris conscience, le fait que de pouvoir collectivement vérifier "l'organe initial" pour lui faire confiance.
Finalement, si je comprends bien, c'est la même conclusion concernant la reproductibilité que pour n'importe quel outil utilisant le schéma d'une distribution classique : il y a toujours un hic quelque part car les distributions classiques sont doomed en fait. :-)
Pour partager du code le mieux ça reste de faire de la composition
C'est difficile de tout expliquer dans des commentaires ici et là. ;-)
A l'essentiel: Guix compose. :-)
Cette histoire d'inherit est un artefact dans la grande histoire de Guix. :-)
C'est une astuce pour réécrire partiellement une recette de construction. Je ne vois pas en quoi cela casse la composition. En revanche oui, cela peut rendre plus fragile certains paquets.
Doit-on considérer que le même code source compilé par 2 compilateurs est la même version ou non ? Qu'est-ce qu'une même version ? Code source identique ? Binaire identique ? Résultat identique ?
Je ne vois pas vraiment l'intérêt pour un utilisateur d'avoir, au niveau système, plusieurs build d'un programme avec plusieurs compilos… pour un développeur, ok, mais un programmeur fera de toute façon ses tests dans un dossier local.
L'intérêt est double:
sécurité
science computationnelle reproductible.
Le seul moment ou je vois un problème potentiellement posé par la compilation d'un même source avec les mêmes options de build par un compilateur différent, c'est pour une bibliothèque dont l'ABI peut changer. Et ce problème est habituellement contourné par les bibliothèques elles-mêmes quand elles sont bien foutues (par exemple en utilisant pimpl).
De ce que je comprends, vous définissez même par: code source identique et résultat identique.
C'est le cas d'usage le plus courant. Mais il faut garder en tête :
Que vous n'avez aucune garantie que le compilateur n'a pas introduit de code frauduleux. C'est ce que l'on appelle la Trusting Trust attaque et le problème du bootstrapp.
Et une vidéo en anglais très didactique—il faut faire abstraction de l'application (bitcoin) car cela s'applique à n'importe quel programme compilé : https://www.youtube.com/watch?v=I2iShmUTEl8
En calcul scientifique, si on dit que l'on fait de la Science, cela signifie que l'on doit contrôler au maximum son environnement d'exécution pour trouver l'origine des différences et donc contrôler les erreurs—ou disons plutôt fournir une preuve de confiance.
Je pense plutôt que c'est moi qui ne comprend pas à quoi sert ton héritage ni (hum… c'est chiant en vrai de faire un ou inclusif en langage parlé…) comment ça marche.
Cela permet de ré-écrire partiellement la recette d'une paquet.
Je trouve honnêtement le concept intéressant, mais pour moi sa plus grosse et principale force, c'est le fait qu'il semblerait invalider complètement une suite d'actions si une installation échoue, et ça, dpkg ne sait pas le faire, ses frontaux non plus.
Je crois que RPM est capable de faire du transactionnel.
Par contre, je me demande si la raison est vraiment le fait que nix/guix soient fonctionnels, justement.
Le fait d'être "fonctionnel" rend les transactions faciles à implémenter. Ou disons plus facile que dans les approches "classiques" de gestion de paquets.
Enfin, l'histoire ainsi que le fait que le noyau linux (ou sont-ce extX les coupables?) ne permette pas, à ma connaissance, de réellement verrouiller un fichier
Oui, c'est légitime comme question. Et à ma connaissance il n'y a pas encore vraiment de réponse par manque d'observation.
Guix fait l'hypothèse (forte) qu'il y a suffisamment de stabilité dans le noyau, le système de fichiers, etc. pour ne pas influencer sur la transparence binaire. Mais oui il y a une question pertinente sur l'effet du hardware.
Cependant, qui peut le plus peut le moins. ;-)
Merci de poser toutes ces questions. C'est intéressant d'avoir un retour. :-)
Je me permets de faire un petit résumé.
Guix est un gestionnaire de paquets transactionnel et inclut nativement la coexistence de plusieurs versions (les modulefiles et consort en beaucoup mieux), il permet de faire du roll-back et de voyager dans le temps, il inclut nativement la génération de conteneur (Docker, Singularity, tarball relocatable), il permet de travailler nativement dans un conteneur, il prend au sérieux les problèmes de bootstrap, et j'en passe d'autres; comme le fallback vers Software Heritage si les sources upstream ont disparues, etc..
Alors oui chaque fonctionnalité prise individuellement existe ici ou là. Mais il n'y a aucun outil qui les intégrè aussi bien—sauf la grande tante Nix :-).
Et oui il y a encore des questions ouvertes, en particulier sur la transparence binaire.
Mais aujourd'hui, le vrai problème de Guix est une base d'utilisateurs assez petite donc des retours d'expériences assez peu nombreux. N'hésitez pas à essayer, il n'y a rien à faire avec le script d'installation et cela sera totalement transparent pour votre distribution. Puis venez râler en francais ou en anglais que cela ne convient pas sur help-guix@gnu.org. :-) Tous les retours sont bons à prendre. ;-)
Guix/nix font probablement toutes ces choses mieux (l'inverse serais dommage), ils ne les ont pas forcément inventé et les gens n'ont pas attendu nix pour proposer des solutions
On n'est pas à un concours pour le prix Nobel mais pour le coup, il me semble que oui : appliquer les principes de programmation fonctionnelle à la gestion de paquets n'avait jamais été fait avant les débuts de Nix en 2003. Mais je peux me tromper, si tu as des références à ce sujet, ça m'intéresse.
Concernant Debian, il y a eu cette présentation à DebConf14.
Toujours est-il que Nix—et Guix=Guile+Nix ;-)—est à mon avis un changement de paradigme dans la gestion des paquets. Comme tout paradigme différent, tout n'est pas orthogonal. :-)
Avec 2 outils: un peu de magie et beaucoup d'amour. ;-)
Le terme "le" se réferre à paquet, n'est-ce pas?
C'est toute la machinerie du boostrapp. Au lieu de faire une longue explication ici, le mieux me semble-t-il est d'aller voir la documentation officielle. :-)
Pour ce qui concerne le C, GNU Mes a fait un gros boulot et la graine commence à être raisonnable. :-)
Je veux bien mais tu va devoir faire confiance au binaire de ce compilateur si j'ai bien compris.
GNU Mes est une histoire en soi. :-)
Le but est de réduire la taille des binaires auxquels on fait confiance. Ceci pour réduire la surface d'une attaque Trusting Trust.
Discuter et analyser la taille de ces binaires est déjà un pas en avant. Je ne sais pas où en est Debian, je suis un peu perdu avec le "stage0" de Gentoo et je ne sais pas du tout comment Arch fait.
Se passer d'une étape de compilation est extrêmement complexe, c'est pas une question de guix, nix ou apt. Si tu veux remettre en cause les dépôts de ton outils, il y a soit un compilateur à qui tu es contrains de faire confiance soit tu prends des étapes hyper relous de construction d'un compilateur from scratch (tu fais confiance à quel éditeur hexa décimal ? ;)
Oui c'est un problème compliqué. :-)
Et oui cela dépasse le cadre de Guix et autres.
Cependant, ce n'est pas pour cela qu'il n'y a pas de question. ;-)
Et une des choses que Guix fait—entre autres—est de fournir des outils pour avoir une vision plus claire sur cette chaine de production source->binaire. Pour le dire clairement, il y a une plus grande transparence binaire, à mon humble avis.
Dans Guix, il n'y a pas de notion de stable vs instable. Donc je ne comprends pas cette phrase.
Ça concernait NixOS, qui a plusieurs canaux de base (stable, unstable) alors qu'on n'a que le canal par défaut dans Guix (donc l'équivalent de unstable). Et oui c'est long à mettre à jour ou installer des paquets, parce qu'il n'y a pas toujours des substituts, et que les paquets sont pas forcément très bien découpés, ce qui fait augmenter le nombre de dépendances inutiles.
Cela correspond à changer de branche / canal avec guix pull, non ?
Et donc le calcul de la dérivation est long, c'est ca ? Je ne vois pas pourquoi il devrait être "plus long".
Concernant la disponibilité de substituts, c'est comparer des pommes et des oranges. ;-)
C'est une information qui fait partie du paquet, donc tu peux l'installer et tu peux la vérifier de la même manière. Évidemment il peut y avoir un problème au bootstrap, mais je présume qu'ily een a un aussi aussi avec ta solution.
Pour faire simple, la graine utilisée pour bootstrapper est donnée par le commit de Guix.
Et le résultat sera toujours le même. Enfin devrait. ;-)
En revanche, le résultat de guix build -L chemin/du/paquet foo dépendra de l'état (commit) dans lequel je me trouve au moment où je lance ladite commande.
La machinerie (côté Guix) est là mais tout n'est pas résolu non plus (côté dev. des langages).
Pour ce qui concerne le C, GNU Mes a fait un gros boulot et la graine commence à être raisonnable. :-)
Mais pour d'autres langages, c'est encore assez compliqué. Voir ce qui est fait pour Rust.
[^] # Re: je comprend pas
Posté par zimoun . En réponse à la dépêche Gestion de paquets et DevOps avec Nix, tour d’horizon sur un cas concret. Évalué à 1.
Votre cas d'usage n'est pas le cadre de cet article. :-)
Et pour être honnête, ce cas d'usage n'est pas mon coeur de métier.
Concernant Nix, je ne sais pas.
Concernant Guix, les fonctionnalités pour ce genre de cas d'usage ne sont pas encore totalement mature pour être utilisé en production. Pour faire simple la réponse est
guix deploy
et voici quelques pointeurs :https://guix.gnu.org/manual/devel/en/html_node/Invoking-guix-deploy.html
https://guix.gnu.org/blog/2019/towards-guix-for-devops/
roptat qui contribue beaucoup à Guix a écrit cela :
https://linuxfr.org/news/guix-un-outil-pour-les-remplacer-tous#comment-1797262
[^] # Re: je comprend pas
Posté par zimoun . En réponse à la dépêche Gestion de paquets et DevOps avec Nix, tour d’horizon sur un cas concret. Évalué à 1.
Au niveau sysadmin, pour la gestion des paquets, un intérêt est le rollback et les profils (ce qui est fait par des solutions comme
modulefiles
ouvirtualenv
).(en passant il n'y a pas besoin d'être superutilisateurs pour installer des paquets et il n'y a pas de problème)
Ensuite, si on utilise Guix System (ou Nix OS), le rollback s'applique aussi aux services.
Il y a les fichiers
manifest
qui permettent de déclarer ses paquets en spécifiant un commit Guix particulier (un channel). Donc sur n'importe quelle machine, il est trivial d'instancier exactement la même configuration.DevOps et SRE n'est pas mon coeur de métier donc je ne sais pas.
Pour vous donner un exemple concret, il faudrait que vous décriviez un problème concret et votre actuelle solution concrète.
[^] # Re: Paquets pour Guix
Posté par zimoun . En réponse à la dépêche Gestion de paquets et DevOps avec Nix, tour d’horizon sur un cas concret. Évalué à 1.
Pour faire simple, une introduction aux keywords
#:
est cette page:https://www.gnu.org/software/guile/manual/html_node/Why-Use-Keywords_003f.html
Oui c'est un mythe les histoires de parenthèses et de Lisp. Comme avec le
C
par exemple, il faut juste faire un effort d'indentation et tout se passe bien.Et si on est totalement honnête, la seule chose vraiment pénible est de converser les parenthèses balancées. Mais cela se résout avec tout bon éditeur de texte.
Notez que les définitions des paquets paraissent plus difficiles qu'avec Nix parce que j'ai fait un peu de zèle. ;-)
[^] # Re: Fixer une version
Posté par zimoun . En réponse à la dépêche Gestion de paquets et DevOps avec Nix, tour d’horizon sur un cas concret. Évalué à 2.
Si c'est pour aller un peu plus quand dans un commentaire ici, je voudrais nettoyer un peu les choses alors. :-)
guix.scm
propre pour construiremaster
(quelque soit le commit).Seg Fault
avecguix environment
.cpprestsdk
ne compile pas avec Boost 1.70. Parce que normalement, ca devrait ! Par exemple, par défaut il ya-Werror
et … il y a beaucoup de warnings. :-) Donc je vais re-essayer un peu ce qui évitera de ressortir une vieille version de Boost et simplifiera le brol. Chose que je ne voulais pas faire initialement parce que boncpprestsdk
c'est loin de mes affaires. Mais maintenant au point où j'en suis… :-)Bon si je ne suis pas sorti du bois d'ici la milieu de semaine prochaine, c'est que j'aurais eu d'autres préoccupations plus urgentes. ;-)
Dans ce cas, reprenez ce que vous voudrez. :-)
# Fixer une version
Posté par zimoun . En réponse à la dépêche Gestion de paquets et DevOps avec Nix, tour d’horizon sur un cas concret. Évalué à 1.
Avec Guix, c'est plus facile de fixer une version comme c'est fait.
Pour ne pas fixer une version fixe, à ma connaissance il n'y a rien de natif et il faut écrire un peu plus qu'avec Nix. Comme là par exemple:
http://git.savannah.nongnu.org/cgit/mescc-tools.git/tree/guix.scm
# Construire et installer le paquet du projet
Posté par zimoun . En réponse à la dépêche Gestion de paquets et DevOps avec Nix, tour d’horizon sur un cas concret. Évalué à 1.
Idem que dans l'autre section, on suppose que l'on se trouve dans le dossier contenant le fichier
guix.scm
sinon il faut indiquer ledit chemin ou utiliser unchannel
.Guix
Cependant, je préféres installer dans un profil séparer du profil courant. Par exemple,
Puis il faut "activer" ce profil :
(il y a d'autres solutions de faire pour mettre à jours tous les chemins :-))
Finalement, taper
mymathserver
fonctionne (serveur danslocalhost
).# Lancer un environnement virtuel
Posté par zimoun . En réponse à la dépêche Gestion de paquets et DevOps avec Nix, tour d’horizon sur un cas concret. Évalué à 1. Dernière modification le 28 janvier 2020 à 19:37.
Il n'y a pas vraiment de
default.nix
. Il y a 2 solutions pour faire la même chose :--load-path
pour ajouter (prepend) un dossier dans la recherche des paquets.Disons que l'on a cloné le dépôt
mymathserver
et que l'on se trouve dans le dossier. Et dans ce dossier, il y a aussi un fichier, disonsguix.scm
qui contient les définitions (voir autres sections).Guix
Mais
./mymathserver
retourneSegmentation fault
. A investiguer…# Empaqueter le projet
Posté par zimoun . En réponse à la dépêche Gestion de paquets et DevOps avec Nix, tour d’horizon sur un cas concret. Évalué à 1.
Guix
# Empaqueter une dépendance manquante (avec Guix
Posté par zimoun . En réponse à la dépêche Gestion de paquets et DevOps avec Nix, tour d’horizon sur un cas concret. Évalué à 3. Dernière modification le 28 janvier 2020 à 19:14.
Nix
Guix
# Paquets pour Guix
Posté par zimoun . En réponse à la dépêche Gestion de paquets et DevOps avec Nix, tour d’horizon sur un cas concret. Évalué à 4. Dernière modification le 28 janvier 2020 à 19:08.
Le projet jouet
mymathserver
dépend decpprestsdk
qui est le point sensible à empaqueter car le code n'est pas très robuste. Pour s'en convaincre, il suffit d'aller faire un tour sur les issues GitHub.https://github.com/microsoft/cpprestsdk/issues
Donc, il faut un peu tricoter avec la version de Boost.
Du côté de Guix, le paquet
websocketpp
est dans disponible après la bonne version de Boost. Donc on pourrait s'en sortir avecguix time-machine
. Mais beaucoup de substituts ne sont plus disponibles donc il y aurait beaucoup de compilations à faire—ce qui n'est pas un problème en soi mais pas le but ici.Bref! en plus du projet jouet
mymathserver
et decpprestsdk
comme dans l'article initial, j'ai "empaqueté"websocketpp
et une vieille version deboost
. Empaqueter est un bien grand mot puisque ce sont les vieux paquets dépoussiérés à coup degit show
.Finalement, on compare des pommes et des oranges puisque le tour d'horizon a été fait avec ce qui était facile pour Nix (2 paquets personnalisés) et donc dans une autre configuration, cela aurait été Nix qui aurait dû fournir plus de paquets personnalisés. Donc il faut s'arrêter après les 2 mêmes paquets, les 2 autres derniers sont juste là pour éviter de recompiler le monde entier.
Ceci dit, avec ces définitions, on est capable de reproduire la première partie.
Le fichier disons
/tmp/test/linuxfr.scm
contient les paquets personnalisés ci-dessous.Pour tout construire, il faut faire:
En terme de reproductibilité, si vous utilisez la
time-machine
:vous devriez compiler au bit près la même chose que moi. Donc normalement, vous devriez avoir:
/gnu/store/hqhsc61v4xpj1ld0dwvf8gabxr3x0dwc-mymathserver-0.1
comme résultat. Sinon, il ya une source de non-déterminisme.Je ferai un autre commentaire pour donner l'équivalent des commandes. :-)
[^] # Re: Versions ?
Posté par zimoun . En réponse à la dépêche Gestion de paquets et DevOps avec Nix, tour d’horizon sur un cas concret. Évalué à 1.
Tout ca va dépendre si Microsoft fait bien le travail pour empaqueter
cpprestsdk
. Avoir la version de Boost avec laquelle vous avez compilé aide déjà pas mal. :-)Merci!
Je vous tiens au courant ici. :-)
[^] # Re: Superbe dépêche et étonnement !
Posté par zimoun . En réponse à la dépêche Gestion de paquets et DevOps avec Nix, tour d’horizon sur un cas concret. Évalué à 1.
Très intéressant. Cela permet de vous un peu les similarités et différences. :-)
Par exemple, Guix n'est pas supporté par Cachix même s'il y a un ticket d'ouvert depuis longtemps. :-)
https://github.com/cachix/cachix/issues/85
En revanche, Guix fournit
guix publish
qui permet de servir les paquets que l'on a construit localement. Oui cela est moins pratique que Cachix. :-)https://guix.gnu.org/manual/en/html_node/Invoking-guix-publish.html
Il y a un patch pour distribuer via IPFS mais il n'a pas encore été assez testé, je crois.
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=33899https://ipfs.io/
A ma connaissance, il n'y a pas d'image officielle pour Gitlab CI. Mais il y a des images sur DockerHub ;-)
Merci car cela donne du concret par rapport à ce qui a été dit dans l'autre annonce.
# Versions ?
Posté par zimoun . En réponse à la dépêche Gestion de paquets et DevOps avec Nix, tour d’horizon sur un cas concret. Évalué à 1. Dernière modification le 27 janvier 2020 à 20:38.
Quelles versions avez-vous utilisé ?
En particulier pour Boost.
Comme je trouve la comparaison intéressante, j'ai fait quelques tests avec Guix. Mais avec Boost@1.70 j'ai un message d'erreur à la compilation de
cpprestsdk
. Et comme je ne voudrais pas passer trop de temps à empaqueter cette "chose" pour laquelle je n'ai pas un vif intérêt. :-)Merci d'avance.
[^] # Re: Mal connaître sa distribution
Posté par zimoun . En réponse à la dépêche Guix : un outil pour les remplacer tous. Évalué à -3.
Ahaha j'adore… <3
Pour le reste, vu que cela ne vous intéresse apparemment pas, pas la peine que je prenne du temps pour répondre.
Comme le disait une certaine émission, à une certaine époque: c'est fini et vous pouvez reprendre une activité normale. :-)
[^] # Re: Mal connaître sa distribution
Posté par zimoun . En réponse à la dépêche Guix : un outil pour les remplacer tous. Évalué à 3.
Peut-être commencez par cela. ;-)
Attaque Trusting Trust par exemple.
Au temps pour moi. Désolé.
Il faut entendre tout processus de traitement numérique utilisé en Science. Cela va de la simulation numérique (météo, méca, etc.) à l'étude génétique des cancers par exemple.
Aujourd'hui, tous les champs de la Science utilisent à un moment ou un autre un logiciel (ou plusieurs) et souvent le résultat (scientifique) est plus "dû" au traitement numérique qu'à l'observation elle-même.
Or la méthode scientifique n'est pas appliquée à la gestion desdits logiciels. Donc finalement, est-ce encore de la Science ? (question ouverte qui n'appelle pas de réponse :-))
(Méthode scientifique est pompeux et ne réfère à pas grand chose de bien définie : voir toute la philosophie des sciences ;-))
On ne parle pas du hard qui est une question en soi. Déjà uniquement avec le soft, ca suffit.
Pour être explicite, le compilateur peut introduire une backdoor à la compilation. Et comme un compilateur est lui même le résultat d'une compilation, ladite backdoor peut être ainsi propagée. D'où la question du bootstrap.
Au quotidien, oui clairement on s'en fiche un peu. Enfin moi cela ne me dérange pas d'utiliser GHC parce qu'Haskell c'est chouette ;-) alors que le compilateur GHC n'est pas encore bootstrappable (à ma connaissance) donc potentiellement une source de fragilité en terme de sécurité.
Et sinon, oui le hardware est une question. Il y a des projets qui essaie justement d'avoir du hard bootstrappable. Mais je ne suis pas sûr de suffisamment bien comprendre pour l'expliquer. :-)
Traduction libre d'une réponse Alan Cox :-)
L'ingénierie ne requiert pas de science. La science aide beaucoup mais les gens construisait des mûrs en brique parfaitement bien bien avant qu'ils sachent pourquoi le ciment fonctionne.
https://lkml.org/lkml/2001/12/1/110
Donc on peut construire des choses incroyables sans science. :-)
Cependant la science (en tant que méthode) se repose de plus en plus sur l'ingénierie (en tant que technique) et tout devient un peu mélangé.
Bref, la question que vous posez sort du cadre de Guix et de LinuxFr et prendrait un peu plus qu'un commentaire pour y répondre. Êtes-vous dispo pour une bière ? ;-)
Pour moi RPM c'est Red hat Package Manager et APT c'est Advanced Package Tools. Donc mes excuses si c'est un raccourci mais je voulais dire RPM pour toute l'infrastructure RedHat (et consort), un peu comme je pourrais aussi dire APT pour tout l'écosystème Debian. Abus de langage.
Remarquez que dans tous les commentaires, j'ai parlé de Guix en tant que gestionnaire de paquets et jamais vraiment en tant que distribution. C'est une autre histoire.
Personnellement, j'utilise Guix (gestionnaire de paquets) avec une distribution Debian stable. Debian me fournit principalement le noyau linux et le système de fichiers, plus quelques autres trucs comme des pilotes etc.. Bref!
Tout ca pour dire que je crois que le gestionnaire de paquets RedHat (et/ou consort) permet de faire du transactionnel.
Ca ressemble à quoi le format des paquets Guix ? La recette source ressemble à ca :
https://guix.gnu.org/blog/2018/a-packaging-tutorial-for-guix
Et le binaire c'est un format qui s'appelle nar. C'est repris de chez Nix qui l'a défini, voir par exemple une spec là:
https://gist.github.com/jbeda/5c79d2b1434f0018d693
Mais on ne manipule jamais un fichier
.nar
manuellement.Qu'est-ce qui n'est pas honnête ?
Et juste pour comprendre. Vous avez pris 2 hardwares différents et mis dessus 2 versions différentes du noyau linux avec 2 versions différents du système de fichiers. Ensuite, vous avez mis dans ces 2 environnements différents exactement la même chaîne de compilation, bit à bit identique, du compilateur au linker en passant la Glibc. Puis vous avez compilé le même code source dans ces 2 environnements et vous n'obtenez pas le même binaire identique bit à bit, est-ce cela ?
Si oui, je suis intéressé par connaitre le matériel en question, les versions des noyaux en questions, des systèmes de fichiers, de la chaîne de compilation et de ce que vous avez compilé. Du coup, je serais intéressé que vous me contactiez en privée. :-)
Parce que oui c'est possible mais c'est rare. :-)
Et je n'ai pas encore vu de mes propres yeux de tel cas.
Le qui se réfèrait à "gestionnaire de paquets". :-)
Merci pour vos commentaires.
J'espère que vous prendrez le temps de tester Guix parce que notre discussion là est beaucoup plus large de ce qu'apporte le gestionnaire de paquets Guix comparé à ce qui existe (avec Debian par exemple). Et je ne voudrais pas qu'avec cette déviation, certes intéressante, vous ayez une fausse impression de ce que Guix fait/est.
[^] # Re: Mal connaître sa distribution
Posté par zimoun . En réponse à la dépêche Guix : un outil pour les remplacer tous. Évalué à 2. Dernière modification le 25 janvier 2020 à 15:10.
Sauf erreur de ma part personne n'a pas parlé de POO en présentant de Guix. C'est vous en lisant
inherit
et héritage qui extrapolez.J'ai l'impression que l'on s'amuse plus à une joute rhétorique que vraiment chercher à comprendre ce que fait l'outil et comment il fonctionne. Mais bon, c'est le jeu sur LinuxFr. ;-)
Idem ici. Vous découpez le cheveux en 4 alors que je vous ai donné un exemple concret avec GnuPG de ce que c'était. De quelle était l'idée derrière.
Donc au lieu de juger et comparer l'idée (technique) avec par exemple Debian, vous faites de la rhétorique sur un mot en réponse à un autre commentaire en essayant de trouver une "faille" dans la présentation (mots) de ladite idée. Pourquoi pas mais je ne suis pas convaincu de là où cela mène. :-)
Je suis désolé pour vous parce que vous passez à côté d'un changement de paradigme en terme de gestion de paquets à cause de simples arguments de rhétorique.
Et si l'on cherche la petite bête, les méta-paquets de chez Debian présentent exactement le même type de fragilité mais cela ne semble pas vous poser de problème. Mais je dis ca, je dis rien. ;-)
Bref, j'ai essayé de répondre au mieux aux commentaires en présentant les concepts et en mettant des liens pointant vers la documentation.
Honnêtement, si vous n'avez pas envie d'aller voir par vous même, je ne vois pas trop ce que moi je peux faire de plus ; à part troller. :-)
[^] # Re: Mal connaître sa distribution
Posté par zimoun . En réponse à la dépêche Guix : un outil pour les remplacer tous. Évalué à 1.
Ou il y a une autre option paraphrasant vos mots :
Il suffit de dire qu'on doit essayer de changer ça parce qu'on en a pris conscience, le fait que de pouvoir collectivement vérifier "l'organe initial" pour lui faire confiance.
[^] # Re: Mal connaître sa distribution
Posté par zimoun . En réponse à la dépêche Guix : un outil pour les remplacer tous. Évalué à 1.
Finalement, si je comprends bien, c'est la même conclusion concernant la reproductibilité que pour n'importe quel outil utilisant le schéma d'une distribution classique : il y a toujours un hic quelque part car les distributions classiques sont doomed en fait. :-)
Plus de propagande là : ;-)
https://archive.fosdem.org/2019/schedule/event/gnu_guix_new_approach_to_software_distribution/
[^] # Re: Mal connaître sa distribution
Posté par zimoun . En réponse à la dépêche Guix : un outil pour les remplacer tous. Évalué à 1.
C'est difficile de tout expliquer dans des commentaires ici et là. ;-)
A l'essentiel: Guix compose. :-)
Cette histoire d'
inherit
est un artefact dans la grande histoire de Guix. :-)C'est une astuce pour réécrire partiellement une recette de construction. Je ne vois pas en quoi cela casse la composition. En revanche oui, cela peut rendre plus fragile certains paquets.
[^] # Re: Mal connaître sa distribution
Posté par zimoun . En réponse à la dépêche Guix : un outil pour les remplacer tous. Évalué à 2.
L'intérêt est double:
De ce que je comprends, vous définissez même par: code source identique et résultat identique.
C'est le cas d'usage le plus courant. Mais il faut garder en tête :
Le papier par Ken Thompson himself :
https://www.cs.cmu.edu/~rdriley/487/papers/Thompson_1984_ReflectionsonTrustingTrust.pdf
Et une vidéo en anglais très didactique—il faut faire abstraction de l'application (bitcoin) car cela s'applique à n'importe quel programme compilé :
https://www.youtube.com/watch?v=I2iShmUTEl8
Une vidéo expliquant les enjeux se trouve là :
https://webcast.in2p3.fr/video/les-enjeux-et-defis-de-la-recherche-reproductible
Cela permet de ré-écrire partiellement la recette d'une paquet.
Je crois que RPM est capable de faire du transactionnel.
Le fait d'être "fonctionnel" rend les transactions faciles à implémenter. Ou disons plus facile que dans les approches "classiques" de gestion de paquets.
Oui, c'est légitime comme question. Et à ma connaissance il n'y a pas encore vraiment de réponse par manque d'observation.
Guix fait l'hypothèse (forte) qu'il y a suffisamment de stabilité dans le noyau, le système de fichiers, etc. pour ne pas influencer sur la transparence binaire. Mais oui il y a une question pertinente sur l'effet du hardware.
Cependant, qui peut le plus peut le moins. ;-)
Merci de poser toutes ces questions. C'est intéressant d'avoir un retour. :-)
Je me permets de faire un petit résumé.
Guix est un gestionnaire de paquets transactionnel et inclut nativement la coexistence de plusieurs versions (les
modulefiles
et consort en beaucoup mieux), il permet de faire du roll-back et de voyager dans le temps, il inclut nativement la génération de conteneur (Docker, Singularity, tarball relocatable), il permet de travailler nativement dans un conteneur, il prend au sérieux les problèmes de bootstrap, et j'en passe d'autres; comme le fallback vers Software Heritage si les sources upstream ont disparues, etc..Alors oui chaque fonctionnalité prise individuellement existe ici ou là. Mais il n'y a aucun outil qui les intégrè aussi bien—sauf la grande tante Nix :-).
Et oui il y a encore des questions ouvertes, en particulier sur la transparence binaire.
Mais aujourd'hui, le vrai problème de Guix est une base d'utilisateurs assez petite donc des retours d'expériences assez peu nombreux. N'hésitez pas à essayer, il n'y a rien à faire avec le script d'installation et cela sera totalement transparent pour votre distribution. Puis venez râler en francais ou en anglais que cela ne convient pas sur help-guix@gnu.org. :-) Tous les retours sont bons à prendre. ;-)
En passant, Vagrant est en train de l'empaqueter pour Debian. ;-)
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=850644#56
Donc n'hésitez pas du côté Debian non plus.
[^] # Re: Mal connaître sa distribution
Posté par zimoun . En réponse à la dépêche Guix : un outil pour les remplacer tous. Évalué à 3.
Concernant Debian, il y a eu cette présentation à DebConf14.
http://debconf14-video.debian.net/video/311/seeing-debian-through-a-functional-lens
Toujours est-il que Nix—et Guix=Guile+Nix ;-)—est à mon avis un changement de paradigme dans la gestion des paquets. Comme tout paradigme différent, tout n'est pas orthogonal. :-)
[^] # Re: Quelques "killer features"
Posté par zimoun . En réponse à la dépêche Guix : un outil pour les remplacer tous. Évalué à 1.
Avec 2 outils: un peu de magie et beaucoup d'amour. ;-)
Le terme "le" se réferre à paquet, n'est-ce pas?
C'est toute la machinerie du boostrapp. Au lieu de faire une longue explication ici, le mieux me semble-t-il est d'aller voir la documentation officielle. :-)
https://guix.gnu.org/manual/en/html_node/Bootstrapping.html#Bootstrapping
En particulier, cette section
https://guix.gnu.org/manual/en/html_node/Preparing-to-Use-the-Bootstrap-Binaries.html#Building-the-Build-Tools
GNU Mes est une histoire en soi. :-)
Le but est de réduire la taille des binaires auxquels on fait confiance. Ceci pour réduire la surface d'une attaque Trusting Trust.
Discuter et analyser la taille de ces binaires est déjà un pas en avant. Je ne sais pas où en est Debian, je suis un peu perdu avec le "
stage0
" de Gentoo et je ne sais pas du tout comment Arch fait.Oui c'est un problème compliqué. :-)
Et oui cela dépasse le cadre de Guix et autres.
Cependant, ce n'est pas pour cela qu'il n'y a pas de question. ;-)
Et une des choses que Guix fait—entre autres—est de fournir des outils pour avoir une vision plus claire sur cette chaine de production source->binaire. Pour le dire clairement, il y a une plus grande transparence binaire, à mon humble avis.
Ces étapes "hyper relous" sont déjà avancées.
https://gitlab.com/janneke/stage0
https://bootstrapping.miraheze.org/wiki/Stage0
[^] # Re: impatient pour la suite
Posté par zimoun . En réponse à la dépêche Guix : un outil pour les remplacer tous. Évalué à 1.
Il y a encore des choses à faire… :-)
https://guix.gnu.org/manual/fr/html_node/Invoking-guix-time_002dmachine.html#Invoking-guix-time_002dmachine
+1 :-)
Mais je n'ai aucune idée :-(
[^] # Re: Mal connaître sa distribution
Posté par zimoun . En réponse à la dépêche Guix : un outil pour les remplacer tous. Évalué à 1.
Connais-tu
propellor
?http://propellor.branchable.com/
Cela correspond à changer de branche / canal avec
guix pull
, non ?Et donc le calcul de la dérivation est long, c'est ca ? Je ne vois pas pourquoi il devrait être "plus long".
Concernant la disponibilité de substituts, c'est comparer des pommes et des oranges. ;-)
[^] # Re: Quelques "killer features"
Posté par zimoun . En réponse à la dépêche Guix : un outil pour les remplacer tous. Évalué à 1.
Pour faire simple, la graine utilisée pour bootstrapper est donnée par le commit de Guix.
https://guix.gnu.org/manual/en/html_node/Invoking-guix-describe.html#Invoking-guix-describe
Imaginons que l'on ait la définition du paquet
foo
làchemin/du/paquet
—et ce paquet n'est pas dans l'arbre officiel.Connaissant le commit, je peux à n'importe quel moment réutiliser la même graine et donc construire le paquet.
Et le résultat sera toujours le même. Enfin devrait. ;-)
En revanche, le résultat de
guix build -L chemin/du/paquet foo
dépendra de l'état (commit) dans lequel je me trouve au moment où je lance ladite commande.La machinerie (côté Guix) est là mais tout n'est pas résolu non plus (côté dev. des langages).
Pour ce qui concerne le
C
, GNU Mes a fait un gros boulot et la graine commence à être raisonnable. :-)Mais pour d'autres langages, c'est encore assez compliqué. Voir ce qui est fait pour Rust.
Ne parlons pas d'Haskell. ;-)
etc.
https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/
https://guix.gnu.org/blog/2018/bootstrapping-rust/
https://www.joachim-breitner.de/blog/748-Thoughts_on_bootstrapping_GHC