Créer un dépôt Git dans / (root) pour les paramètres de suivi?

28

J'utilise donc Git principalement à des fins de développement, mais je viens de réaliser que je pouvais l'utiliser pour stocker des versions des fichiers de paramètres que j'ai sur mon installation Ubuntu.

Ma configuration proposée est la suivante:

  • git init un repo à /

  • Ajouter un .gitignoreat /qui ignore tous les fichiers, à l'exception des paramètres spécifiques que je souhaite suivre.

    Par exemple, le .gitignorepourrait contenir ( source ):

    ## Ignore everything...
    *
    
    ## Except...
    !/etc/default/tlp
    !/etc/crontab
    
  • Chaque fois que je modifie ces paramètres de bas niveau, je peux les suivre.

Y a-t-il quelque chose qui pourrait mal tourner avec cette configuration? Le noyau doit-il toujours avoir /uniquement certains dossiers? Cela gâchera-t-il le fonctionnement des applications?

Abhishek Divekar
la source
Vous devriez peut-être considérer vos ~fichiers de paramètres de répertoire personnel plutôt que les /fichiers
Michael Durrant
1
L'ancien serveur public de grex SunOS avait tous ses fichiers rc et qui sait quoi d'autre dans un ancien contrôle de source (je ne sais pas si c'était SCCS ou RCS, mais certainement plus ancien que CVS). Je ne vois pas de problème avec ça.
Joshua
@Mike Durrant: des trucs comme /etc/crontabsur mon portable personnel sont définitivement les miens, mais je vois ce que tu veux dire.
Abhishek Divekar
7
Utilisez etckeeperet faites des sauvegardes.
Rétablir Monica - M. Schröder
Attention juste à ne pas accidentellement mettre en scène / commit ie / dev / sda ou similaire: D
quetzalcoatl

Réponses:

37

La réponse à vos deux questions est non, vous pouvez créer le répertoire de votre choix dans le /. la seule chose qui pourrait arriver est quelques problèmes d'autorisation avec certains chemins spatiaux je suppose.

Cependant, il est préférable de stocker le .gitrépertoire ailleurs, quelque chose ressemble à:

git --git-dir=/home/user/backup-root --work-tree=/

Lisez ici .

Ravexina
la source
5
Très intéressant, je ne savais pas vraiment que tu pouvais faire ça dans git! Merci pour la suggestion.
Abhishek Divekar
C'est la même fonctionnalité qui vous permet de suivre uniquement les fichiers de paramètres sous / home / user btw. L'ajout d'un alias de shell rend cela très pratique.
Daniel Jour
19

En fait, vous souhaitez probablement contrôler les versions des fichiers de configuration dans /etc/(vous ne vous souciez pas des entrées du répertoire racine /, notamment des répertoires comme procou usrou bindans /), vous pouvez donc installer le etckeeperpackage

Et vous pouvez également contrôler la version de certains sous-répertoires sélectionnés (comme /usr/share/applications/celui que vous avez mentionné).

Cependant, ne plaisante pas avec le système de gestion de paquets Ubuntu . Vous devriez peut-être surtout sauvegarder la liste actuelle des packages installés.

Basile Starynkevitch
la source
1
En fait, je me soucie des fichiers /usr/share/applicationscar je m'amuse parfois avec eux.
Abhishek Divekar
6

Avoir un dépôt git dans / fonctionne très bien, sauf qu'il est difficile de remarquer quand vous avez un dépôt git de niveau inférieur avec des problèmes car il répondra à tous.

Remarque: il est moins fastidieux et probablement plus utile d'utiliser des «debsums»

sudo apt-get install debsums

Ce qui vous permettra de détecter rapidement (la plupart) des changements dans les binaires ou dans les fichiers de configuration.

À titre d'exemple des packages installés, voici ceux qui diffèrent des packages en amont.

$ sudo debsums -c
/boot/vmlinuz-4.10.0-19-generic

Et vous pouvez obtenir une liste des fichiers de configuration modifiés avec:

$ sudo debsums -ec
debsums: missing file /etc/default/chromium-browser (from chromium-browser package)
 /etc/libvirt/libvirt.conf
 <snip>

Notez comment le navigateur chrome est mal empaqueté et a un fichier répertorié dans la liste des fichiers de package qui n'existe pas.

/var/lib/dpkg/info/chromium-browser.list

Cela utilise les données dpkg et évite un grand répertoire /.git et un workflow.

gdahlm
la source
Pourriez-vous expliquer "sauf qu'il est difficile de remarquer quand vous avez un dépôt git de niveau inférieur avec des problèmes car il répondra à tous." un peu plus? Je ne comprends pas comment cela pourrait causer un problème si le .gitignore ne suit que quelques fichiers.
Abhishek Divekar
2
Je crois que @abhidivekar OP dit lorsque vous créez un autre git à dire /home/$USERalors .giten /répondra à toute commande git donnée pour le repo /home$USERplutôt que pour que [ .girfichier] dans /home/$USER...
George Udosen
Ah, je vois. Je pense que je devrais alors le garder dans un dossier séparé. Ou /
Abhishek Divekar
1
@George Pour accéder au .gitrépertoire plus haut dans l'arborescence, il vous suffit cdd'y accéder , ou à un sous-répertoire de celui-ci qui ne possède pas de .gitdossier (un répertoire normal qui l'est)
cat
2
@abhidivekar Correct, ce n'est pas un problème si les avantages l'emportent sur les problèmes mais c'est un comportement inattendu. Pas un bloqueur, juste une mise en garde.
gdahlm
5

J'ai donc exploré les autres réponses et j'ai trouvé une procédure qui fonctionne pour moi:

  • Faites un .gitignoreat /. C'était beaucoup plus compliqué que je ne le pensais, en raison de la façon dont Git gère les fichiers de liste blanche dans les sous-dossiers. J'ai utilisé ceci et ce lien pour m'aider.

    ## Source: /programming//a/29932318/4900327
    ## Comments are on new lines because trailing whitespace matters in Git (stackoverflow.com/a/8865858/4900327)
    
    # Blacklist all files, folders and subfolders in the same directory as the .gitignore file.
    /*
    # Do not blacklist the .gitignore file.
    !.gitignore
    
    # Now whitelist certain files.
    # For files in subfolders, some hoops must be jumped through (stackoverflow.com/a/16318111/4900327):
    
    ## Whitelisting files in /etc/ folder:
    # Whitelist the /etc/ folder (the git repo folder is whitelisted always)
    !/etc/
    # Blacklist all files in /etc/ folder.
    /etc/*
    # Whitelist specific file(s) in /etc/ folder.
    !/etc/crontab
    
    
    ## Whitelisting files in /etc/default/ folder:
    # /etc/ is already whitelisted, and its contents blacklisted.
    # Whitelist /etc/default/ folder.
    !/etc/default/
    # Blacklist all files in /etc/default/ folder.
    /etc/default/*
    # Whitelist specific file(s) in /etc/default/ folder.
    !/etc/default/tlp
    
    
    ## Whitelisting files in /home/USERNAME/ folder:
    # Whitelist /home/ folder.
    !/home/
    # Blacklist all files in /home/ folder.
    /home/*
    # Whitelist /home/USERNAME/ folder.
    !/home/USERNAME/
    # Blacklist all files in /home/USERNAME/ folder.
    /home/USERNAME/*
    # Whitelist specific file(s) in /home/USERNAME/ folder
    !/home/USERNAME/.bash_profile
    !/home/USERNAME/.bashrc
    
  • Allez /et exécutez git init .Jusqu'à présent, je n'ai pas pu stocker le .git/dossier dans un autre répertoire en utilisant le lien mentionné par @Ravexina .

  • Exécutez git add .et git status. Vous devriez obtenir une liste de tous les fichiers de paramètres que Git suit.

    If you used the above `.gitignore`, it should track `/etc/crontab`, `/etc/default/tlp`, `/home/USERNAME/.bash_profile`, and `/home/USERNAME/.bashrc`.
    
  • Engagez-vous avec git commit -m "Initial settings files".

  • Vous pouvez suivre les modifications avec git log -p -- path/to/fileou gitk path/to/file. Plus de discussion à ce sujet ici .

Abhishek Divekar
la source
2

Si vous allez stocker des choses sensibles (comme /etc/shadow) dans le dépôt git, vous devez vous assurer qu'elles ne sont pas lisibles par tous les utilisateurs, car par défaut les objets auront l'autorisation 444et les répertoires auront l'autorisation 0755. Vous pouvez modifier l'autorisation .gitpour 700ou le mettre dans/root

Un autre problème est que git ne stocke pas les autorisations de fichiers comme le système de fichiers et ne stocke pas les attributs étendus. Pour les fichiers, git stocke uniquement s'ils sont exécutables. Donc, si vous souhaitez restaurer un fichier supprimé, son propriétaire et son groupe seront root (si vous le faites en tant que root), et son autorisation sera 644ou 755. Cela peut être problématique pour les fichiers de configuration des services dont le propriétaire n'est pas root.

yt7b97q-
la source