Назад | Перейти на главную страницу

Вычислить список различий между пакетами, установленными на двух хостах

Я просто добавляю несколько проблем с моими виртуальными серверами Debian и добавляю, чтобы переустановить их все с нуля. Однако у меня все еще был доступ к старой версии, и я мог получить список установленных пакетов.

Чтобы облегчить процесс восстановления виртуального сервера в будущем, я хотел бы создать список конкретных пакетов для каждого моего сервера.

Чтобы лучше объяснить, чего я хочу достичь. У меня уже есть автоматизированный процесс создания нового виртуального сервера с некоторыми базовыми пакетами и конфигурацией, которые используются повсюду. Теперь я хочу сохранить дельту с этим «скелетом», чтобы упростить переустановку конкретного сервера.

Настоящим плюсом будет также сохранение измененных файлов конфигурации по умолчанию, но я могу жить только со списком пакетов.

Короче говоря, мне нужен способ создать список пакетов, установленных на одном хосте, но не на другом.

Будет действительно здорово, если список будет содержать только установленные вручную пакеты, а не список всех зависимостей.

Если у вас есть какие-то существующие инструменты, предназначенные для решения этой конкретной задачи, не стесняйтесь предлагать их, но я хочу, чтобы зависимость была как можно меньше. Для информации, это не совсем виртуальные серверы, а контейнеры LXC.

По эталонной установке (только один раз):

dpkg-query -W -f='${Package}\n' | sort > baselist.txt

(Следующее предполагает bash)

Чтобы получить пакеты, добавленные из эталонной установки (здесь не показано, что было удалено):

comm -1 -3 baselist.txt <(dpkg-query -W -f='${Package}\n' | sort)

Еще лучше, избегая копирования baselist.txt:

comm -1 -3 <(ssh user@refserver cat /path/to/baselist.txt) <(dpkg-query -W -f='${Package}\n' | sort)

на старом сервере запустите:

dpkg --get-selections> список старых пакетов

скопируйте указанный выше файл на новый сервер и запустите его на новом сервере:

dpkg --set-selections <список старых пакетов

apt-get update

dselect обновить

Также не забудьте добавить все дополнительные репозитории из /etc/apt/sources.list также со старого сервера на новый, перед этим переносом пакетов, как если бы вы этого не сделали, большинство пакетов останется неустановленным.

Чертеж разработан именно для ваших нужд. Он выводит описание установленных пакетов и файлов конфигурации, которые были изменены. Эти описания можно преобразовать в сценарии Puppet или Chef, чтобы применить их к чистым коробкам.

Вы можете использовать следующую команду, чтобы получить полный список пакетов на обоих серверах:

     dpkg -l | sort > old_file
     dpkg -l | sort > new_file

Затем вы можете получить различия, используя:

     diff -Nur old_file new_file > changes.txt

Вы можете отфильтровать необходимые изменения с помощью grep. Кроме того, diff можно использовать для получения изменений в файлах конфигурации и создания исправлений, которые будут применены при необходимости. Кстати, diff может сравнивать две папки, а не только два файла.

Также нашел этот полезный пакет, описание которого выглядит следующим образом:

Сценарий Bash, который сравнивает дерево файловой системы пакета Debian с деревом текущей файловой системы, распечатывая унифицированные различия для разных файлов.

https://code.google.com/p/dpkg-diffs/

Просто один файл bash, который вы можете вставить где-нибудь в свой PATH и запустить - кажется, работает для меня, и он не слишком старый.

Надеюсь, это кому-то поможет.