Как подделать установленную версию пакета?

23

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

Если я использую dpkg -i --force-depends-versionдля установки зависимых пакетов, все работает нормально, я никогда не видел проблемы.

Вместо того, чтобы вручную загружать и устанавливать каждый пакет, могу ли я сделать так, чтобы система делала вид, что при установке более новой версии установлена ​​конкретная версия пакета? Или есть --force-depends-versionэквивалент ключа для apt-get?

Иван
источник

Ответы:

16

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

радостный
источник
Пока этого достаточно. Но ссылка может оборваться рано или поздно. Лучше иметь хотя бы возобновленную инструкцию в ответе. Мой ответ может помочь здесь askubuntu.com/a/1181415/26246 . Таким образом, мы можем сослаться на этот вопрос, который имеет более высокий голос относительно эквивалентов.
user.dz
23

Несмотря на то, что ответ уже принят, вставка принятого лучше передает процесс:

  1. Существует пакет Debian, equivsкоторый может создавать фиктивные пакеты. Установите его, запустивsudo apt-get install -y equivs

  2. После установки вы создаете шаблон «управляющего» файла с помощью следующей команды: equivs-control postfix(замените postfixна имя вашего пакета). В моем случае я мог бы использовать альтернативное имя пакета, например, postfix-customили как угодно, но мой пользовательский пакет был выполнен или Providesзависел от установки postfix(снова заменив postfixлюбой пакет, который вы хотите.

  3. После создания файла управления шаблоном я обычно удаляю много закомментированных операторов (операторов, которые начинаются с #). Одно из них, которое я хотел бы сохранить, - это Provides:утверждение, в котором я могу сказать, что мой пакет предоставляет возможности, предлагаемые другим пакетом, который я пытаюсь подделать, например, Provides: postfixсообщает механизму разрешения зависимостей Debian / Ubuntu, что мой пакет - с любым именем - обеспечивает те же возможности целевого пакета, снова postfixили что-то еще. Это позволяет мне называть свой пакет независимо от целевого пакета, чтобы избежать путаницы. Erlang Factory делает это со своими вещами, например, esl-erlangпредоставляет erlang.

  4. Наконец, после создания файла управления шаблоном вы используете equivs-buildдля создания поддельный пакет, например equivs-build /path/to/generated/control/file.

  5. Сборка пакета занимает несколько секунд, а затем вы можете запустить sudo dpkg -i my_package_name*.deb

Для опытных пользователей, если ваш файл управления шаблоном имеет Requires:строку зависимостей, вы можете использовать инструмент, подобный gdebiдля установки вашего пакета, а также различных пакетов, которые он объявляет как зависимости.

Джонатан Оливер
источник