Se eu criar um pacote a partir da fonte, como posso desinstalar ou remover completamente?

137

Eu usei o código fonte para criar um pacote, como abaixo:

./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libexecdir=/usr/lib --with-package-name="Myplugin" --with-package-origin="http://www.ubuntu.org/" --enable-gtk-doc --disable-static
make
make install

Mas, infelizmente, descobri que é a versão mais recente e tem muitos bugs, por isso preciso removê-lo / desinstalá-lo. Mas como posso fazer isso? Eu tentei, make clean; make uninstallmas ainda vejo que existe:

# pkg-config --list-all | grep Myplugin
myplugin-....
$ ls /usr/lib/myplugin/libXYZ.so
exist....

Como você remove isso agora?

YumYumYum
fonte

Respostas:

177

Geralmente você pode apenas usar:

make uninstall

ou

sudo make uninstall

se o aplicativo foi instalado como root.

Mas isso funcionará apenas se o desenvolvedor do pacote tiver tomado o cuidado de fazer uma boa regra de desinstalação.

Você também pode tentar ver as etapas usadas para instalar o software executando:

make -n install

E tente reverter essas etapas manualmente.

No futuro, para evitar esse tipo de problema, tente usar em checkinstallvez de make installsempre que possível (AFAIK sempre, a menos que você queira manter a versão compilada e a versão compactada ao mesmo tempo). Ele criará e instalará um arquivo deb que você poderá desinstalar usando seu gerenciador de pacotes favorito.

make cleangeralmente limpa os diretórios de construção, não desinstala o pacote. É usado quando você quer ter certeza de que tudo está compilado, não apenas os arquivos alterados.

Javier Rivera
fonte
Eu também fiz isso. Mas ainda existe, como mostrado pkg-config e ls /usr/lib/myplugin/libXYZ.so #
YumYumYum 12/12
36
+1 para usar checkinstall- ele evapora todo esse problema.
Oli
6
@Google: se a desinstalação do make não funcionar, você precisará acompanhar o que o make install fez e desfazê-lo manualmente.
Javier Rivera
4
Outro aspecto a ter em mente é que, se make installfoi executado como root (por exemplo, sudo make install), o que geralmente ocorre, é sempre virtual executar sudo make uninstallpara remover o software.
Eliah Kagan 9/07/2013
5
Se você já executou make install, ainda pode usá-lo checkinstall. Normalmente checkinstall, substituirá tudo o que foi make installcriado. Depois disso basta usar dpkg -r <package.deb>, e tudo deve ser removido.
user502144
28

Eu não acho que isso seja um bug, seria uma boa idéia ler e aprender a usar o checkinstall ao instalar a partir do código-fonte.

você pode instalar o checkinstall a partir dos repositórios, uma breve descrição do pacote;

O CheckInstall rastreia todos os arquivos criados ou modificados pelo seu script de instalação ("make install" "make install_modules", "setup" etc.), cria um pacote binário padrão e o instala no seu sistema, permitindo desinstalá-lo com utilitários de gerenciamento de pacotes padrão da sua distribuição.

Esses links abaixo podem ser úteis para entender melhor. http://en.wikipedia.org/wiki/CheckInstall

http://checkinstall.izto.org/

Sabacon
fonte
16

Isso não é um erro - compilar a partir da fonte é um método não suportado de instalação de software que ignora completamente o sistema de gerenciamento de pacotes (que é usado pelo Centro de Software).

Não existe uma maneira padrão de instalar ou desinstalar o software compilado a partir do código-fonte; portanto, o Ubuntu não pode saber o que fazer. O software nem está listado como um programa instalado.

Você deve seguir as instruções do distribuidor para instalação e remoção desse software personalizado. Você também pode entrar em contato com o desenvolvedor para solicitar que ele crie um pacote Debian para que o sistema de gerenciamento de pacotes possa ser usado.

dv3500ea
fonte
3

Não é um bug, é o que acontece quando os desenvolvedores recorrem à distribuição via fonte e não pelos métodos de empacotamento nativos.

Você pode fazer com que seus arquivos de origem se tornem pacotes debian usando checkinstall ou dhbuild. Honestamente, na minha opinião - novos usuários devem evitar a instalação a partir do código-fonte e os desenvolvedores devem evitar a distribuição somente pelo código-fonte.

RolandiXor
fonte
Eu sei, mas às vezes é inevitável ... Nesse caso, era apenas um pequeno jogo que não é realmente necessário, mas em algum momento eu tive que instalar o MATLAB, uma ferramenta computacional usada na minha universidade, e tive que instalá-lo pela fonte desde que o fizeram. não tem um arquivo deb para ubuntu ... Mas eu certamente vou através dos métodos checkInstall e dhbuild ... obrigado
nik90
1

Conheço alguns pacotes que suportam "make uninstall", mas muitos outros que suportam make install DESTDIR = xxx "para instalações em etapas.

Você pode usar isso para criar um pacote que você instala em vez de instalar diretamente da fonte. Não tive sorte com o checkinstall, mas o fpm funciona muito bem.

Isso também pode ajudá-lo a remover um pacote instalado anteriormente usando o make install . Você simplesmente força a instalação do seu pacote construído sobre o make instalado e o desinstala.

Por exemplo, usei isso recentemente para lidar com o protobuf-3.3.0. No RHEL7:

make install DESTDIR=dest
cd dest
fpm -f -s dir -t rpm -n protobuf -v 3.3.0 \
 --vendor "You Not RedHat" \
 --license "Google?" \
 --description "protocol buffers" \
 --rpm-dist el7 \
 -m [email protected] \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 --rpm-autoreqprov \
 usr

 sudo rpm -i -f protobuf-3.3.0-1.el7.x86_64.rpm
 sudo rpm -e protobuf-3.3.0      

Prefira yum a rpm, se puder.

No Debian9:

make install DESTDIR=dest
cd dest
fpm -f -s dir -t deb -n protobuf -v 3.3.0 \
-C `pwd` \
--prefix / \
--vendor "You Not Debian" \
--license "$(grep Copyright ../../LICENSE)" \
--description "$(cat README.adoc)" \
--deb-upstream-changelog ../../CHANGES.txt \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 usr/local/bin \
 usr/local/lib \
 usr/local/include

 sudo apt install -f *.deb
 sudo apt-get remove protobuf

Prefira o apt ao dpkg onde puder.

Também publiquei esta resposta no stackoverflow

Bruce Adams
fonte
0

Precisamos negociar o fato de que fazer desinstalação se não sempre funciona, assim abaixo é mais de uma solução pró-ativa.

Isso envolve o uso do programa paco, que está disponível no Ubuntu Software Center. Depois de instalar o paco, podemos usá-lo no modo de log quando "instalamos" um programa. O Paco atua como um wrapper para o seu "make install" e cria um log no diretório / var / log / paco com a lista de arquivos copiados para vários diretórios. Além disso, você pode ver os arquivos no front end do Paco.

Por exemplo, quando compilei o php da fonte, fiz o seguinte:

paco -lp php5 "make install"

O parâmetro l faz com que o paco seja executado no modo de log. Isso criou um arquivo de log em / var / log / paco chamado php5 (o nome que eu dei no comando). Continha todos os arquivos copiados para vários locais padrão durante a instalação. Você pode usar um editor de linha de comando ou paco gui para visualizar os arquivos.

Abaixo está o exemplo de como obter a lista de arquivos usando o editor de linha de comando sed
(Substitua php5 pelo seu nome de arquivo).

cat /var/log/paco/php5 | sed -n 's/|\(.*\)//;/^#\(.*\)/d;p'

Depois de obter a lista dos arquivos, você sabe como excluí-los, não é? Na verdade, você pode passar os resultados do comando acima para rm usando backticks como mostrado abaixo:

sudo rm `cat /var/log/paco/php5 | sed -n 's/|\(.*\)//;/^#\(.*\)/d;p'`

Tarefa concluída!

Nota: Devido às limitações do LD_PRELOAD, o paco não pode seguir o rastreio de programas suid. Veja a página de manual.

sjsam
fonte
0

Eu tinha compilado php-5.6.30 da fonte sem configurá-lo com o OpenSSL, então eu tive que voltar e instalá-lo a partir scratch.Using fazer desinstalação não funcionar como o Makefile para php não apoiá-lo.

No entanto, esta etapa funcionou para mim: - listei todos os arquivos relacionados ao php e os removi manualmente; levei cerca de 5 minutos sem suar a camisa. Da mesma forma, você pode usar essas etapas para desinstalar o software compilado.

Substitua php pelo software que você precisa para desinstalar

whereis php

O comando acima lista os diretórios nos quais os binários estão instalados, por exemplo: / usr / local / bin / php, / usr / bin / php .. remova cada arquivo / diretório listado em sua saída.

sudo rm -f /usr/local/bin/php

Faça isso com todos os arquivos listados na saída acima e está tudo pronto para instalar a versão mais recente do zero.

Abhinay
fonte