FreeRadius Solaris: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
 
(не показано 9 промежуточных версий этого же участника)
Строка 1: Строка 1:
  +
[[Категория:Linux]]
  +
[[Категория:FreeRadius]]
 
=Сборка под Solaris 10=
 
=Сборка под Solaris 10=
  +
Сборка для соляриса вообще - занятие не для слабонервных. Особо следить что бы использовался компилятор и утилиты (automake, autoconf, libtool) из одного репозитория. Иначе последствия могут быть странными.
   
  +
==Сборка rlm_sql_oracle (особенности)==
  +
Обязательно нужен [http://www.oracle.com/technology/tech/oci/instantclient/index.html Оракл-клиент (с SDK)], причем как на этапе сборки так и на этапе работы.<BR>
  +
С помощью configure мне не удалось получить нормальный Makefile, потому отредактировал его руками
 
<PRE>
 
<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>
   
  +
Однако, дальнейшие попытки собрать FreeRadius 2.1.ХХ под Solaris закончилась неудачей.
It's a bug in libltdl that is in Ubuntu.
 
  +
<BR>
  +
Я получал сообщение
  +
<PRE>
  +
(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
  +
</PRE>
   
  +
Нагуглив (проблема у многих):
  +
<PRE>
  +
It's a bug in libltdl that is in Ubuntu.
 
See /usr/include/ltdl.h on the affected system. It has a line:
 
See /usr/include/ltdl.h on the affected system. It has a line:
 
 
#define lt_preloaded_symbols lt__PROGRAM__LTX_preloaded_symbols
 
#define lt_preloaded_symbols lt__PROGRAM__LTX_preloaded_symbols
 
 
Q: Where is lt__PROGRAM__LTX_preloaded_symbols defined or referenced?
 
Q: Where is lt__PROGRAM__LTX_preloaded_symbols defined or referenced?
 
A: Nowhere.
 
A: Nowhere.
 
 
If you spend some time spelunking through the internals of libltdl, you will discover that there *is* a symbol
 
If you spend some time spelunking through the internals of libltdl, you will discover that there *is* a symbol
 
 
lt_libltdl_LTX_preloaded_symbols
 
lt_libltdl_LTX_preloaded_symbols
 
 
The obvious thing to do is to change the FreeRADIUS code to add:
 
The obvious thing to do is to change the FreeRADIUS code to add:
 
 
#define lt__PROGRAM__LTX_preloaded_symbols lt_libltdl_LTX_preloaded_symbols
 
#define lt__PROGRAM__LTX_preloaded_symbols lt_libltdl_LTX_preloaded_symbols
 
 
It then compiles and runs properly.
 
It then compiles and runs properly.
 
 
Can we close this as a FreeRADIUS bug, and report it against libltdl? Searching google for
 
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.
 
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:
 
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.
 
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;
  +
  +
==Ссылки==
  +
* http://www.ioncannon.net/system-administration/136/freeradius-with-oracle/

Текущая версия на 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

После чего в этом же катаалоге набираю

#gmake

и получаю рабочий модуль.

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 из пакета

pkg-get -i freeradius

Пробуя запустить, обнаруживаю, что "все было не зря"

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-кликета, (что бы не добавлять библиотеки по одной) запускаю радиус

LD_LIBRARY_PATH=/export/home/oracle/client/instantclient_10_2/ radiusd -XXXX

После чего радиус успешно запустился.

Из настройки следует обратить внимание только на:

# 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-серверам.

Проверяю:

echo "User-Name = test,Password = test" | radclient localhost:1812 auth 123
echo "User-Name = test,Password = test1111" | radclient localhost:1812 auth 123

(123 - это radius secret для авторизации клиента, test/test это правильная комбинация логин/пароль)
Не останавливаясь подробно, отмечу на что обратить внимание:

  • COMMIT после INSERT. Иначе добавленных пользователей радиус не увидит. Что вполне разумно.
  • Я использовал SQL-фалик от второго радиуса для создания таблиц первому. Часть таблиц называются по-другому. Решил Create VIEW usergroup AS SELECT * FROM radusergroup;

Ссылки