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

Автор: | 08/06/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, решил найти его процесс, убить и перезапустить.

Но вдруг:

[simterm]

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

[/simterm]

Эээ?

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

[simterm]

$ 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 +++

[/simterm]

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

Щито?

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

[simterm]

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

[/simterm]

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

[simterm]

$ 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.

[/simterm]

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

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

[simterm]

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

[/simterm]

Вот и наш psprocps-ng:

[simterm]

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

[/simterm]

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

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

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

[simterm]

$ 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

[/simterm]

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

[simterm]

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

[/simterm]

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

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

[simterm]

$ 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
...

[/simterm]

Ну да..

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

[simterm]

$ 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...

[/simterm]

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

[simterm]

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

[/simterm]

ps заработал.

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

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

[simterm]

$ 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      
...

[/simterm]

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

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

[simterm]

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

[/simterm]

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

[simterm]

$ 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...

[/simterm]

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

[simterm]

$ sudo modprobe vboxdrv

[/simterm]

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

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