Имам два пакета от една и съща библиотека, но с много различни API. Всяка от тези библиотечни версии трябва да има свой собствен пакет, напр. lib1.deb и lib2.deb. Не искам да преименувам всички библиотеки и заглавки, за да ги направя съвместно съществуващи, но тогава някои библиотеки/заглавки ще имат един и същ път/презаписват взаимно. В "контролен" файл, когато f.i. генериране на пакет с debuild, мога ли по някакъв начин да укажа пакет, който не трябва да се инсталира едновременно с инсталирането на другия ми пакет? Би било хубаво, ако когато се опитвате да инсталирате package2, този apt автоматично иска да премахне package1. Мисля, че вече видях нещо подобно при инсталиране на пакети.
Мога ли да добавя нещо като анти-зависимост към пакет на debian?
Отговори (2)
Все пак трябва да обмислите възможността за съвместно инсталиране на тези пакети (само си представете, трябва да инсталирате графична програма и apt
иска да премахне целия ви мрежов стек, само защото някой "умен" поддържащ пакети е решил, че е много по-лесно да постави Conflicts
отколкото за разрешаване на проблема).
Обикновено не е толкова трудно:
поставете всички заглавни файлове в специфични за библиотеката поддиректории, напр.
/usr/include/lib1/
респ./usr/include/lib2/
(всяка добре написана библиотека трябва да предоставя pkg-config файл, който така или иначе трябва да се актуализира).обикновено библиотечните файлове са малко, предимно 3 (
libfoo.so.x.y
,libfoo.so.x
,libfoo.x
). преименуването им поотделно трябва да е достатъчно лесно. (и отново актуализирайте вашия pkg-config файл, за да отразите промяната на името).
И накрая: „два пакета от една и съща библиотека, но с много различни API“ звучи като много лоша идея като цяло. защо те са същата библиотека, ако нямат същия API/ABI?
О, и ако става въпрос само за (несъвместими) версии, това обикновено се третира като:
libfoo3
е пакетът отlibfoo
с ABI-версия 3, напр. той предоставя/usr/lib/libfoo.so.3.14
и/usr/lib/libfoo.so.3
, което е символна връзка към първотоlibfoo7
is the package oflibfoo
with ABI-version 7 e.g. it provides/usr/lib/libfoo.so.7.42
and/usr/lib/libfoo.so.7
which is a symlink to the former)libfoo-dev
is the development package, which provides the headers and a symlink/usr/lib/libfoo.so
to the correct ABI soname (/usr/lib/libfoo.so.3
resp/usr/lib/libfoo.so.7
). this package has aDepends
on the correctlibfooX
, using an exact version specifier.
Можете да имате инсталирана само една версия на libfoo-dev
(тъй като apt
забранява един пакет да бъде инсталиран многократно). Можете обаче да имате едновременно инсталирани libfoo3
и libfoo7
(което е важно за приложенията, които го използват).
lib*-dev
) на двете версии да могат да се инсталират съвместно, можете, разбира се, libfoo3-dev
. има редица пакети, които правят това (apt-cache search lib*[0-9]-dev
), но това не е много често срещан модел. що се отнася до включващите пътища, съществуват и двете конвенции (просто проверете вашия /usr/include
път - например тук намирам и /usr/include/harfbuzz
, и /usr/include/libsoup-2.4/
). ако суфиксът на номер на версията е специфичен за вашия пакет, мисля, че е обичайно да се използва тире: /usr/include/foo-3
- person umläute; 30.01.2018
Хм, намерих публикация в stackexchange, обхващаща това https://unix.stackexchange.com/a/393243
има ключови думи "Прекъсвания" и "Конфликти", изглеждащи https://www.debian.org/doc/debian-policy/#conflicting-binary-packages-conflicts