Cách tạo danh sách các gói đã cài đặt để cài đặt lại dễ dàng / tự động sau khi đĩa được định dạng


8

Tôi sẽ thay đổi hệ thống của mình từ 32 bit thành 64 bit và sẽ giống như tôi đã có trước đây, Debian Squeeze, nhưng tôi không muốn mất các chương trình tôi đã cài đặt trước đó, vì tôi không nhớ tên của tất cả chúng.

Vì vậy, tôi muốn có một lệnh để làm điều này cho tôi, lưu tên của tất cả các chương trình tôi đã cài đặt trên một tệp, nhưng không phải là các chương trình tiêu chuẩn đi kèm với hệ thống và khi tôi sử dụng hệ thống khác, tôi sẽ đề cập đến tên của tập tin và thư mục của bạn cho mọi thứ được cài đặt tự động.

Một câu hỏi nữa: có thể làm điều này với các chương trình được cài đặt thủ công dpkg-i package.debkhông? Nếu vậy, làm thế nào tôi có thể làm điều đó?

Câu trả lời:


7

Bạn đã thử sử dụng dpkg --get-selections >packages? Nếu bạn muốn loại trừ một số gói, bạn có thể chỉnh sửa tệp đầu ra packages. Khi bạn hoàn thành, chuyển nó vào hệ thống đích và nói:

dpkg --set-selections <packages

Và các gói sẽ được đánh dấu để cài đặt. Bạn rất có thể cũng cần phải nói aptitude update; aptitude dist-upgrade.

Câu hỏi khác: nếu các gói đó là các gói i386kiến trúc và bạn đã multiarchcài đặt, bạn có thể cài đặt các .debgói với thông thường dpkg -i package.deb. Nhưng có lẽ tốt hơn là điều tra trên cơ sở từng trường hợp cụ thể và cài đặt các phiên bản 64 bit của các gói có chúng.


Cảm ơn, bạn thực sự đã giúp tôi khi bạn nói về các gói đã được cài đặt trong kiến ​​trúc i386, tôi đã không nghĩ về nó, tôi nghĩ tốt hơn là nên cài đặt lại những gói khác.
Zignd

9

Trên các phiên bản Debian hiện tại, bạn có thể nhận được danh sách các gói được cài đặt rõ ràng với

apt-mark showmanual

Đối với những phiên bản chạy Debian cổ xưa apt-mark showmanualkhông tồn tại hoặc nếu bạn muốn thực hiện các lựa chọn bổ sung, bạn có thể sử dụng năng khiếu.

aptitude search '~i !~M' -F %p >package.list

~iphù hợp với các gói cài đặt; !~Mbỏ qua các gói được cài đặt tự động như một phần phụ thuộc của một số gói khác. -F %pthay đổi định dạng đầu ra để chỉ bao gồm tên gói.

Sau này bạn có thể cài đặt các gói đó với

apt-get install $(cat package.list)

Debian bóp không có apt-mark showmanual, nhưng nó có apt-mark showautoliệt kê các gói được cài đặt tự động. Nếu bạn sử dụng điều này, bạn có thể liệt kê tất cả các gói trên hệ thống cũ dpkg --get-selections >package.list, khôi phục tất cả các gói này và sau đó đánh dấu các gói tự động bằng apt-mark markauto. Đối với trường hợp sử dụng của bạn (32 bit đến 64 bit), cách tiếp cận này có thể để lại một vài thư viện được đánh dấu là thủ công, vì chúng có các tên khác nhau theo các kiến ​​trúc khác nhau.

Lưu ý rằng nếu trường hợp sử dụng là để tái tạo một cài đặt giống hệt nhau, thay vì giữ tập hợp các gói nhưng thay đổi kiến ​​trúc, thì giờ đây có một công cụ gọi là apt-clone (được phân phối trong Debian kể từ khi khò khè) tự động thực hiện mọi thứ.


Thật không may, điều này không hoàn hảo. Khi tôi làm điều này, điều đầu tiên được liệt kê là "acl", mà tôi không tải rõ ràng. Nhìn vào ndepends, có vẻ như systemd phụ thuộc vào điều này và trong Debian 8 đã được cài đặt. Và, systemd cũng nằm trong danh sách này. Vì vậy, mặc dù systemd và acl đã được cài đặt, aptitude không xác định chúng là "tự động". Đây có thể là một thiếu sót trong năng khiếu?
Liam

@Liam Tôi nghĩ rằng trình cài đặt không đánh dấu bất kỳ gói nào là tự động. Ngay cả nếu nó đã làm, điều này có ý nghĩa đối với các thư viện, một gói như aclcó thể được coi là một phần quan trọng của hệ thống cơ sở và do đó sẽ được đánh dấu là cài đặt thủ công. Đó là một cách thủ công, được cài đặt bởi trình cài đặt ban đầu chứ không phải bởi người dùng, nhưng ngay cả như vậy, ý nghĩa của việc cài đặt tự động, là một cách an toàn, bạn có thể loại bỏ điều này nếu nó không phá vỡ các phụ thuộc và các gói cơ bản cần thiết để thực hiện hệ thống hoạt động đúng không phù hợp với hóa đơn.
Gilles 'SO- ngừng trở nên xấu xa'

1

Tôi không thấy một cách đơn giản, tiêu chuẩn để làm như vậy. Tôi e rằng bạn sẽ phải loay hoay với dpkgcác bản ghi và tùy chọn, bởi vì dpkgkhông phân biệt "các chương trình tiêu chuẩn đi kèm với hệ thống" và các chương trình khác.

KHÔNG ĐƯỢC NÓI CHUYỆN NÀY , tôi thích làm cho nó rõ ràng bằng cách sử dụng văn bản viết hoa đậm , nhưng bạn có thể làm một cái gì đó như thế này

  • Trích xuất danh sách các phần mềm được cài đặt từ các /var/log/dpkg.log*tập tin.

  • Loại bỏ những người đã cài đặt trong quá trình cài đặt hệ thống. (Sử dụng thời gian cài đặt để phát hiện chúng)

  • Lưu danh sách ở dpkg --get-selectionsđịnh dạng

Et voilà! Khi hệ thống của bạn hoạt động và chạy, hãy cài đặt lại chương trình của bạn với

 apt-get update
 dpkg --set-selections < yourSelection
 apt-get -u dselect-upgrade
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.