thumb

Вчера, после не удачной попытки компиляции из исходников и установки новой версии 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

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

Если эта статья помогла вам, пожалуйста, оставьте комментарий :smiley:

Спасибо за прочтение!