Tại sao các phiên bản trước của gói Debian biến mất trong kho gói? (rất phù hợp với cấu hình hệ thống kiểm soát phiên bản)


38

Kịch bản: Trong phiên bản cấu hình hệ thống được kiểm soát dựa trên Puppet, Chef, v.v., cần phải tái tạo một trạng thái hệ thống nhất định. Điều này được thực hiện bằng cách chỉ định rõ ràng các phiên bản gói hệ thống.

Gần đây, chúng tôi gặp phải một vấn đề trong đó các phiên bản gói nhất định bị thiếu trong kho Debian. Một ví dụ: Gói "patch" được yêu cầu trong phiên bản 2.7.5-1 + deb9u1, nhưng chỉ có 2.7.5-1 + deb9u2. Một ví dụ khác, thậm chí nghiêm trọng hơn: "linux-headers-4.9.0-9-common" là bắt buộc (do kernel được liên kết được cài đặt) và chỉ có "linux-headers-4.9.0-11-common".

Điều này làm cho nó không thể tái tạo một trạng thái nhất định của một hệ thống.

Các gói trên chỉ là ví dụ (trong thực tế tôi gặp phải). Tôi quan tâm đến việc hiểu và giải quyết vấn đề chung.

Ý tưởng đằng sau những cập nhật này, các gói 'biến mất' và các phiên bản gói là gì?

Tôi có thể lấy các phiên bản trước ở đâu (không phải phiên bản cũ, nhưng phiên bản cũ vài tuần) của các gói Debian? Có thể tự động hóa quá trình cài đặt theo cách chung.


1
Phần nào phụ thuộc vào phần mềm được sử dụng để cấu hình kho lưu trữ. Reprepro, iirc, chỉ cho phép một phiên bản duy nhất của mỗi gói
muru

2
stablevẫn nhất quán, ít nhất là cho đến khi phát hành điểm tiếp theo. ổn định - cập nhật, kiểm tra và không ổn định chỉ chứa phiên bản mới nhất của bất kỳ gói nào. Đối với bất cứ điều gì khác, bạn sẽ phải bất lực nhìn archive.debian.org (hoặc snapshot.debian.org như đã đề cập trong câu trả lời của SK)
cas

5
Có lý do gì bạn không chạy repo của riêng mình mà bạn có thể kiểm soát các phiên bản pin và chính sách thay thế (điều này sẽ có lợi thế cho việc cài đặt tự động trong tương lai)?
Tháp Eric

2
Tên linuxpkg mới là một ngoại lệ: nói chung, các gói ổn định của Debian đi cùng tên gói và chỉ thay đổi số phiên bản. linux-image-amd64không bao giờ thay đổi tên và luôn phụ thuộc vào mới nhất linux-image-4.9.0-*. Tên linux-image-4.9.0-*pkg mới đánh dấu các thay đổi ABI kernel không tương thích cần thiết để nhập một số lỗi và cho phép xử lý việc biên dịch lại cần thiết của các mô-đun được xây dựng tùy chỉnh (dkms, v.v.). Tương tự cho linux-headers-*.
Ignis

1
Ý tưởng đằng sau các bản cập nhật là gì apt-get changelog packagename
Ignis

Câu trả lời:


64

Có thể sao chép một thiết lập cụ thể, xuống phiên bản chính xác, là yêu cầu của bạn , không phải của Debian.

Debian chỉ hỗ trợ một phiên bản duy nhất của mỗi gói nhị phân trong bất kỳ bản phát hành nào; đối tác của điều đó là sự cẩn trọng cao được thực hiện để đảm bảo rằng các bản cập nhật gói trong bất kỳ bản phát hành cụ thể nào không đưa ra hồi quy, và khi sự chăm sóc đó không thể thực hiện được, hãy ghi lại sự thật đó. Giữ nhiều phiên bản của một gói nhất định sẽ chỉ làm tăng gánh nặng hỗ trợ và các yêu cầu kiểm tra: ví dụ: người bảo trì gói sẽ phải kiểm tra các gói cập nhật đối với tất cả các phiên bản có sẵn của thư viện mà họ sử dụng, thay vì chỉ các phiên bản hiện được hỗ trợ ... Các gói chỉ được cập nhật trong một bản phát hành ổn định khi thực sự cần thiết, tức làđể sửa một lỗi nghiêm trọng (bao gồm các vấn đề bảo mật). Trong trường hợp của kernel, điều này đôi khi có nghĩa là kernel ABI thay đổi và tên gói thay đổi do đó (để buộc xây dựng lại các gói phụ thuộc); có meta-gói mà bạn có thể kéo trong thay vì cứng mã hóa ABI ( linux-image-amd64, linux-headers-amd64, vv).

Tuy nhiên, có một cách giải quyết cho tình huống của bạn: mọi gói nguồn và nhị phân được xuất bản đều được lưu trữ trên snapshot.debian.org . Khi bạn tạo một thiết lập được phiên bản, bạn có thể chọn ảnh chụp nhanh tương ứng (ví dụ: một trong các ảnh chụp nhanh tháng 9 năm 2019 ) và sử dụng đó làm URL kho lưu trữ của bạn:

deb https://snapshot.debian.org/archive/debian/20190930T084755Z/ buster main

Nếu bạn cuối cùng dựa vào điều này, xin vui lòng sử dụng một bộ nhớ đệm của một số loại, ví dụ như Apt-Cacher NG . Điều này sẽ không chỉ giảm tải trên máy chủ snapshot, nó sẽ đảm bảo rằng bạn có một bản sao cục bộ của tất cả các gói bạn cần.

(Tình huống liên quan đến các gói nguồn phức tạp hơn một chút và các tài liệu lưu trữ thực hiện nhiều phiên bản của một số gói nguồn trong một bản phát hành nhất định, vì phụ thuộc vào cấp phép. Nhưng điều đó không liên quan ở đây. nhị phân trong các bản phát hành được hỗ trợ: phiên bản hiện tại trong bản phát hành điểm hiện tại, cùng với bất kỳ bản cập nhật nào trong kho bảo mật và kho cập nhật, bản sau được xếp lại ở bản phát hành điểm tiếp theo. Vì vậy, việc duy trì cấu hình hệ thống kiểm soát phiên bản có thể lặp lại là khả thi mà không cần dùng đến các ảnh chụp nhanh, miễn là bạn cập nhật nó mỗi khi phát hành điểm.)


Lưu ý rằng đôi khi một số phiên bản trước có sẵn - apt-cache madison packagenamesẽ hiển thị tất cả các phiên bản aptcó thể xem qua kho được định cấu hình.
ivanivan

5
. .)
Peter Cordes

3
Chỉ để xác minh rằng tôi đã hiểu chính xác: Trong thực tế, đó không phải là về các phiên bản tôi chỉ định khi cài đặt gói (vì các phiên bản cũ hơn có thể không khả dụng), mà là trạng thái của kho lưu trữ gói tôi đang sử dụng. Vì vậy, nếu tôi muốn có một bản Debian 9,8 'mới', tôi cần kho lưu trữ gói ở trạng thái đó (ví dụ: ảnh chụp nhanh hoặc kho lưu trữ do tôi tự tạo), và dĩ nhiên, gói linux-header- * chính xác luôn có sẵn . Nếu tôi muốn chuyển sang Debian 9.9, tôi sẽ chuyển kho lưu trữ gói sang trạng thái được liên kết và chạy apt-get dist-Nâng cấp. Điều này có đúng không?
Flo

2
Vâng đúng rồi.
Stephen Kitt

3
@Flo lưu ý rằng các bản phát hành điểm (như debian X.9 hoặc X.8) chỉ có nghĩa là dành cho iso có thể tải xuống, vì vậy các bản cài đặt mới không tải xuống hàng tấn gói. Trong kho lưu trữ, không có sự phân biệt giữa bất kỳ bản phát hành điểm nào, bạn luôn nhận được gói mới nhất.
Braiam

15

Đừng dựa vào các máy chủ không thuộc quyền kiểm soát của bạn để tạo lại trạng thái hệ thống cụ thể. Thậm chí nghĩ rằng các máy chủ Debian khá đáng tin cậy, bạn không bao giờ biết điều gì có thể xảy ra trong tương lai. Điều này đặc biệt có liên quan với các kho lưu trữ khác, bạn có thể sử dụng.

Bạn nên duy trì gương của riêng bạn để có được trạng thái hệ thống có thể sao chép. Bằng cách này, bạn thậm chí có thể có trạng thái sản xuất cho các hệ thống bình thường của mình và một số trạng thái thử nghiệm cho cấu hình mới.

Các công cụ quản lý kho aptly có thể tạo gương của kho. Bạn có thể chọn các gói để phản chiếu, tạo ảnh chụp nhanh nội dung kho lưu trữ tại một thời điểm cụ thể và kết hợp một số gương hoặc ảnh chụp nhanh vào một kho lưu trữ. Bằng cách này bạn có thể tái tạo hoàn toàn các trạng thái hệ thống có thể.


8

Mặc dù câu trả lời của Stephen Kitt chắc chắn là một giải pháp khả thi, tôi nghĩ sẽ an toàn hơn cho bạn khi giữ các bản sao của các gói cần thiết.

Khi ghi lại thiết lập hệ thống, đảm bảo lưu các bản sao của .deb-files từ đó /var/cache/apt/archives/. Bạn cũng có thể sử dụng apt-get download.

Khi khôi phục thiết lập hệ thống, bạn phải rất nghiêm ngặt aptđể tránh kích hoạt các hành động tự động nguy hiểm tiềm tàng.

Có lẽ sẽ dễ dàng hơn để sử dụng dpkgtrực tiếp để cài đặt chính xác những gì bạn muốn.


6
Một cách tiếp cận thậm chí tốt hơn IMO sẽ là sử dụng bộ đệm APT cục bộ. Điều đó tránh được các vấn đề trong đoạn thứ ba của bạn, và cũng tránh phải thu hoạch /var/cache/apt.
Stephen Kitt

3
Có hai biến thể của điều này - một là sử dụng một cái gì đó như apt-mirror để sao chép toàn bộ repo, hai là chỉ tải xuống các gói và phụ thuộc cụ thể . Sau đó chụp nhanh thư mục - ví dụ với btrfs như pkgs-20190501, sau đó xuất bản thư mục chụp nhanh dưới dạng repo. Khi xây dựng, hãy đặt url repo đã được phiên bản (ví dụ http://debmirror/pkgs-20190501/...) vào nguồn.list, sau đó chạy cập nhật apt-get, apt-get install $ pkgs, v.v.
bain
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.