Відновлення всіх даних та залежностей від dpkg --set-select '*'


44

Тож я можу працювати на одній машині:

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

На іншій машині:

dpkg --set-selections < selection.txt

... з наступним:

aptitude install
apt-get -u dselect-upgrade

... встановити пакунки, які.

Однак виявляється, що деяка інформація втрачається в процесі, наприклад, чи встановлено пакет (скажімо xyz) автоматично, як залежність від іншого пакету ( abc). Це ви можете бачити, коли ви робите щось подібне apt-get --purge remove abc. На оригінальній машині вам буде повідомлено, що пакет xyzвстановлений як залежність abcі ви можете використовувати його apt-get autoremoveдля позбавлення.

Тепер я знаю , deborphanі debfoster, але вони громіздкі , щоб використовувати , враховуючи (простий) завдання під рукою.

Здається, збереження та відновлення виділених елементів, як показано вище, недостатньо для відновлення тонких залежностей встановлених пакетів.

Чи є спосіб створити резервну копію повного набору метаданих для управління пакунками та відновити їх у повному обсязі?


Я часто замислювався над тим, що я створюю великий скрипт оболонки з "sudo apt-get install" з усіма своїми пакунками (мінус libs). Звичайно, я стикаюся з тією ж проблемою, що і у вас.
Чак Р

Я б здогадався, що найкраще почати шукати - перевірити, чи справді dpkg відповідає за цю інформацію. Якщо це не так, можливо, це влучна робота.
Геккл

3
Якщо ви apt-mark
рухаєтеся

Це не в репо пакеті 10,04, чи не так? Це частина канонічних репостів чи сторонніх?
0xC0000022L

2
Ні, це лише коментар "для вашої інформації". Я б використовував apt-mark (він є частиною apt, тому його вже слід встановити), щоб отримати та встановити позначки для пакетів (детальніше див. Його сторінку сторінки ).
htorque

Відповіді:


39

Резервне копіювання:

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

Відновлення:

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

Дякуємо, збирався попросити вас або Лекенштейн написати це як відповідь.
0xC0000022L

Чи дозволяють ці команди перевстановити програми із цього списку?
Світлана Бєлкін

Чи може це видалити пакунки, які встановлені додатково, після відновлення?
n611x007

1
Чи можете ви пояснити різницю між autoі manual? Дякую.
Анто

Я випадково позначив як посібник купу інших пакетів ... Чи є спосіб повернути? Спасибі
дентекс

2

Вибрана відповідь на це запитання неповна і не працює (або більше не працює). Болісне виправлення полягає у використанні bash for-loop для розбору вихідних * .lst файлів та подачі їх apt install. Однак поганий вибір не буде проілюстрований тут.

Кращим вибором є використання apt-clone, як видно з цієї відповіді на Unix & Linux Stackexchange. Це створює невеликий файл (приблизно 100 Кб або менше для моєї системи). Нібито, він клонує пакети з невеликим зусиллям або болем.

Отже, коротше, на оригінальній машині:

apt-clone clone `uname -n`

Потім на машині для клонування скопіюйте файл клонування та запустіть:

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

Я включаю цю відповідь сюди, оскільки ця сторінка з'явилася в початкових веб-пошуку, але інша відповідь не. Цей спосіб виглядає легше.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.