Как мне сохранить две версии одного и того же пакета в archlinux?

8

Я управляю Archlinux. Недавно один из названных пакетов icuобновился; однако Firefox зависит libicuuc.so.56, а R зависит от libicuuc.so.55. Как я могу решить эту проблему?

Примечание: пакет R был построен на основе Intel MKLбиблиотеки, поэтому он не работает с новой версией зависимостей. Я пытался восстановить R - это все еще зависит от старогоlibicuuc.so.55

Ник
источник
2
Такие вещи не должны происходить с официальным репо. Просто если вы не полностью обновились, так как частичные обновления не поддерживаются в скользящем выпуске archlinux. Если это действительно так (в полностью обновленной системе), вы должны сообщить об ошибке.
bvolkmer

Ответы:

6

Я предполагаю, что вы хотите запустить конкретный исполняемый файл со старой библиотекой. Давайте назовем исполняемый файл myprogram.

Если вы поместите libicuuc.so.55в другой каталог, например, как /opt/oldlibs/libicuuc.so.55можно указать myprogramиспользовать старую библиотеку с помощью команды, подобной этой:

LD_LIBRARY_PATH=/opt/oldlibs myprogram

Файлы библиотеки могут быть извлечены из файла пакета (который вы, вероятно, можете найти в /var/cache/pacman/pkg).

Если это не решает проблему того, как вы собираетесь использовать приложение, вы можете вместо этого запустить его в chroot или контейнере.

Александр
источник
1
Имея сочетание опыта между * BSD и Linux, я дважды думаю о том, чтобы назвать это джейлом или chroot. Разве не фактическое имя jail, а chroot команда для его достижения? В противном случае, отличный ответ, сэр.
Руи Ф Рибейро
@RuiFRibeiro Я думаю, что «jail» - это общий термин для * BSD (и они ведут себя не так, как chroot, поскольку они более безопасны), хотя я думаю, что «chroot» чаще используется в Linux. Я считаю, что эквивалентом BSD-тюрем в Linux, с точки зрения безопасности, будут Linux Containers. Спасибо за вклад.
Александр
1
Спасибо за ваш ответ, это работает. Я должен указать, что я положил /opt/oldlibs/в /etc/ld.so.conf.d/R.conf. ( R.confФайл уже там, со Rстандартным путем lib в нем.)
Ник
0

мой опыт работы с Arch Linux

systemctl start mongodb выдаёт ошибку запуска процесса

я просто нажал journalctl -xe, чтобы проверить текущий журнал

он показывает отсутствующий libboost_system.so.1.64.1 (старый)

это sumlink, я разрешаю это используя

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

readlink подскажите ссылку на символическую ссылку на /usr/lib/libboost_system.so.1.65.1

я извлекаю boost-libs 1.64 из / var / cache / pacman / pkg и вставляю все файлы / lib в / usr / lib, также пропускаю, чтобы переопределить старый файл

это разрешит мне ломать зависимости дальнейшую работу, если не решит сделать символическую ссылку отсутствующих как

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

приобретение опыта

не ищите патчи всегда используйте pacman -Suy && pacman -S package_name для установки чего-либо. частичное обновление не поддерживается (в случае арки)

shivshankar
источник