From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <4444DEC4.3050201@altlinux.ru> Date: Tue, 18 Apr 2006 15:42:44 +0300 From: Andrew Kornilov Organization: IPXP X-Accept-Language: en-us, en MIME-Version: 1.0 To: ALT Devel discussion list Content-Type: text/plain; charset=windows-1251; format=flowed Content-Transfer-Encoding: 8bit Subject: [devel] =?windows-1251?q?statically_linked_=CF=CE_=E8_ALT_Linux?= X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.7 Precedence: list Reply-To: ALT Devel discussion list List-Id: ALT Devel discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Apr 2006 12:42:33 -0000 Archived-At: List-Archive: List-Post: Всем привет. Столкнулся с интересной ситуацией: есть статически собранное коммерческое ПО (собиралось, судя по всему, на RH9). Как известно, есть некий "костыль" для работы такого ПО в Linux: для использования NSS это ПО подгружает системную библиотеку libnss, а дальше уже по зависимостям подгружается системная libc и т.д. Соответственно, имеется два вида глюков: 1. При сильном отличии ABI libc это ПО падает сразу 2. При незначительных различиях оно работет, но под нагрузкой может падать (и падает, к сожалению). Проблема решается запуском этого ПО в chrooted environment, соотственно, системные libnss* недоступны и оно работает (однако, при этом теряется возможность использовать функциональность NSS) Тестирование ПО на многих свежих и не очень дистрибутивах Linux показывает, что оно таки подгружает системные библиотеки и падает. Под ALT Linux-ом и ядром 2.6.14-vs26-smp я столкнулся с интересной ситуацией: ПО запускается, по strace видны успешные попытки подгрузить системные libnss*, однако после этого в /proc/$pid/maps они отсутствуют полностью и ПО продолжает работать. После общения с кучей людей на #altlinux так и не выяснили, почему так происходит. Чтение man на dlopen() вывело на одну мысль, там есть такое: RTLD_LAZY Perform lazy binding. Only resolve symbols as the code that references them is executed. If the symbol is never referenced, then it is never resolved. (Lazy binding is only performed for function references; references to variables are always immedi- ately bound when the library is loaded.) Возможно ли такоее, что dlopen везде не использует такой флаг или просто игнорирует его, а наш как раз использует? Или это немного не то? Меня больше всего волнуют вопросы: 1. Может ли это ПО в дальнейшем таки загрузить для чего-то системные libnss и благополучно упасть? 2. Найти простой способ запрета загрузки системной libnss без chroot не удалось, но городить и chrooted environment нет никакого желания. Может быть он все-таки существует? Спасибо.