|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Valentin Nechayev 2:5020/400 08 Feb 2004 01:26:00 To : Alexei Takaseev Subject : Re: RH Enterprise Linux - какие плюсы? -------------------------------------------------------------------------------- >>> Alexei Takaseev wrote: AK>> % ldd `which rpm` AK>> not a dynamic executable AT> [taf@metamorph taf]$ ldd `which rpm` AT> librpm-4.0.4.so => /usr/lib/librpm-4.0.4.so (0x0012d000) AT> librpmbuild-4.0.4.so => /usr/lib/librpmbuild-4.0.4.so (0x00179000) AT> libc.so.6 => /lib/i686/libc.so.6 (0x001ac000) AT> librpmdb-4.0.4.so => /usr/lib/librpmdb-4.0.4.so (0x002cb000) AT> librpmio-4.0.4.so => /usr/lib/librpmio-4.0.4.so (0x002e1000) AT> libpopt.so.0 => /lib/libpopt.so.0 (0x00308000) AT> /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000) AT> libdb-4.0.so => /lib/libdb-4.0.so (0x0030f000) AT> libbeecrypt.so.2 => /usr/lib/libbeecrypt.so.2 (0x003b3000) AT> libbz2.so.1 => /lib/libbz2.so.1 (0x003cd000) AT> libz.so.1 => /lib/libz.so.1 (0x003de000) AT> libpthread.so.0 => /lib/i686/libpthread.so.0 (0x003ed000) AT> librt.so.1 => /lib/i686/librt.so.1 (0x00401000) AT> taf@metamorph taf]$ AT> Hикакой статики. И это со времен IPLabs Mandrake 7.0 RE (Spring 2001), AT> Hыне это ALT Linux Sisyphus от 4 февраля 2004 года. Так что при AT> правильном подходе, даже замена базовых элементов системы не приводит к AT> краху системы. Это, однако, вопрос прохода между Сциллой и Харибдой (вдруг кто не знает - скалы такие в Греции вокруг легендарного узкого пролива): рано или поздно кто-то обязательно нарвётся или на Сциллу (расхождение между интерфейсами основной glibc и подключаемых к ней модулей, например, NSS (несколько раз было) или iconv), или на Харибду (смена интерфейса или реализации самой libc или другой библиотеки настолько, что для работы с новой версией требуется как минимум перекомпиляция). В истории происходило и то, и то, хотя Сцилла - конфликт glibc и libnss_* - всё-таки немного чаще, потому что за её совместимостью следят меньше (и это то, почему крайне не рекомендуется её линковать статиком). Hо так или иначе на камни рано или поздно налетаешь, и тогда спасение может прийти только извне (другой веник, инсталляционный CD...) В приведённом примере, кстати, список библиотек просто-таки шокирует. Собственно, rpmbuild вообще можно было вынести далеко-далеко - ради сборки сделать один лишний exec не страшно. А всё остальное, кроме libc, можно было вполне привинтить статиком, и хуже от этого не было бы для 99% случаев (ну пока не влетели бы в очередную Харибду с, например, дырой в libz...) Как всегда, это не лечено просто от недостатка желания сделать культурно, а не через одно место. В случае смены базовых библиотек, например, спокойно сработал бы такой метод (навскидку, но тем не менее путь рабочий): 1. Ядро (ну, imgact_elf, или кто там этим занимается) проверяет бинарник (например, по его md5) и заглядывает в хэш-таблицу, в которой задаётся дополнительный признак, выставляемый в окружении процесса, и может выбирать по результатам заглядывания в таблицу runtime loader (а не фиксированный /lib/ld-linux.so) и формировать данные для него (например, складывать в то же окружение, или придумать отдельный склад). 2. Runtime loader - смотрит в эти данные и выбирает, например, другой ld.so.cache (а ещё может, как во FreeBSD5, использовать libmap config для замены произвольной библиотеки на произвольную). Тогда, сложив во временные каталоги библиотеки старого дистрибутива и написав простой список замены, можно спокойно менять библиотеки и бинарники на ходу не боясь конфликта. Повторюсь - это только один из вариантов. Hо ведь не сделано ни одного... -netch- --- ifmail v.2.15dev5.3 * Origin: Dark side of coredump (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/7368db958f0b.html, оценка из 5, голосов 10
|