Como posso manter duas versões do mesmo pacote no archlinux?

8

Estou executando o Archlinux. Recentemente, um dos pacotes nomeados icufoi atualizado; no entanto, o Firefox depende libicuuc.so.56, enquanto R depende libicuuc.so.55. Como posso resolver este problema?

Nota: o pacote R foi construído contra o Intel MKLlibiary, portanto, não funciona na nova versão das dependências. Eu tentei reconstruir o R ​​- ainda depende do antigolibicuuc.so.55

usuario
fonte
2
Tais coisas não devem acontecer com o repo oficial. Apenas se você não tiver totalmente atualizado, pois atualizações parciais não são suportadas pelo release do archlinux. Se for realmente assim (em um sistema totalmente atualizado), você deverá registrar um erro.
bvolkmer

Respostas:

6

Presumo que você deseja executar um executável específico com a biblioteca antiga. Vamos chamar o executável myprogram.

Se você colocar libicuuc.so.55em um diretório diferente, por exemplo, como /opt/oldlibs/libicuuc.so.55é possível instruir o myprogramuso da biblioteca antiga com um comando como este:

LD_LIBRARY_PATH=/opt/oldlibs myprogram

Os arquivos da biblioteca podem ser extraídos do arquivo do pacote (que você provavelmente pode encontrar em /var/cache/pacman/pkg).

Se isso não resolver o problema de como você pretende usar o aplicativo, considere executá-lo em um chroot ou contêiner.

Alexander
fonte
1
Tendo a mistura de experiência entre * BSD e Linux, penso duas vezes entre chamá-lo de prisão ou chroot. O nome real não é jail e chroot o comando para alcançá-lo? Caso contrário, excelente resposta, senhor.
Rui F Ribeiro
@RuiFRibeiro Acho que "prisão" é o termo comum em * BSD (e eles se comportam de maneira diferente de chroots, pois são mais seguros), enquanto eu acho que "chroot" é mais comumente usado no Linux. Acredito que o equivalente a cadeias BSD no Linux, em termos de segurança, seria o Linux Containers. Obrigado pela contribuição.
Alexander
1
Obrigado pela sua resposta, isso funciona. Gostaria de salientar que eu coloquei /opt/oldlibs/em /etc/ld.so.conf.d/R.conf. (O R.confarquivo já está lá, com Ro caminho padrão da lib.) #
196 Nick Nick
0

minha experiência com o arch linux

systemctl start mongodb dar erro de início do processo

Eu simplesmente apertei journalctl -xe para verificar o log atual

mostra falta do libboost_system.so.1.64.1 (antigo)

é um sumlink eu resolvo usando

readlink -f /lib/libboost_system.so.1.65.1  (new one)

readlink diga-me o ponto de ligação simbólica para /usr/lib/libboost_system.so.1.65.1

eu extraio o boost-libs 1.64 de / var / cache / pacman / pkg e colo todos os arquivos / lib em / usr / lib e também pulo para substituir o arquivo antigo

isso me resolve quebrar dependências ainda mais trabalho, se não resolver fazer um link simbólico de falta como

 ln -s /lib/libboost_system.so.1.64.1 /usr/lib/libboost_system.so.1.64.1 

ganho de experiência

não procure por patches sempre use pacman -Suy && pacman -S package_name para instalar qualquer coisa. atualização parcial não suportada (no caso de arco)

shivshankar
fonte