На все команды ответ – Segmentation fault
Вчера, после не удачной попытки компиляции из исходников и установки новой версии GLibC
, получил ответ на любые команды в виде сообщения:
Segmentation fault
Так как я знаю то, что причина поломки системы состоит в неправильно установленной библиотеке GLibC
, значит её необходимо переустановить. А раз необходимые нам команды не работают, значит придётся воспользоваться LiveCD.
А теперь приступим к исправлению этой ситуации.
1. Запустим систему с LiveCD/USB и откроем терминал.
Нам нужен именно терминал, поэтому иксы запускать нет необходимости.
Примечание: Образ DebianLiveCD мы возьмём для
i386
отсюда или дляamd64
отсюда.
Далее все команды мы будем выполнять в консоли.
2. Подготовка chroot окружения.
Посмотрим на таблицу разделов для того, чтобы узнать как именуется раздел с корнем файловой системы который мы будем чинить.
sudo fdisk -l
На экран должна будет выведена примерно такая таблица:
Устр-во Загр Начало Конец Блоки Id Система /dev/sda1 104863742 156301311 25718785 5 Расширенный /dev/sda2 * 104863744 125835263 10485760 83 Linux /dev/sda3 150001664 156301311 3149824 82 Linux своп / Solaris /dev/sda4 125837312 149999615 12081152 83 Linux
В моём случае корень расположен на разделе sda2
.
Примонтируем раздел с корнем файловой системы и еще несколько важных директорий:
sudo mount /dev/sda2 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
Попробуем перейти в среду chroot
:
sudo chroot /mnt
И увидим сообщение - Segmentation fault
, что предсказуемо. Тогда переустановим GLibC
вручную.
3. Скачаем библиотеку GlibC.
glibc-2.13-1
на самом деле виртуальный пакет, а предоставляет он libc6
, значит скачивать мы будем его.
Скачиваем libc6
:
sudo apt-get download libc6
Теперь в текущей директории лежит файл libc6_2.13-38_i386.deb
.
4. Распаковка библиотеки в корень системы назначения.
Отступление: Для тех кто пока не знает, deb
пакет - это всего лишь обычный архив файлов, содержащий файлы, предназначенные для установки в систему, а так же некоторые служебные файлы, необходимые для того чтобы эту установку сделать гибкой. При помощи программы ar
упаковано в один файл:
- Архив
control.tar.gz
, содержащий скрипты, написанные майнтенером пакета, использующиеся при установке/удалении пакета, а так же другие служебные файлы. - Архив
data.tar.gz
, содержащий двоичные файлы программы, ради которой создан пакет. - Файл
debian-binary
.
4.1 Для Debian-based систем.
Используем dpkg
с параметром -x
, чтобы просто распаковать но не устанавливать. Распакуем в корень сломавшейся системы:
sudo dpkg -x libc6_2.13-38_i386.deb /mnt
4.2 Для не Debian-based систем.
Распакуем в текущую директорию 3 файла: control.tar.gz
, data.tar.gz
и debian-binary
.
sudo ar vx libc6_2.13-38_i386.deb
Распакуем содержимое data.tar.gz
в корень сломавшейся системы:
sudo tar zxvf data.tar.gz -C /mnt
5. Проверяем
sudo chroot /mnt
Если сообщений об ошибках нет, значит ошибка Segmentation fault
исправлена и теперь мы в chroot
окружении.
6. Завершение
Выходим из chroot
:
exit
Отмонтируем ранее примонтированные разделы:
sudo umount /mnt/dev
sudo umount /mnt/proc
sudo umount /mnt/sys
sudo umount /mnt
Перезагрузим компьютер:
sudo reboot
После проделанных манипуляций ранее сломанная система запустится в стандартном режиме, так как будто она и не ломалась.
Если эта статья помогла вам, пожалуйста, оставьте комментарий
Спасибо за прочтение!
Arthur is a designer and full stack software engineer. He is the founder of Space X-Chimp and the blog My Cyber Universe. His personal website can be found at arthurgareginyan.com.