Falei com alguns mantenedores no canal de IRC do Debian irc: //irc.debian.org#debian-mentors , pedindo exatamente a mesma coisa, e o consenso geral foi:
Solução # 1:
Integração de dependências no seu pacote, copiando seus arquivos fonte como um único codebase é muito desaprovado. Isso frustraria o propósito de um sistema de empacotamento que lida com dependências, atualizações, controle de versão, etc.
Solução # 3:
O download de pacotes não-Debian ao instalar um binário ( .deb
) é um risco de segurança sério , definitivamente um não-não. Você não seria capaz de inspecionar as dependências extraindo o deb
, porque elas são baixadas e instaladas no momento da instalação. É uma abordagem que ignora completamente o sistema de repositórios. Nenhum usuário em questão ficaria satisfeito com um pacote que, nos bastidores (e como root
, lembre-se!), Faz o download de software não confiável adicional de fontes não confiáveis. Sim, isso exigiria mexer com DEBIAN/postinst
(ou preinst
) e emitir um wget
(ou, no seu caso, pip install
), e essa é a abordagem adotada pelo Flash, Oracle Java, Steam e outros. Mas isso é software proprietário de código fechado, então a segurança deles não é de qualquer forma.
Solução # 1.5:
Você não mencionou, mas você poderia integrar as dependências apenas no tempo de compilação , ou seja, no pacote source ( .orig.tar.gz
, .debian.tar.gz
, .dsc
triad), fazendo o download do PyPi ao criar o pacote "binário" (o .deb
). As instruções para o pip install
entrariam em debian/rules
(observe o minúsculo debian
, em oposição ao pacote binário), e seriam executadas quando você emitir debuild
ou dpkg-buildpackage
.
Este é um meio termo entre # 1 e # 3. Ele mitiga (mas não resolve!) Alguns dos problemas do nº 3: pelo menos você pode inspecionar o produto final, e o .deb
não precisaria de acesso à Internet no momento da instalação. Todos os riscos e encargos são transferidos do usuário final para o mantenedor do pacote. Mas, tem os mesmos problemas que o número 1, pois ultrapassa a maior parte da infraestrutura do sistema de pacotes. Afinal, lidar com dependências (versões, atualizações, requisitos, conflitos) é porque dpkg
/ apt
foi criado em primeiro lugar! :)
Solução # 2:
O One True Right Way ™ . Você cria pacotes debian para suas dependências, lista-os como requisitos em seu pacote e envia todos os .debs
ou pacotes de código-fonte.
De lá, você tem várias opções:
-
Envie os pacotes fonte, tanto o seu software como o seu dependências, para inclusão no Debian. Se aceito, eles estarão automaticamente disponíveis para todos os usuários do Debian, incluindo todos os derivados, como o Ubuntu.
-
Carregue os pacotes fonte no Launchpad , criando assim um PPA que qualquer usuário do Ubuntu (e seus derivados como o Linux Mint) poderiam facilmente adicionar e instalar
-
Hospede seu próprio repositório Debian em seu site, que os usuários de qualquer sistema baseado no Debian possam adicionar ao seu
/etc/apt/sources.list.d
e usar a infraestruturaapt
para baixar, instalar e manter atualizado (como o acima! ) -
Hospede os arquivos
.deb
para baixar e instalar diretamente. Nenhumapt
ou atualizações automáticas envolveram o pensamento.
Quanto a como para empacotar suas dependências PyPi (e seu software python também!), existem várias ferramentas e referências que facilitam o processo:
-
stdeb , como você mencionou. Oldie e goodie.
-
Pybuild , uma nova ferramenta incrível do Debian que substitui o
stdeb
.
E muitas referências úteis:
Precisa de ajuda? Verifique isso: