jueves, 28 de octubre de 2010

Instalar SQLplus de Oracle en Linux ( Suse)

Vamos a instalar el sqlplus en linux estos pasos son validos tanto para OpenSuse como SUSE linux entreprise server (SLES) .

1) Instalar Oracle instant client siguiendo los pasos 1 y 2 (con la versión que necesitemos para nuestro SO de 32 o 64 bits):
http://dieguz2.blogspot.com/2010/10/instalacion-del-instant-client-de.html

2) Descargar el RPM de sqlplus podemos encontrarlas
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

Descargamos el archivo (en nuestro caso de 64 bits) : oracle-instantclient11.2-sqlplus-11.2.0.2.0.x86_64.rpm

3) Instalamos el paquete
sudo rpm -Uvh oracle-instantclient11.2-sqlplus-11.2.0.2.0.x86_64.rpm

4) Verificamos que se ha instalado y dónde
rpm -ql oracle-instantclient11.2-sqlplus-11.2.0.2.0.x86_64

/usr/bin/sqlplus64
/usr/lib/oracle/11.2/client64/bin/sqlplus
/usr/lib/oracle/11.2/client64/lib/glogin.sql
/usr/lib/oracle/11.2/client64/lib/libsqlplus.so
/usr/lib/oracle/11.2/client64/lib/libsqlplusic.so

5) Añadimos la ruta a la libreria. podemos hacerlo de varias, yo he usado la opción C:

a)
Definir la variable LD_LIBRARY_PATH a nivel de usuario, editando el archivo .bashrc
echo LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib/:$LD_LIBRARY_PATH >> ~/.bashrc

b) Definir la variable LD_LIBRARY_PATH a nivel de sistema editando el archivo /etc/profile.local:
sudo echo LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib/:$LD_LIBRARY_PATH >>
/etc/profile.local
c) Añadir una entrada al /etc/ld.so.conf.
sudo echo /usr/lib/oracle/11.2/client64/lib/ > /etc/ld.so.conf.d/oracle.conf
sudo /sbin/ldconfig.


Tras estos pasos tendremos instalado el instant client.

6) Opcionalmente podemos usar un archivo tnsnames.ora para poder usar alias de nuestras conexiones. Este archivo lo crearemos en /etc/tnsnames.ora si queremos que esté compartido por todos los usuarios. Opcionalmente, si queremos colocarlo en otra ubicación distinta tenemos que definir la variable de entorno NS_ADMIN con la ruta al tnsnames.ora. Para definir la variable podemos usar el archivo ~/.bashrc a nivel local para cada usuario o /etc/profile.local para todos.

La ruta del tnsnames.ora para un Oracle instalado (sin el instant client) $ORACLE_HOME\network\admin

Relacionado:

Conexion mediante alias : tnsnames.ora
Ejemplos de TNSNAMES.ORA y LISTENER.ORA

Instalación del Oracle Instant Client y configuración de Oci8 en php y apache en Suse

Vamos a instalar el instant client de la version 11 de oracle en una máquina son Suse Linux Enterprise Server (SLES11) versión de 64 bits. Configuraremos ademas el módulo oci8 para que se cargue en php y en apache.

En la versión Enterprise necesitaremos tener algunos paquetes de desarrollo entre otros instalaremos los siguientes:
zypper in php5-devel autoconf php5-pear
Si no están en los repositorios tendremos que instalar (sólo en la versión Enterprise, en opensuse estan por defecto) el SUSE Linux Enterprise SDK 11, más info aqui
Cómo instalar SUSE Linux Enterprise SDK 11

En este caso no tenemos oracle instalado por lo que usaremos las librerías del oracle instant client para poder conectarnos a un oracle en remoto.

1- Descargar el instant client y el devel
http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

La Version 11.2.0.2.0 tienes estas url
http://download.oracle.com/otn/linux/instantclient/112020/oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm
http://download.oracle.com/otn/linux/instantclient/112020/oracle-instantclient11.2-devel-11.2.0.2.0.x86_64.rpm

2- Instalar instant client de Oracle una vez descargados
rpm -Uvh oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm
rpm -Uvh oracle-instantclient11.2-devel-11.2.0.2.0.x86_64.rpm

(para ver los archivos y las rutas que nos harán falta para configurar oci8)
rpm -ql oracle-instantclient11.2-basic-11.2.0.2.0
/usr/lib/oracle/11.2/client64/bin/adrci
/usr/lib/oracle/11.2/client64/bin/genezi
/usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1
/usr/lib/oracle/11.2/client64/lib/libnnz11.so
/usr/lib/oracle/11.2/client64/lib/libocci.so.11.1
/usr/lib/oracle/11.2/client64/lib/libociei.so
/usr/lib/oracle/11.2/client64/lib/libocijdbc11.so
/usr/lib/oracle/11.2/client64/lib/ojdbc5.jar
/usr/lib/oracle/11.2/client64/lib/ojdbc6.jar
/usr/lib/oracle/11.2/client64/lib/xstreams.jar

3-Obtener oci8, y descomprimir
wget http://pecl.php.net/get/oci8-1.4.3.tgz
tar -zxvf oci8-1.4.3.tgz
cd oci8-1.4.3/

4- configurar el modulo con la ruta del instant client ( /usr/lib/oracle/11.2/client64/lib )
phpize
./configure -with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client64/lib
5- Instalar el paquete
sudo make install

6- Verificar que se ha instalado correctamente
ls -la /usr/lib64/php5/extensions/oci8.so

7- Cambiar los permisos
sudo chmod 644 /usr/lib64/php5/extensions/oci8.so

8- Crear enlace simbólico
sudo ln -s /usr/lib/oracle/11.2/client64/lib/libnnz11.so /usr/lib64/libnnz11.so

9- Editar archivo php.ini ( /etc/php5/apache2/php.ini ) para añadir el modulo oci (que debe estar bien instalado en /usr/lib64/php5/extensions ) o bien creamos el archivo
/etc/php5/conf.d/oci8.ini para que se cargue el modulo tanto en php como en linea de comandos. En ambos casos tenemos que añadir la linea extension=oci8.so. Optamos por la segunda opción:
echo extension=oci8.so > /etc/php5/conf.d/oci8.ini
10- Reiniciar apache
rcapache2 restart

11- todo deberia estar cargado y funcionando. Podemos verificar que esta todo correcto:

11.1 ejecutando phpinfo desde linea de comandos
php -r "phpinfo();" | grep oci8

11.2 Con phpinfo en una web (con el contenido )

11.3 Comprobando si hay errores en apache
cat /var/log/apache2/error_log | grep 'oci8.so'

Fuentes:
http://en.opensuse.org/SDB:Howto_build_oci8_extension_module_for_php
http://dieguz2.blogspot.com/2007/11/opensuse-oracle-php-y-apache-oci8.html

Relacionado:
http://dieguz2.blogspot.com/2007/11/conexion-mediantes-tnsnamesora.html

miércoles, 27 de octubre de 2010

Cómo instalar SUSE Linux Enterprise 11 SDK

En la distribución de SLES 11 no viene paquetes como php5-devel ( con el comando phpize ) . No están ni el dvd original ni tampoco en los repositorios. Para poder tener acceso a esos paquetes tenemos que instalar el SUSE Linux Enterprise SDK que contiene un conjunto de paquetes orientados a la programación en varios lenguajes (C, python, perl, java, php ..). Para una descripción más detallada ver descripcion SLES SDK.

Con los siguientes pasos vamos a instalar el SDK de novell en nuestro sistema de modo que podremos acceder a los paquetes usando zypper o yast.

1) Descargar el SDK. Desde la página de SUSE Linux Enterprise SDK podremos acceder a las diferentes isos del sdk. Concretamente yo bajare la 11.
Las versiones de la 11 para diferentes arquitecturas están aqui: isos sdk 11. Hay dos ISO (dvd1 y dvd2) por cada arquitectura, sólo nos hace falta el DVD1

IMPORTANTE: Debemos estar registrados en novell para poder descargarlo.Dicho usuario contraseña se nos solicitará para descargar

Si queremos usar wget debemos especificar el usuario y contraseña novell. Por ejemplo para descargar de la imagen x86 de 64 bits:
wget --http-user=USUARIOdeNOVELL --http-password=PASSWORDdeNovell http://cdn.novell.com/prot/fQKpDcAhPVY~/SLE-11-SDK-DVD-x86_64-GM-Media1.iso

2) Instalación como root:
2.1) Ejecutamos Yast: yast
2.2) Dentro de yast ejecutamos Software/Add-on Products
2.3) En la parte de abajo pulsamos Añadir (o Alt d)
2.4) Seleccionamos Imagen Iso Local (o Alt m)
2.5) aqui buscamos el archivo iso que hemos descargado en el punto 1 y aceptamos los siguientes mensaje

Tras estos pasos deberíamos tener acceso a los paquetes de desarrollo que nos hacen falta. Podemos listar los repositorios desde yast o bien desde linea de comandos
zypper lr

Deberiamos tener un repositorio nuevo con el nombre de "SUSE-Linux-Enterprise-Software-Development-Kit-11_11-0"

martes, 26 de octubre de 2010

sftp sin ssh

La idea es configurar nuestro servidor ssh de modo que un usuario concreto tenga sftp pero no tenga shell remota (ssh). De este modo sólo permitiremos el uso de sftp y no de ssh.

Para conseguir que un usuario tenga sólo aceso a través de ftp una de las opciones es realizar lo siguiente:

1)
Crear el usuario y el home:
useradd -m sftpuser
2) Cambiar la contraseña:
passwd sftpuser
3) Para evitar que pueda acceder por ssh o a través del ordenador podemos cambiarle la shell de entrada con este comando:
chsh -s /usr/lib/ssh/sftp-server sftpuser
Si nuestra arquitectura es de 64 bits usaremos:
chsh -s /usr/lib64/ssh/sftp-server sftpuser
También podríamos utilizar otra shell como rssh: http://www.pizzashack.org/rssh/.
En este último caso tendremos que instalarlo en nuestro sistema y configurar el archivo /etc/rssh.conf

jueves, 14 de octubre de 2010

Linux : comando cut , sort , wc y uniq para contar registros unicos en un archivo de texto

Partimos de un archivo de texto en el que los registros aparecen separados por comas (csv) o por tabuladores. Este archivo puede provenir de una exportación de una tabla de la base de datos y queremos verificar si está correcto dicho archivo. Para ello usaremos algunos comandos unix para verificar el número de registros, o si el número de valores únicos de una columna es correcto.

Los comandos que usaremos serán:
- comando wc
- comando sort
- comando cut
-comando uniq

Contar el número de filas en un archivo csv

Usaremos únicamente el comnado:
wc -l archivo.csv

Que nos devolverá el número de filas

Contar el número de registros diferentes en un campo (similar a select count(distinct campo))

Suponemos que queremos ver cuantos registros diferentes del campo3 hay en archivo.csv (separador por tabuladores):
cut -f 3 archivo.csv | sort | uniq | wc -l

Si el archivo usase otro separador por ejemplo la coma ( , ) :
cut -t, -f 3 archivo.csv | sort | uniq | wc -l

Tambien podemos suprimir el comnado uniq:
cut -t, -f 3 archivo.csv | sort -u | wc -l