Por que o pacote binário não é reinstalado pelo apt-get ou construindo a partir do código-fonte?

1

Estou tentando instalar o Asterisk em meu servidor wheezy do Debian. Para isso eu fiz primeiro o simples

sudo apt-get install asterisk

Isso funcionou perfeitamente. Depois asterisco estava correndo e eu poderia entrar no CLI dele usando:

asterisk -rvvv

Depois de brincar, larguei o asterisco e reinstalei novamente:

sudo apt-get remove --purge asterisk
sudo apt-get install asterisk

Isso foi reinstalado com êxito e sudo service asterisk status mostra [ ok ] Asterisk PBX is running. , mas não consigo mais entrar na CLI ( asterisk -rvvv says -bash: asterisk: command not found ).

Então, tentei instalá-lo a partir do código-fonte usando este guia simples . Todos os passos vão bem e posso colocar o asterisco novamente em funcionamento. Mas mais uma vez, o CLI se recusa a começar com outro -bash: asterisk: command not found ).

Alguém sabe o que estou fazendo errado aqui? Ou alguém pode me apontar na direção certa? Todas as dicas são bem vindas!

    
por kramer65 19.08.2014 / 10:17

1 resposta

2

Como o shell encontra seus programas

Quando você digita foo na linha de comando do seu shell, ele parece foo em um conjunto de caminhos definidos pela variável de ambiente PATH do seu shell (que você pode inspecionar executando echo $PATH ).

Então, meu palpite é simpe: o pacote asterisco que você tinha antes de reinstalar tinha o binário asterisk localizado em um lugar listado no $PATH do seu usuário e o pacote instalado depois o instalou em outro lugar.

Você pode verificar isso facilmente correlacionando echo $PATH em seu shell com a saída de

$ dpkg -L asterisk | grep bin/asterisk

Em qualquer caso, você pode executar seu programa binário especificando seu nome de caminho completo.

Cache de resolução de nome de caminho nos shells

Outra possibilidade, embora menos provável, é o cache de resolução de nome de caminho. Os shells interativos, bash incluídos, só procuram o nome de um programa usando a lista em $PATH uma vez e depois lembram-se da localização completa que encontraram. Se você remover o programa daquele local, o shell não poderá mais executá-lo, mesmo se o arquivo do programa estiver acessível em algum outro lugar listado no $PATH .

Você pode ajudar o shell executando hash -r (por favor, veja help hash no seu prompt bash ).

Miscelânea

Observe que, no caso geral, quando você faz

apt-get remove --purge asterisk
apt-get install asterisk

ou seja, executar um ciclo remove & install, a versão de um pacote conhecida pelo sistema APT com base nos arquivos disponibilizados para ele está instalada. Ou seja, se você instalou sua versão construída diretamente por meio de dpkg -i ... , o APT não tentará localizar e instalar essa mesma versão quando você remover e instalar o pacote com o mesmo nome posteriormente.

Se você quiser disponibilizar seu pacote asterisk feito à mão para instalação geral, você terá que manter um repositório Debian local apropriado ( reprepro é a ferramenta mais simples de usar, veja também apt-ftparchive ), divulgue para o seu sistema APT local e possivelmente torne os pacotes daquele repositório preferidos usando as preferências do APT .

    
por 19.08.2014 / 11:29