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

28 de julio de 2013

Nuevo nanoServer Domo

Después de 4 años de funcionamiento intenso e ininterrumpido, solo puedo felicitar al pequeño micra, que se ha portado y sigue comportándose de forma excelente.
http://misnotaslinux.blogspot.com.es/2009/11/micra-server.html

Pero la tecnología y mis exigencias avanzan y ha llegado el momento de buscarle un hermano mayor al pequeño micra, dentro de la gama de nanoPc, de bajo consumo, silenciosos, ... para encenderlo y olvidarte de él.

De las maquinas actuales de esta categoría que he revisado me he quedado con el: Foxconn Netbox NT-A3500


Comercializado en España por VANT con el nombre de Domo3:


Sus características son:

ModeloF354T
Referencia81DOM3F354T
Memoria RAM4GB DDR3
ChipsetAMD Fusion (A45FCH)
Disco duro1TB SATA2 2.5”
FormatoMini-ITX
Dimensiones190 x 25 x 135 mm
ProcesadorAMD E350 1,6GHz
GráficosRadeon HD6310
Unidad ópticaNo
OtrosMultilector flash MMC/SD/MS
Sonido7.1 canales a través de S/PDIF. Altavoz interno
RedGigabit
WIFI802.11b/g/n
VGAMediante adaptador incluido
DVISI
HDMISI
PS/2NO
USB 2.04
USB 3.02
BluetoothNO
SerieNO
ParaleloNO
Audio frontalMIC y EAR frontales
Audio traseroS/PDIF
Sistema operativoUbuntu Linux 12.04.1 preinstalado, configurado y con aplicaciones extra instaladas
Garantía2 años
OtrosSopote VESA


El procesador AMD E350 es de 64 bits, de doble núcleo, con virtualización AMD-V y lanzado al mercado en 2011.





http://www.cpu-world.com/CPUs/Bobcat/AMD-E%20Series%20E-350%20-%20EME350GBB22GT.html

Como ventajas respecto a micra, desde luego la potencia y capacidad de almacenamiento con HD 2,3 SATA, 4 USB 2.0, 3 USB 3.0, ... y como punto negativo a priori que no es fanless, aunque hay que ver el ruido que hace y su durabilidad con un uso continuado.

Mi idea es instalar Linux, un sistema debian o basado en debian: Ubuntu, Xubuntu ó Lubuntu.

Quiero que sea servidor doméstico: ssh, samba, MySQL, Web, Virtualbox, ... y también un servidor multimedia, media center - SmartTV.

Para ello configurare dos modos de trabajo, que se pueda pasar de uno a otro según necesidades.
- Modo Server: sin entorno gráfico, (default).
- Modo HTPC: con entorno gráfico.

Con Domo ya tengo entretenimiento para este verano, ... y espero que para unos cuanto años.
pd: micra seguirá activo y pero que muy muy activo.

25 de julio de 2013

Proteger Carpetas y Ficheros en Linux y en Samba

En mundo de los permisos en Linux es enormemente potente, pero hay que dedicarle un rato para comprenderlo y sacar el máximo provecho.

Pongamos que queremos proteger unas carpetas personales de la mirada de otros usuarios, de modo que estas carpetas y los ficheros que contienen solo puedan ser vistas por el usuario.

Por defecto los permisos en Linux son:

Carpetas: 777 = rwx rwx rwx
Ficheros: 666 = rw- rw- rw-
Con la máscara 022

Lo que hace:
Carpetas: 777 - 022 = 755 = rwx r-x r-x
Ficheros: 666 - 022 = 644 = rw- r-- r--

De modo que por defecto Linux crea carpetas y ficheros que únicamente son modificables por el usuario pero que pueden ser vistos y copiados por todos los usuarios.
Esto es un problema cuando hay información sensible que se quiere proteger.

Para impedir que los directorios y ficehros sean visibles por otros usuarios tenemos que cambiar los permisos de las carpetas y los ficheros a:

Carpetas: 700 = rwx --- ---
Ficheros: 600 = rw- --- ---

Si ya tenemos una carpeta llamada "mycarpeta" y queremos cambiar los permisos de todo su contenido podemos hacerlo:

# chmod -R go-rwx mycarpeta

Para cambiar los permisos de las carpetas y ficheros que se crean por defecto en un usuario hay que modificar los ficheros .bashrc y .profile de su directorio personal y añadir:

umask 077

de este modo hemos cambiado la mascara que se aplica a los permisos por defecto que tiene linux para las las nuevas carpetas y ficheros que cree este usuario. Los permisos quedarian:

Carpetas: 777 - 077 = 700 = rwx --- ---
Ficheros: 666 - 077 = 600 = rw- --- ---

Los directorios y ficheros solo seran visibles y modificables por el usuario y el root.

Nota: para recargar el fichero .bashrc, hacer:
$ su usuario.

Si otro usuario intentara listar el directorio ...

$ ls mycarpeta
ls: no se puede abrir el directorio mycarpeta: Permiso denegado

En samba:
para poner una mascar en los archivo de los usuarios que accedan por samba, hay que modificar el fichero /etc/samba/smb.conf del siguiente modo:

[mycarpeta]
 create mask = 0700

Ref:
http://www.ite.educacion.es/formacion/materiales/85/cd/linux/m1/permisos_de_archivos_y_carpetas.html

http://www.lasticenelaula.es/portal/index.php/linux-mint/679-cambiando-los-permisos-a-archivos-y-carpetas-en-linux-mint-y-ubuntu

http://blog.manuelviera.es/2012/06/entendiendo-umask/

http://www.ite.educacion.es/formacion/materiales/85/cd/linux/m4/gestin_de_usuarios_grupos_y_permisos_de_samba.html

Resumen de los permisos:
Cód Binario   Permisos efectivos
0       0 0 0       - - -
1       0 0 1       - - x
2       0 1 0       - w -
3       0 1 1       - w x
4       1 0 0       r - -
5       1 0 1       r - x
6       1 1 0       r w -
7       1 1 1       r w x

25 de junio de 2013

Proteger un directorio web con contraseña con apache2

En un servidor web con apache2 necesitamos proteger el acceso a una carpeta con password,
¿como hacerlo?

Protocolo:

1) Creamos el directorio:
# mkdir /var/www/pub

2) Creamos fichero del passwords en el directorio /etc/apache2/:
# cd /etc/apache2
# htpasswd -c .htpasswd usuario

3) Modificamos el fichero /etc/apache2/sites-available/default creando una sección Directory con el nombre de la carpeta y la siguiente configuración:

# nano  /etc/apache2/sites-available/default

     Options -Indexes MultiViews FollowSymLinks
     AllowOverride All
     Order deny,allow
     Allow from All

4) Creamos el fichero /var/www/pub/.htaccess
# nano /var/www/pub/.htaccess

AuthName "Directorio privado"
AuthType Basic
AuthUserFile /etc/.htpasswd
require valid-user

5) Reiniciamos apache2
# service apache2 restart

Al intentar acceder a este directorio desde el navegador web, aparecerá una pantalla que nos pedira el user y password para acceder.


8 de junio de 2013

Instalando KDE4 en Debian7.0 Wheezy

Instalando KDE4 en Debian7.0
Tengo una maquina AMD 2400+ con ATI Raedon9200  en la que que no me funciona gnome3 ya que no hay forma de configurar la aceleración 3D en la tarjeta gráfica.

De modo que voy a instalar KDE.

Protocol:
Con Debian 7.0 Wheezy instalado con gnome.

1) # aptitude update

2) # aptitude install kde-full

Esto instala todo el sistema d escritorio KDE con todas sus aplicaciones.
Son 1585 MB en disco. !!

3) Con esto tendré instalado ambos sistemas de escritorios pudiendo elegir con cual arranco desde gdm o kdm.

Una vez configurado y probado me plantearé desinstalar gnome para liberar espacio del disco.


Update: Finalmente KDE-Plasma no funciona en mi sistema, la tarjeta gráfica me da problemas. Si que he podido usar KDE-OpenBox, seleccionando esta opción desde KDM.

Ref.:
http://diversidadyunpocodetodo.blogspot.com.es/2013/05/debian-wheezy-instalar-entorno-escritorio-adicional-kde-gnome.html