Khôi phục tất cả dữ liệu và phụ thuộc từ dpkg - bộ lựa chọn '*'


44

Vì vậy, tôi có thể chạy trên một máy:

dpkg --get-selections '*' > selection.txt

Trên máy khác:

dpkg --set-selections < selection.txt

... theo sau là một trong những điều sau đây:

aptitude install
apt-get -u dselect-upgrade

... Để cài đặt các gói đó.

Tuy nhiên, có vẻ như một số thông tin bị mất trong quá trình, chẳng hạn như liệu một gói (nói xyz) có được cài đặt tự động như là sự phụ thuộc của gói khác ( abc) hay không. Bạn có thể thấy rằng bất cứ khi nào bạn làm một cái gì đó như apt-get --purge remove abc. Trên máy ban đầu, bạn sẽ được thông báo rằng gói xyzđã được cài đặt dưới dạng phụ thuộc abcvà bạn có thể sử dụng apt-get autoremoveđể thoát khỏi gói đó.

Bây giờ tôi nhận thức được deborphandebfoster, nhưng chúng cồng kềnh khi sử dụng với nhiệm vụ (đơn giản) trong tay.

Có vẻ như việc lưu và khôi phục các lựa chọn như hiển thị ở trên là không đủ để khôi phục các phụ thuộc tinh tế của các gói đã cài đặt.

Có cách nào để sao lưu toàn bộ bộ siêu dữ liệu để quản lý gói và khôi phục toàn bộ sau đó không?


Tôi thường tự hỏi điều tương tự tôi tạo ra một tập lệnh shell lớn với 'sudo apt-get install' với tất cả các gói của tôi (trừ libs). Tất nhiên, tôi gặp phải vấn đề tương tự bạn đang gặp phải.
Chuck R

Tôi đoán rằng nơi tốt nhất để bắt đầu tìm kiếm sẽ là kiểm tra xem dpkg có thực sự chịu trách nhiệm về thông tin đó không. Nếu không thì có lẽ đó là công việc của apt.
Huckle

3
Nếu bạn đang đi theo cách thủ công, bạn có thể quan tâm đến apt-markviệc lưu / khôi phục thông tin về các gói tự động so với các gói được cài đặt thủ công
Lekensteyn

Nó không có trong repo gói 10.04 phải không? Đây có phải là một phần của repos Canonical hoặc bên thứ ba không?
0xC0000022L

2
Không, đó chỉ là một nhận xét "cho thông tin của bạn". Tôi sẽ sử dụng apt-mark (nó là một phần của apt, vì vậy nó đã được cài đặt) để lấy và đặt các dấu cho các gói (xem trang chủ của nó để biết chi tiết).
htorque

Câu trả lời:


39

Sao lưu:

apt-mark showauto > pkgs_auto.lst
apt-mark showmanual > pkgs_manual.lst

Khôi phục:

sudo apt-mark auto $(cat pkgs_auto.lst)
sudo apt-mark manual $(cat pkgs_manual.lst)

Cảm ơn, đã định yêu cầu bạn hoặc Lekensteyn viết nó lên như một câu trả lời.
0xC0000022L

Các lệnh này có cho phép bạn cài đặt lại các chương trình từ danh sách đó không?
Svetlana Belkin

điều này có thể loại bỏ các gói được cài đặt thêm, lúc phục hồi?
n611x007

1
Bạn có thể giải thích sự khác biệt giữa automanual? Cảm ơn.
Anto

Tôi vô tình đánh dấu là thủ công một loạt các gói khác ... có cách nào để hoàn nguyên không? Cảm ơn
dentex

2

Câu trả lời được chọn cho câu hỏi này không đầy đủ và không (hoặc không còn) hoạt động. Cách khắc phục đau đớn là sử dụng bash for-loop để phân tích các tệp * .lst đầu ra và đưa chúng vào apt install. Tuy nhiên, sự lựa chọn tồi, vì vậy sẽ không được minh họa ở đây.

Một lựa chọn tốt hơn là sử dụng apt-clone, như đã thấy trong câu trả lời này trên Unix & Linux Stackexchange. Điều này tạo ra một tệp nhỏ (khoảng 100K trở xuống cho hệ thống của tôi). Bị cáo buộc, nó sẽ nhân bản các gói với ít nỗ lực hoặc đau đớn.

Vì vậy, trong ngắn hạn, trên máy ban đầu:

apt-clone clone `uname -n`

Sau đó, trên máy để sao chép, sao chép tệp bản sao và chạy:

apt-clone restore original-machine-name.apt-clone.tar.gz

Tôi bao gồm câu trả lời này ở đây vì trang này xuất hiện trong các tìm kiếm trên web ban đầu, nhưng câu trả lời khác thì không. Phương pháp này có vẻ dễ dàng hơn.

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.