.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "dpkg-maintscript-helper 1" .TH dpkg-maintscript-helper 1 2024-01-24 1.22.4 "dpkg suite" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NOME .IX Header "NOME" dpkg-maintscript-helper \- contorna limita\(,c\(~oes conhecidas do dpkg em scripts de maintainer. .SH RESUMO .IX Header "RESUMO" \&\fBdpkg-maintscript-helper\fR \fIcommand\fR [\fIparameter\fR...] \fB\-\-\fR \fImaint-script-parameter\fR... .SH "COMANDOS E PAR\(^AMETROS" .IX Header "COMANDOS E PAR\(^AMETROS" .IP "\fBsupports\fR \fIcommand\fR" 4 .IX Item "supports command" .PD 0 .IP "\fBrm_conffile\fR \fIconffile\fR [\fIprior-version\fR [\fIpackage\fR]]" 4 .IX Item "rm_conffile conffile [prior-version [package]]" .IP "\fBmv_conffile\fR \fIold-conffile\fR \fInew-conffile\fR [\fIprior-version\fR [\fIpackage\fR]]" 4 .IX Item "mv_conffile old-conffile new-conffile [prior-version [package]]" .IP "\fBsymlink_to_dir\fR \fIpathname\fR \fIold-target\fR [\fIprior-version\fR [\fIpackage\fR]]" 4 .IX Item "symlink_to_dir pathname old-target [prior-version [package]]" .IP "\fBdir_to_symlink\fR \fIpathname\fR \fInew-target\fR [\fIprior-version\fR [\fIpackage\fR]]" 4 .IX Item "dir_to_symlink pathname new-target [prior-version [package]]" .PD .SH DESCRI\(,C\(~AO .IX Header "DESCRI\(,C\(~AO" Este programa destina-se a ser corrido dentro de scripts de maintainer para conseguir algumas tarefas que o \fBdpkg\fR (ainda) n\(~ao pode lidar nativamente seja por limita\(,c\(~oes de desenho ou devido a limita\(,c\(~oes actuais, .PP Muitas destas tarefas requerem ac\(,c\(~oes coordenadas dos v\('arios scripts de maintainer (\fBpreinst\fR, \fBpostinst\fR, \fBprerm\fR, \fBpostrm\fR). Para evitar enganos a mesma chamada precisa simplesmente de englobar todos os scripts e o programa ir\('a automaticamente adaptar o seu comportamento baseado na vari\('avel de ambiente \fBDPKG_MAINTSCRIPT_NAME\fR e nos argumentos dos scripts do maintainer que voc\(^e tem de reencaminhar ap\('os um duplo h\('ifen. .PP Este programa foi introduzido no dpkg 1.15.7. .SH "PAR\(^AMETROS COMUNS" .IX Header "PAR\(^AMETROS COMUNS" .IP \fIprior-version\fR 4 .IX Item "prior-version" Define a vers\(~ao mais recente do pacote cuja actualiza\(,c\(~ao dever\('a despoletar a opera\(,c\(~ao. \('E importante calcular \fIprior-version\fR correctamente para que as opera\(,c\(~oes sejam correctamente executadas mesmo que o utilizador recompile o pacote com uma vers\(~ao local. Se \fIprior-version\fR estiver vazio ou omitido, ent\(~ao a opera\(,c\(~ao \('e tentada a cada actualiza\(,c\(~ao (nora: \('e mais seguro fornecer a vers\(~ao e ter a opera\(,c\(~ao tentada apenas uma vez). .Sp Se o conffile n\(~ao tem sido enviado por v\('arias vers\(~oes, e voc\(^e est\('a agora a modificar os scripts do maintainer para limpar o ficheiro obsoleto, \fIprior-version\fR deve ser baseado na vers\(~ao do pacote que est\('a agora a preparar, e n\(~ao a primeira vers\(~ao do pacote onde faltou o conffile. Isto aplica-se a todas as outras ac\(,c\(~oes do mesmo modo. .Sp Por exemplo, para um conffile removido na vers\(~ao \fB2.0\-1\fR de um pacote, \fIprior-version\fR deve ser definido para \fB2.0\-1~\fR. Isto ir\('a fazer com que o conffile seja removido mesmo que o utilizador recompile a vers\(~ao anterior \fB1.0\-1\fR como \fB1.0\-1local1\fR. Ou um pacote que mude um caminho de um link simb\('olico (enviado na vers\(~ao \fB1.0\-1\fR) para um direct\('orio (enviado na vers\(~ao \fB2.0\-1\fR), mas apenas executando a mudan\(,ca real nos scripts do maintainer na vers\(~ao \fB3.0\-1\fR, deve definir \fIprior-version\fR para \fB3.0\-1~\fR. .IP \fIpackage\fR 4 .IX Item "package" O nome do pacote que possui os nome(s) de caminho(s). Quando o pacote \('e \(lqMulti\-Arch: same\(rq este par\(^ametros tem de incluir o qualificador de arquitectura, caso contr\('ario \fBn\(~ao\fR dever\('a geralmente incluir o qualificador de arquitectura ((pois iria desautorizar cruzamento de gradua\(,c\(~ao, ou comutar de ser espec\('ifico de arquitectura para arquitectura \fBall\fR ou vice versa). Se o par\(^ametro estiver vazio ou omitido, as vari\('aveis de ambiente \fBDPKG_MAINTSCRIPT_PACKAGE\fR e \fBDPKG_MAINTSCRIPT_ARCH\fR (definidas pelo \fBdpkg\fR ao correr os scripts do maintainer) ser\(~ao usadas para gerar um nome de pacote com qualifica\(,c\(~ao de arquitectura. .IP \fB\-\-\fR 4 .IX Item "--" Todos os par\(^ametros dos scripts do maintainer t\(^em de ser encaminhados ao programa ap\('os \fB\-\-\fR. .SH "TAREFAS RELACIONADAS COM FICHEIROS DE CONFIGURA\(,C\(~AO" .IX Header "TAREFAS RELACIONADAS COM FICHEIROS DE CONFIGURA\(,C\(~AO" Ao actualizar um pacote, o \fBdpkg\fR n\(~ao ir\('a automaticamente remover um conffile (um ficheiro de configura\(,c\(~ao para o qual \fBdpkg\fR deve preservar as altera\(,c\(~oes do utilizador) se este n\(~ao estiver presente na vers\(~ao mais recente. Existem duas raz\(~oes principais para isto: a primeira \('e que o conffile poderia ser abandonado por acidente e a pr\('oxima vers\(~ao poderia restaura-lo., e os utilizadores n\(~ao querem que as suas altera\(,c\(~oes sejam deitadas fora. A segunda \('e para permitir aos pacotes transitarem ficheiros de um conffile mantido pelo dpkg para um ficheiro mantido pelos scripts do maintainer do pacote, geralmente com uma ferramenta como debconf ou ucf. .PP Isto significa que se um pacote se destina a renomear ou remover um conffile, deve explicitamente faz\(^e\-lo e \fBdpkg-maintscript-helper\fR pode ser usado para implementar o apagar e mover elegante de conffiles dentro dos scripts do maintainer. .SS "Remover um ficheiro de configura\(,c\(~ao" .IX Subsection "Remover um ficheiro de configura\(,c\(~ao" \&\fBNota\fR: Isto pode ser substitu\('ido na maioria dos casos pela bandeira \f(CW\*(C`remove\-on\-upgrade\*(C'\fR em \fIDEBIAN/conffiles\fR (desde dpkg 1.20.6), veja \fBdeb\-conffiles\fR\|(5). .PP If a conffile is completely removed, it should be removed from disk, unless the user has modified it. If there are local modifications, they should be preserved. If the package upgrade aborts, the newly obsolete conffile should not disappear. .PP tudo isto \('e implementado ao colocar o seguinte fragmento de shell nos scripts de maintainer \fBpreinst\fR, \fBpostinst\fR e \fBpostrm\fR: .Sp .RS 4 dpkg-maintscript-helper rm_conffile \e \fIconffile\fR \fIprior-version\fR \fIpackage\fR \-\- "$@" .RE .PP \&\fIconffile\fR \('e o nome de ficheiro do conffile a remover. .PP Implementa\(,c\(~ao actual: no \fBpreinst\fR, verifica se o conffile foi modificado e renomeia-o ou para \fIconffile\fR\fB.dpkg\-remove\fR (se n\(~ao modificado) ou para \fIconffile\fR\fB.dpkg\-backup\fR (se modificado). No \fBpostinst\fR, o \('ultimo ficheiro \('e renomeado para \fIconffile\fR\fB.dpkg\-bak\fR e mantido para refer\(^encia pois contem modifica\(,c\(~oes do utilizador mas o antigo ser\('a removido. Se a actualiza\(,c\(~ao ao pacote abortar, o \fBpostrm\fR reinstala o conffile original. Durante a purga, o \fBpostrm\fR ir\('a tamb\('em apagar o ficheiro \fB.dpkg\-bak\fR mantido at\('e \(`a data. .SS "Renomear um conffile" .IX Subsection "Renomear um conffile" Se um conffile for movido de uma localiza\(,c\(~ao para outra, voc\(^e precisa de certificar que se move por quaisquer altera\(,c\(~oes que o utilizador tenha feito. Isto pode parecer uma mudan\(,ca simples para o script \fBpreinst\fR no inicio, no entanto isso vai resultar no utilizador a ser questionado pelo \fBdpkg\fR para aprovar as edi\(,c\(~oes no conffile mesmo este n\(~ao sendo o respons\('avel por elas. .PP O renomear elegante pode ser implementado ao colocar o seguinte fragmente do shell nos scripts de maintainer \fBpreinst\fR, \fBpostinst\fR e \fBpostrm\fR: .Sp .RS 4 dpkg-maintscript-helper mv_conffile \e \fIold-conffile\fR \fInew-conffile\fR \fIprior-version\fR \fIpackage\fR \-\- "$@" .RE .PP \&\fIold-conffile\fR e \fInew-conffile\fR s\(~aos os nomes antigo e novo do conffile a renomear. .PP Implementa\(,c\(~ao actual: o \fBpreinst\fR verifica se o conffile foi modificado. Se sim, \('e deixado no lugar, caso contr\('ario \('e renomeado para \fIold-conffile\fR\fB.dpkg\-remove\fR. Durante a configura\(,c\(~ao, o \fBpostinst\fR remove \fIold-conffile\fR\fB.dpkg\-remove\fR e renomeia \fIold-conffile\fR para \fInew-conffile\fR se \fIold-conffile\fR ainda estiver dispon\('ivel. No abortar\-actualiza\(,c\(~ao/abortar\-instala\(,c\(~ao, o \fBpostrm\fR renomeia \fIold-conffile\fR\fB.dpkg\-remove\fR de volta a \fIold-conffile\fR se necess\('ario. .SH "LINKS SIMB\('OLICOS E SWITCHES DE DIRECT\('ORIO" .IX Header "LINKS SIMB\('OLICOS E SWITCHES DE DIRECT\('ORIO" Ao actualiza um pacote, o \fBdpkg\fR n\(~ao ir\('a mudar automaticamente de um link simb\('olico para um direct\('orio ou vice-versa. Downgrades (descidas de vers\(~ao) n\(~ao s\(~ao suportados e o caminho ir\('a ser deixado como est\('a. .PP \&\fBNota\fR: Os links simb\('olicos e direct\('orios criados durante esses switches precisam de ser enviados nos novos pacotes, ou o \fBdpkg\fR n\(~ao ser\('a capaz de os remover durante a purga. .SS "Alternar um link simb\('olico para direct\('orio" .IX Subsection "Alternar um link simb\('olico para direct\('orio" Se um link simb\('olico for mudado para um direct\('orio real, voc\(^e precisa de certificar que o link simb\('olico \('e removido antes de desempacotar. Isto pode parecer uma mudan\(,ca simples para o script \fBpreinst\fR no inicio, no entanto isso ir\('a resultar em alguns problemas no caso de personaliza\(,c\(~ao local administrativa do link simb\('olico ou quando se retrocede na vers\(~ao do pacote (downgrade). .PP O renomear elegante pode ser implementado ao colocar o seguinte fragmente do shell nos scripts de maintainer \fBpreinst\fR, \fBpostinst\fR e \fBpostrm\fR: .Sp .RS 4 dpkg-maintscript-helper symlink_to_dir \e \fIpathname\fR \fIold-target\fR \fIprior-version\fR \fIpackage\fR \-\- "$@" .RE .PP \&\fIpathname\fR \('e o nome absoluto do link simb\('olico antigo (o caminho ser\('a um direct\('orio no final da instala\(,c\(~ao) e \fIold-target\fR \('e o nome do alvo do link simb\('olico anterior em \fIpathname\fR. Pode ser ou absoluto ou relativo ao direct\('orio que contem \fIpathname\fR. .PP Implementa\(,c\(~ao actual: o \fBpreinst\fR verifica se o link simb\('olico existe e aponta para \fIold-target\fR, se n\(~ao ent\(~ao deixa-o como estiver, caso contr\('ario \('e renomeado para \fIpathname\fR\fB.dpkg\-backup\fR. Na configura\(,c\(~ao, o \fBpostinst\fR remove \fIpathname\fR\fB.dpkg\-backup\fR se \fIpathname\fR\fB.dpkg\-backup\fR for ainda um link simb\('olico. Ao aborta actualiza\(,c\(~ao/instala\(,c\(~ao. o \fBpostrm\fR renomeia \fB.dpkg\-backup\fR de volta para \fIpathname\fR se necess\('ario. .SS "Alternar um direct\('orio para link simb\('olico" .IX Subsection "Alternar um direct\('orio para link simb\('olico" Se um direct\('orio \('e comutado para um link simb\('olico, voc\(^e precisa de certificar-se antes de desempacotar que o direct\('orio foi removido. Isto pode parecer no in\('icio uma altera\(,c\(~ao simples ao script \fBpreinst\fR, no entanto isso vai resultar em alguns problemas se o direct\('orio conter conffiles, nomes de caminhos possu\('idos por outros pacotes, nomes de caminhos criados localmente, ou quando instala uma vers\(~ao anterior do pacote (downgrade). .PP Mudan\(,ca elegante pode ser implementada ao colocar o seguinte fragmento de shell nos scripts \fBpreinst\fR, \fBpostinst\fR e \fBpostrm\fR do maintainer: .Sp .RS 4 dpkg-maintscript-helper dir_to_symlink \e \fIpathname\fR \fInew-target\fR \fIprior-version\fR \fIpackage\fR \-\- "$@" .RE .PP \&\fIpathname\fR \('e o nome absoluto do direct\('orio antigo (o caminho ser\('a um link simb\('olico no final da instala\(,c\(~ao) e \fInew-target\fR \('e o alvo do novo link simb\('olico em \fIpathname\fR. Pode ser ou absoluto ou relativo ao direct\('orio que contem \fIpathname\fR. .PP Implementa\(,c\(~ao actual: o \fBpreinst\fR verifica se o direct\('orio existe, n\(~ao cont\('em conffiles, nomes de caminhos possu\('idos por outros pacotes, ou nomes de caminhos criados localmente, se n\(~ao ent\(~ao \('e deixa-do como est\('a, caso contr\('ario \('e renomeado para \fIpathname\fR\fB.dpkg\-backup\fR, e \('e criado um direct\('orio vazio estagi\('ario chamado \fIpathname\fR, marcado com um ficheiro para que o dpkg o possa acompanhar. Na configura\(,c\(~ao, o \fBpostinst\fR termina a comuta\(,c\(~ao se \fIpathname\fR\fB.dpkg\-backup\fR for ainda um direct\('orio e se \fIpathname\fR \('e o direct\('orio de estagi\('ario; remove o ficheiro marcador do direct\('orio estagi\('ario, move os ficheiros acabados de criar dentro do direct\('orio estagi\('ario para o link simb\('olico alvo \fInew-target\fR/, substitui o agora vazio direct\('orio estagi\('ario \fIpathname\fR com um link simb\('olico para \fInew-target\fR, e remove \fIpathname\fR\fB.dpkg\-backup\fR. Ao abortar actualiza\(,c\(~ao/instala\(,c\(~ao, o \fBpostrm\fR renomeia \fIpathname\fR\fB.dpkg\-backup\fR de volta para \fIpathname\fR se necess\('ario. .SH "INTEGRA\(,C\(~AO EM PACOTES" .IX Header "INTEGRA\(,C\(~AO EM PACOTES" When using a packaging helper, please check if it has native \fBdpkg-maintscript-helper\fR integration, which might make your life easier. See for example \fBdh_installdeb\fR\|(1). .PP Dado que \fBdpkg-maintscript-helper\fR \('e usado no \fBpreinst\fR, usa-lo incondicionalmente requer uma pr\('e\-depend\(^encia para assegurar que a vers\(~ao requerida do \fBdpkg\fR j\('a foi desempacotada antes. A vers\(~ao requerida depende do comando usado, para \fBrm_conffile\fR e \fBmv_conffile\fR \('e 1.15.7.2, para \fBsymlink_to_dir\fR e \fBdir_to_symlink\fR \('e 1.17.14: .Sp .Vb 1 \& Pre\-Depends: dpkg (>= 1.17.14) .Ve .PP Mas em muitos casos a opera\(,c\(~ao feita pelo programa n\(~ao \('e cr\('itica para o pacote, e em vez de usar uma pr\('e\-depend\(^encia n\('os podemos chamar o programa apenas quando sabemos que o comando requerido \('e suportado pelo \fBdpkg\fR presentemente instalado: .Sp .RS 4 if dpkg-maintscript-helper supports \fIcommand\fR; then dpkg-maintscript-helper \fIcommand\fR ... fi .RE .PP O comando \fBsupports\fR ir\('a retornar 0 em sucesso, 1 caso contr\('ario. O comando \fBsupports\fR ir\('a verificar se as vari\('aveis de ambiente est\(~ao presentes como definidas pelo dpkg e requeridas pelo script, e ir\('a considerar um fracasso no caso do ambiente n\(~ao ser suficiente. .SH AMBIENTE .IX Header "AMBIENTE" .IP \fBDPKG_ROOT\fR 4 .IX Item "DPKG_ROOT" Se definido, ser\('a usado como o direct\('orio raiz do sistema de ficheiros. .IP \fBDPKG_ADMINDIR\fR 4 .IX Item "DPKG_ADMINDIR" Se definido, ser\('a usado como o direct\('orio de dados do \fBdpkg\fR. .IP \fBDPKG_COLORS\fR 4 .IX Item "DPKG_COLORS" Define o modo de cor (desde dpkg 1.19.1). Os valores presentemente aceites s\(~ao: \fBauto\fR (predefini\(,c\(~ao), \fBalways\fR e \fBnever\fR. .SH "VEJA TAMB\('EM" .IX Header "VEJA TAMB\('EM" \&\fBdh_installdeb\fR\|(1). .SH TRADU\(,C\(~AO .IX Header "TRADU\(,C\(~AO" Am\('erico Monteiro .PP Se encontrar algum erro na tradu\(,c\(~ao deste documento, por favor comunique para Am\('erico Monteiro .