What's the opposite of 'make install', i.e. how do you uninstall a library in Linux?

后端 未结 12 578
旧巷少年郎
旧巷少年郎 2020-11-28 17:08

While running

./configure --prefix=/mingw 

on a MinGW/MSYS system for a library I had previously run

\'./configure --pref         


        
相关标签:
12条回答
  • 2020-11-28 17:26

    The "stow" utility was designed to solve this problem: http://www.gnu.org/software/stow/

    0 讨论(0)
  • 2020-11-28 17:26

    There is no standard unfortunately, this is one of the perils of installing from source. Some Makefiles will include an "uninstall", so

    make uninstall
    

    from the source directory may work. Otherwise, it may be a matter of manually undoing whatever the make install did.

    make clean usually just cleans up the source directory - removing generated/compiled files and the like, probably not what you're after.

    0 讨论(0)
  • 2020-11-28 17:26

    I know of few packages that support "make uninstall" but many more that support make install DESTDIR=xxx" for staged installs.

    You can use this to create a package which you install instead of installing directly from the source. I had no luck with checkinstall but fpm works very well.

    This can also help you remove a package previously installed using make install. You simply force install your built package over the make installed one and then uninstall it.

    For example, I used this recently to deal with protobuf-3.3.0. On 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      
    

    Prefer yum to rpm if you can.

    On 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
    

    Prefer apt to dpkg where you can.

    I've also posted answer this here

    0 讨论(0)
  • 2020-11-28 17:29

    If you have a manifest file which lists all the files that were installed with make install you can run this command which I have from another answer:

    cat install_manifest.txt | xargs echo rm | sh
    

    If you have sudo make install you will need to add a sudo to your uninstall:

    cat install_manifest.txt | xargs echo sudo rm | sh
    
    0 讨论(0)
  • 2020-11-28 17:30

    How to uninstall after "make install"

    Method #1 (make uninstall)

    Step 1: You only need to follow this step if you've deleted/altered the build directory in any way: Download and make/make install using the exact same procedure as you did before.

    Step 2: try make uninstall.

    cd $SOURCE_DIR 
    sudo make uninstall
    

    If this succeeds you are done. If you're paranoid you may also try the steps of "Method #3" to make sure make uninstall didn't miss any files.

    Method #2 (checkinstall -- only for debian based systems)

    Overview of the process

    In debian based systems (e.g. Ubuntu) you can create a .deb package very easily by using a tool named checkinstall. You then install the .deb package (this will make your debian system realize that the all parts of your package have been indeed installed) and finally uninstall it to let your package manager properly cleanup your system.

    Step by step

    sudo apt-get -y install checkinstall
    cd $SOURCE_DIR 
    sudo checkinstall
    

    At this point checkinstall will prompt for a package name. Enter something a bit descriptive and note it because you'll use it in a minute. It will also prompt for a few more data that you can ignore. If it complains about the version not been acceptable just enter something reasonable like 1.0. When it completes you can install and finally uninstall:

    sudo dpkg -i $PACKAGE_NAME_YOU_ENTERED 
    sudo dpkg -r $PACKAGE_NAME_YOU_ENTERED
    

    Method #3 (install_manifest.txt)

    If a file install_manifest.txt exists in your source dir it should contain the filenames of every single file that the installation created.

    So first check the list of files and their mod-time:

    cd $SOURCE_DIR 
    sudo xargs -I{} stat -c "%z %n" "{}" < install_manifest.txt
    

    You should get zero errors and the mod-times of the listed files should be on or after the installation time. If all is OK you can delete them in one go:

    cd $SOURCE_DIR 
    mkdir deleted-by-uninstall
    sudo xargs -I{} mv -t deleted-by-uninstall "{}" < install_manifest.txt
    

    User Merlyn Morgan-Graham however has a serious notice regarding this method that you should keep in mind (copied here verbatim): "Watch out for files that might also have been installed by other packages. Simply deleting these files [...] could break the other packages.". That's the reason that we've created the deleted-by-uninstall dir and moved files there instead of deleting them.


    99% of this post existed in other answers. I just collected everything useful in a (hopefully) easy to follow how-to and tried to give extra attention to important details (like quoting xarg arguments and keeping backups of deleted files).

    0 讨论(0)
  • 2020-11-28 17:33

    Make

    Make is the program that’s used to install the program that’s compiled from the source code. It’s not the Linux package manager so it doesn’t keep track of the files it installs. This makes it difficult to uninstall the files afterward.

    The Make Install command copies the built program and packages into the library directory and specified locations from the makefile. These locations can vary based on the examination that’s performed by the configure script.

    CheckInstall

    CheckInstall is the program that’s used to install or uninstall programs that are compiled from the source code. It monitors and copies the files that are installed using the make program. It also installs the files using the Linux package manager which allows it to be uninstalled like any regular package.

    The CheckInstall command is used to call the Make Install command. It monitors the files that are installed and creates a binary package from them. It also installs the binary package with the Linux package manager.

    Replace "source_location.deb" and "name" with your information from the Screenshot.

    Execute the following commands in the source package directory:

    1. Install CheckInstall sudo apt-get install checkinstall
    2. Run the Configure script sudo ./configure
    3. Run the Make command sudo make
    4. Run CheckInstall sudo checkinstall
    5. Reinstall the package sudo dpkg --install --force-overwrite source_location.deb
    6. Remove the package sudo apt remove name

    Here's an article article I wrote that covers the whole process with explanations.

    0 讨论(0)
提交回复
热议问题