Làm cách nào để áp dụng các bản vá phần mềm?


15

Tôi có một ứng dụng foobarmà ai đó đã viết một bản vá để thêm một tính năng tôi thích. Làm thế nào tôi có thể sử dụng các bản vá?

Câu trả lời:


21

Các bản vá thường được chứa trong .diffcác tệp, bởi vì các bản vá được tạo bằng difflệnh.

Một bản vá là một loạt các phần chèn và xóa vào mã nguồn. Vì lý do này, để sử dụng bản vá, bạn phải xây dựng ứng dụng (ví dụ: "foobar") từ nguồn sau khi áp dụng bản vá. Vì vậy, trong các bước:

1. Nhận gói nguồn cho foobar .

Hầu hết các bản phân phối linux (bản vá nb không phải là duy nhất cho linux) có "gói nguồn" bạn có thể sử dụng cho mục đích này, nhưng vì chúng không đồng nhất, tôi sẽ chỉ đề cập đến định dạng của nguồn gốc ở đây. Nguồn ban đầu không phải là một phần của bản phân phối và có thể khó tìm. Một nơi tốt để bắt đầu là wikipedia, nơi có các bài viết cho nhiều ứng dụng phổ biến và bài viết nên chứa liên kết đến trang chủ với tải xuống nguồn. Bạn cũng có thể tự google. Gói nguồn sẽ được gọi là một cái gì đó như foobar.0.1.tar.bz2. Giải nén cái này - bây giờ bạn có một thư mục được gọi foobar.0.1.

2. Thêm bản vá.

Đôi khi các bản vá là các tệp đơn lẻ và đôi khi chúng là một tập hợp của một số tệp. Sao chép chúng vào foobar.0.1cd foobar.0.1. Tiếp theo, bạn cần chạy patchlệnh. Điều này đọc từ đầu vào tiêu chuẩn, vì vậy bạn muốn dẫn .difftập tin vào. Phần khó khăn là xác định những gì sẽ sử dụng cho -ptùy chọn (nếu không có hướng dẫn với bản vá). Để làm điều đó bạn cần nhìn vào phần đầu của tệp vá. Ví dụ:

--- old/comm.c  2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c  2006-07-07 02:39:24.000000000 +0000

Trong trường hợp này, comm.clà tên của tệp nguồn sẽ bị thay đổi. Tuy nhiên, lưu ý rằng có một thư mục được gắn vào nó. Vì đây không phải là cùng một thư mục ("cũ" so với "mới"), đây là một manh mối lớn cho thấy phần này của đường dẫn là rác (cho mục đích của chúng tôi). Mục đích của -pchuyển đổi (xem man patch) là để loại bỏ tiền tố này. Phải mất một số, là số dấu gạch chéo ( /) để loại bỏ, với mọi thứ ở giữa; trong trường hợp này, chúng tôi sẽ sử dụng -p1để giảm đường dẫn xuống chỉ đơn giản comm.c.

Giả định đó comm.cthực sự nằm trong cùng một thư mục, đây sẽ là một manh mối khác về việc giải thích của bạn có đúng không. Nếu cả hai dòng này đều src/comm.ccomm.cthực sự nằm trong srcthư mục con của cây xây dựng của bạn, thì bạn cần sử dụng -p0- hãy cẩn thận khi không sử dụng -ptất cả sẽ loại bỏ TẤT CẢ các dấu gạch chéo. Nếu đường dẫn là tuyệt đối (nghĩa là bắt đầu bằng /), đó có thể là những gì bạn muốn. Bây giờ áp dụng các bản vá:

patch -p1 < patch.diff

Nguồn hiện đã được sửa đổi. Nếu có nhiều .difftệp hơn , hãy áp dụng chúng theo cùng một cách.

3. Xây dựng và cài đặt.

Đây là quá trình bình thường bạn sẽ đi qua để xây dựng một cái gì đó từ nguồn - đầu tiên ./configure, sau đó make, make check, make install. Trước khi bạn thực hiện lần cuối cùng, nếu bạn đã có bản cài đặt hiện có foobar, hãy quyết định xem bạn muốn xóa hoặc ghi đè lên điều đó hay cách bạn sẽ giải quyết xung đột đặt tên. Bạn có thể muốn foobartham khảo phiên bản mới, vá chứ không phải phiên bản cũ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.