web-dev-qa-db-fra.com

Créer un dépôt Git sur / (racine) pour le suivi des paramètres?

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

Ma configuration proposée est:

  • git init un dépôt avec /

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

    Par exemple, le .gitignore pourrait 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 at-il quelque chose qui pourrait mal tourner avec cette configuration? Est-ce que le noyau a toujours besoin de / pour n'avoir que certains dossiers? Cela va-t-il gâcher le fonctionnement des applications?

26
Abhishek Divekar

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

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

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

Lire ici .

35
Ravexina

En fait, vous voudrez 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 dans /), de sorte que vous souhaiterez peut-être installer le etckeeper forfait

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

Cependant, ne jouez pas avec le système Ubuntu gestion de paquets . Peut-être devriez-vous surtout sauvegarder la liste actuelle des paquets installés.

18

Avoir un repo git dans/fonctionne bien, sauf que cela rend difficile de remarquer lorsque vous avez un repo git de niveau inférieur avec des problèmes car il répondra à tous.

Note: C'est moins de travail et probablement plus utile d'utiliser '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.

Par exemple, parmi les 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 emballé et qu'un fichier répertorié dans la liste des fichiers de package n'existe pas.

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

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

6
gdahlm

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

  • Créez un .gitignore à /. 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é this et this 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 le lien mentionné par @Ravexina .

  • Exécutez git add . and 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`.
    
  • S'engager 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 .

5
Abhishek Divekar

Si vous allez stocker des éléments sensibles (tels que /etc/shadow) dans le dépôt git, vous devez vous assurer que tous les utilisateurs ne les liront pas, car par défaut, les objets auront l'autorisation 444 et les répertoires auront l'autorisation 0755. Vous pouvez changer l'autorisation de .git en 700 ou la mettre dans /root

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

2
yt7b97q-