{"id":2188,"date":"2019-09-20T10:10:22","date_gmt":"2019-09-20T08:10:22","guid":{"rendered":"http:\/\/www.unicoda.com\/?p=2188"},"modified":"2019-09-10T16:39:53","modified_gmt":"2019-09-10T14:39:53","slug":"dotfiles-git-et-gnu-stow","status":"publish","type":"post","link":"https:\/\/www.unicoda.com\/?p=2188","title":{"rendered":"dotfiles, git et GNU stow"},"content":{"rendered":"\n<p>En septembre 2016, j&rsquo;avais commenc\u00e9 \u00e0 \u00e9crire l&rsquo;introduction de cet article. J&rsquo;expliquais donc que je venais de r\u00e9installer le syst\u00e8me d&rsquo;exploitation de mon ordinateur  portable, pour passer de Debian 8 \u00e0 Arch Linux. \u00c0 ce moment-l\u00e0, c&rsquo;\u00e9tait donc pos\u00e9 la question de la synchronisation de la configuration de l&rsquo;environnement entre machines. Par configuration de l&rsquo;environnement, je d\u00e9signe ici les fichiers de configuration des diff\u00e9rents logiciels que j&rsquo;utilise, plus g\u00e9n\u00e9ralement appel\u00e9s \u00ab\u00a0dotfiles\u00a0\u00bb, car commen\u00e7ant par un point, ou \u00e9tant stock\u00e9 dans le dossier <code>.config<\/code> du r\u00e9pertoire utilisateur.<\/p>\n\n\n\n<p>Pour g\u00e9rer mes configurations entre machines, j&rsquo;ai donc utilis\u00e9 le duo Git et <a href=\"https:\/\/www.gnu.org\/software\/stow\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"GNU stow (s\u2019ouvre dans un nouvel onglet)\">GNU stow<\/a> depuis lors. Git bien s\u00fbr pour la synchronisation entre machines et l&rsquo;historisation, et GNU stow, pour le d\u00e9ploiement des fichiers \u00e0 leur emplacement d\u00e9di\u00e9.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">Fonctionnement<\/h6>\n\n\n\n<p>Par d\u00e9faut, stow cr\u00e9\u00e9 un lien symbolique dans le r\u00e9pertoire parent de celui \u00e0 partir duquel on ex\u00e9cute la commande, pour tous les fichiers concern\u00e9s par la commande. Ma configuration part du principe que mon d\u00e9p\u00f4t git dotfiles est stock\u00e9 \u00e0 la racine de mon r\u00e9pertoire utilisateur, \u00e0 savoir donc <code>~\/dotfiles<\/code>, et que toutes les commandes stow sont ex\u00e9cut\u00e9es depuis ce dossier. L&rsquo;installation de la configuration s&rsquo;effectue alors en appelant la commande stow avec pour param\u00e8tre le nom du logiciel dont on souhaite d\u00e9ployer la configuration. Au niveau de la structure, mon d\u00e9p\u00f4t git se pr\u00e9sente donc sous la forme d&rsquo;une liste de r\u00e9pertoire contenant chacun le chemin vers la configuration du logiciel concern\u00e9, c&rsquo;est-\u00e0-dire :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li> soit directement le fichier si celui-ci est stock\u00e9 directement \u00e0 la racine du r\u00e9pertoire utilisateur: c&rsquo;est le cas par exemple du fichier <code>.gitconfig<\/code>.<\/li><li>soit dans une arborescence de r\u00e9pertoire correspondant \u00e0 son emplacement: par exemple pour i3, la configuration est stock\u00e9e dans <code>~\/.config\/i3<\/code>, j&rsquo;ai donc dans mon d\u00e9p\u00f4t un dossier i3 contenant l&rsquo;arborescence <code>.config\/i3<\/code>.<\/li><\/ul>\n\n\n\n<p>Voici un extrait de mon d\u00e9p\u00f4t en image pour expliciter la situation.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"171\" src=\"https:\/\/www.unicoda.com\/wp-content\/uploads\/2019\/09\/Capture-d\u2019e\u0301cran-2019-09-03-a\u0300-16.14.15-1024x171.png\" alt=\"\" class=\"wp-image-3805\" srcset=\"https:\/\/www.unicoda.com\/wp-content\/uploads\/2019\/09\/Capture-d\u2019e\u0301cran-2019-09-03-a\u0300-16.14.15-1024x171.png 1024w, https:\/\/www.unicoda.com\/wp-content\/uploads\/2019\/09\/Capture-d\u2019e\u0301cran-2019-09-03-a\u0300-16.14.15-300x50.png 300w, https:\/\/www.unicoda.com\/wp-content\/uploads\/2019\/09\/Capture-d\u2019e\u0301cran-2019-09-03-a\u0300-16.14.15-768x128.png 768w, https:\/\/www.unicoda.com\/wp-content\/uploads\/2019\/09\/Capture-d\u2019e\u0301cran-2019-09-03-a\u0300-16.14.15-1200x200.png 1200w, https:\/\/www.unicoda.com\/wp-content\/uploads\/2019\/09\/Capture-d\u2019e\u0301cran-2019-09-03-a\u0300-16.14.15.png 2048w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption>Extrait de la structure du d\u00e9p\u00f4t.<\/figcaption><\/figure>\n\n\n\n<p>Ainsi, pour d\u00e9ployer le fichier de configuration de Git, j&rsquo;ex\u00e9cute la commande suivante, depuis mon dossier dotfiles:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">stow git<\/pre>\n\n\n\n<p>Ce qui aura pour effet de cr\u00e9er un lien symbolique <code>.gitconfig<\/code> vers le fichier <code>.gitconfig<\/code> de mon d\u00e9p\u00f4t git. Si on souhaite modifier le r\u00e9pertoire de destination, on peut utiliser l&rsquo;option -t. Dans l&rsquo;image ci-dessus, pour d\u00e9ployer la configuration ansible, j&rsquo;utiliserai alors:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">stow -t \/ ansible<\/pre>\n\n\n\n<p>A noter que stow effectue la cr\u00e9ation du lien symbolique \u00e0 la condition que le fichier n&rsquo;existe pas. Si un fichier de configuration par d\u00e9faut existe d\u00e9j\u00e0, il sera n\u00e9cessaire de le supprimer d&rsquo;abord avant de pouvoir proc\u00e9der \u00e0 l&rsquo;ex\u00e9cution de la commande stow.<\/p>\n\n\n\n<p>Dernier point, si je souhaite re-d\u00e9ployer la configuration git, j&rsquo;utiliserai alors l&rsquo;option -R, soit la commande :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">stow -R git<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\">Conclusion<\/h6>\n\n\n\n<p>Le duo git + GNU stow est plut\u00f4t efficace pour ce qui est de la gestion des fichiers de configuration, les fameux fichiers dotfiles, et pour la synchronisation entre machines. Je m&rsquo;en \u00e9tais \u00e9galement servi pour stocker et d\u00e9ployer facilement certains fichiers de configuration sur mes serveurs, avant de commencer \u00e0 automatiser avec ansible. Si je r\u00e9dige aujourd&rsquo;hui, cet article sur le sujet, c&rsquo;est pour garder une trace d&rsquo;une m\u00e9thode robuste qui m&rsquo;a \u00e9t\u00e9 utile pendant plus de deux ans. N\u00e9anmoins, la structure actuelle du d\u00e9p\u00f4t git ne me convient plus autant qu&rsquo;avant et je souhaiterais passer \u00e0 une organisation plus proche, ou m\u00eame identique \u00e0 l&rsquo;arborescence pr\u00e9sente sur le disque. J&rsquo;\u00e9tudie donc les autres solutions de gestion des dotfiles, et m&rsquo;int\u00e9resse en particulier \u00e0 rcm; mais ceci est une autre histoire, pour un autre article.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En septembre 2016, j&rsquo;avais commenc\u00e9 \u00e0 \u00e9crire l&rsquo;introduction de cet article. J&rsquo;expliquais donc que je venais de r\u00e9installer le syst\u00e8me d&rsquo;exploitation de mon ordinateur portable, pour passer de Debian 8 \u00e0 Arch Linux. \u00c0 ce moment-l\u00e0, c&rsquo;\u00e9tait donc pos\u00e9 la question de la synchronisation de la configuration de l&rsquo;environnement entre machines. Par configuration de l&rsquo;environnement, &hellip; <a href=\"https:\/\/www.unicoda.com\/?p=2188\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;dotfiles, git et GNU stow&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[316,31,5],"tags":[92,297,15,296],"class_list":["post-2188","post","type-post","status-publish","format-standard","hentry","category-configuration","category-installation","category-terminal","tag-configuration","tag-dotfiles","tag-git","tag-stow"],"_links":{"self":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/2188","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2188"}],"version-history":[{"count":6,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/2188\/revisions"}],"predecessor-version":[{"id":3823,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/2188\/revisions\/3823"}],"wp:attachment":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2188"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2188"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}