Làm cách nào tôi có thể lọc được dpkg - quên-lựa chọn để chỉ các gói có sẵn trong kho?


9

Tôi muốn có một danh sách các gói được cài đặt trên một hệ thống và cài đặt tất cả chúng trên một hệ thống khác.

Tôi biết rằng dpkg --get-selectionscó thể cung cấp cho tôi một danh sách tất cả các gói đã cài đặt mà tôi có thể đưa dpkg --set-selectionsvào hệ thống đích. Tuy nhiên, một số gói được cài đặt là những gói mà tôi tự xây dựng cục bộ (sử dụng ví dụ như checkinstall) và không có sẵn trong kho. Các dpkg --set-selectionsquá trình sẽ thất bại khi nó không thể tìm thấy những gói trong kho.

Vậy có cách nào để tôi có thể lọc danh sách được tạo bởi dpkg --get-selectionsnó chỉ chứa các gói có phiên bản hiện được cài đặt sẵn trong kho hiện tại của tôi không?

Câu trả lời:


9

Tôi tin rằng Trung tâm phần mềm có một tính năng để đồng bộ hóa giữa các máy tính ngày nay. Nếu xử lý các gói bị thiếu một cách chính xác, nó có thể giải quyết vấn đề của bạn.

Vấn đề ở đây là dpkgkhông biết về kho, chỉ có các gói đã cài đặt. Bạn có thể tìm hiểu xem một gói có sẵn trong kho lưu trữ bằng cách chạy apt-cache policy $package. Nếu bạn thấy một kho lưu trữ trong Version Tableđó, nó có sẵn ở đó.

Vì vậy, làm thế nào về điều này? Nó chậm, nhưng nên hoạt động:

dpkg --get-selections '*' \
  | while read line; do
    apt-cache policy $(echo "$line" | cut -f1 ) \
      | grep -q 'http://' \
      && echo "$line"
done

Điều này sẽ hiển thị tiến trình và ghi vào một tệp:total=$(dpkg --get-selections '*'|wc -l); i=0; dpkg --get-selections '*' | while read line; do i=$(($i+1)); apt-cache policy $(echo "$line" | cut -f1 ) | grep -q 'http://' && echo "$i/$total $line"; echo $line>>/var/tmp/dpkg-selection.list; done
rubo77

-4

Sử dụng lệnh sau

dpkg --get-selections > installed-software

nó sẽ tạo một tập tin gọi là phần mềm đã cài đặt trong thư mục nhà của bạn

trên hệ thống mới

dpkg --set-selections < installed-software

Điều này sẽ đọc lựa chọn và cài đặt


3
Tôi không nghĩ bạn đọc câu hỏi.
Ryan C. Thompson
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.