Jeśli zbuduję pakiet ze źródła, jak mogę całkowicie odinstalować lub usunąć?

137

Użyłem kodu źródłowego, aby zbudować jeden pakiet, taki jak poniżej:

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

Ale niestety odkryłem, że jest to najnowsza wersja i zawiera wiele błędów, więc muszę ją usunąć / odinstalować. Ale jak mogę to zrobić? Próbowałem, make clean; make uninstallale nadal widzę, że istnieje:

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

Jak to teraz usunąć?

Mniam mniam mniam
źródło

Odpowiedzi:

177

Zwykle możesz po prostu użyć:

make uninstall

lub

sudo make uninstall

jeśli aplikacja została zainstalowana jako root.

Działa to jednak tylko wtedy, gdy twórca pakietu zadbał o dobrą regułę odinstalowywania.

Możesz także spróbować zapoznać się z etapami instalacji oprogramowania, uruchamiając:

make -n install

A następnie spróbuj ręcznie cofnąć te kroki.

W przyszłości, aby uniknąć tego rodzaju problemów, staraj się używać checkinstallzamiast, make installgdy tylko jest to możliwe (AFAIK zawsze, chyba że chcesz zachować jednocześnie skompilowaną i spakowaną wersję). Spowoduje to utworzenie i zainstalowanie pliku deb, który można następnie odinstalować za pomocą ulubionego menedżera pakietów.

make cleanzwykle czyści katalogi budowlane, nie odinstalowuje pakietu. Jest używany, gdy chcesz mieć pewność, że całość jest skompilowana, a nie tylko zmienione pliki.

Javier Rivera
źródło
Też to zrobiłem. Ale nadal istnieje, jak pokazano pkg-config i ls /usr/lib/myplugin/libXYZ.so
YumYumYum
36
+1 za użycie checkinstall- sprawia, że ​​cały problem wyparowuje.
Oli
6
@ Google: Jeśli make odinstalowanie nie działa, musisz śledzić, co zrobiło make install i cofnąć go ręcznie.
Javier Rivera,
4
Inną rzeczą, o której należy pamiętać, jest to, że jeśli make installuruchomiono go jako root (np. sudo make install), Zwykle jest to wirtualne, aby uruchomić sudo make uninstalloprogramowanie w celu usunięcia oprogramowania.
Eliah Kagan
5
Jeśli już uruchomiłeś make install, nadal możesz używać checkinstall. Zwykle checkinstallnadpisze wszystko, co make installstworzył. Następnie po prostu użyj dpkg -r <package.deb>i wszystko powinno zostać usunięte.
user502144
28

Nie sądzę, że jest to błąd, warto przeczytać i nauczyć się korzystać z checkinstall podczas instalacji ze źródła.

możesz zainstalować checkinstall z repozytoriów, krótki opis pakietu;

CheckInstall śledzi wszystkie pliki utworzone lub zmodyfikowane przez skrypt instalacyjny („make install”, make install_modules ”,„ setup ”itp.), Buduje standardowy pakiet binarny i instaluje go w systemie, umożliwiając jego odinstalowanie za pomocą standardowe narzędzia do zarządzania pakietami Twojej dystrybucji.

Poniższe linki mogą być pomocne w lepszym zrozumieniu. http://en.wikipedia.org/wiki/CheckInstall

http://checkinstall.izto.org/

Sabacon
źródło
16

To nie jest błąd - kompilacja ze źródła jest nieobsługiwaną metodą instalowania oprogramowania, która całkowicie omija system zarządzania pakietami (z którego korzysta Centrum oprogramowania).

Nie ma standardowego sposobu instalowania lub odinstalowywania oprogramowania skompilowanego ze źródła, więc Ubuntu nie może wiedzieć, co robić. Oprogramowanie nie jest nawet wymienione jako zainstalowany program.

Należy postępować zgodnie z instrukcjami dystrybutora dotyczącymi instalacji i usuwania takiego niestandardowego oprogramowania. Możesz również skontaktować się z deweloperem, aby poprosić go o utworzenie pakietu Debian, aby można było użyć systemu zarządzania pakietami.

dv3500ea
źródło
3

To nie jest błąd, to się dzieje, gdy programiści uciekają się do dystrybucji przez źródło, a nie przez natywne metody pakowania.

Możesz sprawić, że pliki źródłowe staną się pakietami Debiana, używając checkinstall lub dhbuild. Szczerze mówiąc, moim zdaniem - nowi użytkownicy powinni unikać instalowania ze źródła, a programiści powinni unikać dystrybucji tylko według źródła.

RolandiXor
źródło
Wiem, ale czasami jest to nieuniknione ... W tym przypadku była to tylko niewielka gra, która nie jest tak naprawdę konieczna, ale kiedyś musiałem zainstalować MATLAB narzędzie obliczeniowe używane na mojej uczelni i musiałem zainstalować je u źródła, ponieważ nie mam pliku deb dla Ubuntu ... Ale na pewno przejdę przez metody checkinstall i dhbuild ... dzięki
nik90
1

Znam kilka pakietów, które obsługują „dokonaj deinstalacji”, ale wiele innych, które obsługują, instalują DESTDIR = xxx dla instalacji etapowych.

Możesz użyć tego do stworzenia pakietu, który instalujesz zamiast instalować bezpośrednio ze źródła. Nie miałem szczęścia z checkinstall, ale fpm działa bardzo dobrze.

Może to również pomóc usunąć pakiet wcześniej zainstalowany przy użyciu make install . Po prostu wymuś zainstalowanie wbudowanego pakietu nad make install a następnie odinstaluj.

Na przykład ostatnio użyłem tego, aby poradzić sobie z protobuf-3.3.0. Na 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      

Jeśli to możliwe, preferuj yum zamiast rpm.

Na 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

Wolę apt na dpkg tam, gdzie możesz.

Opublikowałem również tę odpowiedź na stackoverflow

Bruce Adams
źródło
0

Musimy negocjować fakt, że make uninstall byłoby nie zawsze działa, tak i na dole jest bardziej proaktywne rozwiązanie.

Wymaga to użycia programu paco, który jest dostępny w Centrum oprogramowania Ubuntu. Po zainstalowaniu paco możemy użyć go w trybie dziennika, kiedy „dokonamy instalacji” programu. Paco działa jak opakowanie dla „make install” i tworzy dziennik w katalogu / var / log / paco z listą plików skopiowanych do różnych katalogów. Ponadto można było zobaczyć pliki w interfejsie Paco Front End.

Na przykład, kiedy skompilowałem PHP ze źródła, wykonałem następujące czynności:

paco -lp php5 "make install"

Parametr l powoduje, że paco działa w trybie dziennika. To utworzyło plik dziennika w / var / log / paco o nazwie php5 (nazwa, którą podałem w poleceniu). Zawierał wszystkie pliki, które są kopiowane do różnych standardowych lokalizacji podczas instalacji. Do przeglądania plików możesz użyć edytora wiersza poleceń lub paco gui.

Poniżej znajduje się przykład pobierania listy plików za pomocą edytora wiersza poleceń sed
(zamień php5 na swoją nazwę pliku).

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

Po uzyskaniu listy plików wiesz, jak je usunąć, prawda? Rzeczywiście, możesz przekazać wyniki powyższego polecenia do rm, używając backticks, jak pokazano poniżej:

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

Zadanie wykonane!

Uwaga: Z powodu ograniczeń LD_PRELOAD, paco nie może śledzić śladu programów suid. Zobacz stronę podręcznika man.

sjsam
źródło
0

Skompilowałem php-5.6.30 ze źródła bez konfigurowania go za pomocą openssl, więc musiałem wrócić i zainstalować go od zera. Użycie make uninstall nie działało, ponieważ Makefile dla php go nie obsługuje.

Jednak ten krok zadziałał dla mnie - wymieniłem wszystkie pliki związane z php i usunąłem je ręcznie, zajęło mi to około 5 minut bez zerwania potu. W podobny sposób możesz wykonać te kroki, aby odinstalować skompilowane oprogramowanie.

Zamień php na oprogramowanie, które musisz odinstalować

whereis php

Powyższe polecenie wyświetla katalogi, w których są zainstalowane pliki binarne, np .: / usr / local / bin / php, / usr / bin / php .. usuń każdy plik / katalog wymieniony w wynikach.

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

Zrób to ze wszystkimi plikami wymienionymi w powyższym pliku wyjściowym, a wszyscy są gotowi do zainstalowania nowszej wersji od zera.

Abhinay
źródło