Unknown's avatar

About hvivani

Systems Engineer, Developer, Technical Leader, IT Manager

convertir .lit a .pdf / lit2pdf conversion


El .lit es un formato de Microsoft para libros electrónicos.

Para abrirlos en linux, podemos utilizar Calibre, que es gratuito y open source, y convertirlo a pdf u otros formatos.

Loado sea el yum:

$ sudo yum install calibre

Una vez instalado, seleccionamos el libro, hacemos click con el botón derecho del mouse y utilizamos la opción Convert Books.

Enviar correo desde Sql Server utilizando cuenta de gmail / Send email from Sql Server using gmail account


Acá va el detalle de como enviar correo electrónico desde SQL Server, utilizando Stored Procedures y utilizando como servidor de salida una cuenta de gmail.

1) En el servidor Sql, debemos habilitar la opción “Ole Automation Procedures” que por defecto está deshabilitada, para que nos permita llamar aplicaciones externas al servidor. Desde la consola ejecutamos la siguiente consulta:

EXEC sp_configure 'show advanced option', 1
RECONFIGURE
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE

2) Instalamos la aplicación gratuita easendmail de emailarchitect.net que permite realizar el dialogo del servidor smtp con gmail, entre otros proveedores de correo.

3) Creamos un sp que nos permitirá llamar a esta aplicacion y enviar correo. Gracias emailarchitect.net

CREATE PROCEDURE [dbo].[usp_SendTextEmail]  @ServerAddr nvarchar(128),
@From nvarchar(128),
@To nvarchar(1024),
@Subject nvarchar(256),
@Bodytext nvarchar(max) = 'This is a test text email from MS SQL server, do not reply.',
@User nvarchar(128) = '',
@Password nvarchar(128) = '',
@SSLConnection int = 0,
@ServerPort int = 25

AS

DECLARE @hr int
DECLARE @oSmtp int
DECLARE @result int
DECLARE @description nvarchar(255)

EXEC @hr = sp_OACreate 'EASendMailObj.Mail',@oSmtp OUT 
If @hr <> 0 
BEGIN
    PRINT 'Please make sure you have EASendMail Component installed!'
    EXEC @hr = sp_OAGetErrorInfo @oSmtp, NULL, @description OUT
    IF @hr = 0
    BEGIN
        PRINT @description
    END
    RETURN
End

EXEC @hr = sp_OASetProperty @oSmtp, 'LicenseCode', 'TryIt'
EXEC @hr = sp_OASetProperty @oSmtp, 'ServerAddr', @ServerAddr
EXEC @hr = sp_OASetProperty @oSmtp, 'ServerPort', @ServerPort

EXEC @hr = sp_OASetProperty @oSmtp, 'UserName', @User
EXEC @hr = sp_OASetProperty @oSmtp, 'Password', @Password

EXEC @hr = sp_OASetProperty @oSmtp, 'FromAddr', @From

EXEC @hr = sp_OAMethod @oSmtp, 'AddRecipientEx', NULL,  @To, 0

EXEC @hr = sp_OASetProperty @oSmtp, 'Subject', @Subject 
EXEC @hr = sp_OASetProperty @oSmtp, 'BodyText', @BodyText 

If @SSLConnection > 0 
BEGIN
    EXEC @hr = sp_OAMethod @oSmtp, 'SSL_init', NULL
END

PRINT 'Start to send email ...' 

EXEC @hr = sp_OAMethod @oSmtp, 'SendMail', @result OUT 

If @hr <> 0 
BEGIN
    EXEC @hr = sp_OAGetErrorInfo @oSmtp, NULL, @description OUT
    IF @hr = 0
    BEGIN
        PRINT @description
    END
    RETURN
End

If @result <> 0 
BEGIN
    EXEC @hr = sp_OAMethod @oSmtp, 'GetLastErrDescription', @description OUT
    PRINT 'failed to send email with the following error:'
    PRINT @description
END
ELSE 
BEGIN
    PRINT 'Email was sent successfully!'
END

EXEC @hr = sp_OADestroy @oSmtp

Go

4) Ya estamos en condiciones de enviar email desde Sql Server. En una ventana nueva de la consola podemos ejecutar:

/* Gmail SMTP server address */
DECLARE @ServerAddr nvarchar(128)
Set @ServerAddr = 'smtp.gmail.com'

/* Set your Gmail email address */
DECLARE @From nvarchar(128)
Set @From = 'direccionorigen@gmail.com'

DECLARE @To nvarchar(1024)
/*You can input multiple recipients and use comma (,) to separate multiple addresses */
Set @To = 'direcciondestino@gmail.com'

DECLARE @Subject nvarchar(256)
Set @Subject = 'prueba envio de correo desde sql server'

DECLARE @Bodytext nvarchar(512)
Set @BodyText = 'Este es un mesaje de prueba. No responda.'

/* Gmail user authentication should use your Gmail email address as the user name. */
DECLARE @User nvarchar(128)
Set @User = 'direccionorigen@gmail.com'

DECLARE @Password nvarchar(128)
Set @Password = 'su password'

/* Enable SSL/TLS */
DECLARE @SSL int
Set @SSL = 1

/* If you want to use TLS, please set it to 25 or 587 */
DECLARE @Port int
Set @Port = 465

PRINT 'start to send email ...'

exec usp_SendTextEmail @ServerAddr, @From, @To, @Subject, @BodyText, @User, @Password, @SSL, @Port

Ejecutamos y listo.

 

Script: Grabar Back Ups en DVD’s


 

#!/bin/bash
#20130328. hvivani. graba backups en DVD. 
#Genera una imagen .iso con los archivos que coloquemos en ./grabar/ 
#Abre la grabadora, solicita el disco y graba el iso

cd /backup/userdata/
echo
echo Generando imagen a grabar del contenido del directorio grabar:
echo

if [ -f userdata.iso ];
then
   echo "ya existe archivo iso, lo borramos y creamos uno nuevo"
   rm userdata.iso
fi
genisoimage -allow-limited-size -o userdata.iso -J ./grabar/

echo
echo Abriendo la lectora:
eject
echo

while true
do
  # (1) pregunta al usuario y lee respuesta en linea de comandos
  read -p "pusiste el disco virgen en la lectora ? " answer

  # (2) handle the input we were given
  case $answer in
   [sS]* ) eject -t
           wodim -v -eject dev=/dev/scd0 userdata.iso
           break;;

   [nN]* )
           echo Donde queres que grabe ?? me voy !!
           exit;;

   * )     echo "Capo, ingresa solo S o N, no pongas boludeces.";;
  esac
done

echo Listo el pollo...

 

Hands On: UPS APC SURT 3000 XLI Battery Replacement / Cambio de Baterías


Supongo que en algún país se consiguen los cartuchos armados de baterías para realizar el cambio en este tipo de UPS’s, pero aquí conseguimos las 16 baterías de 12V 5Ah que lleva este modelo y tuvimos que abrir el cartucho y cambiarlas.

Las baterías se pueden quitar sin apagar el UPS y sin apagar los equipos conectados. (Hot Plug).

2013-09-13 09.37.372013-09-13 09.08.01

Los cartuchos, dos en total. Cada uno pesa 18Kg. !

2013-09-13 09.08.09

Las 16 baterías, 12V 5Ah:

2013-09-13 09.07.48

El desarmado del cartucho y recambio de baterías. Ojo con las polaridades:

2013-09-13 09.11.052013-09-13 12.45.53Probando el cartucho armado:

2013-09-13 09.13.10Nuevamente Online:

2013-09-13 09.38.37Gracias Clau por el soporte.

MySQL: resetting root password


Dato muy interesante para cuando perdemos la password de root de una base de datos MySQL (gracias Cameron):

1) Detenemos el servicio mysqld y restarteamos con la opción –skip-grant-tables. Opcionalmente podemos añadir la opción –skip-networking para evitar la conección de clientes remotos.

# service mysqld stop
# mysqld_safe --skip-grant-tables&

2) Conectamos al servidor por consola:

# mysql

3) Ejecutamos la siguiente sentencia:

mysql> update mysql.user set password=PASSWORD('nuevapassword') where user='root';
mysql> flush privileges;

La sentencia flush le dice al servidor que vuelva a cargar en memoria las grant tables a fin de notificarse del cambio de password.

Luego detenemos el servicio y lo volvemos a inciar normalmente.

# service mysqld stop
# service mysql start

 

Permisos especiales: Sticky Bit, SUID, SGID


Hay una serie de permisos especiales sobre el sistema de archivos de Linux que pueden resultarnos útiles para determinadas tareas o para organizar directorios colaborativos entre diferentes usuarios.

Sticky bit

El Sticky bit se utiliza para permitir que cualquiera pueda escribir y modificar sobre un archivo o directorio, pero que solo su propietario o root pueda eliminarlo. Un ejemplo de uso es el directorio /tmp, que debe tener permisos para ser utilizado por cualquier proceso, pero solo el dueño o root puede eliminar los archivos que crea.

Para aplicar el Sticky bit a un directorio:

[hvivani@test archivos]$ chmod 1755 dirtest/
[hvivani@test archivos]$ ls -l
total 8
drwxr-xr-t. 2 hvivani group 4096 sep  6 09:32 dirtest

Al directorio con el Sticky Bit aplicado se le agrega la t al final del descriptor de permisos.

SUID

El bit SUID activo en un archivo significa que el que lo ejecute va a tener los mismos permisos que el que creó el archivo. Esto puede llegar a ser muy util en algunas situaciones pero hay que utilizarlo con cuidado, dado que puede generar grandes problemas de seguridad.

Para que sea efectivo el archivo debe tener permisos de ejecución.

Para activarlo:

[hvivani@test ~]$ chmod 4775 kk.sh 
[hvivani@test ~]$ ls -l kk.sh 
-rwsrwxr-x. 1 hvivani group 133 ago 27 08:25 kk.sh
[hvivani@test ~]$ chmod -x kk.sh 
[hvivani@test ~]$ ls -l kk.sh 
-rwSrw-r--. 1 hvivani group 133 ago 27 08:25 kk.sh

Vean que en la ultima línea le saqué el permiso de ejecución al archivo y en los permisos se reemplaza la s por la S. En este caso no tiene efecto el bit.

SGID

El SGID es lo mismo que en el SUID, pero a nivel de grupo. Es decir, todo archivo que tenga activo el SGID, al ser ejecutado, tendrá los privilegios del grupo al que pertenece.

Esto es muy usado cuando queremos configurar un directorio colaborativo: si aplicamos este bit al directorio, cualquier archivo creado en dicho directorio, tendrá asignado el grupo al que pertenece el directorio.

[hvivani@test tmp]$ chmod 2775 dirtest/
[hvivani@test tmp]$ ll
total 8
drwxrwsr-x. 2 hvivani grupo 4096 sep  6 09:32 dirtest
[hvivani@test tmp]$ su usuario1
Contraseña: 
[usuario1@test tmp]$ cd dirtest/
[usuario1@test dirtest]$ touch nn.txt
[usuario1@test dirtest]$ ll
total 0
-rw-r--r--. 1 usuario1 grupo 0 Sep  6 09:50 nn.txt

Al igual que con el SUID, aparece una s o una S reemplazando la x en los permisos del grupo.

KVM: Administrando máquinas virtuales por consola / KVM with virsh


Listar las Máquinas Virtuales

[root@test ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 1     w2003                        running
 2     centos                       running
 4     fedora                       running

Apagar Máquina Virtual

# virsh shutdown centos

Reiniciar Máquina Virtual

# virsh reboot centos

Forzar / Detener Máquina Virtual

# virsh destroy centos

Obtener Información acerca de la Máquina Virtual

# virsh dominfo centos

Obtener información acerca del Nodo

[root@test ~]# virsh nodeinfo
CPU model:           x86_64
CPU(s):              24
CPU frequency:       1596 MHz
CPU socket(s):       1
Core(s) per socket:  6
Thread(s) per core:  2
NUMA cell(s):        2
Memory size:         32814444 kB

Editar Configuración de Máquina Virtual

# virsh edit centos

Instalar Máquina Virtual CenOS 5.5 utilizando un mirror http:

Con 512Mb de RAM, 4GB de espacio en disco y utilizando la interfaz de red br0 (bridged network).

# virt-install \
 -n centos \
 -r 512 \
 --vcpus=1 \
 --os-variant=rhel5.4 \
 --accelerate \
 -v \
 -l http://mirrors.kernel.org/centos/5.5/os/x86_64/ \
 -w bridge:br0 \
 --vnc \
 --disk path=/tmp/centos.img,size=4 

Podemos conectarnos a dicha máquina virtual haciendo un:

# virt-viewer centos

Ubicación de archivos log:

$HOME/.virtinst/virt-install.log
$HOME/.virt-manager/virt-manager.log
/var/log/libvirt/qemu

Ubicación de archivos de configuración:

/etc/libvirt/qemu/centos.xml

Otras herramientas que podemos utilizar para resolver problemas:

ps, pstree, top
vmstat, iostat, lsof
tcpdump, brctl, ip, ifconfig

entre otras.

 

 

Script: Añadir prefijo o sufijo a cada linea de archivo / Add prefix or postfix to each line of a file


Supongamos que tenemos un archivo de texto kk.txt con las siguientes lineas:

linea1
linea2
linea3

y queremos agregarle un prefijo a cada línea de ese archivo.

Opción 1: con sed

[hvivani@test ~]$ sed -e 's/^/prefix/' kk.txt
prefixlinea1
prefixlinea2
prefixlinea3

Opción 2: con nl

[hvivani@test ~]$ nl -s prefix kk.txt |cut -c7-
prefixlinea1
prefixlinea2
prefixlinea3

Opción 3: con awk

[hvivani@test ~]$ awk '{print "prefix"$0}' kk.txt 
prefixlinea1
prefixlinea2
prefixlinea3

Opción 4: con shell script

#!/bin/bash
prefix="prefijo"
file="kk.txt"
while read -r line
do
 echo "${prefix}$line"
done <$file > renombrado
mv renombrado $file

Si queremos agregarle un sufijo o postfijo a cada línea de ese archivo:

[hvivani@test ~]$ sed -e 's/$/prefix/' kk.txt
linea1prefix
linea2prefix
linea3prefix

Prefijos de códigos EAN – GS1 por países / Barcode prefix list


Este es un lista de prefijos utilizados en los códigos de barras comerciales EAN13.  Por ejemplo, si tomamos un artículo en el supermercado y miramos el código de barras,  es probable que comience con 779. Todos los productos registrados en Argentina comienzan con 779.

En Argentina, la base de datos de códigos de barras comerciales es regulada y almacenada por GS1.

Siempre viene bien tenerlos a mano…
000 – 019 Estados Unidos y Canadá
020 – 029 Distribución restringida (Definición MO)
03 Estados Unidos (medicamentos)
040 – 049 Distribución restringida (Definición MO)
05 Etiquetados especiales
060 – 099 Estados Unidos y Canadá
100 – 139 Estados Unidos (reservado para futuros usos)
200 – 299 Distribución restringida(Definición MO)
300 – 379 Francia y Mónaco
380 Bulgaria
383 Eslovenia
385 Croacia
387 Bosnia y Herzegovina
389 Montenegro
400 – 440 Alemania (el código 440 pertenecía a la República Democrática Alemana hasta la reunificación en 1990)
45 Japón
46 Rusia
470 Kirguistán
471 República de China
474 Estonia
475 Letonia
476 Azerbaiyán
477 Lituania
478 Uzbekistán
479 Sri Lanka
480 Filipinas
481 Bielorrusia
482 Ucrania
484 Moldavia
485 Armenia
486 Georgia
487 Kazajistán
488 Tayikistán
489 Hong Kong SAR
49 Japón
50 Reino Unido
520 – 521 Grecia
528 Líbano
529 Chipre
530 Albania
531 Macedonia
535 Malta
539 Irlanda
54 Bélgica y Luxemburgo
560 Portugal
569 Islandia
57 Dinamarca, Islas Feroe y Groelandia
590 Polonia
594 Rumania
599 Hungría
600 – 601 Sudáfrica
603 Ghana
604 Senegal
608 Baréin
609 Mauricio
611 Marruecos
613 Argelia
615 Nigeria
616 Kenia
618 Costa de Marfil
619 Túnez
621 Siria
622 Egipto
624 Libia
625 Jordania
626 Irán
627 Kuwait
628 Arabia Saudí
629 Emiratos Árabes Unidos
64 Finlandia
69 República Popular China
70 Noruega
729 Israel
73 Suecia
740 Guatemala
741 El Salvador
742 Honduras
743 Nicaragua
744 Costa Rica
745 Panamá
746 República Dominicana
750 México
754 – 755 Canadá
759 Venezuela
76 Suiza y Liechtenstein
770 – 771 Colombia
773 Uruguay
775 Perú
776 Perú CODIGO UTILIZADO POR DATA CODE PERU – EMPRESA INDEPENDIENTE
777 Bolivia
779 Argentina
780 Chile
784 Paraguay
785 Perú
786 Ecuador
789 – 790 Brasil
800 – 839 Italia, San Marino y Ciudad del Vaticano
84 España y Andorra
850 Cuba
858 Eslovaquia
859 República Checa
860 Serbia
865 Mongolia
867 Corea del Norte
86 Turquía
87 Países Bajos
880 Corea del Sur
884 Camboya
885 Tailandia
888 Singapur
890 India
893 Vietnam
896 Pakistán
899 Indonesia
900 – 919 Austria
93 Australia
94 Nueva Zelanda
950 GS1 Global Office: Aplicaciones Especiales
951 EPCglobal: Aplicaciones Especiales
955 Malasia
958 Macao
96 GS1 Global Office: Localizaciones GTIN-8
977 Publicaciones (ISSN)
978 – 979 Publicaciones (ISBN) – 979-0 usado para música
980 Recibos
981 – 983 Otros etiquetados
99 Etiquetados especiaels

El prefijo 950 (GS1 Global Office) es usado para aplicaciones especiales de acuerdos bilaterales. El prefijo 951 es usado por EPCglobal. Desde el rango 960, los prefijos 9600 a 9604 han sido asignados a GS1 UK para números GTIN-8. Los prefijos que no están nombrados en la lista son usados por GS1 Global Office para países en los que aun no existe una organización GS1 y están reservados para su futuro uso. Los prefijos usados en países no miembros de GS1 y reservados por GS1 para su futuro uso son:

140 – 199
381, 382, 384, 386 & 388
390 – 399
441 – 449
472, 473 & 483
510 – 519
521 – 527
532 – 534 & 536 – 538
550 – 559
561 – 568
580 – 589
591 – 593 & 595 – 598
602 & 605 – 607
610, 612, 614, 617, 620 & 623
630 – 639
650 – 689
696 – 699
747 – 749
751 – 753 & 756 – 758
781 – 783, 785, 787 & 788
791 – 799
851 – 857
861 – 864 & 866
881 – 883, 886, 887 & 889
891, 892, 894, 895, 897 & 898
920 – 929
952 – 954, 956 & 957
959, 961 – 976
984 – 989