Como criar rapidamente um repositório apt local para pacotes aleatórios usando uma distribuição linux baseada em Debian?

20

Algumas situações exigem a instalação manual de um pacote local usando dpkg -i <packagename>. Às vezes, pode ser mais útil alavancar a funcionalidade aptdesse pacote para que a pergunta seja:

Como você cria rapidamente um repositório local para pacotes aleatórios usando uma distribuição Linux baseada no Debian - como o Xubuntu 13.04 / Ubuntu?


fonte
Apenas para sua informação. O habitual é seguir dpkg -i <packagename>com apt-get -f installos pacotes necessários. Além disso, a coisa usual para criar um repositório apt para o Debian é reprepro.
Faheem Mitha
Encontrei reprepro útil
Gilles 'SO- stop
Obrigado por seus comentários. @ Faaem Mitha: você pode expandir brevemente o motivo pelo qual a execução aptcom --fix-brokenseria necessária após a instalação de um pacote local dpkg -i? O dpkg não cuidaria disso? Eu li que pode ser necessário na primeira vez que o apt é executado? @ FM & Gilles: Sobre reprepro . Parece útil se eu conseguir fazê-lo funcionar (não tenho certeza sobre dir struct, conteúdo de 3 arquivos ou parâmetros em tempo de execução). Tentará novamente e atualizará ou publicará a pergunta completa.
11
@ illuminÉ: dpkgnão resolve dependências, mas aptsim. dpkgavisa sobre dependências quebradas, mas é de baixo nível, portanto, não tentará corrigi-las. O procedimento dpkg -i *.debseguido apt-get -f installé o padrão. Existe um bug na lista de desejos para aptlidar com o caso da instalação local de pacotes, e há até um patch, eu acho, mas ainda não foi implementado. Veja apt-get install poderia instalar arquivos de pacotes locais, também , originalmente arquivado em 1999.
Faheem Mitha
A manifestação de interesse neste recurso não será prejudicial. Penso que quanto mais pessoas (educadamente) manifestarem interesse, maior a probabilidade de que seja implementado. Observe também que o gdebi é uma alternativa, conforme observado no relatório de erros. Essa é parte da razão pela qual não foi implementada, eu acho. Embora ter essa funcionalidade principal como parte do apt seria melhor do que ter essa funcionalidade como parte de outro pacote.
Faheem Mitha

Respostas:

29

Isso deve ser diferenciado da situação em que você está tentando replicar uma árvore de pacotes completa de um repositório oficial e de uma prioridade de fontes de ajuste fino . Pacotes aleatórios significam pacotes virtuais, pacotes que são compilados localmente ou copiados de forma fragmentada para fins de teste. Aqui está uma configuração simples com base na documentação agora obsoleta .

Primeiro, crie um diretório para hospedar os pacotes:

mkdir <packagedir>

Em seguida, mova seus arquivos de pacote .deb para lá. Execute este comando no diretório acima do que acabamos de criar (verifique se as permissões permitem isso!):

dpkg-scanpackages packagedir | gzip > packagedir/Packages.gz

Agora crie um arquivo com extensão .listna /etc/apt/sources.list.d/com o conteúdo:

deb [trusted=yes] file:///path_to_dir_above_packagedir packagedir/

e atualize o banco de dados apt:

apt-get update

Neste ponto, os pacotes em nosso repositório local podem ser instalados como qualquer outro pacote usando apt-get install <packagename>. Quando novos pacotes são adicionados ao repositório local, o dpkg-scanpackagescomando prescrito deve ser emitido novamente para atualizar o arquivo Packages.gz e aptdeve ser atualizado antes que os novos pacotes sejam disponibilizados. Espero que isso possa ser útil para fins de teste .

user44370
fonte
6
Com o novo apt 1.1, é necessário [trusted=yes]entre debe o file:///URI (consulte a sources.list(5)página de manual), caso contrário, apt-get updatefalhará devido à falta de assinatura.
vinc17
2

Se você deseja criar um repositório com a estrutura completa necessária para ferramentas como o debootstrap, a maneira mais simples que encontrei é:

  1. Crie um diretório de repositório.

    # mkdir -p /opt/debian
    
  2. Crie um subdiretório conf.

    # mkdir /opt/debian/conf
    
  3. Crie um arquivo / opt / debian / conf / distributions com conteúdos como este (ajuste conforme apropriado para a distribuição que você está usando):

    Label: Local APT repository
    Codename: jessie
    Architectures: amd64
    Components: main
    Description: Local APT repository for debootstrap
    
  4. Importe seu pacote com reprepro.

    # reprepro -b /opt/debian includedeb jessie /path/to/package.db
    
  5. Importe vários pacotes com um loop for shell, por exemplo, tudo do seu cache do APT:

    # cd /var/cache/apt/archives
    # for DEB in *.deb; do reprepro -b /opt/debian includedeb jessie $DEB; done
    

Isso criará um arquivo não assinado. Pode ser usado com o debootstrap com a opção --no-check-gpg.

Andrew Klaassen
fonte