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 sur
PS1String
, 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 dans
chezmoi
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 unique
chezmoi
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 configuration
chezmoi
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 par
chezmoi
, 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?