<julm> eeva: nixops pour préparer dans une VM ce que je vais mettre sur du métal quand ce sera prêt
<julm> j'ai pas trop à me plaindre de nixops, si ce n’est qu'il est un peu lent à se lancer (peut-être parce que c du python, peut-être parce qu'il fait des choses)
<eeva> Pas mal!
<julm> en attendant je lutte pas mal pour installer des plugins dans redmine
<julm> le code .nix de redmine est très brouillon
<julm> et je ne connais pas bien ruby ni le support ruby de nixpkgs
<eeva> Bon courage :D
<eeva> (on a plein de ruby dans ma boîte et mon espoir est de ne jamais devoir y toucher)
<julm> heh
<eeva> tiens, je pense que je vais aller nixopsizer ma config locale (et ajouter le support des secrets de elvishjerricco)
<julm> cool
<julm> nixops apporte essentiellement que config.deployment pour plusieurs machines, le reste c'est la config de nixos
<julm> en général on scinde la config en deux : nixops create install/logical.nix install/physical.nix
<julm> où physical.nix peut soit changer, soit être : with builtins; import (toPath ./. + "/physical/" + getEnv "NIXOPS_DEPLOYMENT" + ".nix")
<julm> et là c'est la variable d'env NIXOPS_DEPLOYMENT qui change
<julm> et pour les secrets via extraBuiltins, je construis une dérivation qui rassemble le code que je veux
<julm> puis dans .envrc:
<julm> NIXOPS_OPTS+=" --option plugin-files $PWD/result/nix/plugins/libnix-extra-builtins.so"
<julm> NIXOPS_OPTS+=" --option extra-builtins-file $PWD/result/nix/extra-builtins.nix"
<julm> et j’utilise donc: nixops deploy $NIXOPS_OPTS
<julm> % cat result/nix/extra-builtins.nix
<julm> { exec, ... }:
<julm> {
<julm> pass = path: exec [ "/nix/store/fwvv6bgdwinz4r7f448hlav2p4msda8f-nix-pass/bin/nix-pass" path ];
<julm> git = dir: args: exec ([ "/nix/store/5xv5rs8sjk5fz444dqa6idkhmsdpyz6c-nix-git/bin/nix-git" (builtins.toPath dir) ] ++ args);
<julm> git-time = dir: path: exec [ "/nix/store/5xv5rs8sjk5fz444dqa6idkhmsdpyz6c-nix-git/bin/nix-git" (builtins.toPath dir) "log" "-1" "--format=%ct" "--" path ];
<julm> }
<julm> par exemple
<julm> la complication à remarquer c'est que ça appelle nix-pass et nix-git ; et pas pass ou git directement
<julm> qui sont des wrappers pour retourner du nix: http://pastebin.notk.org/pastebin.php?show=f156b689c
<julm> un peu alambiqué, mais bon, ça marche
<julm> (et je te raconterai pas ce que je faisais comme cuisine avant de découvrir extraBuiltins.exec…)
<eeva> :D
<eeva> Je viens de faire marcher ma config avec nixops (et extraBuiltins)
<eeva> Intéressant pour NIXOPS_OPTS, je garde ça en tête
<eeva> J'utilise pas pass de mon côté, mais juste gpg --decrypt
<eeva> (+ une nitrokey qui est lente comme pas possible, env 2 sec pour décrypter un truc)
<julm> pass c'est juste un wrapper shell autour de gpg et git
<julm> ben moi je viens commence à comprendre mon malheur rubyesque en plongeant dans pkgs/development/ruby-modules/bundler-app/default.nix
<julm> -viens
<eeva> :>
<julm> je sens que ç va encore me demander un ou deux jours pour comprendre comment faire une install pas trop sale de redmine avec ses plugins
<julm> concernant l'env nixops, j'utilise aussi :
<julm> export NIXOPS_DEPLOYMENT="virtualbox"
<julm> export NIXOPS_STATE="$PWD/sec/var/nixops/state.nixops"
<eeva> -*
<eeva> (oopsie, sorry about that :D didn't mean anything, was vacuum cleaning too close to the keyboard ><')
<eeva> (erf, et c'est channel en français, aucune raison d'écrire en anglais)
<julm> :)
<julm> bon, j'ai avancé un petit peu sur cette histoire de plugin redmine
<julm> je me disais de faire peut-être une install déclarative comme les plugins Eclipse (cf. eclipseWithPlugins) mais en fait je pense que ça ne permettrait pas ensuite de désinstaller proprement les plugins de la base de données de Redmine
<julm> du coup je vais plutôt poursuivre une install déclarative non pas dans pkgs/ mais dans nixos/, qui installe les plugins dans /var/lib/redmine plutôt que dans /nix/store
<samueldr> y'a probablement deux écoles de pensées là-dedans: 1. ignorer la désinstallation, laisser ça comme étape manuelle (c'est ce qui est fait pour tout ce qui est stateful) 2. automatiser ça *d'une manière ou d'une autre*, mais j'ai pas vraiment de pistes
<julm> de sorte à pouvoir faire un diff des plugins dans /var/lib/redmine, et désinstaller proprement les plugins ôtés
<julm> ou alors, hmm
<samueldr> je connais pas redmine, mais est-ce que ce sont seulement des fichiers dans un sous-dossier ou est-ce que c'est éparpillé et avec de la config dans une BDD?
<julm> faire une install stateful mais conserver un lien vers les anciens plugins dans /var/lib/redmine tant qu'ils ne sont pas supprimés
<julm> c'est un gem dans un dossier et une migration de db
<samueldr> et j'imagine que ça casse si les infos dans la BDD ne sont pas retirées(?) avant de supprimer la gem?
<julm> du coup, ôter le plugin en remplaçant directement pkgs.redmine (ou pkgs.redmineWithPlugins), ça complique la désinstalle
<julm> je me dis qu'il vaut mieux coller au mieux INSTALL.md de Redmine
<julm> +au
<julm> qui dit de faire ça
<samueldr> de mémoire, la gestion de certaines app PHP automatisée avec Apache sur NixOS se fiche de désinstaller, c'est-à-dire que si tu enlèves quelque chose, le plugin ne sera plus dans les dossiers de ta version de l'app, mais ne fait rien pour tout ce qui est stateful
<julm> si je fais un pkgs.redmineWithPlugins (comme pkgs.eclipseWithPlugins, mais en ruby plutôt qu'en java), le seul truc que je vois après c'est d'avoir encore dans /var/lib/redmine des liens vers les anciens plugins et de les désinstaller proprement
<julm> samueldr: mouais, mais bon c'est nul
<julm> samueldr: ça devrait pouvoir être gérer un minimum
<julm> géré*
<samueldr> (d'une manière, je trouve ça correct parce que supprimer tout proprement c'est difficile, et c'est risqué: un utilisateur supprime le plugin de la liste par erreur et perd tout ce qui était stateful en rapport?)
<julm> hmm
<julm> pas faux
<samueldr> c'est comme ça pour pas mal tout ce qui est stateful: ajoute mysql à ta config, start le, fais une table; retire le de ta config -> /var/ va encore contenir les fichiers stateful
<julm> voui
<samueldr> (et de toute manière, même un utilisateur avec une app installée à la main pourrait vouloir différents résultats après avoir retiré un plugin, j'imagine?)
<julm> faudrait p'têtre une option pour choisir quoi faire
<julm> peut-être, moi je m'en tiens juste à https://www.redmine.org/projects/redmine/wiki/Plugins
<julm> dans tous les cas, au moins permettre de chdir qqpart pour pouvoir faire une uninstall manuelle propre
<samueldr> (faut dire aussi que je connais pas redmine, donc je parle un peu à travers mon chapeau)
<julm> ou bien dans un preStart nixos
<julm> samueldr: tkt, je connais très peu aussi, merci en tout cas
<julm> je me dis que vu le nombre de plugins disponibles ça va être pénible de tous les mettre dans pkgs (apparemment faut modifier la Gemfile, passer par bundle install puis bundix pour générer gemset.nix… lourd), je trouve plus simple de lancer bundle install directement sur le /var/lib/redmine du target
<julm> ce qui veut dire pouvoir avoir un environnement bundle évolutif dans /var/lib/redmine
<julm> pkgs/applications/version-management/redmine/Gemfile a un bout intéressant que je ne comprends pas encore :
<julm> # Load plugins' Gemfiles
<julm> Dir.glob File.expand_path("../plugins/*/{Gemfile,PluginGemfile}", __FILE__) do |file|
<julm> eval_gemfile file
<julm> end
<julm> je comprends pas encore comment l'utiliser, mais comme le Gemfile se reste dans /nix/store/29akhf9qx6irycdib3r7lpcy38mhlka5-redmine-3.4.6/share/redmine/Gemfile je me dis que ça peut être une piste
<julm> -se
<julm> hm, c'est un bout qui est gardé du Gemfile upstream : https://github.com/redmine/redmine/blob/master/Gemfile
<julm> « If the plugin requires a migration, run the following command in #{RAILS_ROOT} to upgrade your database (make a db backup before). »
<julm> ça rappelle bien de faire un backup
<julm> j'ai vu vite fait du code nix pour gérer des backups postgresql
<julm> rah, et pour simplifier, la version stable du plugin est incompatible avec le dernier redmine : https://github.com/jbox-web/redmine_git_hosting/issues/702
<{^_^}> jbox-web/redmine_git_hosting#702 (by skunkec, 39 weeks ago, closed): Error when install plugin redmine_git_hosting
<julm> bon, soit je comprends rien, soit les liens .zip et .tar.gz de github sont cassés pour https://github.com/jbox-web/redmine_git_hosting
<julm> ah quand ça s’y met…
<julm> mais si j'aime bcp, c un gros point noir pour la reproductibilité ça de dépendre sur des sources externes au cache de nixpkgs
<julm> je vais essayer de me débrouiller en passant fetchSubmodules = true; à fetchFromGitHub
<julm> pour que ça utilise fetchgit plutot que fetchzip
<julm> « Your disk is out of space. Free some space to be able to install your bundle. »
<julm> /o\
<julm> le pire c'est que c'est pas vrai du tout
<julm> rah bundle
<julm> keskimeveu
<samueldr> est-ce que ça se pourrait que le build dans le dossier temporaire avec nix remplisse un ramdisk (tmp on tmpfs)?
<samueldr> donc c'est une erreur directement avec l'erreur POSIX, et non pas une mauvaise utilisation d'un code d'erreur d'un binaire
<samueldr> c'est "bon signe"
<samueldr> ENOSPC peut arriver aussi si y'a pénurie dans les inodes
<samueldr> (de mémoire)
<samueldr> (et si vous trouvez mes formulations particulières, je suis Québécois)
<julm> ah voui, possible
<julm> j'ai reproduit le pb ailleurs que dans bundle
<julm> juste avec un cp
<julm> effectivement ya de l'espace libre, mais ça peut être une histoire d'inodes
<julm> samueldr: bonjour au Québec :)
<samueldr> julm: `df -i` (un I minuscule) permet de vérifier les inodes
<julm> 'k
<julm> /dev/disk/by-label/nixos 655360 655360 0 100% /
<julm> en effet, ça sent pas bon
<samueldr> 655360!
* julm shrugs :P
<julm> c une vm de test, je vais pas souvent de nix-collect-garbage
<julm> s/vais/fais/
<samueldr> 10100000000000000000 A0000
<samueldr> ouais, j'avais ce problème dans des containers LXC avec les upgrades automatiques de nixos
<julm> # nix-collect-garbage -d
<julm> removing old generations of profile /nix/var/nix/profiles/system
<julm> error: opening lock file '/nix/var/nix/profiles/system.lock': No space left on device
<julm> pff…
<samueldr> merci!
<julm> ça se mord la queue
<samueldr> supprime un fichier ou un dossier avec des fichiers dans /tmp
<samueldr> y'en faut qu'un :)
<{^_^}> nix#2376 (by samueldr, 4 weeks ago, open): Reserve a couple "allowance" files for inode-exhaustion situations and nix-collect-garbage
<julm> et je ne suis qu'à la 396 generation
<julm> yep, j'ai fait un rm et ça passe
<samueldr> :)
<julm> merci
<samueldr> je dis merci, parce que j'avais pas encore causé de reproduction à mon problème
<samueldr> et ta situation est dans un VM, au lieu d'être dans un LXC, alors ça valide que c'est pas LXC qui est en faute
<samueldr> dans une VM*
<julm> heh :)
<julm> c'est une bonne blague en tout cas, un peu comme quand tes logs saturent ta partition
<samueldr> ouais, quand ça m'est arrivé j'ai regardé l'espace libre et j'étais agacé
<samueldr> "comment ça disque plein?"
<samueldr> j'imagine que quelques coups de --optimise aiderait aussi à faire fondre l'utilisation d'inodes
<julm> 3900 store paths deleted, 1929.64 MiB freed
<julm> /dev/disk/by-label/nixos 655360 133306 522054 21% /
<samueldr> 3900 chemins dans le store; mais chacuns avec beaucoup plus d'élments sur le FS :)
<julm> oui
<julm> hmm, alors j'utilise auto-optimise-store = true dans mon ~/.config/nix/nix.conf de ma machine de provision, mais pas sur la VM
<julm> c plutôt pour éviter dupliquer le contenu des fichiers ça non ? mais ça rajoute des liens hard dans /nix/store/.links IIRC
<samueldr> julm: c'est vrai, j'ai pas pensé, ça doit pas affecter le nombre d'inodes :/
* julm subscribed to the issue
<julm> rah, encore un autre bug
<{^_^}> nix#2218 (by symphorien, 15 weeks ago, open): SQLite statement 'delete from ValidPaths where path = ?;': constraint failed
<julm> pfiou, pause pour le moment
<julm> trop sanguin le garçon
<julm> (comment ça j’utilise mount -o remount,rw /nix/store ? shhhht O:-))