Mam aplikację, foobar
dla której ktoś napisał łatkę, aby dodać funkcję, którą lubię. Jak mogę użyć łatki?
Mam aplikację, foobar
dla której ktoś napisał łatkę, aby dodać funkcję, którą lubię. Jak mogę użyć łatki?
Odpowiedzi:
Łaty są zwykle zawarte w .diff
plikach, ponieważ łaty są tworzone za pomocą diff
polecenia.
Łatka to seria wstawek i usunięć do kodu źródłowego. Z tego powodu, aby użyć łatki, po jej zainstalowaniu musisz zbudować aplikację (np. „Foobar”) ze źródła. Tak więc w krokach:
1. Pobierz pakiet źródłowy foobar .
Większość dystrybucji Linuksa (łatanie nb nie jest unikalne dla Linuksa) ma „pakiety źródłowe”, których można użyć do tego celu, ale ponieważ są one heterogeniczne, będę tutaj odnosił się tylko do formatu oryginalnego źródła. Oryginalne źródło nie jest częścią dystrybucji i może być trudne do znalezienia. Dobrym miejscem na początek jest wikipedia, która zawiera artykuły dla wielu popularnych aplikacji, a artykuł powinien zawierać link do strony głównej z możliwością pobrania źródła. Oczywiście możesz także google samodzielnie. Pakiet źródłowy będzie się nazywał tak foobar.0.1.tar.bz2
. Rozpakuj to - masz teraz katalog o nazwie foobar.0.1
.
2. Dodaj łatkę.
Czasami łatki to pojedyncze pliki, a czasem zestaw kilku plików. Skopiuj je do foobar.0.1
i cd foobar.0.1
. Następnie musisz uruchomić patch
polecenie. Odczytuje to ze standardowego wejścia, więc chcesz .diff
przesłać plik do potoku . Trudna część polega na określeniu, co należy użyć dla -p
opcji (jeśli nie ma instrukcji dotyczących łatki). Aby to zrobić, musisz spojrzeć na początek pliku łatki. Na przykład:
--- old/comm.c 2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c 2006-07-07 02:39:24.000000000 +0000
W tym przypadku comm.c
jest to nazwa pliku źródłowego, który zostanie zmieniony. Zauważ jednak, że dołączony jest do niego katalog. Ponieważ nie są to te same katalogi („stary” vs. „nowy”), jest to duża wskazówka, że ta część ścieżki jest śmieciowa (dla naszych celów). Celem -p
przełącznika (patrz man patch
) jest wyeliminowanie tego prefiksu. Do /
wyeliminowania potrzeba liczby, która jest liczbą ukośników ( ), a wszystko pomiędzy; w tym przypadku użylibyśmy -p1
do zmniejszenia ścieżki do zwykłej comm.c
.
Zakłada się, że comm.c
tak naprawdę znajduje się w tym samym katalogu, co będzie kolejną wskazówką, czy twoja interpretacja jest poprawna. Jeśli obie te linie były src/comm.c
i comm.c
faktycznie znajdują się w src
podkatalogu twojego drzewa kompilacji, musisz użyć -p0
- uważaj, że nieużywanie -p
w ogóle usunie WSZYSTKIE ukośniki. Jeśli ścieżka jest bezwzględna (tzn. Zaczyna się od /
), prawdopodobnie tego właśnie chcesz. Teraz zastosuj łatkę:
patch -p1 < patch.diff
Źródło zostało teraz zmodyfikowane. Jeśli jest więcej .diff
plików, zastosuj je w ten sam sposób.
3. Zbuduj i zainstaluj.
Jest to normalny proces będzie można przejść przez zbudować coś od źródła - pierwszy ./configure
, potem make
, make check
, make install
. Zanim zrobisz ostatnią, jeśli masz już istniejącą instalację foobar
, zdecyduj, czy chcesz ją usunąć lub zastąpić, czy też jak poradzisz sobie z konfliktem nazw. Prawdopodobnie chcesz foobar
odwoływać się do nowej, poprawionej wersji, a nie starej.