Verificar e anexar a um repositório de pacotes?

1

Eu tenho um espelho ubuntu configurado e pronto para ser transferido pelo disco rígido para uma máquina off-line. Eu quero verificar se o espelho tem todos os pacotes que eu preciso e adicionar todos os pacotes que faltam para ele. O espelho está localizado em /var/spool/apt-mirror , tem 120 GB e possui centenas de arquivos .deb. Como faço essas duas tarefas?

(1) Para verificar se um pacote está presente, suponho que tenho que usar dpkg e apontar de alguma forma para o meu espelho e perguntar se o meu pacote está em algum lugar no espelho. Como faço isso? Isso é o que eu tentei sem sucesso:

dpkg --info /var/spool/apt-mirror/ astyle
dpkg-deb: error: error reading archive magic version number from file /var/spool/apt-mirror/: Is a directory

Talvez eu deva usar o comando apt-cache de alguma forma?

(2) Assumindo que o pacote está faltando, como eu o coloco no espelho? Acabei de encontrar um arquivo deb (s) e copiá-los onde quiser no espelho "pool"? Por exemplo, digamos que eu quero este pacote:

apt-cache showpkg astyle
Package: astyle
Versions:
2.01-1 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_precise_universe_binary-amd64_Packages)

Este pacote aparentemente está disponível no meu cache local (mas não está instalado na minha máquina de teste). Como eu poderia movê-lo para o espelho?

    
por Tyler Durden 25.03.2016 / 16:27

1 resposta

1

Para descobrir se um pacote existe em algum lugar em uma árvore de diretórios, não é necessário usar dpkg . find serve, você está verificando a existência de um arquivo - o fato de ser um arquivo .deb é praticamente irrelevante.

por exemplo,

find /var/spool/apt-mirror/ -name 'astyle*.deb'

Se você planeja fazer isso repetidamente para muitos arquivos, recomendo redirecionar a saída de find /var/spool/apt-mirror/ -type f para um arquivo e, em seguida, usar grep para pesquisar esse arquivo - isso será muito mais rápido do que executar find uma vez para cada pesquisa.

Se o pacote estiver ausente do seu espelho (e ele existir no repositório que você está espelhando), verifique sua configuração apt-mirror e execute apt-mirror novamente.

Para descobrir se o pacote deve estar no espelho, grep para ele no arquivo Packages relevante. por exemplo. Eu tenho um espelho do arquivo zfsonlinux para jessie, então se eu quisesse descobrir se o pacote spl deveria estar no repo, eu faria algo como:

# grep 'Package: spl$' /var/spool/apt-mirror/mirror/archive.zfsonlinux.org/debian/dists/jessie/main/binary-amd64/Packages
Package: spl

ou

# find /var/spool/apt-mirror/mirror/archive.zfsonlinux.org/ -name 'Packages' -exec grep 'Package:\ spl$' {} +
/var/spool/apt-mirror/mirror/archive.zfsonlinux.org/debian/dists/jessie-daily/main/binary-amd64/Packages:Package: spl
/var/spool/apt-mirror/mirror/archive.zfsonlinux.org/debian/dists/jessie/main/binary-amd64/Packages:Package: spl
    
por 26.03.2016 / 01:32