Назад | Перейти на главную страницу

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

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

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

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

Это действительно работает. Но я обнаружил, что загружая tarbal 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

С уважением

После четырех дней напряженной работы по поиску и поиску всего необходимого для сборки 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

Получите тарбол freeradius

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

Прежде чем продолжить, создайте / и т. д. / 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 по convert (bigint, значение)

# 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 столбец, в который он пытался вставить НОЛЬ внутри него, поэтому я изменил тип столбца по умолчанию.

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

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

freeradius -X

С уважением