"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 kБ/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":
Что теперь делать?
Рвать на попе волосы, пердеть и вокруг компа бегать - ибо нех было делать "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-подобных операционных системах. Программа, запущенная с изменённым корневым каталогом, будет иметь доступ только к файлам, содержащимся в данном каталоге.