После восстановления системы, когда ноутбук выключился от перегрева во время апгрейда (см. 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]
Вот и наш ps
– procps-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
работает.
Аналогично – фиксим остальные пакеты.