Dpkg: differenze tra le versioni

8 280 byte aggiunti ,  12 apr 2015
nuova sezione con dpkg-divert e dpkg-override
(nuova sezione con dpkg-divert e dpkg-override)
Riga 8: Riga 8:
Questa guida vuole offire soltanto una panoramica generale agli usi più comuni di questo potente strumento, ma non ha alcuna pretesa di esaustività e si rimanda alle pagine di manuale per tutti gli altri dettagli.
Questa guida vuole offire soltanto una panoramica generale agli usi più comuni di questo potente strumento, ma non ha alcuna pretesa di esaustività e si rimanda alle pagine di manuale per tutti gli altri dettagli.


Si sconsiglia caldamente però l'uso di questo strumento per l'installazione e la rimozione di pacchetti, salvo sia impossibile effettuare la stessa operazione con [[APT]], in quanto non gestisce le dipendenze e ciò potrebbe compromettere il funzionamento del sistema. Invece può essere impiegato senza rischi per ricerche sul contenuto dei pacchetti installati o per visualizzare informazioni a essi relative, in genere agendo come frontend per le opzioni più comuni di <code>dpkg-query</code> e <code>dpkg-deb</code>, anch'essi contenuti nel pacchetto '''dpkg''', essenziale per il funzionamento di Debian.
Si sconsiglia caldamente però l'uso di questo strumento per l'installazione e la rimozione di pacchetti, salvo sia impossibile effettuare la stessa operazione con [[APT]], in quanto non gestisce le dipendenze e ciò potrebbe compromettere il funzionamento del sistema. Invece può essere impiegato senza rischi per ricerche sul contenuto dei pacchetti installati o per visualizzare informazioni a essi relative, in genere agendo come frontend per le opzioni più comuni di <code>dpkg-query</code> e <code>dpkg-deb</code>, anch'essi contenuti nel pacchetto '''dpkg''', essenziale per il funzionamento di Debian e che mette a disposizione molti altri comandi utili, i più importanti dei quali saranno affrontati brevemente.


== Pacchetti installati ==
== Pacchetti installati ==
Riga 227: Riga 227:
# apt-get --fix-broken install</pre>
# apt-get --fix-broken install</pre>
Si noti che è molto pericoloso, se mette fuori uso pacchetti essenziali, ed è sempre raccomandabile effettuare prima una scelta tra i pacchetti con [[APT]], ripiegando su <code>dpkg</code> solo come ultima risorsa.
Si noti che è molto pericoloso, se mette fuori uso pacchetti essenziali, ed è sempre raccomandabile effettuare prima una scelta tra i pacchetti con [[APT]], ripiegando su <code>dpkg</code> solo come ultima risorsa.
== Modifiche ai file installati o ai loro permessi ==
Un [[pacchetto]] contiene i file che verranno installati sul proprio sistema, ed eventuali cambiamenti apportati a questi file potrebbero essere sovrascritti da [[APT]] alla successiva installazione o al successivo aggiornamento. In questa sezione vedremo come apportare cambiamenti permanenti con [[privilegi di amministratore]], segnalandoli al package manager <code>dpkg</code> in modo che siano ripristinati a ogni aggiornamento e nuova installazione.
{{Warningbox | Entrambe le operazioni possono rendere inutilizzabile il sistema, se si sposta o si modifica un file necessario, e compromettere quello delle altre applicazioni. L'uso di questi comandi sono pertanto consigliati ai soli utenti esperti, e sempre prestando molta attenzione.}}
=== Diversioni ===
Per modificare un file di sistema, o uno che si trova in una directory di sistema, e impedirne la sovrascrittura al successivo aggiornamento è possibile creare una diversione con il comando <code>dpkg-divert</code>, contenuto nel pacchetto '''dpkg'''.
Non possono essere effettuate sulle directory, ma soltanto su file regolari, eseguibili e non. Inoltre bisogna utilizzare percorsi assoluti (ossia che partono dalla radice /) per indicare il percorso del file da deviare e la sua nuova destinazione. Se si modifica soltanto il nome, lasciando il resto del suo percorso invariato, è equivalente a rinominare il file.
Per tutte le opzioni si rimanda al manuale (<code>man dpkg-divert</code>).
{{Suggerimento | Si ricorda che per i file di configurazione quest'operazione non è necessaria, in quanto non sono sovrascritti di default da [[APT]], senza chiedere conferma all'amministratore durante un aggiornamento, e quelli rigenerati dispongono quasi sempre di metodi specifici per la loro personalizzazione.
Inoltre piuttosto che sovrascrivere degli eseguibili di sistema è consigliabile aggiungere nuovi file, con lo stesso nome, in <code>/usr/local/bin</code> (oppure <code>/usr/local/sbin</code>) per nascondere quelli presenti in <code>/bin</code> e <code>/usr/bin<code> (oppure <code>/sbin</code> e <code>/usr/sbin</code>) nella quasi totalità dei casi.}}
==== Crea nuova diversione ====
* Rinomina o sposta un file di sistema, non ancora installato o senza applicare le modifiche:
<pre># dpkg-divert --divert /percorsodiversione/nuovonomefile /percorso/nomefile</pre>
Le modifiche saranno effettive al momento dell'installazione del pacchetto o al suo aggiornamento, e ogni file che sarebbe installato in <code>/percorso/nomefile</code> sarà invece scritto in <code>/percorsodiversione/nuovonomefile</code>.
* Rinomina o sposta un file di sistema già installato, applicando subito le modifiche:
<pre># dpkg-divert --divert /percorsodiversione/nuovonomefile --rename /percorso/nomefile</pre>
È stato sufficiente aggiungere l'opzione <code>--rename</code>.
* Rinomina o sposta un file di sistema già installato, permettendone la creazione da parte di un dato pacchetto:
<pre># dpkg-divert --package nomepacchetto --divert /percorsodiversione/nuovonomefile --rename /percorso/nomefile</pre>
È utile per permettere l'installazione di un proprio pacchetto (''nomepacchetto''), senza tener conto della diversione creata, che influenzerà tutti gli altri e impedirà la sovrascrittura del proprio file.
==== Visualizza diversioni ====
* Visualizza tutte le diversioni:
<pre>$ dpkg-divert --list</pre>
Si noti che anche i pacchetti del sistema fanno uso di questo metodo, quindi è normale non trovare soltanto le proprie modifiche e infatti si consiglia di tenerne traccia anche altrove.
* Visualizza le diversioni di un dato file:
<pre>$ dpkg-divert --list /percorso/nomefile</pre>
* Visualizza tutte le diversioni di un dato pattern (con caratteri jolli <code>*</code>, <code>?</code>, <code>[</code>...<code>]</code>):
<pre>$ dpkg-divert --list "stringa"</pre>
==== Rimuovi diversione ====
* Rimuovi una diversione, senza applicare le modifiche (va indicato il percorso originale, non quello della diversione):
<pre># dpkg-divert --remove /percorso/nomefile</pre>
Alla successiva installazione o aggiornamento la propria diversione sarà ignorata, ma nessun cambiamento sarà apportato al sistema fino ad allora. Questo comando è utile solo per annullare una diversione che non è mai stata applicata.
* Rimuovi una diversione, applicando subito le modifiche (va indicato il percorso originale, non quello della diversione):
<pre># dpkg-divert --rename --remove /percorso/nomefile</pre>
=== Sovrascrivi permessi ===
Per modificare l'utente proprietario, il suo gruppo o i permessi del file (si legga [[Filesystem:_i_permessi_sui_files|questa guida]] per maggiori informazioni) si può impostare un'azione da eseguire ogni volta che è invocato <code>dpkg</code> per modificare il sistema, e quindi anche dopo ogni esecuzione di uno dei programmi di [[APT]]. Per farlo si ricorre a <code>dpkg-statoverride</code>, sempre distribuito nel pacchetto '''dpkg'''.
Le modifiche si possono apportare a qualsiasi file, directory comprese, che devono essere specificati con un percorso assoluto.
{{Suggerimento | Conservare in un file le modifiche effettuate, e i valori precedenti, visto che '''non''' saranno ripristinabili in automatico, a meno di ripetere l'installazione di un pacchetto.}}
Per tutte le opzioni si rimanda al manuale (<code>man dpkg-statoverride</code>).
==== Imposta nuovo utente, gruppo e permessi ====
* Imposta utente e gruppo proprietari del file, e i suoi nuovi permessi, per file non ancora installati oppure senza apportare le modifiche:
<pre># dpkg-statoverride --add nomeutente nomegruppo permessi /percorso/nomefile</pre>
Le modifiche saranno apportate alla successiva installazione o aggiornamento del pacchetto che installerebbe il file specificato sul sistema. I valori ''nomeutente'' e ''nomegruppo'' sono i nomi che saranno usati come proprietari del file (per la forma numerica utilizzare "#UID" e "#GID"), mentre ''permessi'' va espresso in forma ottale (per esempio: "744" per rimuovere scrittura ed esecuzione a tutti gli utenti, meno al proprietario; per maggiori informazioni si legga <code>man chmod</code>, la forma ottale è la stessa).
* Imposta utente e gruppo proprietari di un file già installato nel sistema, e i suoi nuovi permessi, rendendo effettive fin da subito le modifiche:
<pre># dpkg-statoverride --update --add nomeutente nomegruppo permessi /percorso/nomefile</pre>
È stato sufficiente aggiungere l'opzione <code>--update</code>.
==== Visualizza le personalizzazioni ====
* Visualizza tutti i cambiamenti a utente, gruppo e permessi (a prescindere che siano effettivi per le proprie modifiche):
<pre>$ dpkg-statoverride --list</pre>
Sono restituite anche le personalizzazioni effettuate dal sistema, alcune regolabili con <code>dpkg-reconfigure</code>. Anche per questo si consiglia di segnalare a parte le proprie modifiche.
* Visualizza i cambiamenti apportati a un dato file:
<pre>$ dpkg-statoverride --list /percorso/nomefile</pre>
* Visualizza tutti i cambiamenti apportati ai file di un dato pattern (caratteri jolly: <code>*</code>, <code>?</code>, <code>[</code>...<code>]</code>):
<pre>$ dpkg-statoverride --list "stringa"</pre>
==== Rimuovi personalizzazione ====
* Rimuovi una propria personalizzazione da un dato file:
<pre># dpkg-statoverride --remove /percorso/nomefile</pre>
Si noti che tale modifica '''non''' ripristina utente, gruppo e permessi ai suoi valori originari, ma si limita a rimuovere l'azione memorizzata da <code>dpkg</code>, così che non sia più applicata in successive installazioni e aggiornamenti dei pacchetti contenenti il file scelto. Per renderle effettive è necessario [[Filesystem:_i_permessi_sui_files|intervenire manualmente]], oppure forzare la reinstallazione del pacchetto che conteneva il file.
Per ripristinare utente, gruppo e permessi del file, cerco il pacchetto da reinstallare:
<pre>$ dpkg --search /percorso/nomefile</pre>
E ne forzo la reinstallazione con [[apt-get]]:
<pre># apt-get --reinstall install nomepacchetto</pre>


== Architetture ==
== Architetture ==
Riga 267: Riga 355:
== Manuale ==
== Manuale ==
<code>man dpkg</code><br/>
<code>man dpkg</code><br/>
<code>man dpkg-reconfigure</code><br/>
<code>man dpkg-query</code><br/>
<code>man dpkg-query</code><br/>
<code>man dpkg-deb</code><br/>
<code>man dpkg-deb</code><br/>
<code>man dpkg-reconfigure</code><br/>
<code>man dpkg-divert</code><br/>
<code>man dpkg-statoverride</code><br/>


{{Autori
{{Autori
3 581

contributi