Bsdtar e (presunti) problemi di ownership su macOS
Ciao! Premetto che sto usando un portatile con macOS (Mojave 10.14.6).
Ho un archivio compresso delle cartelle principali della mia home, che ho generato così con il tar fornito da macOS:
Supponiamo che io mi sposti su un'altra macchina, uguale alla mia (la mia, dopo che ho inizializzato il disco). Non riesco più ad estrarlo. In particolare, [inline]gunzip backup.tar.gz[/inline] funzia; invece
Cosa strana 1. Se uccido il processo e vado ad eliminare i file prodotti (che sono, appunto, le cartelle [inline]Documents/[/inline], [inline]Downloads/[/inline], ecc.), mi viene chiesto di inserire la password. Questo presumo dipenda dal fatto che il proprietario di queste cartelle non è l'utente che ha lanciato [inline]tar zx[/inline], ma è la versione passata di me che ha lanciato [inline]tar zc[/inline], su un sistema diverso e quindi da un utente diverso (non so "in che modo" l'utente che ha generato l'archivio sia diverso rispetto a "me"; nel senso che non so, oltre all'UID, che cosa identifichi un utente in un sistema Unix-like).
Cosa strana 2. Se lancio l'estrazione con [inline]sudo[/inline], essa termina. Il FM di tar dice che, di default, se l'estrazione di un archivio è lanciata da root, le ownership sono preservate. Ma... se il problema fosse che un utente comune non può generare file e intestarli ad un owner terzo, e quindi fosse vero che tar-lanciato-da-me dopo aver portato a termine l'estrazione si inciucca solo sul settare i proprietari, perché vale (Cosa strana 1)?
Di default tar dovrebbe rendere l'utente che lancia l'estrazione di un archivio proprietario di *tutti* i file nell'archivio. Perché non succede? E, se succede, perché non posso riavere i miei files senza usare [inline]sudo[/inline]? Qualcuno riuscirebbe a spiegarmi meglio quello che sta succedendo dietro le quinte?
Ho un archivio compresso delle cartelle principali della mia home, che ho generato così con il tar fornito da macOS:
marco@localhost ~$ tar zcvf backup.tar.gz Documents/ Downloads/ Desktop/ Dropbox/
Supponiamo che io mi sposti su un'altra macchina, uguale alla mia (la mia, dopo che ho inizializzato il disco). Non riesco più ad estrarlo. In particolare, [inline]gunzip backup.tar.gz[/inline] funzia; invece
marco@localhost ~$ tar zxvf backup.tar.gzsi blocca (apparentemente) dopo aver estratto l'ultimo file. Non so molto sul funzionamento di (bsd)tar, ma credo che setti le ownership e le altre eventuali schifezze solo dopo aver terminato il processo di estrazione.
Cosa strana 1. Se uccido il processo e vado ad eliminare i file prodotti (che sono, appunto, le cartelle [inline]Documents/[/inline], [inline]Downloads/[/inline], ecc.), mi viene chiesto di inserire la password. Questo presumo dipenda dal fatto che il proprietario di queste cartelle non è l'utente che ha lanciato [inline]tar zx[/inline], ma è la versione passata di me che ha lanciato [inline]tar zc[/inline], su un sistema diverso e quindi da un utente diverso (non so "in che modo" l'utente che ha generato l'archivio sia diverso rispetto a "me"; nel senso che non so, oltre all'UID, che cosa identifichi un utente in un sistema Unix-like).
Cosa strana 2. Se lancio l'estrazione con [inline]sudo[/inline], essa termina. Il FM di tar dice che, di default, se l'estrazione di un archivio è lanciata da root, le ownership sono preservate. Ma... se il problema fosse che un utente comune non può generare file e intestarli ad un owner terzo, e quindi fosse vero che tar-lanciato-da-me dopo aver portato a termine l'estrazione si inciucca solo sul settare i proprietari, perché vale (Cosa strana 1)?
Di default tar dovrebbe rendere l'utente che lancia l'estrazione di un archivio proprietario di *tutti* i file nell'archivio. Perché non succede? E, se succede, perché non posso riavere i miei files senza usare [inline]sudo[/inline]? Qualcuno riuscirebbe a spiegarmi meglio quello che sta succedendo dietro le quinte?
Risposte
Su (GNU) tar esiste lo switch [tt]-o[/tt] (o minuscola). Dovrebbe esserci pure su (BSD) tar: usalo in creazione ed estrazione. Tieni conto che (GNU tar lo fa) potrebbe supportare diversi formati attraverso [tt]--format=[/tt]: metti che c'è [tt]gnu[/tt] o [tt]posix[/tt] (anche se mi sembra che Apple le sconsigli...)
Prova, altrimenti non so che dirti.
Prova, altrimenti non so che dirti.

Ho risolto così. Facciamo che [inline]backup.tar.gz[/inline] sia il backup generato su macOS.
Ho estratto [inline]backup.tar.gz[/inline] da una partizione dove c'è Ubuntu 18.04. L'estrazione è terminata senza problemi (mi è stato comunque segnalato che alcuni attributi dei file che ho compresso apparentemente non sono supportati in Linux).
Per amor di scienza, ho creato due nuovi archivi con la versione di tar che shippa con Ubuntu: il primo è esattamente un archivio compresso degli stessi file che ho appena scompattato, e l'ho chiamato [inline]backup_dirty.tar.gz[/inline]; il secondo l'ho fatto dopo aver eliminato tutti i file [inline].DS_Store[/inline] e tutti i "duali" che iniziano in [inline]._[/inline], con il comando
Ho scompattato entrambi su macOS e tutto fila senza problemi. Se provo a eliminare i file che ho scompattato, in nessuno dei due casi mi viene chiesta la password (???).
A questo punto mi sembra chiaro che è un problema di attributi. Ho letto che macOS può arrivare a salvare nei [inline]._[/inline] anche le informazioni sul proprietario (ad esempio se il fs non le supporta). Il problema però è: solo [inline]backup_sanitized.tar,gz[/inline] dovrebbe "comportarsi bene"; perché [inline]backup_dirty.tar.gz[/inline] viene scompattato correttamente?
Ho estratto [inline]backup.tar.gz[/inline] da una partizione dove c'è Ubuntu 18.04. L'estrazione è terminata senza problemi (mi è stato comunque segnalato che alcuni attributi dei file che ho compresso apparentemente non sono supportati in Linux).
Per amor di scienza, ho creato due nuovi archivi con la versione di tar che shippa con Ubuntu: il primo è esattamente un archivio compresso degli stessi file che ho appena scompattato, e l'ho chiamato [inline]backup_dirty.tar.gz[/inline]; il secondo l'ho fatto dopo aver eliminato tutti i file [inline].DS_Store[/inline] e tutti i "duali" che iniziano in [inline]._[/inline], con il comando
marco@localhost-ubuntu ~/backup$ find . -type f -name "._*" -deletee l'ho chiamato [inline]backup_sanitized.tar.gz[/inline].
Ho scompattato entrambi su macOS e tutto fila senza problemi. Se provo a eliminare i file che ho scompattato, in nessuno dei due casi mi viene chiesta la password (???).
A questo punto mi sembra chiaro che è un problema di attributi. Ho letto che macOS può arrivare a salvare nei [inline]._[/inline] anche le informazioni sul proprietario (ad esempio se il fs non le supporta). Il problema però è: solo [inline]backup_sanitized.tar,gz[/inline] dovrebbe "comportarsi bene"; perché [inline]backup_dirty.tar.gz[/inline] viene scompattato correttamente?
[ot]
Sì! Invece [inline]chown[/inline] l'hanno messo per pacman ᗧ•••ᗣ••
*[inline]chown[/inline] [inline]chown[/inline] [inline]chown[/inline]*[/ot]
"gugo82":[strike]Ok boo[/strike]
Ma root viene dopo aver mangiato pesante?
Sì! Invece [inline]chown[/inline] l'hanno messo per pacman ᗧ•••ᗣ••
*[inline]chown[/inline] [inline]chown[/inline] [inline]chown[/inline]*[/ot]
[ot]Ma root viene dopo aver mangiato pesante?
[/ot]

Se non hai combinato casini, e da quel che racconti non lo hai fatto (almeno coscientemente), i problemi non dovrebbero emergere, come hai potuto sperimentare su Ubuntu. Il punto sembra essere quindi: quello che ti da macOS o come è configurato il tuo sistema. Leggendo il supporto ufficiale di Apple (da non utente macOS), non ci dovrebbe essere nulla di troppo differente. E invece c'è: ad esempio perché ti chiede di essere root per fare delle certe cose? (E comunque c'è sempre [tt]chown[/tt], se non sbaglio...)
Domandina: se non c'è un motivo particolare (tipo scriverti qualche script per automatizzare delle azioni), perché vai di terminale? Con quel che costa un macOS, vuoi dirmi che non ci sono decenti applicazioni per il backup o un semplice "tasto destro > comprimi cartella"? I FileSystem possono essere una rogna...
Domandina: se non c'è un motivo particolare (tipo scriverti qualche script per automatizzare delle azioni), perché vai di terminale? Con quel che costa un macOS, vuoi dirmi che non ci sono decenti applicazioni per il backup o un semplice "tasto destro > comprimi cartella"? I FileSystem possono essere una rogna...
UPDATE. Ho provato a estrarre lo stesso archivio da Ubuntu 18.04, e funziona, nel senso che [inline]tar zxvf backup.tar.gz[/inline] mette nella cartella dov'è chiamato i file che mi aspettavo di trovare, senza bisogno di diventare root.
Adesso provo a fare casino con i metadati e i [inline]._[/inline]; poi impacchetto e vediamo che succede.
Adesso provo a fare casino con i metadati e i [inline]._[/inline]; poi impacchetto e vediamo che succede.
Non ci vogliono dei trattini per caso?