Я пытаюсь настроить промежуточную среду на виртуальной машине, чтобы протестировать обновления, прежде чем применять их в моей основной системе.
Для этого я выполнил базовую установку Debian Wheezy (так же, как в основной системе) на виртуальной машине, затем запустил ее с правами root:
# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh me@main-system 'dpkg --get-selections | grep -v deinstall' | \
dpkg --set-selections
В моем случае, к сожалению, нужна архитектура i386; система amd64 родная.
Проблема с dpkg --set-selections
запуском в ВМ. У меня есть некоторые пакеты, которые требуют особой обработки (это на самом деле главная причина, по которой я в первую очередь хочу промежуточную среду), но когда я запускаю последнюю команду, приведенную выше, я получаю около тысячи строк вывода, например:
dpkg: warning: package not in database at line NNN: package-name
для пакетов, которые действительно должны быть доступны в базовой системе. Примеры включают в себя xterm
, yelp
и zip
.
Теперь на мой вопрос:
Каков конкретный процесс переноса списка выбора пакетов из одной системы Debian в другую (при условии того же уровня выпуска Debian в Wheezy) и последующего применения этих изменений? Цель состоит в том, чтобы у обоих был один и тот же список установленных пакетов, в идеале такой, чтобы выполнение diff
между выходами dpkg --get-selections
или dpkg --list
на двух возвращалось без различий.
Эта grep -v deinstall
часть заимствована из пакета Prevent для удаления после выполнения операцииdpkg --set-selections
над Ask Ubuntu.
Я изменил источник в ВМ, чтобы он был таким же, как в основной системе, а также установил apt-transport-https
:
deb https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb [arch=amd64] http://archive.zfsonlinux.org/debian wheezy main
Глядя на вывод --set-selections, я вижу:
dpkg: warning: package not in database at line 1: a2ps
dpkg: warning: package not in database at line 1: abiword
dpkg: warning: package not in database at line 1: abiword-common
dpkg: warning: package not in database at line 1: abiword-plugin-grammar
dpkg: warning: package not in database at line 1: abiword-plugin-mathview
dpkg: warning: package not in database at line 1: accountsservice
dpkg: warning: package not in database at line 1: acl
dpkg: warning: package not in database at line 4: aglfn
dpkg: warning: package not in database at line 4: aisleriot
dpkg: warning: package not in database at line 4: alacarte
dpkg: warning: package not in database at line 4: alien
...
Номера строк выглядели странно, и соответствующая часть вывода --get-selections:
a2ps install
abiword install
abiword-common install
abiword-plugin-grammar install
abiword-plugin-mathview install
accountsservice install
acl install
acpi-support-base install
acpid install
adduser install
aglfn install
aisleriot install
alacarte install
alien install
Обратите внимание, что между acl
и aglfn
есть acpi-support-base
, acpid
и adduser
для которых нет сообщений об ошибках . Похоже, что пакеты, для которых сообщается об ошибках, либо un
соответствуют dpkg -l
, либо dpkg -l
не имеют о них никакого представления ( dpkg-query: no packages found matching ...
). Я знаю, что есть несколько локально установленных пакетов, но не так много. i386
отображается не gcc-4.7-base:i386 install
намного дальше вниз по списку (строка 342 в выводе --get-selections).
dpkg --get-selections … | … dpkg --set-selections
способ репликации выбранных пакетов Если это не помогло вам, вам нужно будет предоставить больше информации о том, почему. Разместите свой полный набор источников в обеих системах, выходные данныеdpkg --get-selections
и полную расшифровкуdpkg --get-selections
(возможно, мы сможем определить образец, посмотрев, что работает, а что нет). Если основная система amd64 или i386? Это работает, если вы не добавите архитектуру i386?dpkg --get-selections
(и я полагаю, вы имели в видуdpkg --set-selections
расшифровку стенограммы?)? Даже первый из них содержит более 3600 строк и около 100 КБ./var/lib/dpkg/Packages
(которая еще длиннее) также может быть полезной - это может быть признаком испорченного файла Packages.Ответы:
Чтобы клонировать установку Debian, используйте
apt-clone
утилиту. Он доступен (как отдельный пакет, не является частью установки по умолчанию) в Debian начиная с wheezy и в Ubuntu с 12.04. На существующей машине запуститеЭто создает файл
foo.apt-clone.tar.gz
. Скопируйте его на целевой компьютер и запуститеЕсли вы работаете со старой системой,
apt-clone
которая недоступна, или если вы просто хотите скопировать список установленных пакетов, но не какой-либо файл конфигурации, выполните шаги вручную.На исходном компьютере:
На целевой машине:
Я полагаю, что на вас повлияло несовместимое изменение в dpkg, которое сначала превратило его в wheezy. Смотрите ошибка # 703092 для фона.
Короткая история заключается в том, что
dpkg --set-selections
теперь принимаются только имена пакетов, которые присутствуют в файле/var/lib/dpkg/status
или/var/lib/dpkg/available
. Если вы используете APT только для управления пакетами, как и большинство людей,/var/lib/dpkg/available
это не обновляется.После запуска
apt-get update
и перед запускомdpkg --set-selections
иapt-get -u dselect-upgrade
выполните следующую команду:С Джесси, вы можете упростить это до
Или запустить
или даже проще
Другой простой метод, который не требует установки дополнительного пакета, но будет загружать списки пакетов снова:
См. Dpkg FAQ для получения дополнительной информации. (Это упомянуто на странице справки dpkg, но в большей степени напоминает вам о проблеме, если вы уже знали, а не объясняет, как решить проблему!)
Обратите внимание, что клонирование установки пакета с помощью
dpkg --set-selections
не восстанавливает автоматическую / ручную отметку в APT. См. Восстановление всех данных и зависимостей из dpkg --set-selections '*' для получения более подробной информации. Вы можете сохранить отметки в исходной системе с помощьюи восстановить их в целевой системе с
источник
dpkg --set-selections
с момента pre-wheezy!--set-selections
. Теперь, как я могу применить изменения? Дажеapt-get -u dist-upgrade
упоминается лишь несколько пакетов (все связанные с ZFS), в которых должны быть затронуты сотни, если не тысячи пакетов.apt-get -u dselect-upgrade
Как я это сделал
На исходном хосте:
заботиться о том,
/etc/apt/sources.list.d
если используется ...Затем скопируйте
source.sel
файл на хост назначения.На хосте назначения :
адаптировать sources.list даже с разными зеркалами, но с тем же списком компонентов .
И теперь, мой целевой хост в настоящее время устанавливает много вещей, тогда я мог бы занять некоторое время для публикации этого.
источник