Como desinstalar um programa no linux? [duplicado]

3

Eu tentei desinstalar o PCL 1.7.2 que eu tinha instalado manualmente (sem sudo apt-get) mas quando tentei removê-los usando o apt-get remove comando , terminal mostrou-me que esses arquivos não podem ser desinstalados porque não foram instalados no primeiro Lugar, colocar.

  1. Como posso verificar se os arquivos foram instalados corretamente se eu instalei arquivos usando cmake

  2. Como posso desinstalar um arquivo que eu instalei manualmente usando cmake ?

  3. Como os arquivos são instalados usando apt-get vs cmake diferente?

Nota - pergunta semelhante, mas usando o apt-get remove: Como você pode completamente remover um pacote?

    
por PallavBakshi 19.01.2017 / 22:59

4 respostas

1

Resumo executivo / TL; DR

Execute make uninstall (ou sudo make uninstall , se você tiver executado sudo make install ) no diretório de compilação no qual você executou make e make install . Em compilações configuradas com o CMake, o diretório de compilação geralmente não é o diretório de origem de nível superior. Mas, além disso, desinstalar um programa ou biblioteca cuja construção foi configurada com o CMake não é diferente da desinstalação de outros programas ou bibliotecas que você construiu a partir do código-fonte.

Alguns softwares suportam make install , mas não make uninstall . Nesse caso, você pode ter que investigar quais etapas foram executadas quando make install é executado ou consultar a documentação do software para ver se especifica quais arquivos ele coloca. No entanto, PCL aparece para suportar a desinstalação via make uninstall .

Instalação e desinstalação com cmake e make

O CMake é um sistema para configurar uma compilação. Uma vez configurado, a compilação deve ser executada usando algum sistema de compilação. . Em sistemas operacionais como o Unix, como o Ubuntu, os builds configurados com o CMake quase sempre usam o sistema Make build.

A maioria dos softwares que usam o CMake exige que você crie um diretório de compilação separado, geralmente chamado build , e execute o comando cmake desse diretório. O diretório de construção é preenchido com arquivos necessários para executar a construção. Então você executa make nesse diretório. Você deve criar o diretório build onde quer que as instruções para o software que você está construindo o recomendem. Geralmente, será um subdiretório do diretório de nível superior da árvore de origem (o diretório de nível mais alto criado quando você descompactou o tarball de origem ou invocou um sistema de controle de versão como git ou bzr para fazer o download do código).

Quando você executa make , ele encontra e lê um makefile - geralmente chamado de Makefile - que contém uma lista de destinos, instruções para construir os destinos e como os destinos dependem uns dos outros. Geralmente, o destino padrão, que você não precisa especificar, cria o software e o install target, que você precisa especificar, o instala.

Muitos makefiles contêm destinos adicionais. Os mais comuns são:

  • Um destino check ou test que testa o software que foi construído. make check ou make test pode ser executado antes de make install , e geralmente é aconselhável fazê-lo.
  • Um destino uninstall que desinstala o software removendo os arquivos criados executando make install . (Ocasionalmente make uninstall tem outro comportamento também, para desfazer ações de make install além de copiar arquivos, mas geralmente é apenas uma questão de excluir arquivos.) Nem todos os softwares têm uninstall de destino, mas a maioria faz isso.
  • Um clean de destino para excluir arquivos do diretório de origem ou de criação que foram criados durante a construção. Quase todos os makefiles têm isso.

Existem alguns outros destinos relativamente comuns, como distclean e realclean , que são menos relevantes para o CMake. No entanto, é útil saber que, se você configurou uma compilação executando um script de configuração ( ./configure ) em vez de CMake, a configuração geralmente pode ser apagada executando make distclean .

Um desenvolvedor que usa o CMake deve escrever código para gerar um uninstall target - O CMake não faz isso automaticamente . No entanto, como muitos desenvolvedores, os desenvolvedores de PCL têm feito isso e make uninstall deve funcionar. Veja a próxima seção ("Um exemplo passo-a-passo") para detalhes.

Para desinstalar o software cujo makefile suporta um uninstall target:

  • O diretório a partir do qual você executou make install (ou sudo make install ) é o diretório para o qual você deve retornar, para executar make uninstall (ou sudo make uninstall ). Para o software que não usa o CMake, esse geralmente é o diretório de nível superior da árvore de origem. Mas para o software que faz usar o CMake, geralmente não é - em vez disso, geralmente é um diretório de compilação separado.
  • Ao instalar o software manualmente a partir da origem, é melhor manter o código-fonte e todos os arquivos criados durante a compilação, para que você possa desinstalar o software facilmente. Portanto, depois de executar make install , é melhor não executar make clean (nem excluir manualmente nenhum arquivo).
  • No entanto, se você executou executar make clean ou excluir o código-fonte ou o diretório de criação do software, ainda é possível desinstalar com êxito . Simplesmente siga as mesmas etapas de compilação, com a mesma versão exata do software, configurado e construído com as mesmas opções (ou nenhuma, se você não personalizou), para chegar ao ponto em que você pode executar make uninstall (ou% código%). Para alguns softwares, você pode até ter que executar sudo make uninstall novamente, o que geralmente sobrescreve os arquivos da compilação anterior.Em seguida, execute make install (ou make uninstall ) como de costume.

Quando não houver% de destino sudo make uninstall e você precisar desinstalar o software, será necessário examinar quais arquivos ele cria. Você pode executar uninstall para mostrar quais ações foram tomadas por make -n install . Você não precisa executar make install com make -n install (assumindo que o% inicial co_de% não exigiu sudo ). Quando make recebe o sinal sudo , executa uma execução a seco, que normalmente não deve alterar nada e, portanto, não deve fazer nada que exija privilégios elevados.

Um exemplo passo-a-passo: PCL 1.7.2

É útil dar um exemplo, e eu também posso usar o software que você está tentando desinstalar como esse exemplo. PCL 1.7.2 aparece para usar make para gerar uma meta -n em seu makefile e, portanto, deve suportar cmake .

Além de examinar uninstall , verifiquei que o make uninstall gerado contém uma meta uninstall_target.cmake.in em um sistema de teste Ubuntu 16.04 de 64 bits. No entanto, ainda não terminei de criar PCL para poder instalá-lo e testar Makefile . (Minha máquina de teste é muito lenta e PCL é grande.) Eu planejo atualizar isso com informações adicionais quando tiver a chance de fazê-lo, algum tempo depois que a compilação terminar.

Quando você instalou o PCL 1.7.2, provavelmente fez algo assim:

cd /usr/local/src
wget https://github.com/PointCloudLibrary/pcl/archive/pcl-1.7.2.tar.gz
tar xf pcl-1.7.2.tar.gz
cd pcl-pcl-1.7.2
mkdir build
cd build
cmake ..
make -j2
sudo make -j2 install

Isso se baseia (livremente) em as instruções oficiais , mas é claro que pode não ser exatamente o que você fez. Em particular, eu fiz o download e descompactei uninstall em sudo make uninstall . Se você colocar em outro lugar, então você terá que substituir pcl-1.7.2.tar.gz por onde quer que tenha colocado.

Alterando /usr/local/src , se necessário, você deve conseguir desinstalar o software executando:

cd /usr/local/src/pcl-pcl-1.7.2/build
sudo make uninstall

Mesmo que você execute /usr/local/src para permitir que várias operações ocorram simultaneamente, não será necessário passar o sinal /usr/local/src ao executar make -j2 install .

    
por Eliah Kagan 20.01.2017 / 10:21
2

Ao observar as instruções de instalação, ele usa cmake e make . Para desinstalar, você deve ser capaz de:

Em terminal ...

  • cd folder_of_original_source_code # pasta onde você fez o cmake
  • sudo make uninstall # para desinstalar
por heynnema 20.01.2017 / 01:22
1

Quando você instalou o PCL, você realmente executou duas etapas:

  • Você compilou o software, que qualquer usuário pode fazer em seu próprio diretório pessoal
  • Você instalou o software em todo o sistema, que somente o root pode fazer

A própria instalação (o sudo make -j 2 install recomendado no seu caso) é um script escrito pelos autores do PCL. Não há como dizer o que esse script fez ao seu sistema, além de ler o código-fonte do script. Não há padronização aqui, o script pode fazer o que quiser em sua máquina, incluindo apagar arquivos importantes ou modificar a configuração de maneiras que o software padrão do Ubuntu não espera.

Como não há como saber o que o script de instalação fez no sistema, não há como outro programa (como APT ) desfazer as alterações depois que elas forem concluídas. A aposta nesse caso é salvar a saída do script de instalação (para lê-lo mais tarde e desfazer as alterações manualmente) ou para restaurar um backup do sistema.

Um pacote deb é diferente. O autor do pacote executou o estágio de compilação em sua própria máquina, examinou os arquivos produzidos e os colocou em ordem, já que eles deveriam estar em um sistema Ubuntu adequado. Ele ou ela os colocou em um arquivo zip, que é o pacote deb . O autor também escreveu scripts de instalação e desinstalação, caso o software precise de algumas outras modificações feitas no momento em que é instalado. O autor também escreveu todos os metadados necessários, notadamente quais outros pacotes (como bibliotecas compartilhadas) este depende para executar.

Quando o APT instala um pacote, ele mantém trilhas de quais arquivos foram extraídos e, portanto, pode removê-los depois.

Agora, responda suas perguntas:

Q1. A menos que você tenha salvado a saída do script de instalação PCL (supondo que esta saída inclua um detalhe completo e verdadeiro de tudo que estava sendo feito), ou você compara o conteúdo de seu disco rígido com um backup realizado antes de instalar o PCL, não há maneira de saber se os arquivos foram instalados corretamente. O melhor que você pode fazer é executar o software e ver se ele funciona bem.

Q2. Existe a possibilidade de que os criadores de PCL tenham escrito um script de desinstalação, talvez executar sudo make uninstall faça alguma coisa útil. Você teria que consultar a documentação do PCL para isso. Caso contrário, você precisa remover os arquivos individualmente, manualmente.

Q3. Os arquivos instalados em si não são diferentes. O que é diferente é o programa usado para copiá-los nos diretórios do sistema. O apt-get acompanha o que foi instalado a partir dos arquivos deb e pode removê-lo. cmake faz do seu jeito, desconhecido para o APT.

    
por Adrien Beau 19.01.2017 / 23:24
1

Breve visão geral do apt-get

O apt-get instala programas que foram especificamente empacotados. A configuração do apt continha informações detalhadas sobre onde todos os componentes do pacote serão instalados. Também armazena informações no sistema exatamente quais arquivos foram adicionados ao sistema. As informações incluem as etapas de remoção dos arquivos.

Quando você decidir usar o apt-get para remover os arquivos, ele usará essas informações para remover com segurança os arquivos que foram adicionados ao computador.

CMake

O Cmake é um utilitário para compilar e instalar programas. Um indivíduo, incluindo você, pode criar um aplicativo tão simples como "Hello World" e usar o Cmake para compilar e colocar o programa onde quer que você decida colocá-lo.

O utilitário apt-get não está ciente de todos os programas que você decide colocar em qualquer parte do seu computador. Se o autor quiser que o programa seja instalado via apt-get , ele será configurado para ele e fornecerá um pacote .deb para o instalador.

Removendo programas não instalados usando apt-get

Para remover programas instalados manualmente, você teria que seguir a cláusula de autores para a remoção. O comando cmake e o comando make possuem arquivos de configuração que permitem especificar itens como build , install , install with special conditions e uninstall . Esses recursos estão à altura do desenvolvedor do programa.

Muitos programas vêm com etapas (um arquivo readme.txt) para instalação e desinstalação. Você terá que olhar o conteúdo do pacote para ver o que o autor forneceu. Se não tiverem sido fornecidos passos de desinstalação, você terá que removê-lo manualmente, procurando os arquivos reais que foram adicionados ao seu computador pelo programa.

Verifique se o desenvolvedor forneceu um uninstall target com:

$ cmake uninstall

Encontrando os arquivos do programa:

Procure um arquivo install_manifest.txt que possa ser criado depois de executar a instalação. Isso deve mostrar onde estão os arquivos.

Outra maneira de encontrar os arquivos do programa é estudar o arquivo CMakeList.txt . Procure os diretórios que se referem a output . Em geral, ele especifica onde os binários e as bibliotecas serão colocados.

Você também pode descobrir quais arquivos foram adicionados ao seu sistema com find . Especifique uma janela durante o tempo em que você executou a instalação e você obterá uma lista de arquivos. Existem algumas variações deste comando.

Você pode usar essas etapas para encontrar arquivos que foram criados em uma janela entre 18 de janeiro à meia-noite e 19 de janeiro à meia-noite . Em vez de usar zero, você poderia especificar uma hora e um minuto específicos.

Crie um arquivo de timestamp para o início do período:

 $ touch -t 201701180000 starttime

Crie um arquivo de timestamp para o final do período de tempo:

 $ touch -t 201701190000 starttime

Isso está no formato de: AAAAMMDDHHMM

Em seguida, execute:

$ find ~/ -mount -newer starttime ! -newer endtime > find.out

Agora examine o arquivo de texto find.out e você verá todos os arquivos que foram criados nessa janela de tempo. Você pode eliminar automaticamente muitos arquivos, como os do seu diretório pessoal. Isso fará com que você olhe principalmente para os arquivos binários.

    
por L. D. James 19.01.2017 / 23:25