Créer un repo Git sur / (root) pour le suivi des paramètres?

23

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

La configuration que je propose est la suivante:

  • git init un repo à /

  • Ajoutez un .gitignore at / qui ignore les fichiers à l'exception des paramètres spécifiques que je veux suivre.

    Par exemple, le .gitignore pourrait contenir ( source ):

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

Y a-t-il quelque chose qui pourrait aller de travers avec cette configuration? Le noyau a-t-il toujours besoin de / pour n'avoir que certains dossiers? Est-ce que cela gâchera le fonctionnement de toutes les applications?

    
posée abhi divekar 19.05.2017 - 21:22
la source

5 réponses

32

La réponse à vos deux questions est non, vous pouvez créer n'importe quel répertoire dans / . La seule chose qui pourrait arriver, ce sont des problèmes de permission avec des chemins spatiaux, je suppose.

Cependant, il vaut mieux stocker le répertoire .git ailleurs, quelque chose qui ressemble à:

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

Lisez ici .

    
réponse donnée Ravexina 19.05.2017 - 21:30
la source
18

En fait, vous voulez 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 tels que proc ou usr ou bin in / ), vous pouvez donc installer le package etckeeper

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

Cependant, n'utilisez pas le système Ubuntu gestion des paquets . Peut-être que vous devriez surtout sauvegarder la liste actuelle des paquets installés.

    
réponse donnée Basile Starynkevitch 20.05.2017 - 08:08
la source
6

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

Note: Il est moins utile et probablement plus utile d’utiliser des 'debsums'

sudo apt-get install debsums

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

À titre d’exemple à partir 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 que le navigateur chrome est mal empaqueté et qu’un fichier est répertorié dans la liste de fichiers du package qui n’existe pas.

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

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

    
réponse donnée gdahlm 19.05.2017 - 21:50
la source
5

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

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

    ## Source: https://stackoverflow.com/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 dossier .git/ dans un autre répertoire en utilisant lien mentionné par @Ravexina .

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

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

  • Vous pouvez suivre les modifications avec git log -p -- path/to/file ou gitk path/to/file . Plus d'informations sur cette ici .

réponse donnée abhi divekar 20.05.2017 - 11:03
la source
2

Si vous souhaitez stocker des éléments sensibles (comme /etc/shadow ) dans le fichier git repo, vous devez vous assurer qu'il n'est pas lisible par tous les utilisateurs, car par par défaut les objets auront la permission 444 et les répertoires seront avoir la permission 0755 . Vous pouvez changer la permission de .git à 700 ou mettez-le dans /root

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

    
réponse donnée yt7b97q- 21.05.2017 - 10:11
la source

Lire d'autres questions sur les étiquettes