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
С уважением