Debian constrói o pacote freeradius com suporte a unixodbc

3

Aqui está o que eu estou tentando alcançar, nós queremos instalar o freeradius usando um backend Microsoft SQL. Eu li na internet que precisamos alcançar esse objetivo usando o driver unixodbc.

Eu sou capaz de configurar o driver unixodbc do apt-get e se eu configurar o Freetds para usá-lo. Após a instalação e configurações, posso executar o comando test:

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

Isso está realmente funcionando. Mas eu descobri o download do tarbal freeradius que ele não pode usar o driver rlm_sql_unixodbc, porque no arquivo debian / rules ele compila usando o flag:

--without-rlm_sql_unixodbc

Eu achei que seria fácil remover o sinalizador do debian / rules e apenas criar meu próprio pacote usando a linha de comando:

fakeroot dpkg-buildpackage -b -uc

Mas está falhando com o erro:

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

Você tem alguma ideia do que estou perdendo para compilá-lo com sucesso?

Também posso dizer que executei este comando apt-get para ter certeza de que estava tendo todas as dependências.

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

Atenciosamente

    
por drivard 13.11.2012 / 21:42

1 resposta

2

Após quatro dias de trabalho árduo na busca e descoberta de tudo o que é necessário para construir o Freeradius com os drivers UnixODBC. Eu cheguei com essa solução que finalmente funciona bem para mim. Esta resposta descreve todos os passos que eu tive que percorrer para fazer meu Freeradius trabalhar com um backend MSSQL usando o unixodbc em um servidor Debian Squeeze.

Compilando o servidor Freeradius

Para instalar o Freeradius usando o backend do MSSQL, eu tive que recompilar o Freeradius usando os drivers unixodbc. Para habilitar este driver eu tive que modificar o pacote fornecido pelo Freeradius.

Assegure-se de que o repositório de origem esteja disponível no /etc/apt/sources.list do servidor do qual você está compilando. Se você está sentindo falta deles, a mensagem de erro é: E: Você deve colocar alguns URIs 'fonte' em seu sources.list

Um URI de origem é iniciado por 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

Antes de poder compilar os pacotes freeradius você precisa instalar as dependências das dependências:

apt-get build-dep -y unixodbc unixodbc-dev freetds-bin quilt freetds-common freetds-dev \
tdsodbc freeradius libiodbc2-dev

Instalar pacotes de dependências

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

Crie o seguinte link simbólico em falta

ln -s /usr/lib/libodbc.so.1 /usr/lib/libodbc.so

Obtenha o tarball 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

Edite o arquivo debian / rules

vim freeradius-server-2.2.0/debian/rules

Substitua o - sem-rlm_sql_unixodbc (aproximadamente linha 90) por - com-rlm_sql_unixodbc

Construa os pacotes Debian

Para construir o pacote debian, certifique-se de instalar as dependências e, em seguida, execute a seguinte linha de comando:

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

Agora que você construiu os pacotes com sucesso, mova-se para o diretório pai e lá você deverá refinar todos os pacotes debian necessários para construir o servidor freeradius com o suporte unixodbc.

Você pode instalá-los usando a linha de comando do 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

Depois de instalar os pacotes freeradius, parei o serviço.

service freeradius stop

Eu testei usando a linha de comando:

freeradius -X

Então eu configurei a conexão SQL.

Eu tive que configurar o driver unixodbc dentro desses três arquivos:

/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

Teste a conexão usando a linha de comando isql

isql -v MSSQLServer your_db_username 'your_db_password'

# what you should see
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 

Agora é a hora de configurar o Freeradius para usar este unixodbc.

Aqui estão as alterações que fiz no arquivo sql.conf para que funcione.

/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

Antes de continuar, crie a pasta / etc / freeradius / sql / mssql / para manter o arquivo dialup.conf para MSSQL.

mkdir -p /etc/freeradius/sql/mssql/

Eu tive que pegar o arquivo dialup.conf dos pacotes freeradius-mysql_2.2.0 + git_i386.deb .

Depois de ter copiado o arquivo do pacote freeradius-mysql, copie-o aqui /etc/freeradius/sql/mssql/dialup.conf .

Para fazê-lo funcionar com o MSSQL, edite o arquivo e substitua todos os arquivos < < 32 por um convert (bigint, value)

# MySQL version
'%{%{Acct-Input-Gigawords}:-0}'  << 32

# MSSQL modified version
convert(bigint, '%{%{Acct-Input-Gigawords}:-0}')

Salve seu arquivo e deve ser isso. Se você não possui o esquema MSSQL, por favor, veja o wiki do freeradius. link

Eu tive um problema com a coluna AcctStopTime que estava tentando inserir um NULL dentro dele, então alterei o tipo de coluna padrão.

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

Depois disso, você pode tentar novamente iniciar o freeradius e coletar os dados no MSSQL.

freeradius -X

Atenciosamente

    
por 22.11.2012 / 21:24