2009-09-17 9 views
309

Podczas pracyCo jest przeciwieństwem "make install", czyli jak odinstalować bibliotekę w systemie Linux?

./configure --prefix=/mingw 

na systemie MinGW/MSYS dla biblioteki miałem wcześniej uruchomić

'./configure --prefix=/mingw && make && make install' 

natknąłem się następujący komunikat:

Ostrzeżenie: Wersja Vamp SDK wtyczki jest już zainstalowany. Oczekuj zmartwień i smutków, jeśli zainstalujesz nową wersję bez wcześniejszego usuwania starego. (Kontynuacja)

To mnie zmartwiło. Co jest przeciwieństwem "make install", czyli jak biblioteka jest odinstalowana w Linuksie? Czy "oczyścisz" wykonywanie pracy lub czy są w to zaangażowane inne czynności?

+3

Jeśli to ma być en taki duży problem. Dlaczego ludzie nie napisali żadnego skryptu, aby automatycznie wycofać 'make install'? Wywołało to dla mnie bardzo duży ból głowy również wtedy, gdy 'make uninstalled' is not there. Wkrótce udostępni skrypt dla 'make uninstall'. –

+0

http://serverfault.com/questions/422237/what-is-uninstall-procedure-for-software-installed-via-make-install-on-centos –

+1

Zobacz http://askubuntu.com/questions/87111/ Jeśli-i-build-a-package-from-source-how-can-i-uninstall-or-remove-complete dla podobnych odpowiedzi, głównym rozwiązaniem wydaje się być 'sudo make uninstall' jeśli pliki konfiguracyjne instalacji są nadal dostępne, ale nie ma innych oczywistych rozwiązań, jeśli nie, oprócz odinstalowania za pomocą narzędzia do zarządzania pakietami systemu, jeśli jest zainstalowane z narzędziem "checkinstall". – Edward

Odpowiedz

21

W zależności od tego, jak dobrze makefile/Skonfiguruj skrypt/autofoo magii danego programu jest następujące może rozwiązać swój problem:

make uninstall 

Problem polega na tym, że należy wykonać to na drzewie źródłowym wersję, którą zainstalowałeś i dokładnie taką samą konfigurację, jaką użyto do instalacji.

10

make clean generalnie czyści tylko pliki wbudowane w katalogu zawierającym sam kod źródłowy i rzadko dotyka zainstalowanego oprogramowania.

Pliki Makefile zazwyczaj nie zawierają celu deinstalacji - zwykle musisz to zrobić samodzielnie, usuwając pliki z katalogu, w którym zostały zainstalowane. Na przykład, jeśli zbudowałeś program i zainstalowałeś go (używając make install) do /usr/local, chcesz przejrzeć /usr/local/bin, /usr/local/libexec, /usr/local/share/man itp. I usunąć niepotrzebne pliki. Czasami Makefile zawiera cel uninstall, ale nie zawsze.

Oczywiście zazwyczaj w systemie Linux instaluje się oprogramowanie za pomocą menedżera pakietów , który może odinstalować oprogramowanie "automagicznie".

5

Nie ma standardu niestety, jest to jedna z niebezpieczeństw instalacji ze źródła. Niektóre pliki Makefile zawierają "dezinstalację", więc może działać z katalogu źródłowego. W przeciwnym razie może to być kwestia ręcznego cofnięcia tego, co zrobił make install.

make clean zwykle po prostu czyści katalog źródłowy - usuwając wygenerowane/skompilowane pliki i tym podobne, prawdopodobnie nie po to, czego oczekujesz.

417

make clean usuwa pliki pośrednie lub wyjściowe z drzewa źródłowego/kompilacji. Jednak dotyczy tylko drzewa źródłowego/kompilacji; nie dotyka reszty systemu plików, więc nie usunie wcześniej zainstalowanego oprogramowania.

Jeśli masz szczęście, działa make uninstall. Jednak autorzy biblioteki muszą to zapewnić; niektórzy autorzy zapewniają cel uninstall, inni nie.

Jeśli nie masz szczęścia, musisz ręcznie go odinstalować. Uruchamianie make -n install może być pomocne, ponieważ pokaże kroki, które będzie trzeba wykonać, aby zainstalować oprogramowanie, ale nic nie zrobi. Następnie możesz ręcznie odwrócić te kroki.

+97

+1 dla opcji' -n' –

+5

+1; Uważaj na pliki, które mogły zostać zainstalowane przez inne pakiety. Po prostu usunięcie tych plików (jedna interpretacja "ręcznego cofania tych kroków") może przerwać inne pakiety. Jest to (jeden z wielu powodów), dlaczego wynaleziono menedżerów pakietów. –

+3

jest to możliwe tylko wtedy, gdy zachowasz ten sam skonfigurowany i skompilowany katalog kompilacji? w związku z tym niezbyt użyteczne, ponieważ większość ludzi usuwa go po instalacji. Chce odinstalować wszystko, niezależnie od tego, czy zachował folder kompilacji, i niezależnie od tego, czy pakiet został poprawnie skonfigurowany do opcji odinstalowania. Wyjaśnienie: to, co chce zrobić, to włączyć zarządzanie dla pakietów, które działają na rzeczy, które sam skompilował. – Nisse

259

Jeśli sudo make uninstall jest niedostępny:

W systemie opartym o Debiana, zamiast robić make install można uruchomić sudo checkinstall aby plik .deb który pobiera automatycznie zainstalowane. Następnie można go usunąć za pomocą menedżera pakietów systemowych (np. apt/synaptic/aptitude/dpkg). Checkinstall obsługuje również tworzenie innych typów pakietów, np. RPM.

Patrz także http://community.linuxmint.com/tutorial/view/162 i some basic checkinstall usage i debian checkinstall package.

+35

Ta odpowiedź jest dowodem na to, że najlepsze odpowiedzi często nie dają dużo głosów upowych. Dzięki! Chciałem wiedzieć, jak to zrobić przez długi czas. Zawsze waham się robić "make install", ponieważ wiem, że prawie na pewno będzie to trudny do usunięcia. – doug65536

+0

również książka LFS zawiera informacje na temat systemów zarządzania pakietami, ponieważ musisz sam ją skonfigurować. Informacje tam zawarte powinny być pomocne w lepszym działaniu tego rodzaju rzeczy (czystsze, bardziej ogólne).Istnieją skrypty, które po prostu słuchają tego, co jest instalowane, a następnie tworzą skrypt, który po uruchomieniu usuwa wszystkie te pliki lub coś w tym stylu. – Nisse

+11

To działało pięknie dla mnie, mimo że już wcześniej użyłem 'make install' przed użyciem' checkinstall'. – LukeGT

49

Jeśli masz plik manifest który zawiera wszystkie pliki, które zostały zainstalowane z make install można uruchomić to polecenie, które mam z innej odpowiedzi:

cat install_manifest.txt | xargs echo rm | sh 

Jeśli masz sudo make install trzeba będzie dodać sudo do deinstalacji:

cat install_manifest.txt | xargs echo sudo rm | sh 
+4

Jestem zaskoczony widząc, że nie udało się zdobyć żadnych głosów. To działało, aby usunąć pliki z systemu, gdy nie działały żadne inne opcje. W moim przypadku checkinstall nie mógł utworzyć deb, ponieważ wersja programu nie zaczynała się od numeru, a zatem nie budowałaby. To działało ładnie. – DWils

+2

@DWils Myślę, że nie otrzymało więcej upvotes, ponieważ jest dość niebezpieczne. Dodatkowo, 'xargs echo rm | sh'? Całkiem oczywiste, że ktokolwiek to zasugerował, nie jest szczególnie doświadczony ani nie zna się na używaniu powłoki. – fstd

+2

(dla odniesienia, będzie barf na wszystkie znaki w nazwach plików, które są interpretowane przez powłokę (a następnie masz nieuczciwych "rm jest wykonywany!), A dodatkowo zrobi wszelkiego rodzaju rozszerzenia powłoki. Wystarczy wyobrazić, co się stanie, jeśli' install_manifest .txt' zawiera gwiazdkę ... 'rm *' zostanie przekierowany do powłoki.) Obniżono z tego powodu. – fstd

Powiązane problemy