Вот сценарий, который у меня есть:
Я создал среду debootstrap ubuntu maverick (64-разрядная). Я поместил его в / env / mav /
в моей (64-разрядной) системе lucid ubuntu. Я могу chroot
в / env / mav
и могу отлично использовать автономную систему.
Я даже могу нормально использовать прозрачные программы вне chrooted-окружения. То есть / env / mav / bin / ls
будет работать.
Однако я заметил, что если я изменю LD_LIBRARY_PATH
на / env / mav / lib
[1] [2]
, каждая отдельная программа (как lucid, так и maverick), которую я выполняю, немедленно выйдет из строя. (например, ls приводит к ошибке segfault). kern.log показывает:
segfault at 7fece284aa18 ip 00007fece284aa18 sp 00007fff32028158 error 15
Однако ясно, что если я chroot
в / env / mav
, каждая программа будет работать нормально. И разве не все библиотеки просто читаются из тюрьмы ( / env / mav
) / lib
? Так в чем же разница между chroot
и изменением LD_LIBRARY_PATH
в этом контексте?
Кроме того, если я:
mount -B /env /env/mav/env
, а затем chroot / env
, а затем установите LD_LIBRARY_PATH
равным / env / mav / lib
, все по-прежнему работает нормально.
Я не понимаю, что здесь происходит внутри.Есть ли где-нибудь внутренние компоненты ld? Делает ли chroot что-то волшебное?
[1] Пример использования - запускать программы из среды maverick, правильно привязанной к динамически подключаемым библиотекам maverick за пределами тюрьмы maverick.
[2] Это всего лишь сокращенный пример. На самом деле включены все / usr / lib
и т. Д. В том числе / lib окружения maverick «отравляет» все; нет проблем с использованием других каталогов библиотеки maverick.