Выберите, когда файлы будут распакованы при установке файла .deb

#debian #deb #dpkg

#debian #deb #dpkg

Вопрос:

Я создаю пакет Debian, у меня есть 3 основных каталога, которые называются /backup /usr и /var . Я хочу распаковать папку /backup и что-то сделать с содержимым внутри, а затем распаковать остальное (/usr и /var). У меня есть несколько текстовых файлов в папке резервного копирования с информацией о файлах, которые мне нужно создать в каталогах /usr и / var, прежде чем пакет Debian распакует и перезапишет файлы в указанных каталогах.

Комментарии:

1. Не уверен, что понимаю. Этап «Распаковки» заключается в переопределении файлов (из .deb). Кстати /backup , это ужасный выбор каталога [use /var/lib/yourpackage/backup). Я думаю, вам следует либо использовать .deb стандартным способом, либо вам следует подробнее изучить, как это работает. В этом случае, я думаю, вам нужен preinst скрипт для резервного копирования файлов. Создание каталога обычно выполняется раньше.

2. Спасибо за ваш ответ. Независимо от того, где находится каталог резервной копии, проблема, с которой я сталкиваюсь, заключается в том, что preinst срабатывает перед копированием каталогов. Мне нужно, чтобы папка резервной копии присутствовала со своим содержимым до preinst. После этого остальные каталоги должны быть созданы / установлены с его содержимым

3. Вам нужно содержимое резервной копии? Или просто создайте правильные каталоги? Как насчет того, чтобы не устанавливать вещи в /usr, а просто в ваш /var / lib, а затем postisnt переопределит файлы, когда, как вы хотите [но я нахожу это уродливым, потому что теперь у вас нет отслеживания того, какие файлы принадлежат какому пакету]. Мне трудно понять, что вы делаете [так переформулируете]. Вместо резервных копий у вас должны быть оригинальные пакеты для восстановления файлов [обычным способом]

4. Позвольте мне объяснить, мы разрабатываем собственное программное обеспечение. Программное обеспечение устанавливается в /usr/local/x/y/z и в /var/www/html/x/y/z. Я запускаю конвейеры на нашем сервере git для компиляции новых / измененных файлов. Затем мы создаем пакет debian с этими файлами для исправления / обновления до новых версий. Мы считываем файлы, которые были обновлены и изменены в конвейере, и записываем их в текстовый файл. Этот текстовый файл находится в каталоге резервной копии пакета. Я хочу прочитать этот текстовый файл, чтобы сделать резервную копию старых файлов перед заменой новыми. Надеюсь, это имеет больше смысла.

5. Для исполняемого файла я вижу некоторую проблему: как пользователь выбирает, какой патч для установки? И первая установка? Вы должны принудительно запустить основную программу перед исправлениями. Для двоичной части я бы просто распространил пакет со всеми двоичными файлами (мы [Debian] меняем версию пакета, только когда меняем сопровождающего (так что просто метаданные). Диск, сеть дешевы. [/usr/local предназначен для системных администраторов (локальные изменения). /opt может быть лучше для внешних пакетов]. Для html я не знаю, но первый пункт (как обновить, выберите) заставляет меня задуматься. Но, возможно, .deb — не лучший способ развертывания.

Ответ №1:

Похоже, вы пытаетесь переопределить то, что должны делать репозиторий и dpkg.

Если файлы уже находятся в git, какой смысл создавать их резервные копии? Вы могли бы просто сохранить все сгенерированные .debs, когда-либо созданные, и у вас автоматически были бы резервные копии для каждого «снимка».

Если по какой-то причине вы удаляете эти пакеты и все еще хотите создавать резервные копии, я думаю, что было бы проще просто попытаться подключиться с dpkg-repack dpkg помощью хука invoke, чтобы вы могли генерировать .debs удаляет установленные файлы перед установкой новых версий. Если это тоже не сработает, потому что слишком много файлов, которые могут раздуть файл .deb, я полагаю, другим вариантом было бы ввести список непосредственно в сценарий preinst, вместо того, чтобы хранить его в файловой системе, которая, как вы говорите, будет недоступна во время выполнения maintscript. Но TBH, все они, похоже, используют неправильные инструменты для работы.