Estou criando um pacote que depende do pacote ROS ros-noetic-moveit-core. Mais especificamente, ele contém uma biblioteca compartilhada vinculada ao libmoveit_robot_model.so
.
libmoveit_robot_model.so
é um link simbólico para libmoveit_robot_model.so.1.1.7
, então libmoveit_robot_model.so.1.1.7
termina na seção NECESSÁRIO da minha biblioteca compartilhada.
No entanto, quando eu o empacotamos, o dpkg-shlibdeps apenas adiciona ros-noetic-moveit-core
as dependências do shlibs, sem nenhuma informação de versão.
Quando o MoveIt! atualizar para uma versão mais recente, como fez ao atualizar de 1.1.6, a biblioteca libmoveit_robot_model.so.1.1.7
será substituída por libmoveit_robot_model.so.1.1.8
(por exemplo), e meu pacote não será mais vinculado, enquanto o dpkg não verá o conflito.
Como posso ter certeza de que meu pacote informa corretamente suas dependências? Vejo duas soluções:
- Encontre uma maneira de não incluir o sufixo da versão ao vincular para que meu pacote seja compatível com várias versões do MoveIt!, mas não gosto dessa solução (especialmente porque o MoveIt! não fornece um arquivo de símbolos ou um link simbólico com uma versão principal sufixo, como
libmoveit_robot_model.so.1
). - Encontre uma maneira de fazer o dpkg-shlibdeps encontrar a versão usada do MoveIt! então meu pacote é atualizado junto com o MoveIt!.
Se for um erro do MoveIt! empacotador, o que eles podem fazer e o que posso fazer enquanto espero que os pacotes sejam corrigidos?
Mais informações sobre o MoveIt!:
- Estou usando este pacote .deb .
- Não há arquivo .symbols .
- O arquivo /var/lib/dpkg/info/ros-noetic-moveit-core.shlibs contém o seguinte:
#...
libmoveit_robot_model 1.1.7 ros-noetic-moveit-core
#...
Este é realmente um problema de empacotamento (e sem dúvida, um problema de definição de biblioteca). Antes de chegar a isso, aqui está o que você pode fazer para corrigi-lo: você pode especificar sua própria
shlibs
linha, nodebian/shlibs.local
código-fonte do seu pacote ou em/etc/dpkg/shlibs.override
. Adicionar uma linha do formuláriopara vincular seu pacote às versões 1.1.7 do
ros-noetic-moveit-core
pacote.Quanto a
ros-noetic-moveit-core
si, deve enviar suas bibliotecas em um pacote cujo nome reflita o soname do pacote. Se cada versão do pacote não for compatível com versões anteriores, esse nome deve incluir a versão completa (para que seja repetida, no nome do pacote, bem como em seus metadados). Se a versão 1.1.8 deve ser um substituto imediato para 1.1.7, então o soname deve parar em 1.1 ou mesmo 1. O capítulo relevante da Política Debian, que descreve as melhores práticas relevantes não apenas para o Debian, é o capítulo em bibliotecas compartilhadas . Esta nota de rodapé fornece um comando para calcular o nome do pacote apropriado para uma biblioteca.