Szymon! Wiem, jak się czujesz; Zmagałem się również z tą częścią uczenia się Linuksa. Opierając się na własnych doświadczeniach, napisałem samouczek na temat niektórych elementów, które poruszasz (głównie jako odniesienie dla mnie!): Http://easyaspy.blogspot.com/2008/12/buildinginstalling-application-from.html . Myślę, że docenisz moją notatkę o tym, jak proste są aplikacje do budowania / instalowania w języku Python. :)
Mam nadzieję, że to pomaga! I szczęśliwej kompilacji.
Tim Jones
Budowanie / instalowanie aplikacji ze źródła w systemie Ubuntu Linux
Podczas gdy repozytoria Ubuntu są pełne wspaniałych aplikacji, w pewnym momencie z pewnością natkniesz się na to „niezbędne” narzędzie, którego nie ma w repozytoriach (lub nie ma pakietu Debiana) lub potrzebujesz nowsza wersja niż w repozytoriach. Co robisz? Cóż, musisz zbudować aplikację ze źródła! Nie martw się, to naprawdę nie jest tak skomplikowane, jak się wydaje. Oto kilka wskazówek, opartych na moich doświadczeniach z zostania rangą amatorem! (Podczas gdy używam Ubuntu w tym przykładzie, ogólne pojęcia powinny mieć zastosowanie do większości dystrybucji Unix / Linux, takich jak Fedora, a nawet platforma Cygwin w systemie Windows).
Podstawowy proces budowania (kompilowania) większości aplikacji ze źródła odbywa się w następującej kolejności: configure -> compile -> install. Typowe polecenia Unix / Linux do wykonywania tych czynności to: config
-> make
-> make install
. W niektórych przypadkach znajdziesz nawet strony internetowe, które pokazują, że wszystkie z nich można połączyć w jedno polecenie:
$ config && make && make install
Oczywiście to polecenie zakłada, że w żadnym z tych kroków nie występują problemy. Tutaj zaczyna się zabawa!
Pierwsze kroki
Jeśli wcześniej nie skompilowałeś aplikacji ze źródła w systemie, prawdopodobnie będziesz musiał ją skonfigurować za pomocą kilku ogólnych narzędzi programistycznych, takich jak gcc
pakiet kompilatora, niektóre popularne pliki nagłówkowe (pomyśl o tym jak o kodzie, który został już napisany przez inną osobę, która jest używana przez program, który instalujesz) oraz narzędzie do tworzenia. Na szczęście w Ubuntu istnieje tak zwany metapakiet, build-essential
który to zainstaluje. Aby go zainstalować (lub po prostu upewnić się, że już go masz!), Uruchom polecenie w terminalu:
$ sudo apt-get install build-essential
Teraz, gdy masz już podstawową konfigurację, pobierz pliki źródłowe aplikacji i zapisz je w katalogu, do którego masz uprawnienia do odczytu / zapisu, takim jak katalog „domowy”. Zazwyczaj będą one znajdować się w pliku archiwum z rozszerzeniem pliku .tar.gz
lub .tar.bz2
. .tar
Oznacza po prostu, że jest to „archiwum taśm”, która jest grupowanie plików, które zachowuje ich względną strukturę katalogów. .gz
Oznacza gzip (GNU zip), który jest popularnym formatem kompresji Unix / Linux. Podobnie .bz2
oznacza bzip2, który jest nowszym formatem kompresji, który zapewnia wyższą kompresję (mniejszy rozmiar skompresowanego pliku) niż gzip.
Po pobraniu pliku źródłowego otwórz okno terminala (Terminal systemowy z menu Ubuntu) i przejdź do katalogu, w którym zapisałeś plik. (Użyję ~/download
w tym przykładzie. Tutaj „~” jest skrótem do katalogu „domowego”). Użyj polecenia tar, aby wyodrębnić pliki z pobranego pliku archiwum:
Jeśli plik jest archiwum gzip (np. Kończy się na .tar.gz
), użyj polecenia:
$ tar -zxvf filename.tar.gz
Jeśli plik jest archiwum bzip2 (np. Kończy się na .tar.bz2
), użyj polecenia:
$ tar -jxvf filename.tar.gz
Wskazówka: jeśli nie chcesz pamiętać wszystkich przełączników wiersza polecenia do wyodrębniania archiwów, zalecamy pobranie jednego (lub obu) tych narzędzi: dtrx (mój ulubiony!) Lub deco (bardziej popularny). Za pomocą jednego z tych narzędzi wystarczy wpisać nazwę narzędzia (dtrx lub deco) i nazwę pliku, to zrobi resztę. Obie te „wiedzą”, jak obsłużyć większość formatów archiwów, z którymi możesz się zetknąć i mają doskonałą obsługę błędów.
Podczas budowania ze źródła istnieją dwa typowe typy błędów, które mogą wystąpić:
- Błędy konfiguracji występują po uruchomieniu skryptu konfiguracyjnego (zwykle o nazwie config lub config) w celu utworzenia pliku makefile specyficznego dla instalacji.
- Błędy kompilatora występują, gdy uruchomisz komendę make (po wygenerowaniu pliku makefile), a kompilator nie może znaleźć potrzebnego kodu.
Przyjrzymy się każdemu z nich i omówimy, jak je rozwiązać.
Konfiguracja i błędy konfiguracji
Po rozpakowaniu pliku archiwum kodu źródłowego w terminalu należy przejść do katalogu zawierającego wyodrębnione pliki. Zazwyczaj ta nazwa katalogu będzie taka sama jak nazwa pliku (bez rozszerzenia .tar.gz
lub .tar.bz2
). Czasami jednak nazwa katalogu to tylko nazwa aplikacji, bez żadnych informacji o wersji.
W katalogu źródłowym poszukaj README
pliku i / lub INSTALL
pliku (lub czegoś o podobnych nazwach). Pliki te zazwyczaj zawierają użyteczne informacje o tym, jak zbudować / skompilować aplikację i zainstalować ją, w tym informacje o zależnościach. „Zależności” to tylko wymyślna nazwa dla innych komponentów lub bibliotek wymaganych do pomyślnej kompilacji.
Po przeczytaniu pliku README
i / lub INSTALL
pliku (i, miejmy nadzieję, przejrzeniu odpowiedniej dokumentacji online dla aplikacji), poszukaj pliku wykonywalnego (z ustawionym w pliku uprawnieniem „x”) o nazwie config
lub configure
. Czasami plik może mieć rozszerzenie, takie jak .sh
(np config.sh
.). Zwykle jest to skrypt powłoki, który uruchamia inne narzędzia, aby potwierdzić, że masz „rozsądne” środowisko do kompilacji. Innymi słowy, sprawdzi, czy masz zainstalowane wszystko, czego potrzebujesz.
Wskazówka: Jeśli jest to aplikacja oparta na języku Python, zamiast pliku konfiguracyjnego powinieneś znaleźć plik o nazwie setup.py
. Aplikacje w języku Python są zazwyczaj bardzo proste w instalacji. Aby zainstalować tę aplikację, jako root (np. Umieść sudo przed następującą komendą w Ubuntu), uruchom tę komendę:
$ python setup.py install
To powinno być wszystko, co musisz zrobić. Możesz pominąć pozostałą część tego samouczka i przejść bezpośrednio do korzystania z aplikacji.
Uruchom skrypt konfiguracyjny w terminalu. Zazwyczaj możesz (i powinieneś!) Uruchomić skrypt konfiguracyjny za pomocą zwykłego konta użytkownika.
$ ./config
Skrypt wyświetli niektóre komunikaty, aby dać ci wyobrażenie o tym, co robi. Często skrypt podaje informację o tym, czy się powiódł, czy nie, a jeśli nie, pewne informacje o przyczynie niepowodzenia. Jeśli nie otrzymasz żadnych komunikatów o błędach, zazwyczaj możesz założyć, że wszystko poszło dobrze.
Jeśli nie znajdziesz żadnego skryptu, który wygląda jak skrypt konfiguracyjny, oznacza to zwykle, że aplikacja jest bardzo prosta i niezależna od platformy. Oznacza to, że możesz po prostu przejść do kroku kompilacji / kompilacji poniżej, ponieważ pod warunkiem Makefile
powinien działać na dowolnym systemie.
Przykład
W tym samouczku wykorzystam tekstowy czytnik RSS o nazwie Newsbeuter jako przykład rodzajów błędów, które możesz napotkać podczas tworzenia aplikacji. W przypadku Newsbeuter nazwa skryptu konfiguracyjnego to config.sh
. W moim systemie po uruchomieniu config.sh
pojawiają się następujące błędy:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ ./config.sh
Checking for package sqlite3... not found
You need package sqlite3 in order to compile this program.
Please make sure it is installed.
Po przeprowadzeniu niektórych badań odkryłem, że w rzeczywistości sqlite3
aplikacja została zainstalowana. Ponieważ jednak próbuję budować ze źródła, jest to wskazówka, której config.sh
tak naprawdę szukają biblioteki programistyczne (nagłówki) sqlite3
. W Ubuntu większość pakietów ma powiązany pakiet programistyczny, który kończy się na -dev
. (Inne platformy, takie jak Fedora, często używają sufiksu pakietu -devel
dla pakietów programistycznych).
Aby znaleźć odpowiedni pakiet dla pakietu sqlite3
programistycznego, możemy użyć apt-cache
narzędzia w Ubuntu (i podobnie yum
narzędzie w Fedorze):
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-cache search sqlite
To polecenie zwraca dość dużą listę wyników, więc musimy wykonać trochę pracy detektywistycznej, aby ustalić, który pakiet jest odpowiedni. W takim przypadku okazuje się odpowiedni pakiet libsqlite3-dev
. Zauważ, że czasami pakiet, którego szukamy, będzie miał lib
prefiks, a nie tylko tę samą nazwę plus -dev
. Wynika to z faktu, że czasami szukamy tylko wspólnej biblioteki, z której może korzystać wiele różnych aplikacji. Aby zainstalować libsqlite3-dev
, uruchom typową komendę apt-get install w terminalu:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-get install libsqlite3-dev
Teraz musimy uruchomić config.sh
ponownie, aby upewnić się, że rozwiązaliśmy ten problem zależności i że nie mamy już żadnych problemów z zależnością. (Chociaż nie pokażę go tutaj, w przypadku Newsbeuter również musiałem zainstalować libcurl4-openssl-dev
pakiet.) Ponadto, jeśli zainstalujesz pakiet programistyczny (jak libsqlite3-dev
) i powiązany pakiet aplikacji (np. sqlite3
) Nie jest już zainstalowany, większość systemów automatycznie zainstaluje skojarzony pakiet aplikacji w tym samym czasie.
Gdy konfiguracja przebiegnie pomyślnie, wynikiem będzie utworzenie jednego lub więcej plików make. Pliki te mają zwykle nazwy Makefile
(pamiętaj, że wielkość liter ma znaczenie w systemach Unix / Linux!). Jeśli pakiet kompilacji zawiera podkatalogi, takie jak src
itp., Każdy z tych podkatalogów również będzie zawierał Makefile
.
Błędy kompilacji i kompilacji
Teraz jesteśmy gotowi do faktycznej kompilacji aplikacji. Nazywa się to często budowaniem, a nazwa pochodzi od rzeczywistego procesu konstruowania czegoś. Różne „elementy” aplikacji, które są zwykle wieloma plikami kodu źródłowego, są łączone razem, tworząc ogólną aplikację. Narzędzie make zarządza procesem kompilacji i wywołuje inne aplikacje, takie jak kompilator i linker, w celu wykonania pracy. W większości przypadków po prostu uruchamiasz make (ze zwykłym kontem użytkownika) z katalogu, w którym uruchomiłeś konfigurację. (W kilku przypadkach, takich jak kompilowanie aplikacji napisanych przy użyciu biblioteki Qt, konieczne będzie uruchomienie innej aplikacji „otokowej”, takiej jak qmake. Ponownie zawsze sprawdź szczegóły README
i / lub INSTALL
dokumenty).
Podobnie jak w powyższym skrypcie konfiguracyjnym, po uruchomieniu make (lub podobnego narzędzia) w terminalu, wyświetli on niektóre komunikaty o tym, co jest wykonywane oraz wszelkie ostrzeżenia i błędy. Zazwyczaj można zignorować ostrzeżenia, ponieważ są one głównie dla programistów aplikacji i informują ich, że istnieją pewne standardowe praktyki, które są łamane. Zazwyczaj te ostrzeżenia nie wpływają na funkcję aplikacji. Z drugiej strony należy poradzić sobie z błędami kompilatora. Z Newsbeuter, kiedy uruchomiłem make, przez jakiś czas wszystko szło dobrze, ale potem wystąpił błąd:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ make
...
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/configparser.o -c src/configparser.cpp
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/colormanager.o -c src/colormanager.cpp
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:5:18: error: stfl.h: No such file or directory
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:33: error: ISO C++ forbids declaration of \u2018stfl_form\u2019 with no type
./include/stflpp.h:33: error: expected \u2018;\u2019 before \u2018*\u2019 token
./include/stflpp.h:34: error: ISO C++ forbids declaration of \u2018stfl_ipool\u2019 with no type
./include/stflpp.h:34: error: expected \u2018;\u2019 before \u2018*\u2019 token
make: *** [src/colormanager.o] Error 1
Proces tworzenia zostanie zatrzymany, gdy tylko wystąpi pierwszy błąd. Obsługa błędów kompilatora może czasem być trudna. Musisz spojrzeć na błędy, aby uzyskać wskazówki na temat problemu. Zazwyczaj problem polega na tym, że brakuje niektórych plików nagłówkowych, które zwykle mają rozszerzenie .h
lub .hpp
. W przypadku powyższego błędu jest (lub powinno być!) Jasne, że problem polega na tym, że stfl.h
nie można znaleźć pliku nagłówka. Jak pokazuje ten przykład, chcesz spojrzeć na pierwsze wiersze komunikatu o błędzie i zejść w dół, aby znaleźć podstawową przyczynę problemu.
Po przejrzeniu dokumentacji Newsbeuter (co powinienem był zrobić, zanim zacząłem, ale wtedy ta część samouczka nie byłaby bardzo znacząca!), Stwierdziłem, że wymaga ona biblioteki innej firmy o nazwie STFL. Co więc robimy w tym przypadku? Cóż, w zasadzie powtarzamy dokładnie ten sam proces dla wymaganej biblioteki: uzyskaj bibliotekę i wykonaj dla niej proces konfiguracji-kompilacji-instalacji, a następnie wznów budowanie żądanej aplikacji. Na przykład w przypadku STFL musiałem zainstalować libncursesw5-dev
pakiet, aby poprawnie się skompilował. (Zwykle nie trzeba powtarzać kroku konfiguracji w naszej oryginalnej aplikacji po zainstalowaniu innej wymaganej aplikacji, ale to też nigdy nie boli).
Po pomyślnym zainstalowaniu zestawu narzędzi STFL proces tworzenia Newsbeuter przebiegał pomyślnie. Proces tworzenia zwykle rozpoczyna się tam, gdzie kończy (w momencie wystąpienia błędu). Dlatego wszelkie pliki, które zostały już pomyślnie skompilowane, nie zostaną ponownie skompilowane. Jeśli chcesz wszystko skompilować ponownie, możesz uruchomić make clean all, aby usunąć skompilowane obiekty, a następnie ponownie uruchomić make.
Instalowanie
Po pomyślnym zakończeniu procesu kompilacji będziesz gotowy do zainstalowania aplikacji. W większości przypadków, aby zainstalować aplikację we wspólnych obszarach systemu plików (np. /usr/bin
Lub /usr/share/bin
itp.), Musisz uruchomić instalację jako root. Instalacja jest naprawdę najprostszym krokiem w całym procesie. Aby zainstalować, w terminalu uruchom:
$ make install
Sprawdź dane wyjściowe tego procesu pod kątem błędów. Jeśli wszystko się powiedzie, powinieneś być w stanie uruchomić nazwę polecenia w terminalu i to się uruchomi. (Dołącz & na końcu wiersza polecenia, jeśli jest to aplikacja GUI, inaczej nie będziesz mógł używać sesji terminalu, dopóki aplikacja nie zakończy działania).
Gdy budujesz aplikację ze źródła, zwykle nie dodaje ikony ani skrótu do menu GUI w Ubuntu. Musisz dodać to ręcznie.
Jest to w zasadzie proces, aczkolwiek potencjalnie iteracyjny, polegający na zbudowaniu i zainstalowaniu aplikacji ze źródła w systemie Ubuntu. Gdy zrobisz to kilka razy, stanie się dla ciebie drugą naturą!