Style Kung Fu Linux: synchroniser les paramètres

L'une des meilleures qualités de Linux et des systèmes d'exploitation similaires est leur personnalisation approfondie. Si vous n'aimez pas quelque chose, il y a de fortes chances que vous puissiez le modifier facilement en modifiant un fichier. Par exemple, considérons bash, un shell de commande qui est populaire à tous égards. Si vous devez modifier l'invite de ligne de commande, c'est tout à fait faisable. Si vous voulez qu'une clé Tab



autorise l'auto-complétion insensible à la casse des noms de fichiers, ce n'est pas non plus un problème. En règle générale, ces paramètres sont effectués dans l'un des soi-disant «fichiers de profil», en quelque sorte .bashrc



situé dans le répertoire personnel de l'utilisateur. Si quelqu'un travaille sur un seul ordinateur, il n'a aucun problème avec les paramètres. Il contribue au dossier







.bashrc



, et dans d'autres fichiers similaires, les modifications nécessaires, personnalise le système pour lui-même et travaille dans un environnement qui se comporte comme il le souhaite. Des problèmes surviennent lorsque quelqu'un doit utiliser plusieurs ordinateurs. Peut-être parlons-nous d'un serveur Web, d'un ordinateur de bureau, d'une machine qui joue le rôle d'un pare-feu et de quelques dizaines de Raspberry Pi. Comment configurer tous ces systèmes pour qu'ils soient identiques? Et comment, une fois qu'ils sont tous configurés de la même manière, gardez-vous les paramètres à jour?



Plusieurs options de synchronisation des paramètres



En fait, il existe plusieurs façons de synchroniser les paramètres système Linux. Étant donné que ces paramètres sont généralement stockés dans certains types de fichiers, presque tous les mécanismes de synchronisation peuvent être utilisés pour résoudre notre problème. Cela prendra du temps, mais par conséquent, vous pouvez réaliser ce que vous voulez. Supposons que vous puissiez mettre tous vos fichiers de configuration dans un répertoire, puis placer des liens symboliques vers ces fichiers aux bons endroits dans votre répertoire personnel. De plus, en utilisant, vous pouvez rsync



synchroniser ce dossier entre différents systèmes.



Si vous connaissez Git, vous avez déjà deviné une autre option pour résoudre ce problème. Ici, en plus de la possibilité de synchroniser les paramètres, vous aurez également la possibilité de savoir quoi et quand changé dans vos fichiers de configuration. En fait, je suis dans un matériau de manières inhabituelles d'utiliser le Git , j'en ai parlé, montrant ma synchronisation des paramètres système , basée sur Git. Récemment, cependant, j'ai découvert qu'il y avait un système appelé chezmoi , qui est écrit en Go, et utilise une approche de synchronisation des paramètres complètement différente de la mienne.



Caractéristiques de Chezmoi



Selon les données du référentiel du projet, il chezmoi



offre à l'utilisateur les options suivantes:



  • Une description déclarative de l'état souhaité des fichiers du répertoire personnel.
  • Utilisation de modèles pour créer des fichiers.
  • La sécurité du travail est assurée par l'intégration avec Bitwarden, avec LastPass et avec certains programmes de stockage local des clés.
  • Prise en charge de la gestion des mises à jour atomiques. Cela évite au système de tomber dans un état «intermédiaire».
  • Prise en charge de plusieurs systèmes d'exploitation.
  • L'utilisateur est informé des actions qu'il est prévu d'effectuer, le mode "test run" est pris en charge.
  • Vitesse de travail élevée, possibilité de choisir lequel est utilisé en conjonction avec chezmoi



    le système de contrôle de version.


Tout cela semble très intéressant. La procédure d'installation de l'utilitaire dans différents systèmes d'exploitation a ses propres particularités, les instructions correspondantes se trouvent dans le référentiel du projet.



Utiliser chezmoi



Le fichier exécutable qui donne accès aux fonctionnalités chezmoi



, sans surprise, répète le nom du projet. Il prend en charge plusieurs commandes, parmi lesquelles je voudrais noter les suivantes:



  • add



    - ajout d'un fichier à la liste des fichiers gérés par le système.
  • edit



    - édition de fichiers.
  • diff



    - découvrir les modifications éventuelles en attente d'inclusion dans la version de travail du fichier.
  • apply



    - inclusion des modifications en attente d'approbation dans la version de travail du fichier.


Lorsqu'un nouveau fichier est ajouté au système, une copie de celui-ci est placée dans le répertoire ~/.local/share/chezmoi



. Par souci de compatibilité avec les systèmes de contrôle de version, chezmoi



ignore les fichiers de ce répertoire dont le nom commence par un point. Par conséquent, si vous ajoutez, par exemple, un fichier au système .bashrc



, il sera automatiquement renommé dot_bashrc



.



Si seulement ces possibilités étaient chezmoi



limitées, alors il n'y aurait rien de remarquable dans cet utilitaire. La chose la plus intéressante ici est la synchronisation des copies de fichiers. Pour résoudre ce problème, il chezmoi



utilise un système de contrôle de version externe. Mais que se passe-t-il si certains des ordinateurs dont les paramètres sont synchronisés ont besoin de paramètres spéciaux?



Prise en charge des paramètres spéciaux



Par exemple, sur un ordinateur de bureau, vous devez utiliser une invite de ligne de commande personnalisée. Et sur le serveur, sur le pare-feu et sur les ordinateurs Raspberry Pi, vous serez satisfait de l'invitation habituelle. Cela signifie que sur chacun des ordinateurs, dans le fichier .bashrc



, une valeur de paramètre spéciale doit être présente PS1



.



Cela peut être fait en ajoutant les entrées appropriées à la section du data



fichier chezmoi.yaml



. En fait, vous pouvez utiliser différents formats ici, en particulier - JSON



et TOML



. Ce fichier est unique pour chaque ordinateur. Il vous permet d'apporter des modifications aux fichiers modèles. Par exemple, un chezmoi.yaml



ordinateur de bureau peut contenir une entrée surPS1String



, décrivant des paramètres complexes pour l'invite de ligne de commande, et dans le même fichier pour le Raspberry Pi, une entrée similaire sera déjà organisée beaucoup plus facilement.



Afin d'ajouter un certain fichier au système qui sera utilisé comme modèle (par exemple, un fichier .bashrc



), vous devez utiliser l'option de -T



commande add



. Le fichier modèle basé sur .bashrc



aura un nom dot_bashrc.tmpl



. Les mécanismes standard de création de modèles Go offrent à l'utilisateur chezmoi



une variété d'options. De plus, chezmoi



il vous permet d'utiliser des variables qui, par exemple, vous permettent de travailler avec le nom de l'ordinateur et le nom d'utilisateur, avec les identifiants du système d'exploitation et de l'architecture.



Grâce aux capacités utilisées danschezmoi



langage de modèle, l'utilisateur a beaucoup plus de liberté que d'utiliser simplement des variables. Dans les modèles, en particulier, vous pouvez utiliser des conditions. Par exemple, cela peut ressembler à ceci:



#  
export EDITOR=vi
 
# ,    
{{- if eq .chezmoi.hostname "work-laptop" }}
#     ~/<code>.bashrc</code>  work-laptop
{{- end }}

      
      





sécurité



Chezmoi



reconnaît les fichiers privés et les traite en conséquence. Ainsi, un répertoire est privé chezmoi



, le système utilise un préfixe private_



lors de l'attribution de noms à des fichiers privés (par exemple, le nom d'un tel fichier peut ressembler private_dot_bashrc



).



On suppose qu'un système de contrôle de version sera utilisé pour organiser la synchronisation des fichiers. En d'autres termes, lors de la configuration d'un nouvel ordinateur ou de la mise à jour des paramètres d'une certaine machine, vous synchronisez le contenu du répertoire chezmoi



avec une copie des paramètres stockés dans le système de contrôle de version. Ensuite, tout ce qui doit être configuré dans le fichier de configuration et les modifications sont appliquées, éventuellement avec une vérification préalable des modifications qui seront appliquées.



Cela signifie, bien sûr, que les fichiers stockés seront aussi "privés" que le système de contrôle de version le permet. Si vous publiez vos fichiers de configuration sur un système public, cela signifie qu'il n'est plus question de "confidentialité". Une manière de résoudre ce problème consiste à utiliser un système de création de modèles et non à traiter le fichier de configuration avec le système de contrôle de version. Et cela, puisqu'il est unique pour chaque ordinateur, ne doit en aucun cas être traité à l'aide du système de contrôle de version. Cela signifie, entre autres, qu'il doit être stocké différemment des autres fichiers.



Supposons que vous ayez une entrée comme celle-ci dans votre fichier de configuration:



hackaday:

   password: 0xdeadbeef

      
      





Le mot de passe doit être gardé secret. Et dans les fichiers publics, la construction suivante peut être utilisée:



password = {{ .hackaday.password }}

      
      





Lorsque vous travaillez avec chezmoi



, vous pouvez toujours utiliser des fichiers de configuration chiffrés avec gpg



.



Système de contrôle de version



Si nous parlons de systèmes de contrôle de version, chezmoi



il existe des commandes pour envoyer des matériaux aux systèmes de contrôle de version pris en charge et, par conséquent, des commandes pour charger des données. La valeur par défaut est utilisée git



, mais il existe d'autres options, comme hg



. Les paramètres correspondants sont définis dans le fichier de configuration.



Il existe également des commandes qui vous permettent d'obtenir simplement l'ensemble complet des fichiers de configuration ou d'exporter la configuration. Vous pouvez en savoir plus sur ces commandes dans le référentiel du projet. Par défaut, tout le travail est effectué dans le répertoire de base, mais si nécessaire, vous pouvez configurer le programme pour qu'il fonctionne avec un répertoire cible différent.



Résultat



Dans l'ensemble, on peut noter que chezmoi



cela semble être un projet bien pensé. Mais je n'ai rien vu ici qui me forcerait à passer chezmoi



de mon système de synchronisation des paramètres. Si j'étais tombé sur chezmoi



quand je réfléchissais simplement à la façon de résoudre le problème en question, alors j'utiliserais probablement ce projet particulier, et non pas créer le mien. Je ne prétends pas que le système de création de modèles soit chezmoi



très bon, mais mon système obtient un effet similaire en choisissant différents fichiers en fonction de l’environnement.



Fichier de paramètres uniquechezmoi



difficile à gérer avec un système de contrôle de version. Oui, les utilisateurs n'ont généralement pas tendance à le faire. Si le référentiel utilisé pour stocker les paramètres est privé, ou si des informations privées ne sont pas incluses dans les fichiers de configuration, vous pouvez placer des options pour le fichier de paramètres dans ce système chezmoi



(par exemple, il peut y avoir une version de ce fichier pour le Raspberry Pi et pour les ordinateurs ordinaires). Ensuite, lorsque vous configurez votre ordinateur pour la première fois, vous pouvez renommer le fichier approprié. Mais il est plus probable que le fichier de paramètres système soit simplement copié. L'approche selon laquelle le fichier de configurationchezmoi



ne sont pas gérés par le contrôle de version, il y a l'avantage que si tout est configuré correctement, un référentiel public peut être utilisé en toute sécurité pour stocker des données.



Et pour le fonctionnement de mon système, il est très important d'utiliser un référentiel privé - si seulement celui qui l'utilise ne se soucie pas de faire entrer ses fichiers de configuration dans le domaine public. Cependant, tous les fichiers sont traités à l'aide d'un système de contrôle de version. Le système vous permet de vous tenir au courant de tous les changements sans avoir besoin d'utiliser des modèles, qui prennent du temps à maîtriser. Il vous suffit de placer les paramètres dans les fichiers appropriés. La seule fonctionnalité que je peux tout à fait ajouter à mon système, inspirée parchezmoi



, c'est la possibilité d'y ajouter de nouveaux fichiers, qui sont surveillés. Bien que mon système vous permette de synchroniser les paramètres, vous devez maintenant y ajouter des fichiers manuellement. Le fichier est déplacé vers un répertoire spécial, après quoi les entrées de fichier sont ajoutées au système et un lien symbolique est créé.



Mais c'est à cela que sert Linux. Il existe de nombreuses façons de résoudre le même problème. Si vous n'aimez pas une chose, vous pouvez en trouver une autre. Et si vous n'aimez rien, vous pouvez créer quelque chose de vous-même sans trop de difficulté. Cela crée cependant certains problèmes lors de l'utilisation de Linux par de nombreuses personnes ordinaires qui ne sont pas habituées à cela. Ils ne cherchent pas à choisir parmi de nombreuses options, ils veulent une solution de travail simple et claire. Et dans la communauté Linux, au contraire, il est habituel de comparer constamment tout avec tout et de discuter avec ferveur de ce qui est meilleur - emacs



soit vi



C ou Python.



Comment synchronisez-vous les paramètres sur différentes machines Linux?










All Articles