Linux: /usr/bin/ps: empty и ldconfig: File /usr/lib/libprocps.so.7 is empty, not checked.

By | 06/08/2018
 

После восстановления системы, когда ноутбук выключился от перегрева во время апгрейда (см. Linux: /lib/modules/4.16.13-1-ARCH/modules.devname not found и error: file ‘/grub/i386-pc/normal.mod’ not found) – внезапно вылезла ещё одна проблема.

Причём проявилась она совершенно неожиданно: система загружается, браузер, почта и другие программы – работают, и ничего не предвещало ещё одного “нетомного вечера”.

Вот только я обратил внимание, что в верхней части экрана не отображается load avarage (получается из uptime-а в tint2) и свободная/занятая память (из free).

Первая мысль – подглючил сам tint2, решил найти его процесс, убить и перезапустить.

Но вдруг:

19:43:22 [setevoy@setevoy-arch-home ~]
ps
19:43:50 [setevoy@setevoy-arch-home ~]
top
19:43:55 [setevoy@setevoy-arch-home ~]

Эээ?

Проверяем с strace – благо он работал:

strace ps
execve("/usr/bin/ps", ["ps"], 0x7fff5d094370 /* 40 vars */) = -1 ENOEXEC (Exec format error)
fstat(2, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 2), ...}) = 0
write(2, "strace: exec: Exec format error\n", 32strace: exec: Exec format error
) = 32
getpid()                                = 20784
exit_group(1)                           = ?
+++ exited with 1 +++

“/usr/bin/ps”, [“ps”], 0x7fff5d094370 /* 40 vars */) = -1 ENOEXEC (Exec format error)

Щито?

Проверяем файл /usr/bin/ps:

file /usr/bin/ps
/usr/bin/ps: empty

При всём этом – сам pacman при установке любого пакета выводил предупреждения типа:

sudo pacman -S smartmontools
...
(1/1) installing smartmontools
Optional dependencies for smartmontools
s-nail: to get mail alerts to work [installed]
ldconfig: file /usr/lib32/libgo.so is truncated
ldconfig: file /usr/lib32/libgo.so.13 is truncated
ldconfig: file /usr/lib32/libgo.so.13.0.0 is truncated
ldconfig: File /usr/lib/libpkcs11-helper.so is empty, not checked.
ldconfig: File /usr/lib/libpkcs11-helper.so.1 is empty, not checked.
ldconfig: File /usr/lib/libprocps.so.7.1.0 is empty, not checked.
ldconfig: File /usr/lib/libsbc.so.1.2.1 is empty, not checked.
ldconfig: File /usr/lib/libpkcs11-helper.so.1.0.0 is empty, not checked.
ldconfig: File /usr/lib/libprocps.so is empty, not checked.
ldconfig: File /usr/lib/libqrencode.so.4.0.1 is empty, not checked.
ldconfig: File /usr/lib/libsbc.so is empty, not checked.
ldconfig: File /usr/lib/libqrencode.so.4 is empty, not checked.
ldconfig: File /usr/lib/libsbc.so.1 is empty, not checked.
ldconfig: File /usr/lib/libqrencode.so is empty, not checked.
ldconfig: File /usr/lib/libprocps.so.7 is empty, not checked.

Запускаем проверку файлов – -Q, --query и -k, --check.

Вывод большой, поэтому пишем в файл для анализа:

sudo pacman -Qkk | grep -v “0 altered files” > pacman_check.txt

Вот и наш psprocps-ng:

cat pacman_check.txt | grep ps
cups: 872 total files, 4 altered files
procps-ng: no mtree file

И в этом же пакете – и uptime, и top, и free, с которыми тоже проблемы.

Т.е. явно проблема возникла во время неудачного (двух!) апргейдов, которые были прерваны выключением ноута.

И таких утилит достаточно много:

cat pacman_check.txt | grep mtree
linux-headers: no mtree file
ltrace: no mtree file
nodejs: no mtree file
parallel: no mtree file
pcmciautils: no mtree file
pkcs11-helper: no mtree file
procps-ng: no mtree file
pulseaudio-alsa: no mtree file
python-pexpect: no mtree file
python-requests: no mtree file
python-urllib3: no mtree file
python2-notify: no mtree file
python2-pbr: no mtree file
python2-regex: no mtree file
qrencode: no mtree file
sbc: no mtree file
sound-theme-freedesktop: no mtree file
virtualbox: no mtree file
virtualbox-host-dkms: no mtree file

Тот же virtualbox, на апгрейде которого ноут и вырубался – тоже не запускается:

file /usr/bin/VBox
/usr/bin/VBox: empty

ОК, хорошо, что сам pacman-то работает…

Переустанавливаем затронутые пакеты:

sudo pacman -S procps-ng
warning: procps-ng-3.3.15-1 is up to date -- reinstalling
...
error: failed to commit transaction (conflicting files)
procps-ng: /usr/bin/free exists in filesystem
procps-ng: /usr/bin/pgrep exists in filesystem
procps-ng: /usr/bin/pidof exists in filesystem
...

Ну да..

Читаем про --force а заодно и ошибку “file exists in filesystem” тут>>>.

sudo pacman -S --force procps-ng
warning: option --force is deprecated; use --overwrite instead
warning: procps-ng-3.3.15-1 is up to date -- reinstalling
...
:: Processing package changes...
(1/1) reinstalling procps-ng
ldconfig: file /usr/lib32/libgo.so is truncated
ldconfig: file /usr/lib32/libgo.so.13 is truncated
ldconfig: file /usr/lib32/libgo.so.13.0.0 is truncated
ldconfig: File /usr/lib/libpkcs11-helper.so is empty, not checked.
ldconfig: File /usr/lib/libpkcs11-helper.so.1 is empty, not checked.
ldconfig: File /usr/lib/libsbc.so.1.2.1 is empty, not checked.
ldconfig: File /usr/lib/libpkcs11-helper.so.1.0.0 is empty, not checked.
ldconfig: File /usr/lib/libqrencode.so.4.0.1 is empty, not checked.
ldconfig: File /usr/lib/libsbc.so is empty, not checked.
ldconfig: File /usr/lib/libqrencode.so.4 is empty, not checked.
ldconfig: File /usr/lib/libsbc.so.1 is empty, not checked.
ldconfig: File /usr/lib/libqrencode.so is empty, not checked.
:: Running post-transaction hooks...
(1/1) Arming ConditionNeedsUpdate...

ОК, строка с “ldconfig: File /usr/lib/libprocps.so.7 is empty, not checked.” уже пропала.

ps
PID TTY          TIME CMD
11452 pts/2    00:00:00 ps
26376 pts/2    00:00:00 bash

ps заработал.

Повторяем для остальных затронутых проблемой пакетов.

virtualbox – таже ошибка:

sudo pacman -S virtualbox
warning: virtualbox-5.2.12-2 is up to date -- reinstalling
resolving dependencies...
looking for conflicting packages...
Packages (2) virtualbox-host-dkms-5.2.12-2  virtualbox-5.2.12-2
...
error: failed to commit transaction (conflicting files)
virtualbox-host-dkms: /usr/lib/modules-load.d/virtualbox-host-dkms.conf exists in filesystem
virtualbox-host-dkms: /usr/share/licenses/virtualbox-host-dkms/LICENSE exists in filesystem
...

Тоже помог --force.

Теперь virtualbox запускается с ошибкой “WARNING: The vboxdrv kernel module is not loaded“, т.к. linux-headers в том же “чёрном списке”:

cat pacman_check.txt | grep lin
linux-headers: no mtree file

Переустанавливаем его (на этот раз без --force):

sudo pacman -S linux-headers
warning: linux-headers-4.16.13-2 is up to date -- reinstalling
...
(1/3) Updating linux module dependencies...
(2/3) Install DKMS modules
==> dkms install vboxhost/5.2.12_OSE -k 4.16.13-2-ARCH
(3/3) Arming ConditionNeedsUpdate...

Загружаем модуль:

sudo modprobe vboxdrv

Теперь virtualbox работает.

Аналогично – фиксим остальные пакеты.