Si construyo un paquete desde la fuente, ¿cómo puedo desinstalarlo o eliminarlo por completo?


137

Usé el código fuente para construir un paquete como el siguiente:

./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

Pero desafortunadamente, descubrí que es la última versión y tiene muchos errores, así que necesito eliminarlo / desinstalarlo. ¿Pero cómo puedo hacerlo? Lo intenté make clean; make uninstallpero aún veo que existe:

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

¿Cómo eliminas esto ahora?

Respuestas:


177

Por lo general, solo puede usar:

make uninstall

o

sudo make uninstall

si la aplicación se instaló como root.

Pero esto solo funcionará si el desarrollador del paquete se ha encargado de hacer una buena regla de desinstalación.

También puede intentar echar un vistazo a los pasos utilizados para instalar el software ejecutando:

make -n install

Y luego intente revertir esos pasos manualmente.

En el futuro, para evitar ese tipo de problemas, intente utilizarlo en checkinstalllugar de hacerlo make installsiempre que sea posible (AFAIK siempre, a menos que desee mantener tanto la versión compilada como la empaquetada al mismo tiempo). Creará e instalará un archivo deb que luego puede desinstalar usando su administrador de paquetes favorito.

make cleangeneralmente limpia los directorios de construcción, no desinstala el paquete. Se usa cuando quieres asegurarte de que todo está compilado, no solo los archivos modificados.


Yo también hice eso. Pero aún existe, como se muestra pkg-config y ls
/usr/lib/myplugin/libXYZ.so

36
+1 por usar checkinstall: hace que todo este problema se evapore.
Oli

66
@Google: si la desinstalación de make no funciona, deberá realizar un seguimiento de lo que hizo la instalación y deshacerla manualmente.
Javier Rivera

44
Otra cosa a tener en cuenta es que si make installse ejecutó como root (p. Ej. sudo make install), Que suele ser el caso, siempre es virtual ejecutarlo sudo make uninstallpara eliminar el software.
Eliah Kagan

55
Si ya has corrido make install, aún puedes usarlo checkinstall. Normalmente checkinstallsobrescribirá todo lo que haya make installcreado. Después de eso, simplemente use dpkg -r <package.deb>, y todo debe eliminarse.
usuario502144

28

No creo que esto sea un error, sería una buena idea leer y aprender a usar checkinstall al instalar desde la fuente.

puede instalar checkinstall desde los repositorios, una breve descripción del paquete;

CheckInstall realiza un seguimiento de todos los archivos creados o modificados por su script de instalación ("make install" "make install_modules", "setup", etc.), crea un paquete binario estándar y lo instala en su sistema, lo que le permite desinstalarlo con las utilidades de administración de paquetes estándar de su distribución.

Estos enlaces a continuación pueden ser útiles para obtener una mejor comprensión. http://en.wikipedia.org/wiki/CheckInstall

http://checkinstall.izto.org/


16

Esto no es un error: la compilación desde el origen es un método no compatible de instalación de software que omite completamente el sistema de administración de paquetes (que es utilizado por el Centro de software).

No hay una forma estándar de instalar o desinstalar el software compilado desde la fuente, por lo que Ubuntu no puede saber qué hacer. El software ni siquiera aparece como un programa instalado.

Debe seguir las instrucciones del distribuidor para la instalación y eliminación de dicho software personalizado. También puede ponerse en contacto con el desarrollador para solicitarles que creen un paquete Debian para poder utilizar el sistema de gestión de paquetes.


3

No es un error, es lo que sucede cuando los desarrolladores recurren a la distribución a través de la fuente y no a través de los métodos de empaquetado nativos.

Puede hacer que sus archivos fuente se conviertan en paquetes de Debian utilizando checkinstall o dhbuild. Honestamente, en mi opinión, los nuevos usuarios deben evitar la instalación desde la fuente, y los desarrolladores deben evitar distribuir solo por fuente.


Lo sé, pero a veces es inevitable ... En este caso fue solo un pequeño juego que no es realmente necesario, pero en algún momento tuve que instalar MATLAB una herramienta computacional utilizada en mi universidad y tuve que instalarla por la fuente ya que lo hicieron no tengo un archivo deb para ubuntu ... Pero definitivamente revisaré los métodos checkinstall y dhbuild ... gracias
nik90

1

Conozco algunos paquetes que admiten "realizar desinstalación", pero muchos más que admiten la instalación de DESTDIR = xxx "para instalaciones por etapas.

Puede usar esto para crear un paquete que instale en lugar de instalarlo directamente desde la fuente. No tuve suerte con checkinstall pero fpm funciona muy bien.

Esto también puede ayudarlo a eliminar un paquete previamente instalado usando make install . Simplemente fuerce la instalación de su paquete integrado sobre la marca instalada y luego desinstálelo.

Por ejemplo, usé esto recientemente para tratar con protobuf-3.3.0. En 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 you@youraddress.com \
 --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      

Prefiere ñam a rpm si puedes.

En 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

Prefiere apt a dpkg donde puedas.

También publiqué esta respuesta en stackoverflow


0

Tenemos que negociar el hecho de que hacen desinstalación podría no siempre funciona, es abajo es más de una solución proactiva.

Esto implica el uso del programa paco que está disponible en el Centro de software de Ubuntu. Una vez que hemos instalado Paco, podemos usarlo en el modo de registro cuando "hacemos que la instalación" sea un programa. Paco actúa como un contenedor para su "make install" y crea un registro en el directorio / var / log / paco con la lista de archivos copiados en varios directorios. Además, puede ver los archivos en la interfaz de Paco.

Por ejemplo, cuando compilé php de la fuente, hice lo siguiente:

paco -lp php5 "make install"

El parámetro l hace que el paco se ejecute en el modo de registro. Esto creó un archivo de registro en / var / log / paco llamado php5 (el nombre que he dado en el comando). Contenía todos los archivos que se copian en varias ubicaciones estándar durante la instalación. Puede usar un editor de línea de comandos o paco gui para ver los archivos.

A continuación se muestra el ejemplo de cómo obtener la lista de archivos utilizando el editor de línea de comandos sed
(Reemplace php5 con su nombre de archivo).

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

Una vez que obtuviste la lista de archivos, sabes cómo eliminarlos, ¿no? De hecho, puede pasar los resultados del comando anterior a rm utilizando los backticks como se muestra a continuación:

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

¡Trabajo hecho!

Nota: Debido a las limitaciones de LD_PRELOAD, paco no puede seguir el rastro de los programas suid. Ver página del manual.


0

Había compilado php-5.6.30 desde la fuente sin configurarlo con openssl, así que tuve que volver e instalarlo desde cero. El uso de make uninstall no funcionó ya que el Makefile para php no lo admite.

Sin embargo, este paso funcionó para mí: enumeré todos los archivos relacionados con php y los eliminé manualmente, me llevó unos 5 minutos sin sudar. De manera similar, puede seguir estos pasos para desinstalar su software compilado.

Reemplace php con el software que necesita desinstalar

whereis php

El comando anterior enumera los directorios donde se instalan los archivos binarios, por ejemplo: / usr / local / bin / php, / usr / bin / php ... elimine cada archivo / directorio que figura en su salida.

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

Haga esto con todos los archivos enumerados en el resultado anterior y ya está todo listo para instalar la versión más nueva desde cero.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.