Пример проблемы:
$ su
Segmentation fault
$ sudo ls
Segmentation fault
Я пытался скомпилировать sqlite3 из исходного кода ранее. Я не знаю, какие библиотеки он установил. Это может быть причиной, почему это происходит.
Я попытался strace su
, и это заканчивается следующим:
...
fstat64(6, {st_mode=S_IFREG|0644, st_size=17964, ...}) = 0
mmap2(NULL, 20788, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 6, 0) = 0xb7295000
mmap2(0xb7299000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 6, 0x3) = 0xb7299000
close(6) = 0
mprotect(0xb7299000, 4096, PROT_READ) = 0
mprotect(0xb72f9000, 4096, PROT_READ) = 0
set_tid_address(0xb758a728) = 11144
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV (core dumped) +++
Segmentation fault (core dumped)
Когда я пытаюсь gdb su
и пытаюсь бежать, это дает мне Cannot find new threads: generic error
. Я искал в Интернете решение проблемы, наткнулся на этот поток, а затем попытался запустить LD_PRELOAD=/lib/i386-linux-gnu/libpthread.so.0 gdb su
(как предложено в потоке). Когда я попытался запустить его снова, он выдал ту же ошибку.
Основываясь на strace, я думаю, что есть некоторая проблема с тем, как это работает с потоками, но я не знаю, как это исправить. Есть ли способ переустановить базовые утилиты bash?
Вот больше информации о моей системе:
$ uname -a
myhost 3.2.0-37-generic-pae #58-Ubuntu SMP Thu Jan 24 15:51:02 UTC 2013 i686 i686 i386 GNU/Linux
(Я почти уверен, что аппаратное обеспечение 64-битное)
Существует шанс, что pam модуль от самбы вызывает это.
Если это так, затем это должно зафиксировать его:
Затем необходимо смочь использовать 'su' и 'sudo' снова.
Вы затем можете хотеть или должны сделать a
помочь зафиксировать любые остающиеся поврежденные пакеты.
Если Вы нуждаетесь в libpam-smbpass и/или libpam-winbind пакете, или имеете поврежденный пакет 'самбы', можно найти, что необходимо удалить или переименовать/var/lib/samba/secrets.tdb:
Получите/Свяжите: https://bugs.launchpad.net/ubuntu / + источник/самба / + ошибка/260687
Используйте aptdcon
, который связывается с apt-daemon
через dbus
, поэтому ему не нужно su
или sudo
, чтобы переустановить поврежденные пакеты. Вероятно, ваш лучший шанс - переустановить ВСЕ пакеты.
Во-первых, убедитесь, что нет неработающей установки в ожидании исправления:
aptdcon --fix-install
Также убедитесь, что на вашем диске есть свободное место:
df -h
Затем получите список установленных в настоящее время пакетов:
echo \"$(dpkg --get-selections | grep install | cut -f 1)\"
Сохраните это на потом, в текстовом редакторе чего-либо. Затем вызовите aptdcon
следующим образом, используя полный список пакетов:
aptdcon --reinstall "package1 package2 package3..."
Я говорю вам об этом, потому что aptdcon
не сможет переустановить некоторые пакеты по разным причинам, поэтому вы Придется вычеркнуть их, если aptdcon
заплачет по этому поводу, и попытаться снова, возможно, более одного раза.
Я видел эту проблему, но причина была немного другой. Я тестировал Kerberos и что-то неправильно настроено в моем /etc/krb5.conf. Через strace я обнаружил, что вскоре после прочтения этого файла в sudo произошел сбой, и решил, что проблема в моем файле конфигурации. Я не отслеживал определенную переменную, но одна вещь, которая выделялась, состояла в том, что переменная default_domain была пуста в krb5.conf, например, так
[libdefaults]
default_realm =
. строка нулевой длины и неправильно обрабатывать ее, вызывая SIGSEGV. Я не пытался отлаживать это дальше, так как это не было правильной настройкой. Я просто удалил мой /etc/krb5.conf.
Если у вас возникла проблема с OP, вы не сможете сделать то, что предложил Хорхе Суарес де Лис, поскольку это вызовет ошибку зависимостей.
Итак,
aptdcon --reinstall "libsqlite3-0"
и
aptdcon --install "libsqlite3-0"
возвращает сообщение об ошибке:
ОШИБКА: org.debian.apt.TransactionFailed - ошибка в кэше ошибок : Следующие пакеты имеют неудовлетворенные зависимости:
При выполнении ЭТОГО:
aptdcon --fix-depends
это исправит, а su и sudo снова будут работать.