Упаковка Debian: как предотвратить ошибку "попытка перезаписи"
У меня есть два пакета Debian, которые ранее были сделаны в нашем внутреннем репозитории. Они оба используют один и тот же исходный код, но скомпилированы с определенной опцией, создавая два отдельных двоичных файла с одинаковыми библиотеками. Они должны быть установлены на отдельных серверах
Поэтому эти два пакета не могут быть установлены одновременно, потому что они пытаются установить одни и те же библиотеки, что приводит к ошибке dpkg "пытается перезаписать /my/lib".
Проблема: мне нужно установить их на одном сервере.
Вопрос: какую модификацию я должен добавить, чтобы сделать их совместимыми?
Несколько ведет:
Создайте 3-й пакет из того же источника, скомпилировав весь источник вместо двух отдельных (но я думаю, что это грязный способ)
Найдите вариант, чтобы сказать, что эти два пакета могут идти вместе (но я не знаю, существует ли он)
Создайте "пакет-общий" пакет, содержащий библиотеки libs, man-страницы и т. Д., От которых будут зависеть другие 2 пакета. (но я понятия не имею, как таким образом скомпилировать исходный код)
Я понимаю, что этот вопрос довольно сложно объяснить, особенно на плохом английском, но я надеюсь, что вы дадите мне несколько подсказок:)
Спасибо сообществу!
2 ответа
Ваш третий вариант является наиболее распространенным. Часто вы увидите, что он называется -common или -base. Это делается во многих местах для предоставления отдельных библиотечных пакетов, а также пакетов документов или дополнений. По сути, вы создаете несколько пакетов из одного источника. Большинство пакетов -doc и -common, а также множество пакетов lib* создаются таким образом.
например
package-base
package-option1
package-option2
Пакет-опция1 и пакет-опция2 зависят от базы пакета. Это самый лучший и безопасный способ сделать это. В репозиториях пакетов Debian / Ubuntu есть множество примеров этого - apache2, php5, dhcp3, nagios3, vim
dh_make имеет поддержку для создания этих библиотечных пакетов или нескольких двоичных пакетов из одного источника, стоит проверить.
Общий метод базового пакета, описанный Филом, вероятно, является лучшим вариантом, однако, если вы пометите один пакет как заменяющий другой, он позволит пакету B перезаписать файлы, принадлежащие пакету A. Конечно, это скорее быстрое исправление, чем долгосрочное решение.