Como executar um comando antes de baixar com o apt-get?

8

Como posso executar um comando antes que o apt-get comece a baixar um pacote?

Eu sei sobre o gancho de pré-chamada do dpkg ( conecta um script ao apt -get ), mas isso parece ser executado após o download.

$ apt-get update
Get: 11 http://security.debian.org/ wheezy/updates/main qemu amd64 1.1.2+dfsg-6a+deb7u7 [115 kB]
Fetched 70.9 MB in 10s (6,776 kB/s)
refreshing freenet index
--2015-05-19 15:55:25--  http://127.0.0.1:8888/freenet:USK@oRy7ltZLJM-w-kcOBdiZS1pAA8P-BxZ3BPiiqkmfk0E,6a1KFG6S-Bwp6E-MplW52iH~Y3La6GigQVQDeMjI6rg,AQACAAE/deb.mempo.org/-42/

O que precisamos é executar um comando antes do download. Mais exatamente: O script deve ser executado após chamar o apt-get, mas antes do apt-get acessar qualquer recurso online.

Existe algo como um gancho de pré-download?

É importante que a instalação possa ser feita sem ter que substituir o script apt-get (e sem fazer qualquer outra coisa que possa ser desfeita por uma atualização).

    
por Arne Babenhauserheide 19.05.2015 / 22:00

5 respostas

3

Primeiro determine onde o apt-get está usando whereis apt-get ou which apt-get ; Eu assumirei que está em / usr / bin / apt-get

Em seguida, crie um arquivo em / usr / local / bin / apt-get com este conteúdo:

#!/bin/bash
# (commands to run before apt-get)
/usr/bin/apt-get "$@"

agora chmod +x /usr/local/bin/apt-get .

Isso deve sobreviver a todas as atualizações da distribuição, mas não deve alterar o comportamento do apt-get (além de executar o comando antes de fazer qualquer outra coisa). Como bônus, ele poderia analisar os argumentos da linha de comando para executar somente o comando quando for realmente necessário.

(Esta resposta baseia-se na resposta Mohammad Etemaddar , fundiu-se com o feedback do muru)

    
por 01.06.2015 / 10:44
4

Que tal usar os ganchos apt pré / post-invoke?

Essencialmente, ele é semelhante aos ganchos dpkg pre / post-invoke, mas para o apt (que, na minha opinião, é o mais importante no seu cenário de uso). AFAIK existem outros, mas eu só usei assim.

Por exemplo,

$ sudo cat /etc/apt/apt.conf.d/05new-hook
APT::Update::Pre-Invoke {"your-command-here"};
    
por 17.02.2016 / 05:40
2

Primeiro determine onde o apt-get está usando whereis apt-get ; Eu assumirei que está em / usr / bin / apt-get

como muru diz, você pode criar um script chamado apt-get em /usr/local/bin/ , que é antes de /usr/bin no Debian e no Ubuntu $PATH . Em seguida, coloque o seguinte código ( /usr/local/bin/apt-get ):

#!/bin/bash
commands to run before apt-get
/usr/bin/apt-get "$@"

Obrigado muru pela oferta como comentário.

Outro caminho:

Claro que há outro jeito que não é melhor que o anterior.

Você pode mv /usr/bin/apt-get /usr/bin/apt-get2

Em seguida, crie um arquivo em / usr / bin / apt-get com este conteúdo:

#!/bin/bash
commands to run before apt-get
apt-get2 "$@"

agora chmod +x /usr/bin/apt-get

    
por 20.05.2015 / 00:31
2

Você pode usar um "alias" no arquivo .bashrc. Por exemplo, coloque isso em seu arquivo .bashrc raiz:

alias apt-get='echo blahblah && apt-get'

Os argumentos da linha de comando serão adicionados automaticamente ao final do alias.

Basta substituir echo blahblah pelo comando que você precisa.

Mas, neste caso, só funciona quando você está executando comandos como root (não sudo).

    
por 19.05.2015 / 22:25
0

Tente um alias no arquivo .bashrc . Ele só funciona quando conectado à conta à qual o arquivo corresponde. A sintaxe de um alias é:

alias newcommand='command1; command2; command3' Então sua linha pode parecer um pouco assim:

alias apt-get='firstcommand; apt-get'

Ou isto:

alias apt-get='firstcommand && apt-get'

Com o segundo, apt-get será executado somente se firstcommand for bem-sucedido.

    
por 24.05.2015 / 20:25

Tags