FreeRadius Solaris: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
(не показано 8 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | [[Категория:Linux]] |
||
+ | [[Категория:FreeRadius]] |
||
=Сборка под Solaris 10= |
=Сборка под Solaris 10= |
||
+ | Сборка для соляриса вообще - занятие не для слабонервных. Особо следить что бы использовался компилятор и утилиты (automake, autoconf, libtool) из одного репозитория. Иначе последствия могут быть странными. |
||
⚫ | |||
⚫ | |||
− | |||
− | |||
− | |||
⚫ | |||
+ | ==Сборка rlm_sql_oracle (особенности)== |
||
⚫ | |||
+ | С помощью configure мне не удалось получить нормальный Makefile, потому отредактировал его руками |
||
+ | <PRE> |
||
+ | freeradius-server-2.1.9/src/modules/rlm_sql/drivers/rlm_sql_oracle/Makefile |
||
+ | include ../../../../../Make.inc |
||
+ | TARGET = rlm_sql_oracle |
||
+ | SRCS = sql_oracle.c |
||
+ | RLM_SQL_CFLAGS = -I/export/home/oracle/client/instantclient_10_2/sdk/include $(INCLTDL) |
||
+ | RLM_SQL_LIBS = -L/export/home/oracle/client/instantclient_10_2 -lclntsh -lm |
||
+ | ORACLE_HOME = /export/home/oracle/client/instantclient_10_2/ |
||
+ | CFLAGS = -I/export/home/oracle/client/instantclient_10_2/sdk/include/ |
||
+ | LDFLAGS = -L/export/home/oracle/client/instantclient_10_2/sdk/include/ |
||
+ | include ../rules.mak |
||
+ | </PRE> |
||
+ | После чего в этом же катаалоге набираю |
||
+ | {{Root|<nowiki>#gmake</nowiki>}} |
||
+ | и получаю рабочий модуль. |
||
+ | <PRE> |
||
+ | rlm_sql_oracle-2.1.9.so |
||
+ | </PRE> |
||
⚫ | |||
+ | <BR> |
||
Я получал сообщение |
Я получал сообщение |
||
<PRE> |
<PRE> |
||
Строка 30: | Строка 50: | ||
</PRE> |
</PRE> |
||
+ | Нагуглив (проблема у многих): |
||
− | |||
<PRE> |
<PRE> |
||
It's a bug in libltdl that is in Ubuntu. |
It's a bug in libltdl that is in Ubuntu. |
||
Строка 47: | Строка 67: | ||
libltdl is buggy, and I hate it beyond words. |
libltdl is buggy, and I hate it beyond words. |
||
</PRE> |
</PRE> |
||
+ | |||
+ | Потому, решил попробовать поставить radius из пакета |
||
+ | {{Root|<nowiki>pkg-get -i freeradius</nowiki>}} |
||
+ | |||
+ | Пробуя запустить, обнаруживаю, что "все было не зря" |
||
+ | |||
+ | <PRE> |
||
+ | radiusd -XXXX |
||
+ | |||
+ | Wed Jun 2 18:46:43 2010 : Error: rlm_sql (sql): Could not link driver rlm_sql_oracle: ld.so.1: radiusd: fatal: rlm_sql_oracle.so: open failed: No such file or directory |
||
+ | Wed Jun 2 18:46:43 2010 : Error: rlm_sql (sql): Make sure it (and all its dependent libraries!) are in the search path of your system's ld. |
||
+ | Wed Jun 2 18:46:43 2010 : Error: radiusd.conf[10]: sql: Module instantiation failed. |
||
+ | </PRE> |
||
+ | Т.е. другими словами, нет файла rlm_sql_oracle.so. Как раз того, что я скомпилировал на первом шаге. |
||
+ | Поместив его к другим rlm_-файлам, получаю другую ошибку: |
||
+ | |||
+ | <PRE> |
||
+ | Radiusd -XXXX |
||
+ | |||
+ | Wed Jun 2 18:49:01 2010 : Error: rlm_sql (sql): Could not link driver rlm_sql_oracle: ld.so.1: radiusd: fatal: libclntsh.so.10.1: open failed: No such file or directory |
||
+ | Wed Jun 2 18:49:01 2010 : Error: rlm_sql (sql): Make sure it (and all its dependent libraries!) are in the search path of your system's ld. |
||
+ | Wed Jun 2 18:49:01 2010 : Error: radiusd.conf[10]: sql: Module instantiation failed. |
||
+ | </PRE> |
||
+ | libclntsh.so.10.1 - это часть Oracle-кликета, (что бы не добавлять библиотеки по одной) запускаю радиус |
||
+ | {{Root|<nowiki>LD_LIBRARY_PATH=/export/home/oracle/client/instantclient_10_2/ radiusd -XXXX</nowiki>}} |
||
+ | |||
+ | После чего радиус успешно запустился. |
||
+ | |||
+ | Из настройки следует обратить внимание только на: |
||
+ | <PRE> |
||
+ | # Connect info |
||
+ | server = "localhost" |
||
+ | login = "radius" |
||
+ | password = "radius" |
||
+ | # Database table configuration |
||
+ | radius_db = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SID=orcl)))" |
||
+ | </PRE> |
||
+ | Остальные настройки аналогичны другим SQL-серверам. |
||
+ | |||
+ | Проверяю: |
||
+ | {{Root|<nowiki>echo "User-Name = test,Password = test" | radclient localhost:1812 auth 123</nowiki>}} |
||
+ | |||
+ | {{Root|<nowiki>echo "User-Name = test,Password = test1111" | radclient localhost:1812 auth 123</nowiki>}} |
||
+ | (123 - это radius secret для авторизации клиента, test/test это правильная комбинация логин/пароль) |
||
+ | <BR> |
||
+ | Не останавливаясь подробно, отмечу на что обратить внимание: |
||
+ | * COMMIT после INSERT. Иначе добавленных пользователей радиус не увидит. Что вполне разумно. |
||
+ | * Я использовал SQL-фалик от второго радиуса для создания таблиц первому. Часть таблиц называются по-другому. Решил Create VIEW usergroup AS SELECT * FROM radusergroup; |
||
+ | |||
+ | ==Ссылки== |
||
⚫ |
Текущая версия на 10:36, 24 июня 2010
Сборка под Solaris 10
Сборка для соляриса вообще - занятие не для слабонервных. Особо следить что бы использовался компилятор и утилиты (automake, autoconf, libtool) из одного репозитория. Иначе последствия могут быть странными.
Сборка rlm_sql_oracle (особенности)
Обязательно нужен Оракл-клиент (с SDK), причем как на этапе сборки так и на этапе работы.
С помощью configure мне не удалось получить нормальный Makefile, потому отредактировал его руками
freeradius-server-2.1.9/src/modules/rlm_sql/drivers/rlm_sql_oracle/Makefile include ../../../../../Make.inc TARGET = rlm_sql_oracle SRCS = sql_oracle.c RLM_SQL_CFLAGS = -I/export/home/oracle/client/instantclient_10_2/sdk/include $(INCLTDL) RLM_SQL_LIBS = -L/export/home/oracle/client/instantclient_10_2 -lclntsh -lm ORACLE_HOME = /export/home/oracle/client/instantclient_10_2/ CFLAGS = -I/export/home/oracle/client/instantclient_10_2/sdk/include/ LDFLAGS = -L/export/home/oracle/client/instantclient_10_2/sdk/include/ include ../rules.mak
После чего в этом же катаалоге набираю
и получаю рабочий модуль.
rlm_sql_oracle-2.1.9.so
Однако, дальнейшие попытки собрать FreeRadius 2.1.ХХ под Solaris закончилась неудачей.
Я получал сообщение
(cd .libs && gcc -g -O2 -c -fno-builtin "radiusdS.c") rm -f .libs/radiusdS.c .libs/radiusd.nm .libs/radiusd.nmS .libs/radiusd.nmT gcc .libs/radiusdS.o -o .libs/radiusd .libs/acct.o .libs/auth.o .libs/client.o .libs/conffile.o .libs/crypt.o .libs/exec.o .libs/files.o .libs/listen.o .libs/log.o .libs/mainconfig.o .libs/modules.o .libs/modcall.o .libs/radiusd.o .libs/stats.o .libs/session.o .libs/threads.o .libs/util.o .libs/valuepair.o .libs/version.o .libs/xlat.o .libs/event.o .libs/realms.o .libs/evaluate.o .libs/vmps.o .libs/detail.o /root/src/freeradius-server-2.1.9/src/lib/.libs/libfreeradius-radius.so -lnsl -lresolv -lsocket -lposix4 -lpthread -lcrypt -lltdl -lssl -lcrypto -R/usr/local/freeradius/lib Undefined first referenced symbol in file lt__PROGRAM__LTX_preloaded_symbols .libs/modules.o ld: fatal: Symbol referencing errors. No output written to .libs/radiusd collect2: ld returned 1 exit status gmake[4]: *** [radiusd] Error 1 gmake[4]: Leaving directory `/root/src/freeradius-server-2.1.9/src/main' gmake[3]: *** [main] Error 2 gmake[3]: Leaving directory `/root/src/freeradius-server-2.1.9/src' gmake[2]: *** [all] Error 2 gmake[2]: Leaving directory `/root/src/freeradius-server-2.1.9/src' gmake[1]: *** [src] Error 2 gmake[1]: Leaving directory `/root/src/freeradius-server-2.1.9' gmake: *** [all] Error 2
Нагуглив (проблема у многих):
It's a bug in libltdl that is in Ubuntu. See /usr/include/ltdl.h on the affected system. It has a line: #define lt_preloaded_symbols lt__PROGRAM__LTX_preloaded_symbols Q: Where is lt__PROGRAM__LTX_preloaded_symbols defined or referenced? A: Nowhere. If you spend some time spelunking through the internals of libltdl, you will discover that there *is* a symbol lt_libltdl_LTX_preloaded_symbols The obvious thing to do is to change the FreeRADIUS code to add: #define lt__PROGRAM__LTX_preloaded_symbols lt_libltdl_LTX_preloaded_symbols It then compiles and runs properly. Can we close this as a FreeRADIUS bug, and report it against libltdl? Searching google for lt__PROGRAM__LTX_preloaded_symbols shows similar problems with a number of projects. I have *no* idea why this happens for some projects using libltld, and not others. I *do* know that the problem is very clear-cut: libltdl is buggy, and I hate it beyond words.
Потому, решил попробовать поставить radius из пакета
Пробуя запустить, обнаруживаю, что "все было не зря"
radiusd -XXXX Wed Jun 2 18:46:43 2010 : Error: rlm_sql (sql): Could not link driver rlm_sql_oracle: ld.so.1: radiusd: fatal: rlm_sql_oracle.so: open failed: No such file or directory Wed Jun 2 18:46:43 2010 : Error: rlm_sql (sql): Make sure it (and all its dependent libraries!) are in the search path of your system's ld. Wed Jun 2 18:46:43 2010 : Error: radiusd.conf[10]: sql: Module instantiation failed.
Т.е. другими словами, нет файла rlm_sql_oracle.so. Как раз того, что я скомпилировал на первом шаге. Поместив его к другим rlm_-файлам, получаю другую ошибку:
Radiusd -XXXX Wed Jun 2 18:49:01 2010 : Error: rlm_sql (sql): Could not link driver rlm_sql_oracle: ld.so.1: radiusd: fatal: libclntsh.so.10.1: open failed: No such file or directory Wed Jun 2 18:49:01 2010 : Error: rlm_sql (sql): Make sure it (and all its dependent libraries!) are in the search path of your system's ld. Wed Jun 2 18:49:01 2010 : Error: radiusd.conf[10]: sql: Module instantiation failed.
libclntsh.so.10.1 - это часть Oracle-кликета, (что бы не добавлять библиотеки по одной) запускаю радиус
После чего радиус успешно запустился.
Из настройки следует обратить внимание только на:
# Connect info server = "localhost" login = "radius" password = "radius" # Database table configuration radius_db = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SID=orcl)))"
Остальные настройки аналогичны другим SQL-серверам.
Проверяю:
(123 - это radius secret для авторизации клиента, test/test это правильная комбинация логин/пароль)
Не останавливаясь подробно, отмечу на что обратить внимание:
- COMMIT после INSERT. Иначе добавленных пользователей радиус не увидит. Что вполне разумно.
- Я использовал SQL-фалик от второго радиуса для создания таблиц первому. Часть таблиц называются по-другому. Решил Create VIEW usergroup AS SELECT * FROM radusergroup;