_ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _
From : Lelik P. Korchagin 2:5020/412.459 16 Jan 98 09:07:46
Subj : Re: Я крут ! (oracle)
________________________________________________________________________________
Boris Tobotras <Boris_Tobotras@f510.n5020.z2.fidonet.org> wrote:
> Так я не понял -- где рассказ про Oracle без iBCS? :)
Видимо, этот текст где-то загулял.
Суть следующая: естественно, без некоторой эмуляции ни одно произведение,
написанное под СКО (и другие ОС), работать не будет. Другое дело, на каком
уровне эту эмуляцию производить (kernel/user). Третье - как эту эмуляцию
делать. Мне до звона в ушах надоел iBCS и Оракл под ним, особенно в части
клиента, т.к. из-за пяти функций OCI все приложение должно работать в режиме
эмуляции. Посему взял я оракловые библиотеки, раскрутил их в *.о, конвертнул
в ELF утилиткой cof2elf (objcopy не катит) и посмотрел на список undefined
symbols. После чего на каждый объектник натравил команду:
ld -r -o ${obj}.new ${obj} ${wrappers}
где wrappers - список undefined из части libc/libm с префиксом --wrap symbol
(--wrap errno --wrap socket --wrap accept etc). Таким образом, мы с ld
заменили все ссылки на интересные нам глобальные символы на символы с
префиксом __wrap_ (man ld). Теперь дело за малым: написать врапперы. Как
показало внимательное разглядывание спецификаций и хидеров СКОшного
рантайма, требовалось подменить (в смысле написать) весь stdio, т.к. работа
с файлами построена по другому, нежели в GNU libc (да, кстати: все
экскременты проводились под RedHat-5.0 с glibc-2. В случае использования
libc-5 надо написать функцию poll, ее там нет) и многое завязано на макросы,
непосредственно лезущие в структуру FILE и вектор _iob (__iob ?), функцию
open (из-за различных значений флагов), uname (из-за различных длин полей
utsname), *stat etc. Так же надо было подсунуть: errno, __ctype, __ctype2,
_cuclc (что это такое - не знаю). Общий принцип wrapper'a - формируем
параметры, вызываем real function, формируем результат и __wrap_errno из
errno, возвращаем результат. Для 80% функций этап формирования параметров и
результата опускаются.
За основу были взяты исходники glibc-1.09.1, libcs из лежащих рядом с iBCS
(для stdio) и самого iBCS. В результате недельного траха образовалась
библиотечка размером в 70K, при линковке с которой завелись все известные
мне клиенты, использующие OCI. При попытке перелинковки Oracle с этой же
библиотекой он не возмущался, а поднялся и откликнулся.
Что мы получили в результате: в режиме эмуляции на клиенте работает только
часть общения с СУБД, все остальное - в native режиме, для development'a не
требуется кросс-средств, нет iBCS с ее проблемами (memory leaks, inodes,
etc). Реально статически собранная перловка с DBI/DBD под SCO и Linux
отличаются по производительности на ~70-80% в пользу Linux. По серверу не
скажу, буду тестировать.
Проблемы и ограничения:
1. все это очень-очень alpha, поэтому пока библиотечку для всеобщего
обозрения выкладывать не буду.
2. _одна_ функция из SCO runtime взята прямо в .о (если мне скажут, что
делает функция _ftol, то и ее не будет).
3. Есть проблемы с shared libraries. Динамически грузибельный модуль DBD для
перла падает. Видимо, проблемы с PIC.
4. Это _не замена iBCS_. Если что-то есть только в binary, без iBCS не
обойтись.
5. Все это делалось на инсталлированном Оракле.
6. К сожалению, сделать oracle-7.3-...-i386.rpm не удастся из-за сами поняли
...
TODO:
Взвести с этой библиотекой весь комплект (tnslsnr, exp, imp ...).
Поиграться с версией для SVR4, там есть библиотеки pic.
И вообще оттестироваться получше.
Сделать ресурсы под линукс для tk2
И, наконец, сделать методику перехода для всеобщего пользования.
_ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _
From : lelik@price.ru 2:5020/412.459 14 Jan 98 12:21:06
Subj : Re: Я крут ! (oracle)
________________________________________________________________________________
Суть следующая: естественно, без некоторой эмуляции ни одно произведение,
написанное под СКО (и другие ОС), работать не будет. Другое дело, на каком
уровне эту эмуляцию производить (kernel/user). Третье - как эту эмуляцию
делать. Мне до звона в ушах надоел iBCS и Оракл под ним, особенно в части
клиента, т.к. из-за пяти функций OCI все приложение должно работать в режиме
эмуляции. Посему взял я оракловые библиотеки, раскрутил их в *.о, конвертнул
в ELF утилиткой cof2elf (objcopy не катит) и посмотрел на список undefined
symbols. После чего на каждый объектник натравил команду:
ld -r -o ${obj}.new ${obj} ${wrappers}
где wrappers - список undefined из части libc/libm с префиксом --wrap symbol
(--wrap errno --wrap socket --wrap accept etc). Таким образом, мы с ld
заменили все ссылки на интересные нам глобальные символы на символы с
префиксом __wrap_ (man ld). Теперь дело за малым: написать врапперы. Как
показало внимательное разглядывание спецификаций и хидеров СКОшного
рантайма, требовалось подменить (в смысле написать) весь stdio, т.к. работа
с файлами построена по другому, нежели в GNU libc (да, кстати: все
экскременты проводились под RedHat-5.0 с glibc-2. В случае использования
libc-5 надо написать функцию poll, ее там нет) и многое завязано на макросы,
непосредственно лезущие в структуру FILE и вектор _iob (__iob ?), функцию
open (из-за различных значений флагов), uname (из-за различных длин полей
utsname), *stat etc. Так же надо было подсунуть: errno, __ctype, __ctype2,
_cuclc (что это такое - не знаю). Общий принцип wrapper'a - формируем
параметры, вызываем real function, формируем результат и __wrap_errno из
errno, возвращаем результат. Для 80% функций этап формирования параметров и
результата опускаются.
За основу были взяты исходники glibc-1.09.1, libcs из лежащих рядом с iBCS
(для stdio) и самого iBCS. В результате недельного траха образовалась
библиотечка размером в 70K, при линковке с которой завелись все известные
мне клиенты, использующие OCI. При попытке перелинковки Oracle с этой же
библиотекой он не возмущался, а поднялся и откликнулся.
Что мы получили в результате: в режиме эмуляции на клиенте работает только
часть общения с СУБД, все остальное - в native режиме, для development'a не
требуется кросс-средств, нет iBCS с ее проблемами (memory leaks, inodes,
etc). Реально статически собранная перловка с DBI/DBD под SCO и Linux
отличаются по производительности на ~70-80% в пользу Linux. По серверу не
скажу, буду тестировать.
Проблемы и ограничения:
1. все это очень-очень alpha, поэтому пока библиотечку для всеобщего
обозрения выкладывать не буду.
2. _одна_ функция из SCO runtime взята прямо в .о (если мне скажут, что
делает функция _ftol, то и ее не будет).
3. Есть проблемы с shared libraries. Динамически грузибельный модуль DBD для
перла падает. Видимо, проблемы с PIC.
4. Это _не замена iBCS_. Если что-то есть только в binary, без iBCS не
обойтись.
5. Все это делалось на инсталлированном Оракле.
6. К сожалению, сделать oracle-7.3-...-i386.rpm не удастся из-за сами поняли
...
TODO:
Взвести с этой библиотекой весь комплект (tnslsnr, exp, imp ...).
Поиграться с версией для SVR4, там есть библиотеки pic.
И вообще оттестироваться получше.
Сделать ресурсы под линукс для tk2
И, наконец, сделать методику перехода для всеобщего пользования.
_ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _
From : Lelik P. Korchagin 2:5020/412.459 28 Jan 98 20:54:58
Subj : Я крут
________________________________________________________________________________
Мужики !
В связи с последними моими игрищами на
ftp://ftp.price.ru/pub/Linux/Redhat-5.0/mycontrib/Oracle образовалось нечто
под имемнем oracle-*-7.3.2-*-i386-rpm. Это ставится под
RH5.0/glibc-2.0.6/ibcs-2.0.971113 и (вроде) даже работает. Как и всегда, за
последствия не отвечаю. Игрища не требуют ничего, кроме iBCS. Оракл -
7.3.2.1.0 со всеми опциями, включая spatial data и advansed replication.
Игры продолжаются. Ждите oracle-ocidevel-7.3.2.* с pseudo-native Linux
support. Он не за горами.
Там же лежит DBD-Оracle к перлу. Он требует oracle-common, хотя пока про это
нифига не говорится. Зато iBCS не нужен (СЮРПРИЗ !).
--
With best regards,
Lelik P. Korchagin
2БТ: Поскольку я не согласен с политикой Oracle по части Free U*Xes, имею в
виду все лицензионные соглашения.
2All: Hарод ! Ежели вы в 2:5020 (Moscow), лучше ко мне ногами с пивом
(930-0090,91). Заодно и поговорим. И канал разгрузим. А ?
--- ifmail v.2.12.os
* Origin: Lelik's nest (2:5020/412.459@fidonet)