Как я копирую установленные выборы пакета от одной системы Debian до другого? (Хрипящий Debian)

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

Обычно, когда Вы запускаете стандарт ssh сессия Вы получаете процесс оболочки, который является корневым процессом для всех программ, которые Вы запускаете. Если ssh сессия завершается, ядро уничтожает все дочерние процессы также. (Вот почему люди обычно используют screen или сопоставимые вещи сохранить сессии.)

Таким образом, самая легкая вещь для Вас состояла бы в том, чтобы использовать это поведение по умолчанию. Взгляните на ps axjf проверять что ztailкорневой процесс, затем выясните, почему он переживает завершенный ssh сессия.

19
13.04.2017, 15:22
1 ответ

Чтобы клонировать установку Debian, используйте утилиту apt-clone . Она доступна (как отдельный пакет, не входит в установку по умолчанию) в Debian с 12.04 в wheezy и в Ubuntu. На существующей машине запустите

apt-clone clone foo

и получите файл foo.apt-clone.tar.gz. Скопируйте его на целевую машину и запустите

apt-get install apt-clone
apt-clone restore foo.apt-clone.tar.gz

Если вы работаете со старой системой, где apt-clone недоступен, или если вы хотите просто скопировать список установленных пакетов, но не конфигурационный файл, вот шаги, описанные в руководстве.

  • На исходной машине:

    cat /etc/apt/sources.list /etc/apt/sources.list.d >sources.list.
    dpkg - get-selections >selections.list
    apt-mark showauto >auto.list
    
  • На целевой машине:

    cp sources.list /etc/apt/
    своевременное получение обновлений
    /usr/lib/dpkg/methods/apt/update /var/lib/dpkg/
    dpkg --set-selections 

Я считаю, что на тебя повлияла несовместимая смена dpkg, которая сначала сделала его хрипящим. Смотри жучок #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 выполните следующую команду:

apt-cache dumpavail >/tmp/apt.avail
dpkg --merge-avail /tmp/apt.avail

Начиная с jessie, вы можете упростить это до

apt-cache dumpavail | dpkg --merge-avail

Альтернативно, запустите

/usr/lib/dpkg/methods/apt/update /var/lib/dpkg/

или даже проще

apt-get install dctrl-tools
sync-available

Другой простой метод, который не требует установки дополнительного пакета, но загрузит списки пакетов снова, это

dselect update

Смотрите dpkg FAQ для получения дополнительной информации. (Об этом упоминается на странице dpkg man, но больше способом, напоминающим о проблеме, если вы уже знаете, а не способом, объясняющим, как решить проблему!)

Обратите внимание, что клонирование установки пакета с помощью dpkg --set-selections не восстанавливает автоматическую/ручную пометку в APT. Смотрите Восстановление всех данных и зависимостей из dpkg --set-selections '*' для более подробной информации. Вы можете сохранить метки на исходной системе с помощью

apt-mark showauto >auto.list

и восстановить их на целевой системе с помощью

xargs apt-mark auto <auto.list
17
27.01.2020, 19:45

Теги

Похожие вопросы