Recursos python para uso de comandos SAP Hana Client sobre Windows

Hace poco debí realizar unas tareas administrativas para dejar tareas programadas de SAP Hana Client sobre Windows. Inicialmente la idea era dejar algunos archivos scripts batch, pero python maneja un mayor número de herramientas que pueden ser útiles a la hora de desarrollar tareas como el manejo de archivos, procesos, directorios del sistema, comandos propios del sistema. En este caso, se necesitaba casi todo lo mencionado, incluyendo enviar un correo electrónico junto con un archivo adjunto.

Pero el ejemplo de esta publicación estará enfocado en la creación de un script para leer una sentencia sql sobre una base de datos de SAP Hana y dejará un archivo de texto plano con la salida de la información consultada.

El archivo sql con la sentencia lo llamé sentencia.sql, y quedó de la siguiente manera:

SELECT T0."DocEntry",T0."DocNum" FROM DATABASE_NAME.OINV T0 WHERE T0."DocStatus" LIKE 'C';

En donde se realiza una consulta a la base de datos DATABASE_NAME y su tabla OINV, solo a facturas cerradas.

Luego, en el equipo con Windows, instalé python, posteriormente algunas librearías desde repositorios python a través de pip, por ejemplo:

pip install pypiwin32

Una vez con las herramientas instaladas, se realiza el script que se requiere, lo llamé consulta_sap_hana.py, la forma sencilla que usé para realizar la prueba fue la siguiente:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import win32api

HANA_SERVER = 'IP_SERVIDOR'
PORT_SERVER = 'PUERTO_CONEXIÓN'
USER_ADMIN = 'SYSTEM'
PASS_ADMIN = 'PASSWORD'

win32api.WinExec('"C:/Program Files (x86)/SAP/hdbclient/hdbsql.exe" -n '+HANA_SERVER+':'+PORT_SERVER+' -u '+USER_ADMIN+' -p '+PASS_ADMIN+' -c ";" -o "C:/Users/felix/programacion/python/resultado_facturas.txt" -I "C:/Users/felix/programacion/python/sentencia.sql"')

Desde el terminal propio de Windows se puede ejecutar el script simplemente ejecutando con el nombre consulta_sap_hana.py. Esto creará un archivo llamado resultado_facturas.txt dentro de la ruta definidaen la línea del comando en el script.

Posted in Python, SAP, Windows | Leave a comment

DmiDecode sobre Windows

Una de las herramientas básicas para validar elementos de hardware sobre un sistema operativo GNU/Linux, es el programa dmidecode, dicho programa hace despliegues de información de diferentes elementos básicos de hardware e información de modelo y características del equipo o máquina.

Para el caso de Windows no conozco uno, pero debe existir alguno parecido, sin embargo usando la shell Cygwin, se pueden rescatar algunos comandos útiles que normalmente se usan sobre GNU/Linux, tal es el caso del comando dmidecode, para esto debemos inicialmente buscar en su web oficial la descarga del dmidecode dependiendo de la arquitectura del sistema operativo Windows que se está usando.

Una vez descargado el programa, se descomprime y debería aparece un pequeño árbol parecido al siguiente:

contrib
man
manifest
sbin

Dentro del directorio sbin, existen unos programas que se convertirán en comandos, estos deben copiarse dentro de la estructura de Cygwin, que en teoría debería ser la siguiente:

C:\cygwin64\bin

Los copio en el directorio bin debido a que si se copian dentro de sbin, no tendría privilegios para ejecutarlos con mi usuario de sistema por defecto.

Una vez copiados en la ruta mencionada, se puede realizar una prueba de la siguiente manera:

dmidecode -t 17

Un ejemplo que muestra información de RAM.

Posted in Windows | Leave a comment

SIGNATURE.SMF en SAP Hana

Cuando se realiza una instalación de Hana, los paquetes originales de este sistema vienen con una extensión .SAR, para desempaquetar o descomprimir dichos paquetes, se debe usar una herramienta llamada SAPCAR (Recomiendo esta versión de SAPCAR), el comando típico sería:

SAPCAR -xvf PAQUETE.SAR

Deberían ser 4 los paquetes principales de Hana para descomprimir, y de acuerdo a la arquitectura de la máquina, por ejemplo, si mi máquina es de arquitectura de 64 bits, entonces debería usar los siguientes programas:

  • HANA_AFL100_102P_50.SAR
  • HANA_CLIENT100_102_5.SAR
  • HANA_SERVER100_102_5.SAR
  • HANA_STUDIO100_102_5.SAR

Dentro del contenido de cada uno de estos paquetes, existe un archivo llamado SIGNATURE.SMF, es simplemente un archivo de texto con una pequeña lista de todo el contenido del paquete y viene bajo una llave de seguridad o firma digital.

Existe una manera práctica para descomprimir todos los archivos de manera simultánea, que pudiera ser:

SAPCAR -xvf "HANA_*.SAR"

Luego de descomprimir, deberían quedar unos directorios parecidos a los siguientes:

  • SAP_HANA_AFL
  • SAP_HANA_CLIENT
  • SAP_HANA_DATABASE
  • SAP_HANA_STUDIO

Sin embargo, cuando el comando empieza descomprimir el primero de la lista, éste extrae la información incluyendo el SIGNATURE, pero cuando el segundo archivo empieza a descomprir, éste sobreescribe el archivo SIGNATURE del primero y así sucecivamente. Posteriormente, Esto causa un problema al momento de realizar la instalación bajo el comando hdblcmgui.

Se muestra un mensaje parecido al siguiente:

mensaje_firma

Para evitar este error, debemos descomprimir un paquete por paquete, cuando se descomprime el primero, se guarda el SIGNATURE en otro directorio, puede ser dentro del mismo directorio del paquete que se ha descomprimido, y así con los siguientes paquetes, guardar su respectivo SIGNATURE en sus respectivos directorios.

Luego, se concatenan todos los SIGNATURE en uno solo. En el directorio padre de todos los directorios de los paquetes descomprimidos, se pudiera ser de la siguiente manera:

cat SAP_HANA_AFL/SIGNATURE.SMF SAP_HANA_CLIENT/SIGNATURE.SMF SAP_HANA_DATABASE/SIGNATURE.SMF SAP_HANA_STUDIO/SIGNATURE.SMF > SIGNATURE.SMF

Una vez haciendo este cat, se puede continuar la instalación con el comando hdblcmgui y en teoría debería pasar sin problemas.

Posted in SAP, SuSE | Leave a comment

Versión SAPCAR para SAP Hana

Realizando unas instalaciones de SAP Hana sobre SuSE, una de las herramientas que se usa para descomprimir los paquetes de Hana es el SAPCAR, recientemente interactué con varias versiones, donde solo una versión me funcionó muy bien, otras fallaron con diferentes versiones de paquetes .SAR de Hana.

La versión que me funcionó sin problemas fue la SAPCAR_315-20010450.EXE

Esta versión me funcionó para los paquetes de SAP Hana 9.1 con revisión 102.

Posted in Recomendación, SAP | 1 Comment

Casos Warning sobre SAP Hana (1)

Existe un pool de buen material de SAP Hana en Internet y el portal de oficial de SAP, sin embargo, existen muchos detalles que no dicen al momento de presentarse algunos inconvenientes. La distribución oficial de Linux para SAP Hana es SuSE, considero que es una distribución estable e intuitiva, viene de la rama Red Hat. Aún así, dentro del proceso de instalación de la suite se presentan casos de dependencias o problemas que se resuelven exclusivamente sobre el sistema operativo.

Por ejemplo está el caso del siguiente Warning:

mensaje_warning_1

Según pareciera existe una versión de SAP B1 para Hana instalada pero no es así, cuando se busca en el directorio /usr/sap/SAPBusinessOne no existe el directorio SAPBusinessOne, en teoría lo que pudo pasar es que se eliminó de manera manual y durante la instalación del SAP B1 para Hana, aparece el mencionado Warning, no más con eliminar el rpm del sistema operativo, podemos continuar con la instalación sin que aparezca nuevamente el aviso.

Inicialmente debemos corroborar qué paquetes de SAP B1 están instalados en el sistema operativo, estos paquetes son una serie de rpm, como root que podemos listar:

rpm -qa | grep B1

Debería aparecer una lista parecida a la siguiente:

B1ServerToolsLicense-9.1021011-0
B1ServerOI-9.1021011-0
B1ServiceLayerApacheWebServer-9.1021011-0
B1AnalyticsPlatformCommon-9.1021011-0
B1AnalyticsTomcatConfiguration-9.1021011-0
B1ServerToolsJava64-9.1021011-0
B1ServerToolsSLD-9.1021011-0
B1ServerSHR-9.1021011-0
B1ServerHelp_EN-9.1021011-0
B1AnalyticsTomcatEntSearch-9.1021011-0
B1ServiceLayerComponent-9.1021011-0
B1ServerToolsCommon-9.1021011-0
B1ServerToolsExtensionManager-9.1021011-0
B1ServerToolsXApp-9.1021011-0
B1ServerAddons-9.1021011-0
B1AnalyticsTomcatDashboard-9.1021011-0
B1ServerToolsTomcat-9.1021011-0
B1BackupService-9.1021011-0
B1AnalyticsTomcatReplication-9.1021011-0
B1ServerToolsSupport-9.1021011-0
B1ServerToolsMailer-9.1021011-0
B1AnalyticsOlap-9.1021011-0

Si se muestra la lista de programas relacionados con SAP B1 en paquetes de SuSE y el directorio /usr/sap/SAPBusinessOne no existe, es que muy probablemente se haya eliminado a mano la suite, se deben eliminar estos programas de la siguiente forma:

rpm -e --nodeps NOMBRE_PAQUETE_A_BORRAR

Ejemplo:

rpm -e --nodeps B1ServerToolsJava64-9.1021011-0

Posteriormente, se puede intentar la instalación como nueva sobre el sistema.

Posted in Linux, SAP, SuSE | Leave a comment

Cambiar modos o permisos en Linux

Una de las maneras para controlar accesos de forma más sencilla en Linux es a través del uso de permisos o cambio de modos para archivos y directorios. Es una tareas primordial al momento de administrar servicios y recursos sobre el sistema operativo.

Inicialmente se debe conocer la estructura de cómo vienen desglosados los permisos, esto se puede visualizar cuando listamos el contenido de un directorio determinado con:

ls -l

En dicho directorio puede haber tanto archivos como subdirectorios, se verían listados:

-rwxr--r--+ 1 Félix Félix 0 Jun  2 09:13 archivo1
-rwxr--r--+ 1 Félix Félix 0 Jun  2 09:13 archivo2
-rwxr--r--+ 1 Félix Félix 0 Jun  2 09:13 archivo3
drwxr-xr-x+ 1 Félix Félix 0 Jun  2 09:13 directorio1
drwxr-xr-x+ 1 Félix Félix 0 Jun  2 09:13 directorio2

En sistemas Unix como Linux se considera que todo es un arhivo, existen otros tipos de archivos como enlaces simbólicos o dispositivos que tienen su respectiva letra o símbolo que los representa al inicio de cada línea como en el ejemplo anterior. Pero acá haré ejemplo de directorios y archivos:

  • Toda línea que empieza con guión indica que es un archivo
  • Toda línea que empieza con la letra d indica que es un directorio

Cada archivo y directorio viene amarrado a una serie de permisos desglosados en tres grupos: dueño, grupo y otros. Después del primer símbolo o caracter que indica el tipo de archivo, viene una serie de letras, las que se explican en el esquema básico:

Esquema básico

Símbolo Significado Valor
r Lectura 4
w Escritura 2
x Ejecución 1

Estas tareas de cambio de modos o permisos, se pueden realizar tanto en el ambiente gráfico como en el ambiente de comandos. Haré ejemplos en comandos y de dos formas, de la forma literal y la forma numérica, como para tener dos alternativas de uso.

Ejemplos en modo literal

Ver permisos de archivo1:

ls -l archivo1

-rwxr--r--+ 1 Félix Félix 0 Jun  2 09:13 archivo1

Agrego permisos de ejecución para el grupo en archivo1:

chmod g+x archivo1

Vuelvo a listar para ver sus permisos después del cambio:

ls -l archivo1

-rwxr-xr--+ 1 Félix Félix 0 Jun  2 09:13 archivo1

Agrego permisos de escritura para el grupo y otros en archivo1:

chmod g+w,o+w archivo1

Vuelvo a listar para ver sus permisos después del cambio:

ls -l archivo1

-rwxrwxrw-+ 1 Félix Félix 0 Jun  2 09:13 archivo1

Agrego permisos de ejecución para todos en archivo1:

chmod +x archivo1

Vuelvo a listar para ver sus permisos después del cambio:

ls -l archivo1

-rwxrwxrwx+ 1 Félix Félix 0 Jun  2 09:13 archivo1

Quitar permisos de ejecución para todos en archivo1:

chmod -x archivo1

Vuelvo a listar para ver sus permisos después del cambio:

ls -l archivo1

-rw-rw-rw-+ 1 Félix Félix 0 Jun  2 09:13 archivo1

Así se puede jugar un poco visualizando en cada cambio que se realiza sobre el archivo, así como se realiza en archivo1 se puede realizar con un directorio, con la diferencia en que los directorios pueden cambiarse modos o permisos de manera recursiva, utilizando como argumento adicional la -R, como ejemplo:

ls -ld directorio1

drwxr-xr-x+ 1 Félix Félix 0 Jun  2 09:13 directorio1

Cambio sus permisos de manera recursiva:

chmod g+w directorio1/ -R

Aquí se incide sobre el directorio y sobre su contenido de manera recursiva, es decir, todo el contenido del directorio cambiará su respectivo permiso de escritura tanto en archivos como en subdirectorios dentro de directorio1, y todos tendrán permiso de escritura para el grupo. Igualmente para quitar modo o permisos se hace como en el ejemplo de quitar permisos.

Ejemplos en modo numérico

Aquí debemos tomar en cuenta los valores del esquema básico, donde cada significado de la letra tendrá un valor específico, y para cada grupo de modo o permisos, se sumarían estos valores, es decir, si en archivo2 tenemos:

ls -l archivo2

-rwxr--r--+ 1 Félix Félix 0 Jun  2 09:13 archivo2

En valor numérico sería la suma de modos:

  • Para el dueño: rwx = 4+2+1 = 7
  • Para el grupo: r– = 4+0+0 = 4
  • Para el otros: r– = 4+0+0 = 4

El valor general sería: 744

Si queremos otorgar permisos de escritura a grupo y otros, desglosamos de la siguiente manera:

  • Para el dueño: rwx = 4+2+1 = 7
  • Para el grupo: rw- = 4+2+0 = 6
  • Para el otros: rw- = 4+2+0 = 6

El valor general sería: 766

Aplicaríamos la suma de los valores con el comando chmod, de la siguiente manera:

chmod 766 archivo2

Listamos y se vería:

ls -l archivo2

-rwxrw-rw-+ 1 Félix Félix 0 Jun  2 09:13 archivo2

Todas estas operaciones, también son efectivas sobre directorios con la particularidad de que con directorios pueden hacerse de manera recursiva como en el ejemplo literal.

Posted in Linux, Recomendación | Leave a comment

Redimensionar partición raíz

Una manera para redimensionar la partición raíz sin necesidad de reinstalar el sistema operativo, es usando la herramienta fdisk, inicialmente se crea una nueva estructura de los sectores de la partición en el disco duro, por ejemplo, si nuestra partición raíz está en /dev/sda1, como usuario root hacemos lo siguiente:

fdisk /dev/sda1

Dentro, hay un menú de ayuda, con la letra m, se debe eliminar ese registro de sectores asignados a la partición y crear nuevamente, la cantidad de sectores dependerá del tamaño o la porción de sectores que le queremos asignar a la partición. Si se desea asignar desde el sector inicial hasta el último, es decir, a toda la partición, se deja por defecto.

Igualmente, si la partición tiene declarado un punto de boot, luego de reasignar los sectores a la partición, se le activa el punto de boot, con la opción a.

Finalmente se escribe todo para que surta efecto en los cambios, posteriormente, se reinicia el sistema operativo y luego se aplica un resize a la partición:

resize2fs /dev/sda1
Posted in Linux | Leave a comment