Logo journal du hacker middle
  1. 1

    Si tu as un projet en php5 qui fonctionnait avec par exemple nixos 18.03, alors tu peux installer nixos 20.09 et utiliser les paquets de nixos 18.03 juste pour ce projet. En gros, dans le fichier default.nix, au lieu de mettre “pkgs = import {};” il faudra mettre “pkgs = import (fetchTarball “https://github.com/NixOS/nixpkgs/archive/18.03.tar.gz”) {};” Ou sinon, tu peux packager ta propre version de php, ou même forker le dépot de paquets de nix et y faire tes propres modifs.

    Concernant le fonctionnement interne de nix, tous les paquets sont stockés dans le dossier /nix/store, avec un hash spécifique. Donc tu peux installer différentes versions ou même compilations d’un même logiciel. Nix utilise juste des liens symboliques vers les bons dossiers pour les différents environnements demandés, et ainsi éviter les conflits. J’espère que ça répond mieux à ta question.

    1. 1

      Je pense qu’à un moment seul mettre les mains dedans permet de répondre aux questions, merci en tout cas ^^

      Tcho !

      1. 1

        Merci pour les retours. L’installation et la configuration du système initial est effectivement un peu longue mais ensuite on gagne généralement du temps, à l’usage. Quant à Docker, ça ne résoud pas vraiment les mêmes problèmes. Nix peut construire facilement des images Docker (et souvent de façon plus efficace) mais il permet également de faire beaucoup d’autres choses. Par exemple, rien que la gestion des environnements virtuels Python, c’est très pratique au quotidien.

        1. 1

          C’est cool que tu sois passé, j’attendais ton passage pour poser une question ^^

          J’ai parcouru le changelog : “PHP 7.2 is no longer supported due to upstream not supporting this version for the entire lifecycle of the 20.09 release”. Concrètement ça veut dire qu’il n’est pas possible de construire php 7.2 ou juste que ce n’est pas “maintenu” ?

          Merci, Tcho !

          1. 2

            Je suis nul en PHP mais a priori ça veut dire que la version 7.2 n’est pas dans nixpkgs 20.09. Cependant je pense que tu peux quand même l’utiliser en spécifiant un ancien commit de nixpkgs qui la contient encore. Tu dois même pouvoir spécifier des versions différentes selon tes différents projets. Perso, je fais ça souvent, pour utiliser différentes versions de Python ou de gcc/clang, ou pour fixer différents jeux de versions.

            1. 1

              Ouais ma question de fond était de savoir comment Nix gérait les “vieux” programmes genre si je veux construire php 5.4.45. Je creuserai à l’occasion.

              Merci !

      1. 1

        Génial… je ne connaissais pas ton blog. Je me seul moins seul francophone avec NixOS

        1. 1

          Moi j'utilise Nix mais pas encore sur NixOS.

          Tcho !

          1. 1

            Perso, Nixos est ma distribution principale depuis plus d'un an et maintenant je pleure à chaque fois que je dois en utiliser une autre. Pour du dev ou de l'admin sys, elle est vraiment géniale.

            1. 1

              Je m'y intéresse sérieusement, tu as quels problèmes dessus (car il y en a toujours) ? Je me suis mis à Nix pour voir le potentiel (énorme) mais je n'arrive pas à installer Chromium par exemple.

              Merci, Tcho !

              1. 1

                Je n'ai pas vraiment eu de problèmes mais plutôt des difficultés. La principale, c'est qu'il faut vraiment apprendre l'outil et que ça demande un peu de temps et d'effort.

                Par exemple, l'organisation du système de fichiers est très différente du FHS : tu ne peux pas “installer vite-fait dans /usr/local/bin”, il faut définir un package qui installe proprement.

                Une autre difficulté classique au début est le conflit de packages. Personnellement, je n'installe presque rien avec des “nix-env -iA”, seulement un paquet de “logiciels de tous les jours” que je définis dans “.config/nixpkgs/config.nix”. Quand je travaille sur un projet particulier, j'y écris un default.nix (dépendances, directives de construction…) et je lance un environnement correspondant avec un “nix-shell”.

                Enfin le langage de description de paquets est assez particulier et sa “bibliothèque” assez grande, ce qui est un peu perturbant au début. Il y a de bonnes docs/blogs/wikis sur le net mais il faut les trouver (et les lire)…

                Voilà, ce sont à peu près les seules difficultés, pour mon usage perso, du moins.

        1. 1

          As-tu essayé des frameworks qui s'attaquent au “problème javascript” ? https://wiki.haskell.org/The_JavaScript_Problem#Haskell_-.3E_JS Fay, Haste, UHC,…

          Ça fait bcp de syntaxe O_o Lorsque tu écris

          instance FromRow Task where
            fromRow = Task <$> field <*> field
          

          sais-tu absolument pourquoi c'est <$> et pas <*> ou dois-tu te référer à la documentation du module ?

          Et n'y a-t-il pas mieux que SQL.query_ c "SELECT * FROM task") ?

          merci en tout cas

          1. 1

            sais-tu absolument pourquoi c'est <$> et pas <*> ou dois-tu te référer à la documentation du module ?

            Il s'agit respectivement de fmap et du séquençage applicatif. C'est des fonctions vraiment standarts, tu peux les utiliser sur tous les applicative functors (aucune idée du terme franwais correct, désolé).

            Une grande partie des concepts sont standardisés via les typeclass (des interfaces) en Haskell. Tu peux apprendre les plus courants en lisant la typeclassopedia.

            Sinon oui, la documentation est un gros problème pour les novices.

            1. 1

              Pour Haskell en web front-end, il y a effectivement quelques outils mais je ne connais pas bien.

              Pour “Task <$> field <*> field”, ce sont effectivement des opérateurs classiques des foncteurs et foncteurs applicatifs. J'en parlerai peut-être dans une prochaine vidéo mais ici ça veut juste dire que pour lire une ligne dans la base de données, il faut lire deux champs (field) et les utiliser comme paramètre pour construire une valeur Task.

              Désolé d'avoir mis autant de temps à répondre.

            1. 1

              Tutoriels youtube + github sur la programmation fonctionnelle en Haskell (et autres) et le devops avec nix/nixos/nixops.

              1. 2

                Salute,

                En temps normal nous n'acceptons pas les “pages d'accueil” soumises comme info sur le Jdh. Là je comprends ta démarche, tu as probablement voulu d'un seul coup remonter tous tes articles. A l'avenir, merci de ne plus le faire.

                Tcho !

                1. 1

                  Ok, désolé. La prochaine fois, j'attendrai d'avoir un nouvel article avant de le poster alors.