Creazione di un repository Git su / (root) per le impostazioni di tracciamento?


28

Quindi uso Git principalmente per scopi di sviluppo, ma mi sono appena reso conto che avrei potuto usarlo per archiviare le versioni dei file delle impostazioni che ho sulla mia installazione di Ubuntu.

La mia configurazione proposta è:

  • git init un repo a /

  • Aggiungi un .gitignorea /che ignora tutti i file tranne le impostazioni specifiche che voglio tracciare.

    Ad esempio, .gitignorepotrebbe contenere ( fonte ):

    ## Ignore everything...
    *
    
    ## Except...
    !/etc/default/tlp
    !/etc/crontab
    
  • Ogni volta che modifico queste impostazioni di basso livello, posso seguirle.

C'è qualcosa che potrebbe andare storto con questa configurazione? Il kernel deve sempre avere /solo determinate cartelle? Confonderà il funzionamento di qualsiasi applicazione?


Forse dovresti considerare i ~file delle impostazioni della tua directory home piuttosto che i /file
Michael Durrant,

1
Il vecchio server pubblico SunOS grex aveva tutti i suoi file rc e chissà cos'altro in un vecchio controllo del codice sorgente (non sono sicuro che fosse SCCS o RCS, ma sicuramente più vecchio di CVS). Non vedo problemi con questo.
Giosuè,

@Mike Durrant: cose come /etc/crontabsul mio laptop personale sono sicuramente le mie, ma capisco cosa intendi.
Abhishek Divekar,

7
Utilizzare etckeepere fare backup.
Ripristina Monica - M. Schröder,

Fai solo attenzione a non mettere in scena accidentalmente / commettere ad es. / Dev / sda o simili: D
quetzalcoatl

Risposte:


37

La risposta ad entrambe le tue domande è no, puoi creare qualsiasi directory tu voglia in /. l'unica cosa che potrebbe accadere sono alcuni problemi di autorizzazione con alcuni percorsi spaziali, immagino.

Tuttavia è meglio archiviare la .gitdirectory altrove, qualcosa del tipo:

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

Leggi qui .


5
Molto interessante, in realtà non sapevo che potresti farlo in git! Grazie per il suggerimento
Abhishek Divekar,

Questa è la stessa funzione che ti consente di tracciare solo i file di impostazione in / home / user btw. L'aggiunta di un alias shell lo rende inoltre molto conveniente.
Daniel Jour,

19

In realtà, probabilmente vorrai controllare la versione dei file di configurazione in /etc/(non ti interessano le voci della directory principale /, in particolare le directory come proco usro binin /), quindi potresti voler installare il etckeeperpacchetto

E potresti anche controllare la versione di alcune sottodirectory selezionate (come /usr/share/applications/quella che hai menzionato).

Tuttavia, non scherzare con il sistema di gestione dei pacchetti Ubuntu . Forse dovresti principalmente eseguire il backup dell'elenco corrente dei pacchetti installati.


1
In realtà mi preoccupo dei file /usr/share/applicationsmentre ogni tanto li gioco.
Abhishek Divekar,

6

Avere un repository git in / funziona bene, tranne per il fatto che rende difficile notare quando si ha un repository git di livello inferiore con problemi in quanto risponderà per tutti.

Nota: è meno lavoro e probabilmente più utile usare 'debsums'

sudo apt-get install debsums

Ciò consentirà di rilevare rapidamente (la maggior parte) modifiche nei file binari o nei file di configurazione.

Ad esempio dai pacchetti installati qui ci sono quelli che differiscono dai pacchetti upstream.

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

E puoi ottenere un elenco di file di configurazione modificati con:

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

Nota come il browser chromium sia impacchettato in modo improprio e abbia un file elencato nell'elenco dei file del pacchetto che non esiste.

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

Questo utilizza i dati di dpkg ed evita una directory / flusso di lavoro /.git di grandi dimensioni.


Potresti spiegare "tranne che rende difficile notare quando hai un repository git di livello inferiore con problemi in quanto risponderà per tutti loro." un po 'di più? Non capisco come possa causare un problema se .gitignore tiene traccia solo di alcuni file.
Abhishek Divekar,

2
Credo OP @abhidivekar sta dicendo quando si crea un altro repo git nel dire /home/$USERallora la .gitin /risponderà a qualsiasi comando git dato per il pronti contro termine in /home$USERpiuttosto che per quella [ .girFile] in /home/$USER...
George Udosen

Ah capisco Penso che dovrei semplicemente tenerlo in una cartella separata allora. Oppure /
Abhishek Divekar,

1
@George Per accedere alla .gitdirectory più in alto nella struttura, basta semplicemente cdad essa, o una sua sottodirectory che non ha una .gitcartella (una directory normale)
cat

2
@abhidivekar Corretto, non è un problema se i benefici superano i problemi ma è un comportamento inaspettato. Non un bloccante, solo un avvertimento.
gdahlm,

5

Quindi ho esplorato le altre risposte e ho trovato una procedura che funziona per me:

  • Fai un .gitignoreat /. Questo è stato molto più complicato di quanto pensassi, a causa del modo in cui Git gestisce i file nella whitelist nelle sottocartelle. Ho usato questo e questo link per aiutarmi.

    ## 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
    
  • Vai a /ed esegui git init .Finora, non sono stato in grado di memorizzare la .git/cartella in un'altra directory utilizzando il collegamento menzionato da @Ravexina .

  • Corri git add .e git status. Dovresti ottenere un elenco di tutti i file delle impostazioni che Git sta monitorando.

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

  • È possibile tenere traccia delle modifiche con git log -p -- path/to/fileo gitk path/to/file. Altre discussioni su questo qui .


2

Se hai intenzione di memorizzare cose sensibili (come /etc/shadow) nel repository git, dovresti assicurarti che non siano leggibili da tutti gli utenti, poiché per impostazione predefinita gli oggetti avranno l'autorizzazione 444e le directory avranno l'autorizzazione 0755. È possibile modificare l'autorizzazione di .gitper 700o metterlo in/root

Un altro problema è che git non memorizza le autorizzazioni dei file come il file system e non memorizza gli attributi estesi. Per i file, git memorizza solo se sono eseguibili. Quindi, se si desidera ripristinare un file eliminato, il proprietario e il gruppo saranno root (se lo si fa come root) e la sua autorizzazione sarà 644o 755. Potrebbe essere problematico per i file di configurazione dei servizi il cui proprietario non è root.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.