Conexión ODBC entre Ubuntu 14.04 (Trusty Tahr) con SQL Server utilizando el Microsoft® ODBC Driver 11 for Linux

Tuve la necesidad de conectarme a un MS SQL Server (2003 en adelante) desde linux, pues bien si el linux fuese RedHat o derivadas de 64bit la mejor opción, al parecer, es utilizar el driver oficial pero si la distribución linux es otra, en particular Ubuntu 14.04 server 64 bit toca compilar por cuenta propia el driver pues el mismo no está desarrolado oficialmente para Ubuntu; buscando en la web la mejor guía (en inglés) que encontré para Debian y Ubuntu es esta pero también tienen buena información aquí y aquí; así que con este post pretendo aplicar lo escrito a Ubuntu 14.04 y tenerlo a su vez una especie de recorderis para cuando deba repetir la acción.

Preeliminares

  • Ir al directorio base

  # cd

  •  Descargar los paquetes

# wget http://download.microsoft.com/download/6/A/B/6AB27E13-46AE-4CE9-AFFD-406367CADC1D/Linux6/sqlncli-11.0.1790.0.tar.gz
# wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.2.tar.gz

Instalación de unixODBC 2.3.2

  •  Desempaquetar unixODBC

# tar xf unixODBC-2.3.2.tar.gz

  • Entramos en la carpeta creada al desempaquetar

# cd unixODBC-2.3.2

  • Vamos a modificar el script configure

# nano configure

Buscamos (con CTRL + W) la línea

LIB_VERSION="2:0:0"

y la remplazamos por

LIB_VERSION="1:0:0"

  • Ahora se procede a la instalación de unixODBC

# ./configure --disable-gui --disable-drivers --enable-stats=no --enable-iconv --with-iconv-char-enc=UTF8 --with-iconv-ucode-enc=UTF16LE
# make
# sudo make install

Preparar el sistema para la instalación del Microsoft® ODBC Driver 11 for Linux

unixODBC se instala en /usr/local/lib (pueden probarlo haciendo ls /usr/local/liby verán una serie de archivos con nombre libodbc*) sin embargo el driver de MS va a intentar buscarlo en /usr/lib, por lo que hay que agregar la ruta al /etc/ld.so.conf para que el sistema sepa que debe buscar allá

  • Abrir archivo /etc/ld.so.conf

# sudo nano /etc/ld.so.conf

agregar la linea /usr/local/lib al final (ojo, si es un ubuntu recien instalado el archivo estará vacío)

  • Ejecutar ldconfig

# sudo ldconfig

Instalación de Microsoft® ODBC Driver 11 for Linux

Vamos a resolver las dependencias del driver, para eso hacemos lo siguiente (recordar que estamos en la raiz donde descargamos los paquetes al inicio del post, sino hacer un cd y listo):

  •  Desempaquetar el Driver de MS

# tar xf sqlncli-11.0.1790.0.tar.gz

  • Entramos en la carpeta creada al desempaquetar

# cd sqlncli-11.0.1790.0

  • Listar las dependencias del driver

# ldd lib64/libsqlncli-11.0.so.1790.0

la salida debe ser como esta:

libcrypto.so.10 => not found
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fbda1d1c000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fbda1b13000)
libssl.so.10 => not found
libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007fbda16b0000)
libodbcinst.so.1 => /usr/local/lib/libodbcinst.so.1 (0x00007fbda1497000)
... en resumen 13 dependencias pero sólo 2 not found en total...

  • Lo que nos indica el sistema es que faltan dos librerias, busquemos la primera

# find / -name "libss*"

  • La salida debe tener una línea como: /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 , si les muestra eso pasen al paso de crear un symbolic link, de lo contrario se debe instalar lo siguiente:

# sudo apt-get install libssl1.0.0 libssl-dev libssl1.0.0-dbg

  • Si busquemos nuevamente las librerías deberían salir

# find / -name "libss*"
# find / -name "libcry*"

les detallo mi salida pero recuerden que puede tener numeros después del so:

/usr/lib/x86_64-linux-gnu/libssl.so
/usr/lib/x86_64-linux-gnu/libcrypto.so

  • Ir al directorio /usr/lib/

# cd /usr/lib/

  • Crear dos symbolic link entre los archivos reportados en x86_64-linux-gnu/ y lo que resutaba en not found anteriormente

# sudo ln -s x86_64-linux-gnu/libssl.so libssl.so.10
# sudo ln -s x86_64-linux-gnu/libcrypto.so libcrypto.so.10

  • Listar nuevamente las dependencias del driver y ya no deberían presentarse lineas con  not found

# ldd lib64/libsqlncli-11.0.so.1790.0

  • Regresar al directorio del driver

# cd sqlncli-11.0.1790.0/

  • Instalar el driver (primero muestra texto y luego pide ingresar YES)

# sudo bash ./install.sh install --force

Mi salida fue la siguiente

./install.sh: line 233: rpm: command not found
Checking for 64 bit Linux compatible OS ..................................... OK
Checking required libs are installed ................................. NOT FOUND
unixODBC utilities (odbc_config and odbcinst) installed ............ NOT CHECKED
unixODBC Driver Manager version 2.3.0 installed .................... NOT CHECKED
unixODBC Driver Manager configuration correct ...................... NOT CHECKED
Microsoft SQL Server ODBC Driver V1.0 for Linux already installed .. NOT CHECKED
Microsoft SQL Server ODBC Driver V1.0 for Linux files copied ................ OK
Symbolic links for bcp and sqlcmd created ................................... OK
Microsoft SQL Server ODBC Driver V1.0 for Linux registered ........... INSTALLED

  • Finalmente, probar la instalacion conectandose a un servidor

# sqlcmd -S 192.168.99.999 -U usuario -P password

 

Yo lo he probado con MS SQL 2005, pero debería funcionar con cualquier MS SQL 2003 o superior. Para MS SQL 2000 hay que utilizar FreeTDS cuya instalacion se detalla en el siguiente post.

13 comentarios

Ir al formulario de comentarios

    • Kevin en 14 marzo, 2016 a las 9:22
    • Responder

    Hola nemo;
    tengo el problema siguiente:

    no puedo instalar — > install libssl1.0.0 libssl-dev libssl1.0.0-dbg
    me muestra —–> install libssl1.0.0 libssl-dev libssl1.0.0-dbg
    install: el objetivo «libssl1.0.0-dbg» no es un directorio

    alguna sugerencia? hice todo tal cual el tutorial, te agradezco la ayuda y el tiempo =)

    1. Que tal Kevin, disculpa la demora, por cuestiones laborales no reviso muy seguido el blog. A ver, es mi error, la línea de código correcta es: sudo apt-get install libssl-dev libssl1.0.0 libssl1.0.0-dbg, es decir faltaba el «sudo apt-get» al inicio, por favor pruébalo así y debería funcionar.

    • lalo en 1 septiembre, 2015 a las 13:46
    • Responder

    Nemo.
    Disculpa una pregunta.
    No me esta encontrando las lib y tampoco me permite instalarlas.
    Estaré haciendo algo mal. u omitiendo un paso

    1. Disculpa la tardanza, he tenido algo descuidado el blog. Resolviste el problema? sino, envíame el comando que ejecutas y el error que te muestra a ver si logro ayudarte.

    • Jeison en 30 julio, 2015 a las 14:20
    • Responder

    saludos,

    Estoy creando una aplicación en python que se ejecutará en linux, y requiero hacer una conexión con bd sybase(Adative Server Anywhere 9.0) ubicada en en windows 7. ¿Cuál sería la forma mas óptima de lograr la conexión?

    He realizado intentos fallidos con sqlanydb y pymssql…

    Agradecido con cualquier ayuda…

    1. Has probado unixODBC + FreeTDS ?? Aquí hay un ejemplo para conectar con MS SQL, pero te puede servir de base para sybase http://blog.espol.edu.ec/nemo/2014/07/30/conexion-odbc-entre-ubuntu-14-04-trusty-tahr-con-sql-server-utilizando-freetds/

  1. Oh, perdon, no habia encontrado ntutoriales de esto en español. Una pregunta esta instalación de unixODBC incluye las librerias de desarollo (unixODBC-dev) ? para poder conectarme desde un programa desarrollado en C.

    Saludos cordiales

    1. Tengo entendido que sí, pero no estoy muy seguro de ello, toca probarlo.

  2. does this include the development libraries ? I wanna connect from C.

    Greatings

    • Paty en 24 junio, 2015 a las 13:13
    • Responder

    Soy nueva en Linux, ya probe la conexion de esta forma por la terminal, pero ahora como hago para realizar la conexion desde php? que debo hacer?

    1. Disculpa Paty, he tenido muy descuidado el blog.

      Por otro lado php no es mi fuerte (soy estadístico no programador) pero tengo entendido que en php debes usar los comandos odbc_execute() y odbc_prepare()

  3. Gracias Mario, me alegra que te haya servido

    • Mario en 25 septiembre, 2014 a las 10:35
    • Responder

    Muy bueno el manual, gracia a el pude conectarme perfectamente a SQL Server desde linux. Gracias.

Deja un comentario

Tu email nunca se publicará.


Ir a la barra de herramientas