Jak kompilować i instalować programy ze źródła

39

Jest to problem, który naprawdę ogranicza moją przyjemność korzystania z Linuksa. Jeśli aplikacja nie znajduje się w repozytorium lub nie ma skryptu instalatora, naprawdę mam problem z tym, gdzie i jak zainstalować aplikację ze źródła.

W porównaniu do systemu Windows jest to łatwe. Musisz (właściwie) korzystać z aplikacji instalatora, która wykonuje całą pracę w Kreatorze. Z Linuksem ... nie za bardzo.

Czy masz jakieś wskazówki lub instrukcje na ten temat, czy są też strony internetowe, które wyraźnie wyjaśniają, w jaki sposób, dlaczego i gdzie instalować programy Linux ze źródła?

Nitrodist
źródło
7
„W porównaniu do systemu Windows jest to łatwe. Musisz (właściwie) korzystać z aplikacji instalatora, która wykonuje całą pracę w kreatorze. W systemie Linux… nie za bardzo.” Pytanie jest słabe. W systemie Windows rzadko otrzymujesz kod źródłowy, więc jesteś na łasce tego, kto stworzył pakiet. Jeśli się nad tym zastanowić, nie różni się to tak bardzo od powiedzenia „nie było pakietu Linux, więc muszę budować ze źródła”, tj. nie było sposobu, aby zacząć. Budowanie ze źródła jest zwykle ostatecznością w * nix-land, ale rzadko jest opcją w Windows-ville.
Avery Payne,
2
Biorąc to pod uwagę ... +1 podwyżka za zadanie wspólnego pytania, na które należy odpowiedzieć wszystkim nowym użytkownikom systemów * nix. :) Budowanie ze źródła czasami oznacza różnicę między naprawą paskudnego błędu a cierpieniem aż do następnej wersji oprogramowania. Naprawdę nie jest tak źle, i jak wielu tutaj zauważyło, kiedy już wiesz, czego szukać i jak to zrobić, dość bezbolesne.
Avery Payne,

Odpowiedzi:

22

Zwykle projekt będzie miał stronę internetową z instrukcjami, jak go zbudować i zainstalować. Google po raz pierwszy.

W większości zrobisz albo:

  1. Pobierz plik tarball (plik tar.gz lub tar.bz2), który jest wydaniem określonej wersji kodu źródłowego
  2. Wyodrębnij archiwum tar za pomocą polecenia, takiego jak tar zxvf myapp.tar.gzdla archiwum gzip lub tar jxvf myapp.tar.bz2archiwum bzip
  3. cd do katalogu utworzonego powyżej
  4. biegać ./configure && make && sudo make install

Lub:

  1. Użyj git lub svn lub cokolwiek innego, aby pobrać najnowszy kod źródłowy z ich oficjalnego repozytorium źródłowego
  2. cd do katalogu utworzonego powyżej
  3. biegać ./autogen.sh && make && sudo make install

Zarówno config, jak i autogen.sh zaakceptują argument --prefix, aby określić miejsce instalacji oprogramowania. Polecam sprawdzić Gdzie powinienem umieścić oprogramowanie, które sam kompiluję? w celu uzyskania porady na temat najlepszego miejsca do zainstalowania niestandardowego oprogramowania.

Piaszczysty
źródło
Dlaczego autogen.sh jest używany podczas pobierania najnowszej wersji, a config / make jest używany w oficjalnej wersji?
Louis Salin,
1
Zwykle ludzie, którzy chcą oprogramowania „najnowocześniejszego”, ściągną wersję z oprogramowania do kontroli wersji (takiego jak git, subversion lub CVS). Jest to „krwawiąca krawędź”, ponieważ prawdopodobnie nie została przetestowana, w przeciwieństwie do wydanego tarballa, który (prawdopodobnie) został poręczony za działający (przynajmniej w większości). Ma sens?
Matt Simmons,
2
@Matt, na pewno ma to sens, ale myślę, że komentarz był skierowany bardziej na fakt, że Sandy sprawiło, że wyglądało to tak, jakby w każdym git'd / svn'd był plik autogen.sh.
reiche
1
I kurczak w każdym garnku ... lub coś takiego. Do licha, co jakiś czas spotykam też oprogramowanie bez skryptu konfiguracyjnego. Gdyby istniał prosty, zunifikowany sposób, nie potrzebowalibyśmy paczek ;-)
Matt Simmons,
Matt ma absolutną rację, dlatego powiedziałem „w przeważającej części” i po raz pierwszy opowiedziałem się za przeglądaniem strony internetowej projektu. Porada autogen.sh/configure będzie dotyczyła praktycznie każdego modułu GNOME i wielu innych projektów. Niektóre projekty nie używają automake i mają tylko Makefile, a ty po prostu uruchomisz make && sudo make install. Niektóre projekty w języku Python będą miały tylko plik setup.py, który wywołasz w celu instalacji (ponieważ nie ma prawdziwej konfiguracji kompilacji). Istnieje również wiele innych systemów kompilacji / instalacji. Mam nadzieję, że pliki README lub INSTALL dokładnie wyjaśnią, co robić.
Sandy,
3

Chcę tylko dodać, że istnieją menedżerowie pakietów, którzy kompilują pakiety ze źródła i obsługują wszystkie zależności pakietów, flagi itp.

W systemach BSD jest to ports: Korzystanie z kolekcji portów

W Debianie apt-getmenedżer pakietów może również instalować ze źródła: APT HOWTO: Praca z pakietami źródłowymi (to samo dotyczy Ubuntu, Linux-mint i wszystkiego innego opartego na Debianie)

Dystrybucja Gentoo używa portagemenedżera pakietów, który kompiluje cały system tylko ze źródła: Portage Wprowadzenie .

Slackware może kompilować pakiety, ale nie wiem, czy jest tam jakiś menedżer pakietów .. =)

W każdym razie zawsze możesz ręcznie skompilować pakiety, takie jak Sandy wspomniany powyżej =) Ponadto musi istnieć możliwość użycia apt-getlub portagezarządzania pakietami w innych dystrybucjach ...

holms
źródło
1
Mówienie „menedżer pakietów apt-get może instalować ze źródła” jest niepoprawne. Cytowany rozdział opisuje, w jaki sposób można utworzyć pakiet Debian ze źródeł Debiana . Nie arbitralne źródła źródłowe.
Faheem Mitha,
2

Myślę, że najlepiej jest przeczytać dokumentację dostarczoną z konkretnym programem lub aplikacją, którą chcesz zainstalować. Zazwyczaj wewnątrz plików archiwalnych znajdują się readmes / README (archiwum źródłowe aplikacji, które zazwyczaj można pobrać) lub może nawet ZAINSTALUJ pliki, aby przeczytać i dowiedzieć się, jaki jest preferowany sposób instalacji tej aplikacji. W skrócie: RTFM;)

reiche
źródło
Przybyłem tutaj, ponieważ plik README podał wszystkie wymagania dotyczące kompilacji pod Linuksem, ale zawiera tylko instrukcje instalacji Windows. Przyjęta odpowiedź działała dla mnie i prawdopodobnie działa przez większość czasu. Myślę, że lepiej jest wypróbować trasę ./configure i przejść do README, jeśli nie działa (tzn. Brakuje zależności i nie można odczytać danych wyjściowych kompilatora).
Stephen C
1

Podsumowanie korzystania z kolekcji portów w FreeBSD:

Znajdź port

Porty są uporządkowane według kategorii, więc jeśli nie wiesz, w jakiej kategorii znajduje się port, musisz go najpierw znaleźć:

cd /usr/ports
make search name=myport

Czasami w ten sposób jest zbyt wiele wpisów. Ja osobiście wolę:

find /usr/ports -name myport* -print -depth 2

Użyj *podczas wyszukiwania, ponieważ często dostępnych jest wiele wersji portu. Argument głębokości zapewnia, że ​​wyniki zwracane przez użytkownika nie są niepotrzebnie zaśmiecone dopasowaniami, których prawdopodobnie nie chcesz.

Konfiguracja

Często będziesz chciał dokonać konfiguracji; oprogramowanie takie jak Apache i Postgres praktycznie tego wymaga. Istnieją trzy główne opcje: linia poleceń, środowisko i tworzenie plików konfiguracyjnych. Aby rozpocząć pracę z wierszem poleceń:

make showconfig

wyświetli to domyślne opcje konfiguracji. Jeśli podoba Ci się wartość domyślna, jesteś gotowy do kompilacji i instalacji. Jeśli nie,

make config

wyświetli się okno dialogowe, w którym możesz wybrać, które opcje chcesz. (Nie myl się z tym, make configureco konfiguruje twój port z wybranymi opcjami!) Jest to często wystarczające, ale w przypadku niektórych programów, takich jak Apache, często istnieje złożona konfiguracja, której nie obsługuje proste okno dialogowe. W tym celu powinieneś również przyjrzeć się Makefile (s), które czasem dadzą ci dodatkowe cele do make, które dadzą ci więcej informacji. Aby kontynuować przykład Apache

make show-modules
make show-options
make show-categories

poda informacje na temat konfigurowania wybranych modułów, opcji wątków i tym podobnych. Jeśli domyślne ustawienia twojego portu są w większości w porządku, a chcesz tylko zmienić kilka rzeczy, możesz również przekazać pary klucz = wartość, takie jak zmienne środowiskowe:

make MYVBL1=MYVAL1 ... install clean

Ponadto możesz ustawić opcje przełączania za pomocą -Dopcji:

make -D MYVAR -D MYOTHERVAR ... install clean

W przypadku złożonej konfiguracji linia poleceń nie będzie działać dobrze i lepiej, aby żadna z dwóch pierwszych metod nie była skuteczna. W takim przypadku możesz utworzyć plik konfiguracyjny i przekazać go makedo zmiennej __MAKE_CONF. FreeBSD ma domyślny plik konfiguracyjny: /etc/make.confktóry zwykle zawiera informacje o wcześniej zainstalowanych portach i innych ustawieniach systemu. Aby rozpocząć, utwórz plik z opcjami portów, wywołaj go, ~/myport.mka następnie połącz ten plik z plikiem /etc/make.conf:

cat /etc/make.conf ~/myport.mk >> ~/make.myport.conf

możesz następnie dwukrotnie sprawdzić konfigurację:

make showconfig __MAKE_CONF=~/make.port.conf

a jeśli wszystko wygląda dobrze:

make install clean __MAKE_CONF=~/make.myport.conf

STRZEC SIĘ! Jeśli musisz zmienić ustawienia konfiguracji po make configureinstalacji lub w całości lub w części, absolutnie musisz najpierw wyczyścić konfigurację :

make rmconfig

Nieprzestrzeganie tego spowoduje nieoczekiwane interakcje między podsystemem portów, makewartościami domyślnymi portu i pożądaną konfiguracją.

To dość dużo w podsumowaniu, ale złożoność konfiguracji dotyczy głównie aplikacji, a nie portu. Na przykład Bash tak naprawdę nie ma żadnych opcji.

Instalacja

To jest łatwa część:

make install clean

lub możesz

make build
make install
make clean

co jest po prostu więcej pisania.

To właściwie tyle. Oczywiście możesz zrobić więcej, na przykład rekurencyjnie wyświetlając zależności i opcje konfiguracji, aktualizując łaty i tak dalej. Tutaj odsyłam cię do sekcji Porty Podręcznika , strony man podsystemu portów (dobre informacje o dodatkowych celach make) i stronie makeman.

gvkv
źródło