Một số có thể giải thích lệnh apt-get update làm gì và khi nào tôi thực sự nên sử dụng nó?
apt-get update
tải xuống các chỉ mục được cập nhật từ kho lưu trữ của gói phân phối, liệt kê tất cả các gói có sẵn và các phiên bản chính xác của chúng.
Các bản phân phối phổ biến như Ubuntu và Debian thường bảo thủ và tương thích ngược trong các dịch vụ gói của chúng, vì vậy các phiên bản sẽ không thay đổi nhiều theo thời gian; họ sẽ thay đổi do cập nhật bảo mật hoặc sửa lỗi. Ví dụ, mysql có thể được nâng cấp từ 5.7.18
đến 5.7.19
nhưng không đến 6.x
.
Trường hợp được lưu trữ chỉ số gói? Trên cơ sở dữ liệu? Trên một tập tin?
Nó thường được lưu trữ trong một hoặc nhiều tệp bên trong /var/lib/apt
. Trong ngữ cảnh của Docker, các tệp này nằm trong ảnh. Khi xây dựng Dockerfile, chúng được lưu trữ trong các lớp mới của hệ thống tệp được tạo và tồn tại như hình ảnh mới được xây dựng.
Điều gì xảy ra nếu tôi cài đặt apt-get mà không cập nhật bộ đệm?
Bạn có thể thử tải xuống các phiên bản gói không còn tồn tại nữa. Điều này khá phổ biến trên các máy ảo, nhưng cũng có thể bên trong các container nếu kho lưu trữ phân phối đã phát hành các gói mới sau khi hình ảnh cơ sở được xây dựng. Có thể không có sự phối hợp giữa các bộ duy trì phân phối và các bộ duy trì Dockerfile, nằm ở phía dưới của bản phân phối và có thể lớn hơn về số lượng. Chỉ có một kho lưu trữ Debian nhưng hàng ngàn jessie
hình ảnh container dựa trên và Dockerfile.
Hơn nữa, một số hình ảnh ngược dòng như ubfox loại bỏ chỉ mục đã tải xuống để làm cho hình ảnh nhỏ hơn và tránh các tệp lỗi thời ở đó. Vì vậy, cần phải tải xuống một chỉ mục cập nhật khi xây dựng trên đầu của một hình ảnh cơ bản, không phải cho mỗi phiên bản của một hình ảnh cơ sở để gửi với chỉ mục mới nhất.
Có khả năng gói từ xa sẽ không tồn tại nữa và liên kết sẽ bị hỏng?
Chắc chắn, bởi vì các phiên bản được lưu trữ trong chỉ mục rất chính xác như 5.7.19
(đơn giản hóa; chúng giống với hơn 5.7.19-0ubuntu1
).
Có một số chính trị đồng ý về kho lưu trữ deb? Ví dụ: kho lưu trữ chỉ chứa phiên bản cuối cùng của gói, hay ngược lại, nó có nên chứa tất cả các phiên bản có sẵn cho một bản phát hành phân phối cụ thể không?
Thông thường các phiên bản nhỏ cũ sẽ bị xóa nhanh chóng sau khi có bản cập nhật; Tôi cho rằng điều này là để tiết kiệm không gian trên các máy chủ vì các nhị phân có thể nặng vài chục megabyte, nhân với tất cả các phiên bản và kiến trúc được hỗ trợ. Vì vậy, thường là không thể ghim, nói, mysql-5.7.18
trong phần tiếp theo apt-get install
; ngay khi mysql-5.7.19
được phát hành trong bản phân phối, bản trước đó sẽ bị xóa.
Để công bằng cho Docker, tính không xác định apt-get update
này là một vấn đề được đưa ra như một phần của quản lý gói của mỗi phân phối. Bạn sẽ có cùng một vấn đề khi cố gắng xây dựng lại một máy ảo EC2 hoặc Vagrant.
Một số quản trị viên hệ thống sử dụng các dịch vụ như Aptly để phản ánh các kho lưu trữ ban đầu và có thể ghim một phiên bản cụ thể, nhưng bạn có nguy cơ bỏ lỡ các bản cập nhật bảo mật trừ khi bạn có quy trình riêng thường xuyên chạy để kiểm tra các bản cập nhật và thay đổi những gì bạn đang ghim.