rpm: что определяет, будет ли пакет обновлять предыдущий или устанавливаться дополнительно

rpm: что определяет, будет ли пакет обновлять предыдущий или устанавливаться дополнительно

Это просто путь установки? Если это так, то любой пакет, имеющий версию в имени/пути, никогда не обновит другой, так что это не может быть так. Я не вижу упоминания об этом в информации о зависимостях вручную. При создании RPM, как мне сообщить cAPI-3.1.6-x86_64.rpm, что он должен обновить cAPI-2.1.7-x86_64.rpm, когда я его устанавливаю, а не создавать новый путь в /usr/lib и игнорировать существующий пакет?

решение1

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

Место, где следует искать информацию, — это не «обновление», аустановка нескольких версийиз пакета:

Несколько установленных версий(на rpm.org) дает хороший обзор:

Все инструменты управления пакетами работают с использованием определенных ключей для ссылки на пакеты/программы. Обычно этот ключ — package имя или пакет имя и пакет арка

То есть, есть два варианта (обычно): имя пакета само по себе или имя пакета в сочетании с архитектурой. Далее говорится

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

То есть ядра обрабатываются по-особому, поскольку известно (разработчикам пакетов), что все файлы в пакете ядра Linux имеют разные имена (либо имена файлов имеют встроенную версию, либо файлы находятся в каталогах со встроенной версией). Это один особый случай. Слишком много особых случаев усложняют работу для сопровождающих RPM.

Далее показано, как пакеты для программ с долгосрочно стабильными версиями создаются с использованием этих номеров версий как части пакета.имя, тем самым позволяя устанавливать несколько версий программы на одной машине. Приведенный пример относится к python. Другие программы, которые вы можете увидеть, используют ту же схему, включают apache, autoconf, gcc, java. Вот несколько примеров из Fedora22:

SDL2-2.0.3-5.fc22.x86_64
openjpeg2-2.1.0-6.fc22.x86_64
pygobject2-2.28.6-13.fc22.x86_64
pygobject3-3.16.2-1.fc22.x86_64
pygobject3-base-3.16.2-1.fc22.x86_64
python3-3.4.2-6.fc22.x86_64
qt5-qtbase-5.5.0-15.fc22.x86_64
vte291-0.40.2-1.fc22.x86_64
vte3-0.36.4-1.fc22.x86_64
webkitgtk3-2.4.9-1.fc22.x86_64
webkitgtk4-2.8.5-2.fc22.x86_64

Когда вы видите эти пакеты, легко запутаться, какие цифры являются частью названия пакета, а какие — его частью.версияивыпускать. RPM использует тире ( -) для их разделения: если тире нет, то число является частью имени.

решение2

Это %{name}.%{arch}комбинация. Если она одинаковая, то это обновление. Если она отличается, то это другая установка.

То есть вы можете иметь cAPI-3.1.6-x86_64и cAPI-3.1.6-i386установленными одновременно. Но вы не можете иметь cAPI-3.1.6-x86_64и cAPI-2.1.7-x86_64на одной системе (если вы не делаете действительно грязных трюков).

Связанный контент