23 de agosto de 2013

Cambiar el UUID de un disco virtual .vdi de Virtual Box

Cuando hago una copia de un disco virtual e intento arrancarla en una nueva máquina virtual con Virtual Box, aparece un error diciendo que el UUID del disco ya existe.

Para solucionar esto podemos cambiar la UUID del disco virtual .vdi copiado con el siguiete comando desde MS-DOS:


C:\Program Files\Oracle\VirtualBox>VBoxManage.exe internalcommands sethduuid "C:\HDfile.vdi"
UUID changed to: 1727a910-2037-4d8d-866b-ae6d52c5a6cd

y problema resuelto.

Python: ejecutando comandos linux

Para ejecutar comandos de Linux desde Python podemos usar los módulos os y commands.

Con os se ejecuta el comando ls y retorna un bit de ejecución, no el resultado del comando:

import os
out = os.system("ls")



Si necesitamos el resultado del comando linux ejecutado usar commands:

import commands
out = commands.getoutput("ls")

18 de agosto de 2013

Colorizando Scripts en Php CLI ... y en Bash

Salida en color para script en php cli:

#!/usr/bin/php
echo "\033[31m Texto en color rojo \033[0m\n";
die;

\033[0m : vuelve el color de la consola al color por defecto, importante!! ya que si no se pone cambias el color de la consola al salir del script.

el número XX de los códigos \033[XXm determinal el color y formato del texto según esta tabla:
Style           Foreground      Background
1st Digit       2nd Digit       3rd Digit
0 - Reset       30 - Black      40 - Black
1 - FG Bright   31 - Red        41 - Red
2 - Unknown     32 - Green      42 - Green
3 - Unknown     33 - Yellow     43 - Yellow
4 - Underline   34 - Blue       44 - Blue
5 - BG Bright   35 - Magenta    45 - Magenta
6 - Unknown     36 - Cyan       46 - Cyan
7 - Reverse     37 - White      47 - White

Pudiendo combinarlos, por ejemplo: fondo blanco, texto negro: \033[30;47m


Y ya que estamos ...esto es aplicable para Colorizar Bash Scripts:

#!/bin/bash
echo -en "\033[31m Texto en color rojo \033[0m\n"
echo -en "\033[30;47m Negro sobre Blanco \033[0m\n"


Para añadir un poco de color a nuestras vidas en CommandLine !!!

Ref.:
http://ubuntulife.wordpress.com/2011/04/10/los-codigos-de-color-en-bash/
http://praxis.edoceo.com/howto/bash


13 de agosto de 2013

Eliminando los banners del sevidor apache2

Editar el archivo:


# nano /etc/apache2/conf.d/security

y descomentar solo las lineas:


ServerTokens Minimal
ServerSignature Off
TraceEnable Off


y reiniciar apache2

# service apache2 restart


Ahora ya no aparecerán banners con información del servidor apache2 ni del sistema operativo de la máquina al producirse algún error.

Ref.:
http://www.securityartwork.es/2012/02/22/bastionado-de-un-servidor-web-apache-i/ 

12 de agosto de 2013

Python: letra ñ de UTF-8 a LATIN-1

En un script en Python con codificación UTF-8, necesito la letra 'ñ' con codificación Latin-1 ...

¿Como paso la letra ñ de UTF-8 a Latin-1?

#!/usr/bin/python
# -*- encoding: utf-8 -*-

enieUtf8 = 'ñ'
enieLat1 = 'ñ'.decode("utf-8").encode("latin1","ignore")


Por supuesto que la letra 'ñ' del script se puede sustituir por cualquier otro caracter o variable para su recodificación en Latin-1.

11 de agosto de 2013

Cambiar directorio de MySQL y apparmor

En la entrada de misnotaslinux:
Bases de datos MySQL distribuidas en memoria USB
describía una técnica muy sencilla, que había utilizado con éxito para cambiar los directorios de trabajo de las bases de datos de MySQL, pudiendo alojarlos en memorias USB u otras unidades de disco.

Al intentar esto en mi nanoservidor domo, con Xubuntu 13.04: NO ha funcionado.

La razón es que Xubuntu tiene activado apparmor, que es un sistema de seguridad que bloquea el uso irregular de directorios extraños.

Al intentar cambiar el directorio de trabajo de MySQL a otra unidad, direccionándolo mediante un enlace, appArmor no lo permite.

Apparmor esta en SuSe y Ubuntu.

Protocolo:

# cp -a /var/lib/mysql /mnt/otraunidad
# mv /var/lib/mysql /var/lib/mysql.bck
# ln -s /mnt/otraunidad/mysql mysql
# service restart mysql

... esto no funciona a no ser que inactivemos appArmor para mysqld.

Solución 01:
# aptitude install apparmor-utils
# aa-complain /usr/sbin/mysqld
# service apparmor restart
# service mysql restart

.. y ahora funciona mysql usando como directorio de trabajo /mnt/otraunidad/mysql

Con aa-complain hemos cambiado el protocolo de appArmor para mysqld y no lo bloquea sino que solo logea cuando ve algún comportamiento sospechoso como usar una directorio de trabajo diferente.

Solución 02:
Cambiar el perfil apparmor para mysqld:

# nano /etc/apparmor.d/usr.sbin.mysqld

añadimos las siguientes reglas para la nueva localización de la carpeta de MySQL:

  /mnt/otraunidad/mysql/ r,
 /mnt/otraunidad/mysql/** rwk,

# service apparmor restart
# service mysql restart

Esta solución es mas elegante ya que no desactivas las medidas de seguridad de appArmor para MySQL.

Ref:
Cambiar ruta de MySQL con apparmor: http://www.ubuntu-es.org/node/113525#.UgbW6dJ7LzY

8 de agosto de 2013

Python: Encoding UTF8

Si en los scripts Python utilizas acentos, eñes u otros caacteres no ASCII me aparecen el error:

SyntaxError: Non-ASCII character '\xc3' in file ./yourPytonScript.py  line 4, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details


Para solucionarlo hay que indicar el encoding al principio del script python

#!/usr/bin/python
# -*- encoding: utf-8 -*-
...

Ref.:

3 de agosto de 2013

Python: fecha y hora actual

#!/usr/bin/python
import datetime
now = datetime.datetime.now()
print now

Result:
2013-08-03 01:32:27.711721


Para formatear la salida de la fecha:

import time
datetime.datetime.now().strftime('%d/%m/%Y')

Ref.:
http://www.pythonforbeginners.com/basics/python-datetime-time-examples/
http://www.tutorialspoint.com/python/time_strftime.htm

1 de agosto de 2013

Python: Conectar con MySQL

Para conectar desde Python con bases MySQL se puede hacer con MySQLdb.

Para instalar MySQLdb en Debian:
# aptitude install python-mysqldb

Scrip Python para conectar con MySQL:
#!/usr/bin/python

#1)Cargar el modulo en el script python:
import MySQLdb

#2)Conectar con la base de datos:
db = MySQLdb.connect("host","Usuario","Password","BasedeDatos" )

#3)Preparar el objeto-cursor:
cursor = db.cursor()

#4)Ejecutar la consulta SQL y obtener resultados:
try:
    cursor.execute("ConsultaSQL")
    results = cursor.fetchall()
except:
    print "Error de Conexión"


#5)Presentar datos obtenidos de la base de datos:
print "Datos Obtenidos"
for registro in results:
    print registro[0],"-",registro[1]


#6)Cerrar conexión con la base de datos:

db.close()

Ref.:
http://www.tutorialspoint.com/python/python_database_access.htm

Python: Funciones






Definición de la función:
def nombrefuncion (argumento1, argumento2):
      '''Aqui puede ir el docstring, que es info sobre la función'''
      y = argumento1 + argumento2
      return y

return indica el valor de retorno de la función.

Ejecución de la función:
nombrefuncion (argumento1, argumento2)

Ref.:
https://sites.google.com/site/cursodepython/primer-clase/argumentos-de-funciones