Khi nào và tại sao tôi nên sử dụng apt-get update?


15

Câu hỏi chung:

Một số có thể giải thích những gì lệnh apt-get updatelàm và khi tôi thực sự nên sử dụng nó?


Nhận xét

Xin vui lòng cho một câu trả lời chi tiết . Không chỉ là một bản sao của trang man, trừ khi phiên bản của bạn thực sự chi tiết (tôi đặt một định nghĩa từ trang man bên dưới).

Cập nhật apt-get : Được sử dụng để đồng bộ hóa lại các tệp chỉ mục gói từ các nguồn của chúng. Các chỉ mục của các gói có sẵn được tìm nạp từ (các) vị trí được chỉ định trong /etc/apt/source.list(5). Một bản cập nhật phải luôn được thực hiện trước khi nâng cấp hoặc nâng cấp.


Câu hỏi phụ:

  • 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?
  • Điều gì xảy ra nếu tôi làm apt-get installmà không cập nhật bộ đệm? 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?
  • 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?

Bối cảnh

Tôi hỏi câu hỏi của tôi bởi vì tôi đang nghiên cứu khung Docker . Một trong những tính năng của nó là Dockerfile , cho phép bạn xây dựng một loại hình ảnh hệ điều hành bằng cách thực hiện một số lệnh từ tệp này. Một thuộc tính của hình ảnh này là nó phải luôn giống nhau, bất kể bối cảnh là gì (thời gian xây dựng, v.v.).

Tôi sợ rằng nếu tôi khởi chạy apt-get updatelệnh vào các thời điểm khác nhau, kết quả sẽ khác và do đó hình ảnh của tôi sẽ khác.


Tôi nghĩ rằng bài viết này có thể phục vụ như một bài viết wiki cho cách đặt câu hỏi cấp cao. Rất hữu ích.
Zerodf

Câu trả lời:


12

apt-get update tải về danh sách các gói có sẵn.

Danh sách các gói có thể thay đổi theo thời gian. Các gói mới được thêm vào, và các gói cũ được loại bỏ. Do đó, nếu bạn có một bộ đệm thực sự cũ và bạn cố gắng thực hiện apt-get install, nó có thể cố tải xuống một gói không còn tồn tại.
Bao lâu một gói cũ được giữ trong một kho lưu trữ là tùy thuộc vào người duy trì repo (bản phân phối của bạn). Như vậy, nếu bạn đang sử dụng một cái gì đó như docker, trong đó bộ đệm có thể rất lỗi thời, bạn nên luôn chạy apt-get updatetrước khi cài đặt bất kỳ gói nào.

Lý do để loại bỏ và thêm các gói chủ yếu là sửa lỗi và cập nhật bảo mật. Mặc dù nếu bạn đang sử dụng repos của bên thứ 3 như PPA, mọi thứ đều ổn.

Khi sử dụng một cái gì đó như docker để container trong môi trường công ty, bạn nên xây dựng container một lần, sau đó di chuyển container đó qua các môi trường phát hành khác nhau (phát triển, dàn dựng, sản xuất) và không xây dựng lại container mỗi lần. Điều này sẽ đảm bảo bạn không nhận được một container khác chưa được thử nghiệm.

Để trả lời câu hỏi của bạn về nơi các tập tin bộ nhớ cache sống , /var/lib/apt/lists.


Câu trả lời chính xác! Cảm ơn bạn! Tôi muốn phản ứng cho đoạn "(...) không xây dựng lại container mỗi lần. Điều này sẽ đảm bảo bạn không nhận được một container khác chưa được thử nghiệm." Tôi đã đọc được rằng một cách tốt nhất là không bao giờ sử dụng nâng cấp apt-get. Một trong những lý do sẽ là: "Nó cũng tạo ra hình ảnh không nhất quán vì bạn không còn có một nguồn sự thật về cách ứng dụng của bạn nên chạy và những phiên bản phụ thuộc nào được đưa vào hình ảnh." Đó không phải là cùng một vấn đề với apt-get updatesau đó? Và Dockerfile không có nghĩa vụ phải đảm bảo hình ảnh?
Pierre-Jean

2
Kinda. apt-get updatesẽ chỉ ảnh hưởng đến các gói mới được cài đặt. Các gói hiện tại sẽ chỉ được nâng cấp nếu cần bởi các gói mới (điều này nên tối thiểu). Với việc apt-get upgradebạn nâng cấp tất cả các gói, bao gồm cả các gói hiện có, dẫn đến một hình ảnh rất khác nhau. Mặc dù điều này có thể dẫn đến một kết quả khác nhau mỗi khi bạn xây dựng từ dockerfile, cá nhân tôi không nghĩ rằng đây là một vấn đề nghiêm trọng nếu bạn trải qua một bản phát hành đa môi trường. Tôi nghĩ đây là một vấn đề nếu bạn phân phối dockerfile cho người khác và nhờ họ xây dựng nó.
Patrick

0

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.19như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 jessiehì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.18trong 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 updatenà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.

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.