Debian 建構帶有 unixodbc 支持的 freeradius 軟體包
這是我想要實現的目標,我們想使用 Microsoft SQL 後端安裝 freeradius。我在網際網路上看到我們需要使用 unixodbc 驅動程序來實現這個目標。
我可以從 apt-get 設置 unixodbc 驅動程序,如果我配置 Freetds 來使用它。安裝和配置後,我可以執行測試命令:
isql -v DVSQLServer USERNAME PASSWORD +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+
這實際上是有效的。但我發現下載 freeradius tarbal 時它不能使用 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
問候
經過四天的辛勤工作,搜尋並找到了使用 UnixODBC 驅動程序建構 Freeradius 所需的一切。我想出了最終對我有用的解決方案。這個答案描述了我必須經歷的每一個步驟,以使我的 Freeradius 在 Debian Squeeze 伺服器上使用 unixodbc 與 MSSQL 後端一起工作。
編譯 Freeradius 伺服器
為了使用 MSSQL 後端安裝 Freeradius,我必須使用 unixodbc 驅動程序重新編譯 Freeradius。要啟用此驅動程序,我必須修改 Freeradius 提供的軟體包。
確保源儲存庫在您正在編譯的伺服器的**/etc/apt/sources.list中可用。**如果您缺少它們,錯誤消息是:E: You must put some ‘source’ URIs in your sources.list
以deb-src開頭的源 URI
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 軟體包,以便建構具有 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
我使用命令行對其進行了測試:
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/文件夾以保存 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 一起工作,請編輯文件並將所有**<< 32替換為convert(bigint, value)**
# 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
我在嘗試在其中插入NULL的****AcctStopTime列出現問題,因此我更改了預設列類型。
alter table radius.dbo.radacct alter column AcctStopTime datetime null;
之後,您可以再次嘗試啟動 freeradius,它應該會在 MSSQL 中收集數據。
freeradius -X
問候