Kernel panik - libpcre.so.3: cannot open shared object file: No such file or directory

logo

kernel panic "ls: error while loading shared libraries: libpcre.so.3: cannot open shared object file: No such file or directory", "/usr/bin/dpkg: error while loading shared libraries: libpcre.so.3: cannot open shared object file: No such file or directory", "E: Sub-process /usr/bin/dpkg returned an error code (127)".

Если система начала выдавать "libpcre.so.3: cannot open shared object file", - тогда "поздравляю вам пиzdеc" :)

Debian -- Подробная информация о пакете libpcre3 в stretch
https://packages.debian.org/stretch/libpcre3

устаревшая библиотека поддержки регулярных выражений, совместимых с Perl5 — файлы времени исполнения

Библиотека предоставляет функции для работы с регулярными выражениями. Синтаксис и семантика выражений сделаны максимально похожими на регулярные выражения языка Perl 5.

В новых пакетах следует использовать только более новые пакеты pcre2, а уже существующие пакеты необходимо постепенно перевести на использование pcre2.

Несмотря на то, что libpcre3 считается как устаревшая, без неё система работать не будет! Убедиться в том можно выполнить:

$ dpkg --remove --force-depends libpcre3
$ apt-get install -f
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Исправление зависимостей… Готово
Будут установлены следующие дополнительные пакеты:
 libpcre3
НОВЫЕ пакеты, которые будут установлены:
 libpcre3
обновлено 0, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 336 kБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 705 kB.
Хотите продолжить? [Д/н] y
Пол:1 http://ftp.debian.org/debian stretch/main i386 libpcre3 i386 2:8.39-3 [336 kB]
Получено 336 kБ за 0с (596/c)
/usr/bin/dpkg: error while loading shared libraries: libpcre.so.3: cannot open shared object file: No such file or directory
/usr/bin/gdbus: error while loading shared libraries: libpcre.so.3: cannot open shared object file: No such file or directory
E: Sub-process /usr/bin/dpkg returned an error code (127)
 
$ ls
ls: error while loading shared libraries: libpcre.so.3: cannot open shared object file: No such file or directory

Как видим, сразу же после удаления, попытка установить отсутствующие зависимости или просто выполнить команду ls накрылась медным тазом с криком "libpcre.so.3: cannot open shared object file: No such file or directory".


Загрузится а ни в однопользовательский, а ни в режим восстановления не получится ибо будет "kernel panic":

debian-kernel-panic-if-libpcre-missing

Что теперь делать?

Рвать на попе волосы, пердеть и вокруг компа бегать - ибо нех было делать "dpkg --remove --force-depends libpcre3" если родина тебя не просила.

Для восстановления работоспособности системы нам теперь нужно ручками залить файлы libpcre из оригинального репозитория, предварительно загрузившись с live-cd. Адрес репозитория можно найти в /etc/apt/sources.list:

$ less /etc/apt/sources.list
 
deb http://ftp.debian.org/debian stretch main contrib non-free
deb-src http://ftp.debian.org/debian stretch main contrib non-free

При переходе в браузере по адресу http://ftp.debian.org/debian нас может перекинуть на адрес ближайшего к нашему гео расположению репозитория, например на http://ftp.acc.umu.se/debian/. Полное имя .deb пакета libpcre3 можно выгрызть из архива Packages.gz - например для Debian 8 

$ wget http://ftp.acc.umu.se/debian/dists/Debian8.8/main/binary-amd64/Packages.gz
 
$ gunzip Packages.gz
 
$ less Packages|grep pool/main/p/pcre3/|grep .deb|less
Filename: pool/main/p/pcre3/libpcre3_8.35-3.3+deb8u4_amd64.deb
Filename: pool/main/p/pcre3/libpcre3-dbg_8.35-3.3+deb8u4_amd64.deb
Filename: pool/main/p/pcre3/libpcre3-dev_8.35-3.3+deb8u4_amd64.deb
Filename: pool/main/p/pcre3/libpcrecpp0_8.35-3.3+deb8u4_amd64.deb
Filename: pool/main/p/pcre3/pcregrep_8.35-3.3+deb8u4_amd64.deb
 
$ wget http://ftp.acc.umu.se/debian/pool/main/p/pcre3/libpcre3_8.35-3.3+deb8u4_amd64.deb
 
$ dpkg -i DEB_PACKAGE

Или для Debian 9:

$ wget http://ftp.acc.umu.se/debian/dists/Debian9.0/main/binary-i386/Packages.gz
 
$ gunzip Packages.gz
 
$ less Packages|grep pool/main/p/pcre3/|grep .deb|less
 
$ wget http://ftp.acc.umu.se/debian/pool/main/p/pcre3/libpcre3_8.39-3_i386.deb
 
$ dpkg -i DEB_PACKAGE

Ясный красный, что архитектуру ж то выбираете свою i386 или amd64 или какая там ещё может быть. Нет, "dpkg -i DEB_PACKAGE" не покатит.

Итак...

Гоу ту Debian - Live-образы установки, где качаем например debian-live-9.0.1-i386-xfce.iso, грузимся с него, когда увидели рабочий стол или окно логина, переключаемся на первый консольный терминал нажав Ctrl+Alt+F1, после чего делаем:

Login: user
Password: live
 
$ sudo fdisk -l
...
Disk /dev/sda: 11.8 GB, 11811160064 bytes
255 heads, 63 sectors/track, 1435 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ad4fd
 
 Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 1355 10671104 83 Linux
/dev/sda3 1355 1436 657408 82 Linux swap / Solaris
 
 
$ sfdisk -uS -l
...
Disk /dev/sda: 1435 cylinders, 255 heads, 63 sectors/track
Units = sectors of 512 bytes, counting from 0
 
 Device Boot Start End #sectors Id System
/dev/sda1 * 2048 411647 409600 83 Linux
/dev/sda2 411648 21753855 21342208 83 Linux
/dev/sda3 21753856 23068671 1314816 82 Linux swap / Solaris
/dev/sda4 0 - 0 0 Empty
 
 
$ lsblk /dev/sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 11G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 10.2G 0 part /
└─sda3 8:3 0 642M 0 part [SWAP]
 
 
$ sudo fdisk /dev/sda2
 
$ sudo mount /dev/sda2 /mnt
 
$ cd /mnt
 
$ sudo mkdir pcre
 
$ sudo wget http://ftp.acc.umu.se/debian/pool/main/p/pcre3/libpcre3_8.39-3_i386.deb
 
$ sudo dpkg -x libpcre3_8.39-3_i386.deb pcre
 
$ sudo cp -R ./pcre/* ./
 
$ sudo chroot /mnt
 
$ apt install -f
 
$ exit
 
$ sudo umount /mnt
 
$ reboot

В начале мы просмотрели список дисков "sudo fdisk -l", нашли "lsblk /dev/sda" т.н. корневую "/" файловую систему (ака "root filesystem") и проверили раздел "sudo fdisk /dev/sda2".

Далее всё просто - замонтировали его, скачали и распаковали там "libpcre3_8.39-3_i386.deb" в заранее созданный каталог pcre из которого перекопировали всё его содержимое в корневой, за-chroot-ились в /mnt и типа доустановили недоустановленное, от-chroot-ились (exit), отмонтировались и перезапустились.

chroot — операция изменения корневого каталога в Unix-подобных операционных системах. Программа, запущенная с изменённым корневым каталогом, будет иметь доступ только к файлам, содержащимся в данном каталоге.

Веб-ссыли по теме

Рекомендуемый контент

Добавить комментарий

АХТУНГ! Все комменты модерасятся модерастом. Мессаги исключительно рекламного или оскорбительного содержания не публикуются, а поэтому злостным спамерам, пранкерам и прочей сетевой нечисти рекомендуем напрасно не тратить своего времени и удовлетворять свои больные фантазии на специализированных Интернет ресурсах! Разумная же критика, замечания, дополнения и хвалебные оды приветствуются, также допускается легкий флуд или троллинг :)


Защитный код
Обновить

Новое на форуме