Provided by: dpkg_1.19.7ubuntu3.2_amd64 bug

NOME

       dpkg-maintscript-helper - aggira limiti noti di dpkg negli script del manutentore

SINTASSI

       dpkg-maintscript-helper comando [parametro...] -- parametro-script-manut...

COMANDI E PARAMETRI

       supports comando

       rm_conffile fileconf [versione-prec [pacchetto]]

       mv_conffile vecchio-fileconf nuovo-fileconf [versione-prec [pacchetto]]

       symlink_to_dir percorso vecchia-destinaz [versione-prec [pacchetto]]

       dir_to_symlink percorso nuova-destinaz [versione-prec [pacchetto]]

DESCRIZIONE

       Questo  programma  è progettato per essere eseguito dall'interno di script dei manutentori per effettuare
       alcuni compiti che dpkg non può (ancora) gestire in modo nativo a causa di decisioni  progettuali  oppure
       per limitazioni attuali.

       Molti di questi compiti richiedono azioni coordinate da parte di diversi script dei manutentori (preinst,
       postinst,  prerm,  postrm).  Per evitare sbagli basta mettere la stessa chiamata in tutti gli script e il
       programma  adatterà  automaticamente  il  suo  comportamento  sulla  base  della   variabile   d'ambiente
       DPKG_MAINTSCRIPT_NAME  e sugli argomenti per gli script dei manutentori che devono essere passati dopo un
       doppio trattino.

PARAMETRI COMUNI

       versione-prec
              Definisce  la  più  recente  versione  del  pacchetto  il  cui  aggiornamento  dovrebbe   attivare
              l'operazione.  È  importante  calcolare  correttamente  il  valore di versione-prec in modo che le
              operazioni siano effettuate in modo corretto anche se l'utente ha ricompilato il pacchetto con una
              versione locale. Se versione-prec è vuota o viene omessa, allora  l'operazione  viene  tentata  ad
              ogni  aggiornamento  (notare:  è  più  sicuro  fornire la versione e far sì che l'operazione venga
              tentata una sola volta).

              Se il file di configurazione non è stato fornito per diverse versioni, e si sta  ora  cercando  di
              modificare gli script del manutentore per ripulire il file obsoleto, versione-prec dovrebbe essere
              basata  sulla  versione  del  pacchetto  che  si  sta preparando ora, non sulla prima versione del
              pacchetto a cui mancava il file di configurazione. Ciò  è  vero  similmente  per  tutte  le  altre
              azioni.

              Per  esempio,  per  un  file  di  configurazione  rimosso  nella  versione  2.0-1 di un pacchetto,
              versione-prec dovrebbe essere impostata a 2.0-1~. Ciò farà sì che il file  di  configurazione  sia
              rimosso  anche se l'utente ha ricompilato la versione precedente 1.0-1 come 1.0-1local1. Oppure un
              pacchetto che passa un percorso da un collegamento simbolico (fornito nella versione 1.0-1) ad una
              directory (fornita nella versione 2.0-1), ma che effettua l'effettivo cambiamento nello script del
              manutentore nella versione 3.0-1, dovrebbe impostare versione-prec a 3.0-1~.

       pacchetto
              The package name owning the pathname(s). When the package is  “Multi-Arch:  same”  this  parameter
              must  include the architecture qualifier, otherwise it should not usually include the architecture
              qualifier (as it would disallow cross-grades, or switching from  being  architecture  specific  to
              architecture   all   or   vice   versa).   If   the   parameter   is   empty   or   omitted,   the
              DPKG_MAINTSCRIPT_PACKAGE and DPKG_MAINTSCRIPT_ARCH environment variables  (as  set  by  dpkg  when
              running the maintainer scripts) will be used to generate an arch-qualified package name.

       --     Tutti i parametri degli script dei manutentori devono essere passati al programma dopo --.

COMPITI RELATIVI AI FILE DI CONFIGURAZIONE

       Quando  aggiorna  un  pacchetto, dpkg non rimuoverà automaticamente un file di configurazione (un file di
       configurazione per il quale dpkg dovrebbe preservare i cambiamenti dell'utente) se non è  presente  nella
       versione  più  nuova.  Ci sono due ragioni principali per questo comportamento. La prima è che il file di
       configurazione potrebbe essere stato tolto per sbaglio e la successiva versione potrebbe ripristinarlo  e
       gli  utenti  non  vorrebbero  vedere le proprie modifiche buttate al vento. La seconda è di permettere ai
       pacchetti di transitare file da un file di configurazione mantenuto da dpkg a  un  file  mantenuto  dagli
       script del manutentore del pacchetto, solitamente con uno strumento come debconf o ucf.

       Ciò  significa  che  se  un  pacchetto  deve rinominare o rimuovere un file di configurazione, deve farlo
       esplicitamente  e  dpkg-maintscript-helper  può  essere  usato  per  implementare  in  modo   pulito   la
       cancellazione e lo spostamento di file di configurazione all'interno di script dei manutentori.

   Rimozione di un file di configurazione
       Se  un  file  di configurazione viene completamente rimosso, dovrebbe essere rimosso dal disco a meno che
       l'utente non l'abbia modificato. Se ci sono modifiche locali, queste  dovrebbero  essere  preservate.  Se
       l'aggiornamento  del  pacchetto  fallisce,  il  file  di configurazione appena reso obsoleto non dovrebbe
       sparire.

       Tutto ciò è implementato mettendo il seguente frammento  shell  negli  script  del  manutentore  preinst,
       postinst e postrm.

           dpkg-maintscript-helper rm_conffile \
               fileconf versione-prec pacchetto -- "$@"

       fileconf è il nome del file di configurazione da rimuovere.

       Attuale  implementazione:  in  preinst,  controlla  se  il file di configurazione è stato modificato e lo
       rinomina in fileconf.dpkg-remove (se non modificato) o fileconf.dpkg-backup (se modificato). In postinst,
       quest'ultimo file viene rinominato in fileconf.dpkg-bak e mantenuto per riferimento dato che contiene  le
       modifiche  dell'utente  ma  il  primo  viene  rimosso.  Se l'aggiornamento del pacchetto fallisce, postrm
       reinstalla il file di configurazione originale. Durante l'eliminazione completa, postrm elimina anche  il
       file .dpkg-bak fino ad allora preservato.

   Rinominare un file di configurazione
       Se  un  file  di  configurazione viene spostato da una posizione ad un'altra, è necessario assicurarsi di
       spostare qualsiasi modifica fatta dall'utente. Questo può sembrare a prima vista un semplice  cambiamento
       dello script preinst, tuttavia ciò avrebbe come risultato che dpkg chiederebbe all'utente di approvare le
       modifiche al file di configurazione anche se egli non ne è responsabile.

       Un  cambio  di  nome pulito può essere implementato mettendo il seguente frammento shell negli script del
       manutentore preinst, postinst e postrm.

           dpkg-maintscript-helper mv_conffile \
               vecchio-fileconf nuovo-fileconf versione-prec pacchetto -- "$@"

       vecchio-fileconf e nuovo-fileconf sono il nome vecchio e quello  nuovo  del  file  di  configurazione  da
       rinominare.

       Attuale implementazione: preinst controlla se il file di configurazione è stato modificato; se lo è stato
       viene  lasciato  al  suo  posto  altrimenti  viene rinominato in vecchio-fileconf.dpkg-remove. Durante la
       configurazione,  postinst   rimuove   vecchio-fileconf.dpkg-remove   e   rinomina   vecchio-fileconf   in
       nuovo-fileconf  se  vecchio-fileconf  è  ancora  disponibile.  In  caso  di aggiornamento o installazione
       falliti, postrm rinomina vecchio-fileconf.dpkg-remove nuovamente in vecchio-fileconf, se necessario.

CAMBIAMENTI A COLLEGAMENTI SIMBOLICI E DIRECTORY

       Quando si aggiorna un pacchetto, dpkg non modifica  automaticamente  un  collegamento  simbolico  in  una
       directory o viceversa. Le retrocessioni di versione non sono supportate e il percorso verrà lasciato come
       è.

   Passare da un collegamento simbolico ad una directory
       Se  si  passa  da  un collegamento simbolico ad una directory reale, è necessario assicurarsi prima dello
       spacchettamento che il collegamento simbolico venga rimosso. Ciò può sembrare a prima vista una  semplice
       modifica  allo script preinst, tuttavia ciò risulterebbe in alcuni problemi nel caso di personalizzazioni
       locali dell'amministratore sul collegamento simbolico o in caso di retrocessione del pacchetto.

       Un cambio di nome pulito può essere implementato mettendo il seguente frammento shell  negli  script  del
       manutentore preinst, postinst e postrm.

           dpkg-maintscript-helper symlink_to_dir \
               percorso vecchia-destinaz versione-prec pacchetto -- "$@"

       percorso è il nome assoluto del vecchio collegamento simbolico (il percorso sarà una directory al termine
       dell'installazione)  e  vecchia-destinaz  è il nome della destinazione del vecchio collegamento simbolico
       percorso. Può essere sia assoluto sia relativo alla directory che contiene percorso.

       Attuale  implementazione:  preinst  controlla  se  il   collegamento   simbolico   esiste   e   punta   a
       vecchia-destinaz,  se  non  è  così  allora  viene  lasciato al suo posto, altrimenti viene rinominato in
       percorso.dpkg-backup. Durante la configurazione postinst rimuove percorso.dpkg-backup se questo è  ancora
       un   collegamento   simbolico.  In  caso  di  aggiornamento  o  installazione  falliti,  postrm  rinomina
       percorso.dpkg-backup nuovamente in percorso se necessario.

   Passare da una directory a un collegamento simbolico
       Se si passa da una directory reale a un collegamento simbolico,  è  necessario  assicurarsi  prima  dello
       spacchettamento che la directory venga rimossa. Ciò può sembrare a prima vista una semplice modifica allo
       script  preinst,  tuttavia ciò risulterebbe in alcuni problemi nel caso in cui la directory contenga file
       di configurazione, nomi di percorso di proprietà di altri pacchetti, nomi di percorso creati  localmente,
       oppure in caso di retrocessione del pacchetto.

       Un  passaggio  pulito  può  essere  implementato  mettendo  il  seguente frammento shell negli script del
       manutentore preinst, postinst e postrm.

           dpkg-maintscript-helper dir_to_symlink \
               percorso nuova-destinaz versione-prec pacchetto -- "$@"

       percorso è il nome assoluto della vecchia directory  (il  percorso  sarà  un  collegamento  simbolico  al
       termine  dell'installazione)  e  nuova-destinaz  è il nome del nuovo collegamento simbolico percorso. Può
       essere sia assoluto sia relativo alla directory che contiene percorso.

       Attuale implementazione: preinst controlla se la directory esiste, non contiene file  di  configurazione,
       percorsi  di  proprietà  di altri pacchetti o percorsi creati localmente; se non è così è lasciata al suo
       posto, altrimenti viene rinominata in percorso.dpkg-backup e  viene  creata  una  nuova  directory  vuota
       chiamata  percorso  marcata con un file in modo che dpkg possa tenerne traccia. Durante la configurazione
       postinst finisce il passaggio se percorso.dpkg-backup è ancora una directory e percorso  è  la  directory
       contrassegnata;  rimuove  il  file  che contrassegna la directory, muove i file appena creati all'interno
       della directory contrassegnata nella destinazione del collegamento simbolico nuova-destinaz/, sostituisce
       la directory contrassegnata percorso ora vuota con un collegamento simbolico a nuova-destinaz  e  rimuove
       percorso.dpkg-backup.   in   caso   di   aggiornamento   o   installazione   falliti,   postrm   rinomina
       percorso.dpkg-backup nuovamente in percorso se necessario.

INTEGRAZIONE NEI PACCHETTI

       Quando si usa uno strumento di aiuto alla pacchettizzazione, controllare se ha l'integrazione nativa  con
       dpkg-maintscript-helper, che può rendere la vita più semplice. Vedere ad esempio dh_installdeb(1).

       Dato  che  dpkg-maintscript-helper  viene  usato  in  preinst,  il  suo  uso  incondizionato richiede una
       pre-dipendenza per assicurare che sia stata già spacchettata la versione richiesta di dpkg.  La  versione
       richiesta  dipende  dal  comando  usato:  per  rm_conffile e mv_conffile è 1.15.7.2, per symlink_to_dir e
       dir_to_symlink è 1.17.14:

           Pre-Depends: dpkg (>= 1.17.14)

       In molti casi però l'operazione effettuata dal programma non è critica per il pacchetto e invece di usare
       una pre-dipendenza si può chiamare il programma solo se si sa che il comando richiesto è supportato dalla
       versione di dpkg attualmente installata:

           if dpkg-maintscript-helper supports comando; then
               dpkg-maintscript-helper comando ...
           fi

       Il comando supports restituisce 0 in caso di successo e 1 altrimenti. Il comando supports controlla se le
       variabili d'ambiente impostate da dpkg e richiesta dallo script sono presenti e considera  un  fallimento
       se l'ambiente non è sufficiente.

AMBIENTE

       DPKG_COLORS
              Sets the color mode (since dpkg 1.19.1). The currently accepted values are: auto (default), always
              and never.

VEDERE ANCHE

       dh_installdeb(1).

1.19.7                                             2022-05-25                         dpkg-maintscript-helper(1)