На всі команди відповідь – 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
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
Після виконаних маніпуляцій раніше зламана система запуститься в стандартному режимі, так як ніби вона і не ламалася.
Якщо ця стаття допомогла вам, будь ласка, залиште коментар
Дякую за прочитання!
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.