这是我想要实现的,我们想要使用Microsoft SQL后端安装freeradius。 我在网上阅读,我们需要使用unixodbc驱动程序来实现这个目标。
我能够从apt-get设置unixodbc驱动程序,如果我configurationFreetds使用它。 安装和configuration后我可以运行testing命令:
isql -v DVSQLServer USERNAME PASSWORD +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+
这实际上是工作。 但是我发现下载的freeradius tarbal不能使用rlm_sql_unixodbc驱动程序,因为在debian / rules文件中他们使用标志来编译它:
--without-rlm_sql_unixodbc
我认为这将是很容易从debian /规则中删除标志,只需使用命令行构build我自己的包:
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
问候
经过四天的努力寻找和find所有需要与UnixODBC司机build立Freeradius的一切。 我想出了这个解决scheme,终于适合我。 这个答案描述了我必须经历的每一个步骤,以使我的Freeradius能够在Debian Squeeze服务器上使用unixodbc在MSSQL后端上工作。
编译Freeradius服务器
为了使用MSSQL后端安装Freeradius,我必须使用unixodbc驱动程序重新编译Freeradius。 为了启用这个驱动程序,我必须修改Freeradius提供的软件包。
确保源代码库在正在编译的服务器的/etc/apt/sources.list中可用。 如果你错过了它们,错误信息是: E:你必须在你的sources.list中放置一些“源”URI
源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
创build以下缺less的符号链接
ln -s /usr/lib/libodbc.so.1 /usr/lib/libodbc.so
获取freeradius tarball
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
用–with-rlm_sql_unixodbcreplace–without-rlm_sql_unixodbc (近似于第90行)
构buildDebian软件包
要构builddebian包,请确保已安装依赖关系,然后执行以下命令行:
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
现在,您已经成功构build了软件包,移动到父目录,在那里你应该罚款所有你需要的debian软件包,以build立与unixodbc支持freeradius服务器。
您可以使用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
我使用命令行testing了它:
freeradius -X
然后我configuration了SQL连接。
我必须在这三个文件中configurationunixodbc驱动程序:
/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命令行testing连接
isql -v MSSQLServer your_db_username 'your_db_password' # what you should see +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
现在是configurationFreeradius使用这个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
在继续创build/ etc / freeradius / sql / mssql /文件夹来保存MSSQL的dialup.conf文件之前。
mkdir -p /etc/freeradius/sql/mssql/
我必须从freeradius-mysql_2.2.0 + git_i386.deb包中取出dialup.conf文件。
从freeradius-mysql包复制文件后,将其复制到/etc/freeradius/sql/mssql/dialup.conf 。
为了使它与MSSQL一起工作,编辑文件并用convert(bigint,value)replace所有的<< 32 。
# MySQL version '%{%{Acct-Input-Gigawords}:-0}' << 32 # MSSQL modified version convert(bigint, '%{%{Acct-Input-Gigawords}:-0}')
保存你的文件,应该是这样的。 如果您没有MSSQL模式,请查看freeradius wiki。 http://wiki.freeradius.org/config/MS%20SQL%20DDL%20script
我有一个AcctStopTime列的问题,它试图插入一个NULL ,所以我改变了默认的列types。
alter table radius.dbo.radacct alter column AcctStopTime datetime null;
之后,你可以尝试再次启动freeradius,它应该收集MSSQL中的数据。
freeradius -X
问候