Ao remover um pacote Debian, como eu também posso remover arquivos Python * .pyc?

1

Eu tenho um pacote Debian que diz XYZ.deb , que copia algum arquivo na instalação.

De acordo com a política do pacote Debian sobre a desinstalação de pacotes, somente esses arquivos serão removidos e copiados durante a instalação. O Debian também não remove os arquivos conf .

O pacote XYZ instala alguns scripts Python que, na execução, criam o arquivo .pyc . Agora na desinstalação eu quero remover todos os arquivos. Qual seria o script postrm para remover o pacote?

    
por Dipak Ingole 11.12.2013 / 10:33

2 respostas

7

Em relação à sua primeira pergunta:

XYZ package installs some python scripts which on execution creates .pyc file.Now On uninstallation I want to remove all the files.What would be the postrm script to cleanly remove package?

Em geral, um script postrm adequado é (acredito) gerado automaticamente por debhelper e amigos. Veja a man page para dh_python . Em particular, esta página man diz

If some modules need to be byte-compiled at install time, appropriate postinst and prerm scripts will be generated. If already byte-compiled modules are found, they are removed.

Com relação à sua segunda pergunta,

Also XYZ is configured using debconf file which on package installation prompts user to accepts EULA. How do I exit if user says no to the EULA?

Eu não sei a resposta de improviso, mas dê uma olhada nos templates debconf para alguns dos softwares proprietários incluídos no Debian. Sun Java é um exemplo que tem (tinha?) Um EULA que foi comprado pelo debconf.

ADENDO:

Como o OP parece não estar convencido, aqui está uma cópia exata do script prerm de um pacote chamado python-corrmodel . Eu escrevi o software e também a embalagem do Debian. No entanto, não escrevi os scripts postinst e prerm e, de fato, não os havia observado até aquele momento. Observe que o script prerm chama o utilitário pyclean , que faz parte do Python. A ajuda diz:

pyclean - removes .pyc and .pyo files

Observe também que o script diz que o código foi gerado por dh_python2 .

Uma observação final: recomendo usar dh , que é relativamente novo em comparação com o debhelper da velha escola, mas está crescendo rapidamente em popularidade. Basicamente, dh por padrão invoca todas as regras debhelper no modo padrão em alguma ordem específica. Se você quiser customizar o comportamento de um comando particular do debhelper, você pode sobrescrevê-lo. Aqui é uma descrição das substituições de dh por Joey Hess, o autor do debhelper. A grande vantagem é que o seu arquivo de regras é muito menos confuso, e você pode ter certeza de que todos os comandos são chamados na ordem correta.

Aqui está o script prerm.

#!/bin/sh
set -e

# Automatically added by dh_python2:
if which pyclean >/dev/null 2>&1; then
        pyclean -p python-corrmodel 
else
        dpkg -L python-corrmodel | grep \.py$ | while read file
        do
                rm -f "${file}"[co] >/dev/null
        done
fi

# End automatically added section

ADENDO 2:

Como eu anunciei dh , adicionarei meu arquivo de regras abaixo. Este não é o arquivo de regras completo, mas essa linha contém a lógica principal. Isso basicamente tem debhelper distribuindo a construção para um script setup.py , que então faz o trabalho pesado.

%:
        dh $@ --with python2 --buildsystem=python_distutils --install-layout=deb
    
por 11.12.2013 / 11:34
0

Referindo-se a

política do python do debian (2.6)

If a binary package provides any binary-independent modules (foo.py files), the corresponding byte-compiled modules (foo.pyc files) and optimized modules (foo.pyo files) must not ship in the package. Instead, they should be generated in the package's postinst, and removed in the package's prerm. The package's prerm has to make sure that both foo.pyc and foo.pyo are removed.

Isso significa que os arquivos compilados por byte ( .pyc/pyo ) devem ser removidos na fase de pré-processamento.

Então eu tenho ans primeiro a minha pergunta. Não marcando isso como correto. Precisa de mais atenção sobre isso.

    
por 11.12.2013 / 13:06