Arch Linux: package-query: error while loading shared libraries: libalpm.so.11

Автор: | 26/10/2019
 

Пару недель не устанавливал обновления, накопилось чуть больше сотни.

Устанавливаются с помощью алиаса в .bashrc:

...
alias osupgrade="yaourt -Syua --noconfirm"
...

 

Ошибка

Работает без проблем (yaourt всё-равно под капотом дёргает pacman для пакетов из официального репозитория) уже почти два года, но сегодня апгрейд остановился с ошибками:

[simterm]

...
(20/21) Updating the desktop file MIME type cache...
(21/21) Updating the MIME type database...
package-query: error while loading shared libraries: libalpm.so.11: cannot open shared object file: No such file or directory
==> ERROR: unable to update
package-query: error while loading shared libraries: libalpm.so.11: cannot open shared object file: No such file or directory
==> ERROR: unable to update
package-query: error while loading shared libraries: libalpm.so.11: cannot open shared object file: No such file or directory
==> ERROR: unable to update
package-query: error while loading shared libraries: libalpm.so.11: cannot open shared object file: No such file or directory
==> ERROR: unable to update
package-query: error while loading shared libraries: libalpm.so.11: cannot open shared object file: No such file or directory
No database errors have been found!

[/simterm]

Проверяем зависимости пакета package-query:

[simterm]

$  ldd /usr/bin/package-query
        ...
        libalpm.so.11 => not found
        ...

[/simterm]

Но файлы библиотеки есть:

[simterm]

$ ls -l /usr/lib/libalpm.so*
lrwxrwxrwx 1 root root     17 Oct 22 05:06 /usr/lib/libalpm.so -> libalpm.so.12.0.0
lrwxrwxrwx 1 root root     17 Oct 22 05:06 /usr/lib/libalpm.so.12 -> libalpm.so.12.0.0
-rwxr-xr-x 1 root root 223616 Oct 22 05:06 /usr/lib/libalpm.so.12.0.0

[/simterm]

Только версии libalpm.so.12.0.0, а не 11, соответственно и имена файлов разные.

Решение #1 (неправильное) – symlink

Первым, что приходит в голову – это добавить симлинк на время установки обновлений, но это костыль, который применять, особенно к системным библиотекам, плохая идея.

Тем не менее – можно сделать:

[simterm]

$ sudo ln -s /usr/lib/libalpm.so.12 /usr/lib/libalpm.so.11

[/simterm]

Решение #2 (правильное) – сборка пакета с makepkg

Значит – надо переустановить package-query, удаляем:

[simterm]

$ sudo pacman -R package-query
checking dependencies...
error: failed to prepare transaction (could not satisfy dependencies)
:: removing package-query breaks dependency 'package-query>=1.8' required by yaourt

[/simterm]

Добавляем dd (см. pacman), что бы игнорировать зависящие пакеты:

[simterm]

$ sudo pacman -Rdd package-query

Packages (1) package-query-1.9-3

Total Removed Size:  0.09 MiB

:: Do you want to remove these packages? [Y/n] y
...

[/simterm]

Загружаем package-query с Github:

[simterm]

$ git clone https://aur.archlinux.org/package-query.git
$ cd package-query/

[/simterm]

Собираем его и устанавливаем (-i, --install):

[simterm]

$ makepkg -si
...
==> Installing package package-query with pacman -U...
loading packages...
resolving dependencies...
looking for conflicting packages...
Packages (1) package-query-1.10-1

Total Installed Size:  0.07 MiB

:: Proceed with installation? [Y/n] y
...

[/simterm]

Проверяем ldd:

[simterm]

$  ldd /usr/bin/package-query | grep libalpm.so
        libalpm.so.12 => /usr/lib/libalpm.so.12 (0x00007fb7b6cab000)

[/simterm]

Повторяем апгрейд:

[simterm]

...
(1/3) Arming ConditionNeedsUpdate...
(2/3) Updating icon theme caches...
(3/3) Updating the desktop file MIME type cache...
No database errors have been found!

[/simterm]

Вывод

А вывод простой – пора таки поменять в алиасе yaourt на yay, ибо yaourt, как у нему ни привык, но уже не актуален.

Готово.