Jak stosować łatki do oprogramowania?

15

Mam aplikację, foobardla której ktoś napisał łatkę, aby dodać funkcję, którą lubię. Jak mogę użyć łatki?

Złotowłosa
źródło

Odpowiedzi:

21

Łaty są zwykle zawarte w .diffplikach, ponieważ łaty są tworzone za pomocą diffpolecenia.

Ł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.1i cd foobar.0.1. Następnie musisz uruchomić patchpolecenie. Odczytuje to ze standardowego wejścia, więc chcesz .diffprzesłać plik do potoku . Trudna część polega na określeniu, co należy użyć dla -popcji (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.cjest 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 -pprzełą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 -p1do zmniejszenia ścieżki do zwykłej comm.c.

Zakłada się, że comm.ctak 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.ci comm.cfaktycznie znajdują się w srcpodkatalogu twojego drzewa kompilacji, musisz użyć -p0- uważaj, że nieużywanie -pw 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 .diffplikó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 foobarodwoływać się do nowej, poprawionej wersji, a nie starej.

Złotowłosa
źródło