Instalowanie ze źródła. Jak rozwiązać zależności bez niszczenia menedżera pakietów

19

Kompilowanie i instalowanie oprogramowania jest problemem i problemem, którego nie mogę rozwiązać. Chcę po prostu zrozumieć moje rozumienie tego procesu z kimś bardziej kompetentnym, aby oczyścić umysł i przejść do następnego poziomu.

Wiele potrzebnych mi programów naukowych nie jest rozpowszechnianych jako pakiety. Rozumiem, że „./configure” ustawia zmienne kompilacji i sprawdzanie zależności „make” czy kompilacja „sudo make install” umieszcza wszystkie biblioteki i pojemniki na swoich miejscach. Jednak to nigdy nie działa. Rzadko wychodzę z etapu a) „./configure” bez wchodzenia w piekło zależności, a jeśli to zrobię, b) „sudo make install” prawdopodobnie nuke moje urządzenie.

a) Piekło zależności jest bardzo frustrujące. Czasami mam bibliotekę, ale to mi się nie podoba. Lub biblioteka nie chce się instalować. Lub „konfiguruj” nie może go znaleźć. Albo moja dystrybucja umieściła go gdzieś, gdzie nie powinno być. Lub są dwie wersje w moim systemie. Problem polega na tym, że nie rozumiem, jak zdiagnozować, a zatem naprawić te problemy. Jakie są dobre referencje dla kogoś, kto nie musi zostać programistą?

b) Rozumiem, że „make install” zastąpi niektóre biblioteki i zmieni ustawienia bez wiedzy mojego menedżera pakietów. Dlatego niektóre programy nie będą działać, innych nie można zaktualizować. Jeśli więc nie użyję polecenia „make install” i po prostu trzymam skompilowany plik binarny w moim katalogu użytkownika z dowiązaniem symbolicznym dodanym do ŚCIEŻKI, to czy będę w porządku?

Moje urządzenie jest jednoosobowe, ma mnóstwo darmowego HD, więc tak naprawdę nie dbam o to, aby mieć wiele (kilkadziesiąt) kopii bibliotek, jeśli to rozwiąże moje problemy. Przestrzeń jest tania.

Lenz
źródło
3
Nie mówisz, z której dystrybucji korzystasz, to byłaby interesująca informacja. Jeśli uruchomisz pochodną Debiana, możesz użyć jej apt-get build-dep <package>do automatycznej instalacji niezbędnych zależności.
Marco
Używam CentOS 6 (aby mieć to, czego używa super-guru w naszym laboratorium), ale używałem Ubuntu.
Lenz
Witamy w życiu dystrybutora. Śledzenie zależności nie jest szczególnie trudne, ale jest ciężkie.
Gilles „SO- przestań być zły”,
Zobacz Menedżerów pakietów innych niż root i być może inne pytania oznaczone jako użytkownik nie będący rootem , dotyczące instalacji oprogramowania i zarządzania pakietami.
Gilles „SO- przestań być zły”

Odpowiedzi:

16

Większość pakietów będzie miała <package>-dev(dla Debiana) lub <package>-devel(dla Red Hata), które będą bibliotekami potrzebnymi do tworzenia linków.

Na przykład, jeśli źródło mówi, że to wymaga libxml, w systemach opartych na Debianie znajdziesz libxml2i libxml2-dev(użyj, apt-cache search <dependancy>aby je znaleźć).

Musisz libxml2-devgo zbudować i libxml2uruchomić.

./configureKrok zazwyczaj obsługuje flagi podoba --with-libxml=/usr/lib/wskazać je w odpowiednich bibliotekach ( ./configure --helpnależy wymienić wszystkie opcje). Zwykle obsługuje także zmianę lokalizacji instalacji --prefix=$HOME/sw. Używanie przedrostka poza tym, co kontroluje menedżer pakietów, jest najlepszym sposobem uniknięcia konfliktów z oprogramowaniem zainstalowanym przez menedżera pakietów.

Na Debianie i instrumentach pochodnych korzystanie --prefixz /usr/local/lub /opt/local/powinno być bezpieczne.

Jeśli potrzebna biblioteka (lub wersja) nie jest dostępna w menedżerze pakietów, wystarczy pobrać źródło i skompilować je przy użyciu podobnych opcji. Co najważniejsze, użyj --prefixzewnętrznego menedżera pakietów i podczas kompilacji oprogramowania, którego naprawdę chcesz używać --with-<library>=/<path/to/installed/library>.

bahamat
źródło
5

Istnieje narzędzie, auto-aptktórego można do tego użyć.

Od man auto-apt :

auto-apt to program, który sprawdza dostęp do plików programów działających w środowiskach auto-apt. Jeśli program uzyska dostęp do pliku niezainstalowanego pakietu, auto-apt zainstaluje pakiet zawierający ten plik, używając apt-get.

Używa się go w następujący sposób:

auto-apt run ./configure

Innym sposobem jest użycie apt-get build-dep <package>w dystrybucji opartej na Debianie.

Marco
źródło
apt-get build-dep <package>pracował dla mnie. Frustrowanie ./configuresię w kółko, aby nauczyć się jeszcze jednego wymaganego pakietu!
HeatfanJohn
2

W przypadku dystrybucji opartych na RPM możesz spróbować swoich sił w tworzeniu odpowiednich pakietów (nie jest to takie trudne ...).

Korzyści z posiadania odpowiedniego pakietu polegają na tym, że menedżer pakietów śledzi oprogramowanie i można łatwo replikować ustawienia w innym miejscu / na następnym komputerze. Przy właściwym przesyłaniu pakietu źródłowego do przodu (nowa wersja, poprawka błędów, zaktualizowane biblioteki podstawowe) jest łatwiejsze niż wymyślenie tego od zera następnym razem.

vonbrand
źródło