Các phiên bản khác nhau của cùng một gói debian


11

Có cách nào để có được sự khác biệt nguồn giữa gói được cài đặt cục bộ và gói được cập nhật không? Điều này sẽ hữu ích để kiểm tra chính xác những phần đã được sửa chữa, thay đổi hoặc thêm vào.

Ví dụ: giả sử bạn đã cài đặt gói linux-libc-dev trên hệ thống của mình và

sudo apt-get update && sudo apt-get upgrade

trình diễn

The following packages will be upgraded:
  linux-libc-dev 

nhưng bạn muốn kiểm tra, trước khi nâng cấp nó, những thay đổi chính xác đã được thực hiện so với phiên bản địa phương của cùng một gói.

Làm thế nào chúng ta có thể làm điều đó?

Câu trả lời:


5

Đây là một giải pháp khác mà tôi đã hack cùng nhau: whatchanged .

Nó lấy tên của gói nhị phân mà bạn quan tâm làm đối số duy nhất. Để sử dụng SRU gần đây làm ví dụ:

./whatchanged python_papyon

Đây là những gì nó làm:

  1. Kiểm tra nếu có một ứng cử viên cập nhật; thoát nếu không có
  2. Nếu một ứng viên tồn tại, hãy tạo các thư mục tạm thời và tìm nạp các gói nguồn cho cả phiên bản đã cài đặt và ứng viên vào chúng
  3. So sánh hai với debdiffvà đầu ra với thiết bị xuất chuẩn (có thể bạn sẽ muốn chuyển hướng để đọc dễ dàng hơn)
  4. Dọn dẹp các thư mục tạm thời.

Có lẽ cần phải xử lý tốt hơn một số điều có thể sai trong quá trình truy xuất nguồn, điều khiển luồng có thể hơi sai và phải có nhiều cách thanh lịch hơn để kiểm tra phiên bản, nhưng nó vẫn hoạt động tốt trong thử nghiệm hạn chế của tôi cho đến nay. Hiện tại, hãy coi đó là một bản hack nhanh hoạt động và những cải tiến được hoan nghênh nhất. Tôi sẽ đẩy nó vào kho lưu trữ bzr và / hoặc tạo dự án Launchpad nếu nó hữu ích với một số người.

Chỉnh sửa : Thay vì để nó bị thối trên pastebin, tôi đã bắt đầu một dự án Launchpad cho nó; bạn có thể nhận được bản sửa đổi thân cây mới nhất với bzr branch lp:whatchanged. Vui lòng báo cáo lỗi, phân nhánh nó, viết lại trong Perl, v.v.


Thật tuyệt! Phát triển các công cụ dưới dạng câu trả lời;) Giống như bạn mã hóa theo phong cách, nhưng sẽ mã hóa nó theo đúng cách ..
LassePoulsen

Cảm ơn; hy vọng nó được sử dụng. Cách thức đóng gói và phát hành kỹ thuật đôi khi làm cho mã mở có vẻ mờ đục là điều tôi nghĩ đến và tôi không tìm thấy bất kỳ công cụ đơn giản nào để khắc phục điều đó, vì vậy ai đó bày tỏ nhu cầu về chính xác điều đó là động lực tốt để cuối cùng làm cho một người nguyên thủy bản thân mình.
mgunes

7

Afaik cách duy nhất để làm điều này là lấy nguồn và biến sự khác biệt thành chính bạn. Bạn có thể lấy nguồn thực tế được sử dụng để biên dịch các gói với apt-get. fx:

apt-get source gwibber=2.30.2-0ubuntu3 gwibber=2.30.0.1-0ubuntu1
diff -rupN gwibber-2.30.0.1/ gwibber-2.30.2/

Điều này sẽ in ra tất cả sự khác biệt giữa tất cả các tệp ở định dạng bản vá tiêu chuẩn.


1
Điều này là khá tốt. Điều duy nhất tôi thay đổi trong ví dụ này là sử dụng chương trình debdiff gwibber_2.30.0.1-0ubfox1.dsc gwibber_2.30.2-0ubfox3.dscd thay vì diff diff.
RAOF

1
Thực tế nó cũng giống như vậy, nhưng bạn có thể sử dụng diff trên mọi gói / tarball ngoài kia. Có lẽ ai đó muốn thấy sự khác biệt giữa một svn-trunk và pkg hiện tại.
LassePoulsen

Câu trả lời thứ hai của tôi (whatchanged) về cơ bản tự động hóa điều này.
mgunes

2

Đây là một cách (có thể không tối ưu) UD thực hiện:

Chi nhánh pull -updates cho bản phát hành của bạn (giả sử Lucid) rằng (giả định sau) sẽ chứa SRU mới nhất:

bzr branch lp:ubuntu/lucid-updates/package_name

Nhận các thay đổi được giới thiệu bởi phiên bản mới nhất, (giả định sau) sẽ tương ứng với SRU mới nhất:

bzr diff -c`bzr revno`

2
Hừm. Đây là một điểm thú vị, mặc dù có lẽ kém toàn diện hơn so với Source Lab theo nghĩa là tên gói có thể không khớp hoặc tồn tại trong cây nguồn bzr.
Godel

Miễn là bạn biết tên gói nguồn, nó sẽ khớp. Bạn có thể tìm thấy gói nguồn nào mà gói nhị phân được tạo bởi apt-cache show package_name | grep Source:.
mgunes

@Murat Chà, <package_name>do đó , thu được không hoạt động trên một số gói: bzr branch lp:ubuntu/lucid-updates/$(apt-cache show linux-libc-dev | grep -m 1 Source: | awk "{print \$2}")=> bzr: ERROR: url không hợp lệ được cung cấp để vận chuyển: "bzr + ssh: //bazaar.launchpad.net/+branch/ubfox/lucid-updates/linux" : không có chương trình được hỗ trợ
Gödel

Đó là bởi vì không có nhánh Ubuntu nào cho kernel, tôi sợ. Nó có thể là một ngoại lệ cụ thể do thực tế là kernel được duy trì trong git (kernel.ubfox.com) nhưng tôi không chắc chắn về phạm vi chính xác của các nhánh gói bzr tại thời điểm này. Bạn có thể muốn hỏi về # ubfox-devel.
mgunes

@ Tôi biết. Đó là lý do tại sao phương pháp này kém toàn diện hơn so với Source Lab. Nhưng một lần nữa, nó là một mất thú vị.
Godel

0

Nếu bạn muốn thấy sự khác biệt của tệp trong kho lưu trữ gói, hãy trích xuất các tệp md5sums của chúng, sắp xếp và tìm khác biệt, sau đó bạn có thể thu hẹp danh sách các tệp thực tế để so sánh đáng kể.


-1

Có thể không phải là thay đổi "chính xác", nhưng apt-listchangesliệt kê các mục thay đổi cho các thay đổi đã được thực hiện kể từ phiên bản đã cài đặt.

Nó hoạt động bằng cách thêm một bước sau khi bạn hoàn tất tải xuống các gói mới, nhưng trước khi cài đặt bắt đầu, nơi nó hiển thị cho bạn mục thay đổi cho mỗi gói sắp được nâng cấp. Sau đó bạn có thể tiếp tục hoặc hủy bỏ. Bạn có thể cài đặt nó với

sudo apt-get install apt-listchanges

sau đó thiết lập nó với

sudo dpkg-reconfigure apt-listchanges

Một lần nữa, câu hỏi không phải là về việc hiển thị các thay đổi ChangeLog.
Godel

D'oh, đã bỏ lỡ dòng đầu tiên mà bạn nói "nguồn khác biệt."
Ken Simon
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.