Existe um comando apt para baixar um arquivo deb dos repositórios para o diretório atual?

46

Muitas vezes estou interessado nos gatilhos de instalação (postinst, postrm) ou em certas partes dos pacotes (como /usr/sharee /etc). Atualmente, estou executando o próximo comando para recuperar o código fonte:

apt-get source [package-name]

A desvantagem é que esse arquivo geralmente é muito maior que o pacote binário e não reflete a árvore de instalação.

No momento, estou baixando os pacotes através do http://packages.ubuntu.com/ :

  1. Procurar por [package-name]
  2. Selecione o pacote
  3. Clique em amd64 / i386 para fazer o download
  4. Faça o download do arquivo real

Isso leva muito tempo para mim e, como alguém que realmente gosta do shell, gostaria de fazer algo como o próximo comando ( imaginário ):

apt-get get-deb-file [package-name]

Não consegui encontrar algo assim na página de manual do apt-get . O mais próximo que encontrei foi a --download-onlyopção, mas isso coloca o pacote /var/cache/apt/archives(que requer permissões de root) e não no diretório atual.

Lekensteyn
fonte
Diferenças em máquinas sem salvar arquivos: ssh debianmachine1 "dpkg --get-selections" | diff - <(dpkg --get-selections)
Scott Robert Schreckengaust
Você pode usar debgeto pacote debian-goodies.
Shayan

Respostas:

59

Você pode usar o downloadsubcomando de apt, apt-getou aptitude. Por exemplo, se $ PKG é o pacote que você deseja, qualquer um deles fará:

apt-get download $PKG
apt download $PKG
aptitude download $PKG

Isso não requer privilégios de root. O mesmo também pode ser aproximado usando apt-gete wget:

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2)

No entanto, isso buscará todos os pacotes necessários para instalar o pacote, para que você possa tentar limitá-lo:

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2 | grep "/${PKG}_")

Você também pode colocar uma linha wget em uma função, para poder usá-la como um comando apt-download com o nome do pacote como parâmetro:

function apt-download { wget -c $(apt-get install --reinstall --print-uris -qq $1 | cut -d"'" -f2); }

Observe as modificações: O $ PKG é substituído por $ 1 e o parâmetro -c permite downloads interrompidos contínuos.

Kees Cook
fonte
1
Excelente, é isso que estou procurando. Outro motivo para manter o aptitude no meu sistema, o outro comando útil que não é fornecido pelo apté aptitude changelog $PKG.
Lekensteyn
4
Update: a partir Natty (apt versão 0.8.11 para ser preciso), o aptitude downloadrecurso está disponível em aptassim: apt-get download $PKG.
Lekensteyn
doce, funciona apesar do meu antigo apt v0.8.10
rogerdpack 12/12
parece que acabou com a opção --print-urls
erjoalgo
A opção --print-urls ainda está lá
kumarharsh
8
sudo apt-get -o dir::cache::archives="/path/to/folder/" -d install package

Nota:

Você precisa criar uma pasta chamada parcial na pasta de destino.

mount.cifs
fonte
Não parece tão ruim assim. As opções parecem ser descritas por man apt.conf. Eu gostaria de evitar a criação da pasta.
Lekensteyn
Só estou curioso, por que você evitaria criar a pasta?
mount.cifs
Não preciso armazenar o pacote para sempre e evitar que a pasta economize tempo também.
Lekensteyn
Gostaria apenas de observar que esta solução também insistirá na remoção de pacotes (por exemplo, se você alterar a versão por /etc/apt/sources.listuma mais recente, com a intenção de baixar pacotes posteriores) - nesse caso, o wgetmétodo acima pode ser mais útil, se você não 't quer remover qualquer coisa ...
sdaau
5

No Ubuntu 14.04 ( aptversão do pacote 1.0.1ubuntu2, acredito), apt-getinclui o downloadcomando para baixar o pacote fornecido como um .debno diretório atual.

Por exemplo, suponha que queremos baixar o gerenciador de arquivos Ranger:

$ apt-get download ranger

Resulta em:

$ ls . | grep ranger
ranger_1.6.0-1_all.deb
Aaron Santavicca
fonte
Isto é perfeito. Todas as outras soluções que tentei não funcionam se apt installnão puderem atender a todos os requisitos de dependência. Eu só queria o arquivo .deb para mexer!
Raziel
3

Se você deseja baixar todos os pacotes deb de uma lista, você pode fazer isso:

cat path/to/text/file.txt | xargs apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2 | xargs wget

Basta colocar um nome de pacote por linha. Como em um arquivo requirements.txt. Por exemplo, com conteúdos como este:

apache2-mpm-event
curl
dmidecode
ethtool
libapache2-mod-wsgi
libapache2-mod-python

Espero que isto ajude. ;)

Jayme Tosi Neto
fonte
2

sudo apt-get install devscripts

dget [package-name]

Michael Terry
fonte
Isso não fornece uma resposta para a pergunta. Para criticar ou solicitar esclarecimentos a um autor, deixe um comentário abaixo da postagem.
S3lph
Como não fornece uma resposta? Isso baixa uma deb do arquivo morto para o diretório atual. Não era exatamente essa a pergunta?
22415 Michael Terry
Um pouco mais de detalhes pode ser útil. Embora isso tecnicamente seja qualificado como resposta, você ainda pode fornecer mais de dois comandos.
S3lph
:: encolher de ombros :: Ao contrário das outras respostas aqui, esta não tem ressalvas ou ressalvas. É uma resposta simples para uma pergunta direta.
Michael Terry
0

/var/cache/apt/archivesé legível pelo mundo. Depois apt-get -d, basta extraí-lo para o diretório inicial. Execute dpkg -e /var/cache/apt/archives/foo_version.deb fooenquanto estiver no diretório inicial e os arquivos de controle serão despejados foo/.

psusi
fonte
Eu acho que o problema com esse método é que o download ainda requer privilégios administrativos. Parece tolice ir a tais extremos apenas para colocar um arquivo no diretório inicial.
ændrük
Abrir o arquivo .debs não é o problema, é o download. Pode ser um bug ou não, mas os pacotes em / var / cache / apt / archives` também são afetados pelo umask. Eu configurei uma umask de 027 e, portanto, os pacotes /var/cache/apt/archivesnão podem ser lidos por mim. Como eu preciso apenas examinar o conteúdo do pacote, só preciso baixá-lo uma vez: para /tmp.
Lekensteyn
0

Você pode usar o comando debgetque está incluído no pacote debian-goodies.

Instale-o com:

sudo apt install debian-goodies

Baixe pacotes usando:

debget <package_name>

Por exemplo:

debget debian-goodies

O qual será baixado debian-goodies_0.79_all.debem seu diretório atual (faça pwdpara imprimir seu diretório de trabalho atual).

Shayan
fonte
debian-goodiesvem com muitos comandos úteis, veja também: askubuntu.com/a/1170001/777279
Shayan