Debian собрал пакет freeradius с поддержкой unixodbc

Вот то, чего я пытаюсь достичь, мы хотим установить freeradius, используя бэкэнд Microsoft SQL. Я прочитал в интернете, что для достижения этой цели нам нужно использовать драйвер unixodbc.

Я могу настроить драйвер unixodbc из apt-get и, если я настрою Freetds, использовать его. После установки и настройки я могу запустить тестовую команду:

isql -v DVSQLServer USERNAME PASSWORD
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+

Это на самом деле работает. Но я обнаружил, что при загрузке тарбала freeradius он не может использовать драйвер rlm_sql_unixodbc, потому что в файле debian / rules они компилируют его, используя флаг:

--without-rlm_sql_unixodbc

Я думал, что будет легко удалить флаг из debian / rules и просто собрать свой собственный пакет с помощью командной строки:

fakeroot dpkg-buildpackage -b -uc

Но это терпит неудачу с ошибкой:

checking for SQLConnect in -lodbc... no
checking for sql.h... yes
configure: error: set --without-rlm_sql_unixodbc to disable it explicitly.
configure: error: ./configure failed for ./drivers/rlm_sql_unixodbc
configure: error: ./configure failed for src/modules/rlm_sql
make: *** [config.status] Error 1
dpkg-buildpackage: error: debian/rules build gave error exit status 2

У вас есть идеи о том, что мне не хватает, чтобы успешно скомпилировать?

Я также могу сказать вам, что я выполнил команду apt-get, чтобы убедиться, что у меня есть все зависимости.

apt-get build-dep -y unixodbc freetds-bin freetds-common freetds-dev tdsodbc freeradius
apt-get install -y unixodbc freetds-bin freetds-common freetds-dev tdsodbc libssl-dev dpkg-dev

С уважением

1 ответ

Решение

После четырех дней напряженной работы по поиску и поиску всего необходимого для сборки Freeradius с драйверами UnixODBC. Я пришел к такому решению, которое, в конце концов, отлично работает для меня. В этом ответе описываются все шаги, которые мне пришлось пройти, чтобы мой Freeradius работал с бэкэндом MSSQL, используя unixodbc на сервере Debian Squeeze.

Компиляция сервера Freeradius

Чтобы установить Freeradius с помощью бэкэнда MSSQL, мне пришлось перекомпилировать Freeradius с помощью драйверов unixodbc. Чтобы включить этот драйвер, мне пришлось изменить пакет, предоставленный Freeradius.

Убедитесь, что исходный репозиторий доступен в /etc/apt/sources.list сервера, с которого вы компилируете. Если вы их пропустили, появится сообщение об ошибке: E: Вы должны поместить некоторые "исходные" URI в ваш sources.list

Исходный URI, запускаемый deb-src

deb http://debian.mirror.rafal.ca/debian squeeze main contrib non-free
deb-src http://debian.mirror.rafal.ca/debian squeeze main contrib non-free # Source URI
deb http://debian.mirror.rafal.ca/debian-security squeeze/updates main contrib non-free
deb-src http://debian.mirror.rafal.ca/debian-security squeeze/updates main contrib non-free # Source URI

Прежде чем вы сможете скомпилировать пакеты freeradius, вам нужно установить зависимости этих зависимостей:

apt-get build-dep -y unixodbc unixodbc-dev freetds-bin quilt freetds-common freetds-dev \
tdsodbc freeradius libiodbc2-dev

Установить пакеты зависимостей

apt-get install -y unixodbc libiodbc2-dev freetds-bin freetds-common freetds-dev tdsodbc \
libssl-dev dpkg-dev quilt libssl-dev libpam0g-dev libmysqlclient-dev libgdbm-dev \
libsasl2-dev libperl-dev libpcap-dev python-dev libsnmp-dev libpq-dev libltdl3-dev snmp

Создайте следующую недостающую символическую ссылку

ln -s /usr/lib/libodbc.so.1 /usr/lib/libodbc.so

Получить фрирайди тарбол

wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.2.0.tar.gz
tar zxf freeradius-server-2.2.0.tar.gz
cd freeradius-server-2.2.0

Отредактируйте файл debian / rules

vim freeradius-server-2.2.0/debian/rules

Замените --without-rlm_sql_unixodbc (приблизительно строка 90) на --with-rlm_sql_unixodbc

Сборка пакетов Debian

Чтобы собрать пакет debian, убедитесь, что вы установили зависимости, а затем выполните следующую командную строку:

fakeroot dpkg-buildpackage -b -uc -d

ls ../

freeradius_2.2.0+git_i386.deb
freeradius-common_2.2.0+git_all.deb
freeradius-dbg_2.2.0+git_i386.deb
freeradius-dialupadmin_2.2.0+git_all.deb
freeradius-iodbc_2.2.0+git_i386.deb
freeradius-krb5_2.2.0+git_i386.deb
freeradius-ldap_2.2.0+git_i386.deb
freeradius-mysql_2.2.0+git_i386.deb
freeradius-postgresql_2.2.0+git_i386.deb
freeradius-utils_2.2.0+git_i386.deb
libfreeradius2_2.2.0+git_i386.deb
libfreeradius-dev_2.2.0+git_i386.deb

Теперь, когда вы успешно скомпилировали пакеты, перейдите в родительский каталог, и там вы должны собрать все пакеты debian, которые вам нужны, чтобы собрать сервер freeradius с поддержкой unixodbc.

Вы можете установить их с помощью командной строки dpkg.

dpkg -i freeradius_2.2.0+git_i386.deb freeradius-common_2.2.0+git_all.deb freeradius-utils_2.2.0+git_i386.deb \
libfreeradius2_2.2.0+git_i386.deb

После того, как я установил пакеты freeradius, я остановил службу.

service freeradius stop

Я проверил это с помощью командной строки:

freeradius -X

Затем я настроил соединение SQL.

Мне пришлось настроить драйвер unixodbc в этих трех файлах:

файла /etc/odbc.ini

[MSSQLServer]
Driver          = FreeTDS
Description     = ODBC connection via FreeTDS
Trace           = No
ServerName      = MSSQLServer
Database        = radius
port            = 1433
tds_version     = 7.0
language        = us_english

/etc/odbcinst.ini

[FreeTDS]
Description     = TDS driver (MS SQL)
Driver          = /usr/lib/odbc/libtdsodbc.so
Setup           = /usr/lib/odbc/libtdsS.so
FileUsage       = 1

/etc/freetds/freetds.conf

[MSSQLServer]
    host = mssqlserver.example.com
    port = 1433
    tds version = 7.0

Проверьте соединение с помощью командной строки isql

isql -v MSSQLServer your_db_username 'your_db_password'

# what you should see
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 

Настало время настроить Freeradius для использования этого unixodbc.

Вот изменения, которые я сделал в файле sql.conf, чтобы он заработал.

/etc/freeradius/sql.conf

database = "mssql"

#
#  Which FreeRADIUS driver to use.
#
driver = "rlm_sql_unixodbc"

# Connection info:
server = "MSSQLServer"
login = "your_db_username"
password = "your_db_password"

# Database table configuration for everything except Oracle
radius_db = "radius"

$INCLUDE sql/${database}/dialup.conf

Прежде чем продолжить, создайте папку / etc / freeradius / sql / mssql /, в которой будет находиться файл dialup.conf для MSSQL.

mkdir -p /etc/freeradius/sql/mssql/

Мне пришлось взять файл dialup.conf из пакетов freeradius-mysql_2.2.0 + git_i386.deb.

После того, как вы скопировали файл из пакета freeradius-mysql, скопируйте его здесь /etc/freeradius/sql/mssql/dialup.conf.

Чтобы заставить его работать с MSSQL, отредактируйте файл и замените все << 32 на преобразование (bigint, value)

# MySQL version
'%{%{Acct-Input-Gigawords}:-0}'  << 32

# MSSQL modified version
convert(bigint, '%{%{Acct-Input-Gigawords}:-0}')

Сохраните свой файл, и это должно быть. Если у вас нет схемы MSSQL, пожалуйста, посмотрите вики Freeradius. http://wiki.freeradius.org/config/MS%20SQL%20DDL%20script

У меня была проблема со столбцом AcctStopTime, он пытался вставить в него значение NULL, поэтому я изменил тип столбца по умолчанию.

alter table radius.dbo.radacct
alter column AcctStopTime datetime null;

После этого вы можете попробовать снова запустить Freeradius, и он должен собрать данные в MSSQL.

freeradius -X

С уважением

Другие вопросы по тегам