Sql-Server

Debian 建構帶有 unixodbc 支持的 freeradius 軟體包

  • November 22, 2012

這是我想要實現的目標,我們想使用 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
'%{&#37;{Acct-Input-Gigawords}:-0}'  &lt;&lt; 32

# MSSQL modified version
convert(bigint, '%{&#37;{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

問候

引用自:https://serverfault.com/questions/448365