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

19

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

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

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

    
задан Ivan 20.12.2010 в 01:44
источник

2 ответа

15

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

    
ответ дан frabjous 20.12.2010 в 01:49
источник
13

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

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

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

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

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

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

    
ответ дан Jonathan Oliver 03.08.2015 в 18:41