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 i 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

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