Suponha que eu tenha um programa de instalação ou um tarball de origem para algum programa que eu queira instalar. (Não existe um pacote Debian disponível.) Primeiro eu quero criar um pacote .deb
, para poder remover o programa instalado no futuro (veja Desinstalando o aplicativo construído a partir da fonte , Se eu construir um pacote a partir do código-fonte, como posso desinstalar ou remover completamente? . Além disso, a instalação usando um pacote impede que ele destrua arquivos de outros pacotes, o que não pode ser garantido se você executar o instalador ou sudo make install
.
Checkinstall
Depois de ler as respostas lá e em outros lugares, concluo que a solução usual é usar checkinstall
para criar o pacote . Infelizmente, parece que checkinstall
não impede make install
de destruir arquivos de sistema de outros pacotes. Por exemplo, de acordo com Revertendo problemas causados por checkinstall com o gcc build :
Eu criei um pacote Debian da instalação usando sudo checkinstall -D make install
.
[...] eu o removi usando o Gerenciador de Pacotes Synaptic. Como se vê, [remover] o pacote checkinstall criado a partir de make install
tentou remover todos os arquivos que o processo de instalação tocou, incluindo bibliotecas compartilhadas do gcc como /lib64/libgcc_s.so.
Eu então tentei dizer ao checkinstall
para construir o pacote sem instalá-lo, na esperança de contornar o problema. Eu criei um Makefile fictício:
install:
echo "Bogus" > /bin/qwertyuiop
e executou sudo checkinstall --install=no
. O arquivo /bin/qwertyuiop
foi criado, mesmo que o pacote não tenha sido instalado.
No meu caso, eu não confio no instalador / make install
para não sobrescrever arquivos do sistema , então este uso de checkinstall
é descartado.
Como posso construir o pacote, sem instalá-lo ou deixá-lo tocar nos arquivos do sistema?
É possível executar o Checkinstall em um fakechroot
ed ambiente debootstrap para conseguir isso? De preferência, a compilação deve ser feita como um usuário normal em vez de root, o que impediria que o processo sobrescrevesse arquivos do sistema se algo desse errado.