Điểm:4

Cài đặt từ tệp chứa đầu ra từ danh sách apt --đã cài đặt

lá cờ co

Tôi có một tệp chứa đầu ra của danh sách apt -- đã cài đặt từ một máy khác.

I E.

accountservice-ubuntu-schemas/focal,focal,now 0.0.7+17.10.20170922-0ubuntu1 tất cả [đã cài đặt, tự động]
dịch vụ tài khoản/cập nhật tiêu điểm, bảo mật tiêu điểm, hiện là 0.6.55-0ubuntu12~20.04.5 AMD64 [đã cài đặt, tự động]
acl/focal, giờ là 2.2.53-6 AMD64 [đã cài đặt, tự động]

...và như thế.

Có cách nào dễ dàng để cài đặt các gói này bằng tệp đã nói ở trên và dòng lệnh không?

muru avatar
lá cờ us
Bạn đang tìm cách cài đặt các phiên bản cụ thể đó?
Gigi Bayte 2 avatar
lá cờ co
@muru Đó là một câu hỏi hay.Miễn là mọi thứ trong danh sách các gói đều được xử lý phụ thuộc, thì tôi vẫn ổn nếu các phiên bản giống nhau hoặc mới hơn. (Như hiện tại, có thể giả định rằng các phụ thuộc đã được xử lý.)
Điểm:5
lá cờ zw

APT nêu rõ rằng nó không được thiết kế để sử dụng với các tập lệnh:

SỬ DỤNG Script VÀ SỰ KHÁC BIỆT VỚI CÁC CÔNG CỤ APT KHÁC
Các đúng cách(8) dòng lệnh được thiết kế như một công cụ dành cho người dùng cuối và nó có thể thay đổi hành vi giữa các phiên bản. Mặc dù nó cố gắng không phá vỡ khả năng tương thích ngược nhưng điều này cũng không được đảm bảo nếu một thay đổi có vẻ có lợi cho việc sử dụng tương tác.

Tất cả các tính năng của đúng cách(8) có sẵn trong các công cụ APT chuyên dụng như apt-get(8) và apt-cache(8) là tốt. đúng cách(8) chỉ thay đổi giá trị mặc định của một số tùy chọn (xem apt.conf(5) và cụ thể là phạm vi nhị phân). Vì vậy, bạn nên ưu tiên sử dụng các lệnh này (có thể có bật một số tùy chọn bổ sung) trong tập lệnh của mình vì chúng giữ khả năng tương thích ngược càng nhiều càng tốt.

Bạn đang sử dụng sai công cụ. Cách tốt hơn là sử dụng đpkg chính nó:

dpkg -l | awk '$1 == "ii" {print $2}' > đã cài đặt
Sudo apt-get install $(cài đặt con mèo)

Chi tiết:

Nhân tiện, phương pháp này có vẻ hẹp hòi (như trong hướng dẫn tuyệt vời này trên cộng đồng). Bạn đang mất một lượng lớn thông tin - nguồn gốc gói và khóa GPG của chúng.
Ngoài ra, phương pháp này sẽ không thành công trong lần xuất hiện đầu tiên của gói được cài đặt cục bộ hoặc gói được cài đặt từ một số PPA không tồn tại trên máy thứ hai.


Nếu bạn muốn dịch vụ trọn gói - hãy thử dịch vụ của tôi tập lệnh python đặt tên srslsud (Lưu/Khôi phục Tập lệnh Danh sách Phần mềm cho Tài nguyên Chủ đề của Ubuntu và Debian).
Nó sẽ lưu tất cả các kho APT, khóa GPG của chúng; danh sách Snaps, Flatpaks và Ubuntu Tạo ứng dụng thành tệp JSON từ máy đầu tiên.
Sau đó, bạn có thể khôi phục danh sách này bằng cùng một tệp JSON trên máy thứ hai.

marcelm avatar
lá cờ cn
Tôi thích cách bạn nói rằng sử dụng `apt` không nhằm mục đích phân tích cú pháp máy trực tiếp và sau đó bạn sử dụng lệnh gọi `dpkg` yêu cầu hai bước lọc trước khi có thể phân tích cú pháp: P - Bạn đã xem `dpkg --get-selections chưa ` / `dpkg --set-selections`?
Nate T avatar
lá cờ it
Tôi đã sử dụng apt để khắc phục lỗi trong trường hợp các gói đã được cài đặt. Tôi không thể nhớ liệu việc chạy `dpkg` trực tiếp trong những trường hợp này có bị lỗi hay không, nhưng tôi biết chắc chắn rằng apt sẽ bỏ qua chúng. Thành thật mà nói, cảnh báo Apt chưa bao giờ có ý nghĩa với tôi. Họ phàn nàn rằng các bản cập nhật có thể phá vỡ các triển khai hiện tại, nhưng điều đó đúng với bất kỳ phần mềm nào. Đó là toàn bộ lý do cho hệ thống lập phiên bản `X.X.XX` của chúng tôi, phân biệt giữa các thay đổi vi phạm và không vi phạm.
bac0n avatar
lá cờ cn
Đầu ra @NateT từ `apt` nhạy cảm với ngôn ngữ.
Nate T avatar
lá cờ it
@bac0n hiểu rồi. Điều đó có ý nghĩa sau đó. Tốt để biết. Chức năng dựa trên ngôn ngữ có được đưa vào logic apt-get hay chỉ là giao diện?
Điểm:5
lá cờ us

Bạn có thể trích xuất phần trước phần đầu tiên / và sử dụng nó với xargs để cài đặt qua đúng cách:

xargs -a <(awk -F/ '{print $1}' some-file) apt install

Hoặc:

awk -F/ '{print $1}' some-file | cài đặt xargs apt -y
Điểm:1
lá cờ it

Tôi thực sự gần đây đã viết một tập lệnh trên máy của riêng mình, về cốt lõi của nó, thực hiện chính xác điều đó. tôi làm điều đó bằng cách đầu tiên đường ống để sed 's/\/.*//g' để loại bỏ mọi thứ sau dấu gạch chéo. Sau đó, đầu ra được dẫn đến cài đặt xargs/usr/bin/sudo apt.

Như @N0rbert đã đề cập đến giải pháp của anh ấy/cô ấy, điểm yếu chính ở đây là chỉ xảy ra một trường hợp lỗi (chẳng hạn như thiếu repo trong nguồn.list) để tạm dừng toàn bộ hoạt động. Do đó, nếu bạn đang sử dụng một tệp nguồn khác với hệ thống đã tạo đầu vào, giải pháp mà bạn thực hiện trước tiên sẽ cần kiểm tra xem pkg có sẵn cho hệ thống của bạn hay không. Nói chung, lựa chọn của bạn sẽ phụ thuộc vào (các) trường hợp sử dụng dự định của bạn.

Ví dụ: bạn có thể thoát khỏi mà không cần thông qua sed, nhưng trong trường hợp của tôi, tập lệnh sử dụng tee để lưu danh sách vào một tệp và sau đó xử lý thêm bằng cách sử dụng tệp làm đầu vào.Trên thực tế, bản thân danh sách là chủ đề trung tâm của kịch bản đó và một số danh sách khác hoạt động song song với nó.

Một vài lưu ý: Bạn không cần phải lo lắng về việc kiểm tra xem gói đã được cài đặt trên máy của mình hay chưa. Nếu đúng như vậy, apt sẽ đơn giản bỏ qua nó. Ngoài ra, vì rất có thể bạn sẽ cài đặt khá nhiều gói khi chạy, nên bạn nên bắt đầu với cập nhật sudo apt && nâng cấp sudo apt chỉ huy. Điều này sẽ giúp bạn không phải tải xuống một loạt gói chỉ để cuối cùng tải xuống phiên bản mới hơn một chút cho nhiều gói sau đó một chút.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.