20 jun 2013

SVN + WebSVN


"Subversion es un sistema de control de versiones diseñado específicamente para reemplazar al popular CVS. Es software libre bajo una licencia de tipo Apache/BSD y se le conoce también como svn por ser el nombre de la herramienta utilizada en la línea de comando.

Una característica importante de Subversion es que, a diferencia de CVS, los demás archivos con versionamiento no tienen cada uno un número de revisión independiente, en cambio, todo el repositorio tiene un único número de versión que identifica un estado común de todos los archivos del repositorio en un instante determinado del repositorio que se está trabajando."

fuente: Wikipedia

Instalamos SVN y apache
apt-get install subversion subversion-tools apache2 libapache2-svn

Se crea el directorio donde vamos a almacenar nuestros archivos SVN
mkdir svn

Creamos nuestro repositorio y su estructura
svnadmin create /path/to/repo
svn mkdir file:///path/to/repo/trunk -m "init commit"
svn mkdir file:///path/to/repo/tags -m "init commit"
svn mkdir file:///path/to/repo/branches -m "init commit"

Creamos el archivo de control de accesos
# htpasswd2 -c /etc/apache2/dav_svn.passwd usuario1
# htpasswd2 /etc/apache2/dav_svn.passwd usuario2

Aseguramos los permisos de acceso con  Dav SVN Authz
nano /etc/apache2/mods-enabled/dav_svn.authz

[groups]

team = usuario1
devteam = asuario1,usuario2

[/]

*=
@team = r

[repositorio:/]

@team = r
@devteam = rw

y agregamos la siguiente linea en el archivo /etc/apache2/mods-available/dav_svn.conf 
...
AuthzSVNAccessFile /etc/apache2/dav_svn.authz
...

Finalmente instalamos WebSVN para consultar nuestros repositorios desde un navegador con una vista mas agradable
apt-get install websvn

fuetes:
http://davidwinter.me/articles/2006/03/03/access-control-for-subversion-with-apache2-and-authz/
http://www.debian-administration.org/articles/374



28 may 2013

Expresiones Regulares


Vale  la pena el esfuerzo aprender a usar expresiones regulares por el trabajo que nos pueden ahorrar en proyectos futuros. Es más que probable que quien no sepa expresiones regulares no las eche de menos en su trabajo cotidiano, pero lo que es cierto es que quien las conoce no descarta una oportunidad para utilizarlas y ahorrarse bastante trabajo y esfuerzo.


Ademas, pueden utilizar regex-coach que es un excelente banco de pruebas en el que puedes ir probando el funcionamiento de tu expresión regular en tiempo real, y él mismo te marca el resultado de lo que estás buscando. Además, puedes elegir entre una multitud de opciones: case sensitive, cadena multilínea, hacer un replace/split…

CaracterEfecto/Uso
Cualquier carácterRepresenta el caracter dado a menos que se especifique lo contrario.
.Representa cualquier carácter menos un salto de línea o de párrafo. Por ejemplo, la búsqueda de “c.ma” encuentra “cama”, “coma” y “cima”.
^Sólo encuentra el término buscado si se muestra al principio del párrafo. No se tienen en cuenta los objetos especiales, por ejemplo campos vacíos o marcos de caracteres anclados situados al final del párrafo. Ejemplo: “^Luis”.
$Sólo encuentra el término buscado si se muestra al final del párrafo.! No se tienen en cuenta los objetos especiales, por ejemplo campos vacíos o marcos de caracteres anclados situados al final del párrafo. Ejemplo: “Luis$”.
$ por sí solo coincide con el final de un párrafo. De esta manera, es posiblebuscar y reemplazar saltos de párrafo.
*Busca cero o más de los caracteres que preceden a “*”. Por ejemplo, “Ab*c” encuentra “Ac”, “Abc”, “Abbc”, “Abbbc”, y así sucesivamente.
+Busca uno o más de los caracteres que preceden a “+”. Por ejemplo, “AX.+4″ encuentra “AXx4″, pero no “AX4″.
Siempre se busca la cadena de texto más larga posible de un párrafo que coincida con este criterio de búsqueda. Si el párrafo contiene la cadena de caracteres “AX 4 AX4″, queda seleccionado todo el fragmento.
 ?Busca cero o ninguno de los caracteres que preceden a “?”. Por ejemplo, “Textos?” busca “Texto” y “Textos”, y “x(ab|c)?y” busca “xy”, “xaby” o “xcy”.
\La función de búsqueda interpreta el carácter especial que va después de “\” como normal, no como expresión regular (menos en el caso de las combinaciones \n, \t, \> y \<). Por ejemplo, “árbol\.” encuentra “árbol.”, no “árbo” ni “arboles”.
\nRepresenta un salto de línea que se ha insertado con la combinación de teclas Mayús + Entrar.! Para convertir un salto de línea en un salto de párrafo, escriba \n en los cuadros de Buscar y Reemplazar con, y efectúe una acción de búsqueda y sustitución.
\n en la caja de texto Buscar por para la la linea de ruptura sea insertado con las teclas combinadas de Shfit+Intro.
\n en la caja de Buscar por esta por un salto de párrafo que pueden ser ingresado con la tecla de Intro.
\tRepresenta una ficha. Esta expresión también se puede emplear en el cuadroReemplazar por.
\bMatch a word boundary. For example, “\bbook” finds “bookmark” but not “checkbook” whereas “book\b” finds “checkbook” but not “bookmark”. The discrete word “book” is found by both search terms.
^$Busca un párrafo vacío.
^.Busca el primer carácter de un párrafo.
& ó $0Agrega la cadena de caracteres que se encontró según los criterios de búsqueda del cuadro Buscar en el término del cuadro Reemplazar porcuando se efectúa una sustitución.
Por ejemplo, si escribe “ventana” en el cuadro Buscar y “&marco” en el cuadro Reemplazar por, la palabra “ventana” se sustituye por “ventana marco”.
También se puede entrar un signo de “&” en el cuadro Reemplazar por para modificar los atributos o el formato de la cadena de caracteres que haya encontrado la búsqueda.
[abc123]Representa uno de los caracteres situados entre los paréntesis.
[a-e]Representa cualquiera de los caracteres que se encuentran entre a y e, incluyendo tanto el primer carácter como el úlltimo
Los caracteres está ordenados según sus números de código.
[a-eh-x]Representa cualquier carácter situado entre a-e y h-x.
[^a-s]Representa cualquier carácter que no se encuentre entre a y s.
\xXXXXRepresenta un carácter especial según su código hexadecimal de cuatro dígitos (XXXX).
El código del símbolo depende de la fuente utilizada. Los códigos se muestran mediante Insertar – Símbolos.
|Busca los términos que aparecen antes de “|” y también los que aparecen después de “|”. Por ejemplo, “esto|eso” busca “esto” y “eso”.
{2}Define la cantidad de veces que aparece el carácter situado antes del corchete de apertura. Por ejemplo, “cre{2}” encontrará y seleccionará “cree”.
{1,2}Define la cantidad mínima y máxima de veces que puede aparecer el carácter situado antes del corchete de apertura. Por ejemplo, “cre{1,2}” encontrará tanto “cre” como “cree”.
{1,}Define el mínimo de veces que puede aparecer el carácter situado antes del paréntesis de apertura. Por ejemplo, “cre{2}” encontrará tanto “creer” como “crear” o “creación”.
( )En el dialogo de Buscar:
Define los caracteres entre paréntesis como referencia. De esta forma, se puede acceder a la primera referencia de la expresión actual como “\1″, a la segunda como “\2″, etc.
Por ejemplo, si el texto contiene el número 13487889 y se busca la expresión regular (8)7\1\1, se encontrará “8788″.
También puede utilizar () para agrupar términos, por ejemplo, “a(bc)?d” busca “ad” o “abcd”.
En el dialogo de Re-emplazar con:
Usa el signo $ (dolar) en vez del \ (doble barra inclinada) para re-emplazar referencias. Usa el $0 para re-emplazar la cadena encontrado completamente.
[:alfa:]Representas un caracter alfabetica. Usa [:alpha:]+ para buscar una de estos.
[:dígito:]Representar un dígito digital. Usa [:dígito:]+ para encontrar una de estas.
[:alfanum:]Representa un carácter alfanumérico [(:letra:) y (:número)].
[:espacio:]Representa un espacio (pero no otros espacios en blanco).
[:imprimir:]Representa un carácter que se puede imprimir.
[:cntrl:]Representa un carácter que no se puede imprimir.
[:inferior:]Representa un carácter en minúscula si en Opciones se ha seleccionadoCoincidir mayúsculas y minúsculas.
[:mayús:]Representa un carácter en mayúscula si en Opciones se ha seleccionadoHacer coincidir mayúsculas y minúsculas.

27 may 2013

There is no public key available for the following key IDs


...

W: There is no public key available for the following key IDs:

8B48AD6246925553
W: There is no public key available for the following key IDs:
8B48AD6246925553

En oportunidades cuando se hace apt-get update se presenta un error como este de claves publicas la cual debemos simplemente añadir, para esto ejecutamos los siguientes comandos:


# gpg --keyserver subkeys.pgp.net --recv-keys 8B48AD6246925553 
# gpg --armor --export 8B48AD6246925553 | apt-key add -


y finalmente hacemos nuevamente


# apt-get update

23 abr 2013

Postfix : Limpiar cola de correo

Para limpiar la cola de correo en Postfix aplicar el siguiente comando:
#> postsuper -d ALL 

Para Borrar todos los mail de todos los directorios, probar con:
#> mailq grep ^[0-9A-Z] cut -d' ' -f1 xargs -n1 postsuper -d 

Para ver porque quedan atrapados los correos en la cola, ocupar mailq o postqueue -p
postqueue -p #Lista correos en cola
postqueue -f # libera los correos en cola
postqueue -s # libera los correos para el dominio especificado

Fuente: postfixtips.blogspot.com