Ошибка «ldconfig is not in the PATH or not executable» возникает при установке пакетов через apt или dpkg, когда система не может найти или запустить утилиту ldconfig — инструмент, обновляющий кэш динамических библиотек. Без него менеджер пакетов не может корректно завершить настройку программ, использующих разделяемые библиотеки, и установка прерывается с сообщением об ошибке.
Чаще всего проблема связана не с отсутствием самой утилиты, а с тем, что каталог /sbin, где она обычно расположена, отсутствует в переменной окружения PATH текущей сессии. Реже встречаются повреждённый файл, сброшенные права доступа или удалённый пакет libc-bin. Ниже разберём диагностику и способы восстановления от простых к сложным.
Что такое ldconfig и почему он критичен для системы
Утилита ldconfig входит в состав пакета libc-bin и отвечает за обновление кэша динамического компоновщика — файла /etc/ld.so.cache. Каждый раз, когда устанавливается или удаляется пакет с разделяемыми библиотеками, система вызывает ldconfig, чтобы перестроить список доступных библиотек и их символических ссылок.
Если утилита недоступна, dpkg не может выполнить триггеры настройки пакетов. В терминале это выглядит примерно так:
dpkg: warning: 'ldconfig' not found in PATH or not executable
dpkg: error: 1 expected program not found in PATH or not executable
Обратите внимание на вторую строку: иногда рядом с ldconfig упоминается и start-stop-daemon — это указывает на общую проблему с PATH, а не на отдельный файл.
Шаг 1. Проверка PATH и наличия файла
Первое действие — выяснить, существует ли файл физически и видит ли его оболочка. Выполните в терминале:
echo $PATH
ls -l /sbin/ldconfig
which ldconfig
Интерпретация результатов:
- 🔍 Файл
/sbin/ldconfigсуществует, ноwhichего не находит — проблема в PATH, переходите к следующему разделу. - 📁 Файл существует, но в выводе
ls -lнет флагаx— сброшены права на исполнение. - ❌ Файл отсутствует — пакет libc-bin повреждён или удалён, потребуется переустановка.
- 🔗 Файл является «битой» символической ссылкой — проверьте, куда она указывает, командой
readlink -f /sbin/ldconfig.
⚠️ Внимание: не скачивайте ldconfig со сторонних сайтов и не копируйте его из чужих систем. Утилита жёстко связана с версией glibc в вашей системе, и несовпадение версий способно нарушить запуск программ.
Шаг 2. Исправление переменной PATH
Самая частая причина — неполный PATH. Такое происходит при входе через su без дефиса (вместо su -), при работе в минимальных окружениях chroot, Docker-контейнерах или после некорректного редактирования ~/.bashrc и /etc/profile.
Для быстрой проверки задайте PATH вручную в текущей сессии:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
После этого повторите команду, которая вызывала ошибку. Если всё сработало — значит, проблема была именно в окружении. Чтобы исправление стало постоянным, проверьте файлы /etc/profile, /etc/environment и ~/.bashrc на предмет строк, перезаписывающих PATH без включения системных каталогов.
Шаг 3. Восстановление прав и переустановка libc-bin
Если файл на месте, но не исполняется, верните корректные права:
chmod 755 /sbin/ldconfig
Когда файл отсутствует или повреждён, необходимо переустановить пакет libc-bin. Стандартный способ:
apt-get install --reinstall libc-bin
Однако здесь возможен «замкнутый круг»: apt сам вызывает ldconfig при настройке пакета. На этот случай есть обходной путь — скачать пакет и распаковать вручную:
apt-get download libc-bin
dpkg-deb -x libc-bin_*.deb /
/sbin/ldconfig
Команда dpkg-deb -x просто распаковывает содержимое архива в корень, минуя триггеры dpkg. После этого ldconfig окажется на месте, и можно выполнить полноценную переустановку для восстановления корректных записей в базе пакетов.
☑️ Восстановление ldconfig
⚠️ Внимание: распаковка пакета черезdpkg-deb -xобходит базу dpkg, поэтому после восстановления работоспособности обязательно выполнитеapt-get install --reinstall libc-bin, чтобы система знала об установленных файлах.
Шаг 4. Диагностика в chroot и контейнерах
Отдельный сценарий — ошибка возникает при работе в chroot-окружении, например при восстановлении системы с LiveUSB. Здесь причина почти всегда в том, что внутрь окружения не смонтированы виртуальные файловые системы или PATH задан неполностью.
Перед входом в chroot убедитесь, что смонтированы необходимые каталоги:
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt /bin/bash
В Docker-контейнерах на минимальных образах (например, alpine) ldconfig может отсутствовать вовсе — там используется musl вместо glibc, и механизм кэширования библиотек устроен иначе. Это не ошибка, а особенность дистрибутива.
Сводная таблица причин и решений
| Симптом | Вероятная причина | Решение |
|---|---|---|
| which ldconfig ничего не находит | /sbin отсутствует в PATH | Исправить PATH, использовать su - |
| Файл есть, но «Permission denied» | Сброшен бит исполнения | chmod 755 /sbin/ldconfig |
| Файл отсутствует | Повреждён пакет libc-bin | Переустановка libc-bin |
| Ошибка только в chroot | Неполное окружение | Монтирование /dev, /proc, /sys |
| Ошибка в контейнере Alpine | musl вместо glibc | Особенность образа, ldconfig не требуется |
Как предотвратить повторение ошибки
Большинство случаев связано с ручным редактированием конфигурационных файлов оболочки. Перед изменением ~/.bashrc или /etc/profile делайте резервную копию, а новые строки PATH добавляйте через дополнение (export PATH="$PATH:/новый/путь"), а не полную перезапись переменной.
Полезно периодически проверять целостность пакетов командой dpkg --verify libc-bin — она покажет, изменились ли файлы пакета относительно эталонного состояния. Если система пережила жёсткое отключение питания или переполнение диска, такая проверка поможет обнаружить повреждения до того, как они проявятся ошибками.
Почему ошибка часто появляется парой с start-stop-daemon
Обе утилиты лежат в /sbin. Когда dpkg сообщает, что не найдены сразу ldconfig и start-stop-daemon, это почти наверняка означает проблему с PATH, а не одновременное повреждение двух независимых файлов. Начинайте диагностику с echo $PATH.
Часто задаваемые вопросы
Можно ли просто скопировать ldconfig из другой системы?
Технически возможно, но небезопасно: утилита собрана под конкретную версию glibc. Копирование допустимо только с идентичной версии дистрибутива и только как временная мера до переустановки пакета libc-bin.
Почему ошибка появляется только при использовании sudo?
Некоторые конфигурации sudo используют параметр secure_path в /etc/sudoers, который заменяет PATH пользователя. Если в нём не указан /sbin, утилиты из этого каталога не будут найдены. Проверьте содержимое файла через sudo visudo.
Ошибка возникла после прерывания обновления. Что делать?
Выполните dpkg --configure -a, чтобы завершить настройку прерванных пакетов. Если ldconfig повреждён, сначала восстановите его по инструкции из раздела про переустановку libc-bin, затем повторите настройку.
Где находится ldconfig в разных дистрибутивах?
В Debian, Ubuntu и производных это /sbin/ldconfig (часто символическая ссылка на /usr/sbin/ldconfig). В Fedora и RHEL-подобных системах утилита также располагается в /sbin или /usr/sbin. Точный путь можно узнать командой command -v ldconfig при корректном PATH.
Опасно ли работать без исправления ошибки?
Система продолжит загружаться, но установка и обновление пакетов будут регулярно завершаться ошибками, а новые библиотеки могут не попадать в кэш компоновщика. Проблему следует устранить при первой возможности, не откладывая.