iftop: The Netwotk Top

Esta entrada será simple y rápida y la idea es presentar una herramienta útil, pero desconocida en GNU/Linux. Si hablo del comando top todos sabréis de que hablo. Sin embargo, si hablo de iftop ya la cosa puede cambiar. Pues sí, iftop, el top de la tarjeta de red.
iftop, puede ser muy útil a la hora de saber el ancho de banda que ciertas conexiones están empleando y también saber a dónde se dirige todo ese tráfico. Si lo ejecutamos en un equipo que haga de router de una LAN, la cantidad de información que se obtiene puede ser importante y ayudar en el diagnóstico de ciertos problemas de red, especialmente de saturación del ancho de banda.
Las opciones más importantes que tiene son:
  • -i interface
    Especifica el interfaz de red sobre el que escuchar.
  • -f filter code
    Usa un filtro para contar los paquetes de una red.
  • -F net/mask
    Filtra la salida en función de una red y una máscara especificada.
A continuación una pequeña captura de iftop ejecutándose.
iftop working
iftop working in a host

Más información: iftop
Leer más

PDC Linux + Windows 7

samba ldap
Desde ya hace unos años Windows 7 está entre nosotros y cada vez con más fuerza, ya que el extinto Windows XP es prácticamente imposible conseguirlo en un equipo nuevo.
El gran posible que trajo consigo la implantación de Windows 7 en las redes de empresas era agregar estos nuevos equipos al dominio ya existente. Sobre todo, si este dominio era un PDC con Linux (samba + ldap).
Me tuve que pelear en su momento con ello, así que os dejo aquí una breve guía de cómo agregar un Windows 7 a un dominio Linux. Si os hace falta, seguirla.

Cambios necesarios en el registro de Windows

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters
    ; Enable NT-Domain compatibility mode
    ; Default:
    ; [value not present]
    ; "DomainCompatibilityMode"=-
    "DomainCompatibilityMode"=dword:00000001
    
    ; Disable required DNS name resolution
    ; Default:
    ; [value not present]
    ; "DNSNameResolutionRequired"=-
    "DNSNameResolutionRequired"=dword:00000000
    
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Netlogon\Parameters
    ; Disable requirement of signed communication
    ; My Samba (3.0.33) works with signed communication enabled, so...
    ; Default:
    "RequireSignOrSeal"=dword:00000001
    ; Disable the usage of strong keys
    ; Default:
    ; "RequireStrongKey"=dword:00000001
    "RequireStrongKey"=dword:00000000
    
    
  • HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\System\DNSClient
    ; Enforce DNS suffix
    ; It seems this is not necessary - see below
    "NV PrimaryDnsSuffix"="Name_PDC"
    
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters
    ; Overwrite DNS domain. Usually the domain is supposed to be...
    ;when joining the domain. But with Samba this does not work (yet)
    "NV Domain"="Name_PDC"
    

Cambios en el sistema operativo

Desde el panel de control/opciones de seguridad/directivas locales/opciones de seguridad, hay que modificar las siguiente directivas.
  • Seguridad de RedNivel de autentificacion de LAN MANAGER
  • Seguridad de RedSeguridad de sesion minima para clientes NTLM basados en SSP
  • Miembro de dominioRequerir clave de sesion segura (Windows 2000 o posterior)
Nota: Los Windows 7 home edition no sirven para entrar a formar parte de un dominio.
Leer más

Manifiesto

Ante la inclusión en el Anteproyecto de Ley de Economía Sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de Internet manifestamos nuestra firme oposición al proyecto, y declaramos que…
  1. Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.
  2. La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.
  3. La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.
  4. La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.
  5. Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.
  6. Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.
  7. Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.
  8. Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.
  9. Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.
  10. En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.
Leer más

Go, de Google

Recientemente Google ha presentado Go, su apuesta personal por los lenguajes de programación. Se dice que mezcla la potencia y rendimiento de C++ con la flexibilidad de Python, oh!!!! casi nà!
Aunque sin mucho tiempo para poder probarlo en profundidad y dar una visión más cercana a este nuevo lenguaje de programación, la verdad es que, aunque en Beta (típico en Google) y con consejos de no portar ninguna aplicación, ya tenemos algunos perlas. Puede parecer complejo, extraño o muy funcional, según la forma de verlo. Algún ejemplo que lo puedo ilustrar:
  • Hola mundo
    package main
    import "fmt";
    func main()
    {       
       fmt.Printf("Hola mundo\n");
    }
    
  • Servidor web
    package main
    import (
       "http";
       "io";
    )       
    func main() {
       http.Handle("/test_go", http.HandlerFunc(RequestHandler));
       if err != nil {
          panic("Error: ", err.String());
       }
    }       
    
    func RequestHandler(c *http.Conn, req *http.Request) {
       str :=  "Protocol: " + req.Proto + "
       " +
       "Method: " + req.Method + "
       " +
       "User-Agent: " + req.UserAgent;
       io.WriteString(c, str);
    }
    
Algo sorprendente, sin dudarlo! Sobre todo para aquellas personas que alguna vez tuvieron que hacer algo similar, en Go es simple. Google siempre piensa a lo grande y a lo escalable (cloud computing...).

Por cierto, a fecha de hoy todavía no existe una API de gWave que permita el acceso de Go. Tendremos que seguir con Python/Java.

Mas info en: http://golang.org/
Leer más

netcat y comandos de red

Recientemente he tenido que realizar un envío de datos entre diferentes equipos y no en todos los casos podemos usar y depender de ssh. En estos casos, una muy buena solución para la comunicación de datos es netcat. En este post voy a comentar un uso muy simple del mismo y que deja en clara evidencia todo su potencial. Puede que para futuros post haga referencias de uso más avanzadas.
netcat es un software que permite trabajar en las dos direcciones. Por un lado permite ponerse a la escucha de datos en un puerto y también permite el envío de datos hacia una IP destino. Es por ello que se puede decir que netcat se puede emplear de cliente y servidor. En el siguiente caso voy a utilizarlo para crear un flujo de datos entre un equipo dañado y un equipo GNU/Linux en perfecto estado y vamos a realizar un backup de todo el disco duro del primero en el segundo. Aunque parezca una chorrada de ejemplo, en análisis forense se suele emplear este método muy habitualmente.
Para ello, primeramente hay que poner el equipo destino de los datos a escuchar en un puerto y decir dónde se van a "volcar" los datos. Para ello,
server> nc -l -p 4096 | dd of=/mnt/datos/sda1.img
Con lo citado ahora, todos los datos que sean recibidos por el puerto 4096 del equipo servidor tendrán como destino el fichero sda1.img, almacenado en /mnt/datos. Este fichero será la copia de todo el disco del cliente.
Desde el equipo cliente, el origen de los datos, hay ahora que enviarlos. Para hacer eso, únicamente tenemos que buscar la forma de sacar los datos, ya que será el propio netcat el que se encargue la parte del envío por red. Esto lo conseguimos,
client> dd if=/dev/sda1 | nc 192.168.0.150 4096
Una vez finalice el comando, todos los datos de la partición sda1 del equipo cliente estarán en una imagen de tipo lookback que podrá ser accedida y montada en cualquier momento en el equipo servidor. Si os fijáis, realmente lo que hacemos es sacar los datos del disco con el comando dd (if=...) y luego enviarlos por red, donde dd los vuelve a recoger (of=...).

Otro de los usos comunes que se le puede dar a netcat es el de obtener una shell en un equipo remoto. La idea en este caso es emplear netcat como servidor ssh. En el lado del "servidor netcat",
server> nc -l -p 2048 -e /bin/bash
Y por parte del cliente que establecerá la conexión,
client> nc 192.168.1.245 2048

Más información: man netcat
Leer más

Fallo de tareas programadas en cron (ls + awk )

Hoy me ha pasado una cosa rara y todavía no se exactamente el por qué. Aunque lo estoy a investigar y Google solucionará mis dudas, como siempre, de momento dejo el post del "fallo", y lo pongo entre comillas por que no se si realmente es un fallo, que localicé en la ejecución periódica de tareas con cron.
La tarea a ejecutar es muy simple, realizo un find según unos criterios y a partir de ahí ejecuto un ls -l sobre la salida para finalmente con awk recoger el valor que me interesa. Más concretamente el código es tal que así:
find /home -size +50M -exec ls -lh {} \; | awk '{print "rm -f " $9}'
La salida obtenida es, por ejemplo, la que sigue.
shell> find /home -size +50M -exec ls -lh {} \; | awk '{print "rm -f " $9}'
rm -f /home/javier/ISO's/debian-500-i386-netinst.iso
rm -f /home/javier/ISO's/debian-502-amd64-netinst.iso
rm -f /home/javier/ISO's/ubuntu-8.04.1-server-i386.iso
rm -f /home/javier/ISO's/XenServer-5.5.0-install-cd.iso
rm -f /home/javier/ISO's/ubuntu-8.10-desktop-i386.iso
Hasta este punto todo es correcto. La salida es la esperada según el sistema y hace lo que tiene que hacer.
El problema está si con esto construimos un script que contenga esa línea y lo ejecutamos periódicamente en cron. El resultado de salida no es el que obtenemos con la ejecución manual, sino que cambio y $9, pasa a contener el valor de $8 y aparece un nuevo $10 que contiene el valor correcto. Este cambio de valores es lo que todavía no se por que sucede al ejecutarlo con cron. Por lo tanto el script para ejecutar periódicamente tendría que tener el siguiente aspecto, para que el resultado fuese el esperado.
#!/bin/bash
find /home -size +50M -exec ls -lh {} \; | awk '{print "rm -f " $10}'
En breve intentaré dar una explicación razonable al por qué de este desplazamiento de variables.
Leer más

Dividir ficheros en Linux: split

split es uno de los comandos más útiles que encontré para trabajar con ficheros de texto bajo sistemas GNU/Linux, en cuanto a división se refiere, claro está. Hace justamente lo que se pretende, parte un fichero en partes del tamaño que le digas, permitiendo así manejarlo mejor.
Como ya mencioné, yo lo uso habitualmente y como es rara la vez que me acuerde de cómo funciona, y tengo que recurrir al man, pues decidí crear una pequeña entrada, que siempre puede resultarle de utilidad a más gente.
El funcionamiento es muy sencillo:

shell> split -b size file file_new-
dónde size es el tamaño de cada partición, file es el fichero original y file_new- el fichero resultante, sobre el que pondrá la terminación aa, ab,ac, etc.
Si nos interesa partirlo, por ejemplo en Megas, la forma más simple es indicárselo:
shell> split -b 50m file file_new-
Os dejo a continuación un trozo del manual para ampliar conocimientos:
  • -a, --suffix-length=N
    Usa un sufijo de longitud "n". Por defecto 2.
  • -b, --bytes=SIZE
    Tamaño del fichero de salida. Si va seguido de una k, serán KB, si es de una m, MB.
  • -d, --numeric-suffixes
    Usa un sufijo numérico en vez de alfabético.
  • -l, --lines=NUMBER
    Número de líneas en el fichero de salida.
Más información: http://linux.die.net/man/1/split
Leer más

SysMagic: r s f e i u b

r s f e i u b, representa la secuencia de teclado que permite enviar señales al kernel de Linux cuando éste está completamente colgado, para interactuar con la máquina.
Para aquellas personas que andamos habitualmente con ordenadores gobernados por GNU/Linux es más que probable que alguna vez se nos haya quedado colgado todo el sistema y no tengamos manera alguno de poder acceder al mismo para saber que pasó. La solución es reiniciar, aunque ello puede tener como consecuencia la pérdida de datos, corrupción de discos, etc. Para evitarlo, el kernel tiene un mecanismo muy bueno que permite incluso en situaciones críticas establecer comunicación e interactuar con él. Es lo que se conoce como sysrq. No son más que una combinación de teclas que hacen ciertas tareas y que pueden ayudar en casos de necesidad extrema.
Por defecto está habilitado en el kernel si el contenido del fichero /proc/sys/kernel/sysrq es 1.
shell> cat /proc/sys/kernel/sysrq
1
Si esto es así, tenemos ahora dos formas de interactuar con el sistema, según estemos en local o en remoto. Si estamos en local podemos presionar las teclas Alt + Impr + Opción, mientras que si estamos en remoto, la solución es mandarle datos a la variable representada por el fichero: /proc/sysrq-trigger, tal que así:
shell> echo opción > /proc/sysrq-trigger
Donde las opciones más comúnmente usadas son:
  • s, sincroniza los discos duros.
  • e, manda señal SIGTERM (15) a todos los procesos menos a init.
  • i, manda señal KILL (9) a todos los procesos menos a init.
  • f, manda señal oom_kill para detener los procesos que están consumiendo excesiva cantidad de memoria RAM.
  • u, desmontamos los discos duros.
  • w, muestra las tareas que están bloqueadas y no se pueden detener.
  • t, muestra todas las tareas que se están ejecutando y información de ellas.
  • h, apaga la máquina.
  • b, reinicia la máquina.
  • r, pone el teclado en modo Raw. Suele emplearse para tener acceso al teclado en caso de, por ejemplo, las X han bloqueado el sistema.
Más información en: kernel.org
Leer más

awk: getline + system

Ayer estuve ayudando a una compañera a desarrollar un pequeño script que hiciera algo útil para administración de sistemas Linux. Las condiciones que se ponían era que tenía que usar awk con getline y system. Puesto que nunca hasta ese momento usé tales cosas, me pareció interesante. Hoy voy a comentar aquí, para todos aquellos a los que le haga falta lo que se hizo.
El script que nos propusimos hacer Pepe (Doval) y yo era algo muy simple: Contar la cantidad de ficheros que cada usuario del sistema tenía en una carpeta. Dicha carpeta era introducida como parámetro al script. A priori algo muy sencillo que se podría escribir en bash de manera muy simple.
for i in `awk 'BEGIN{FS=":"} {print $1}' /etc/passwd`
do
   echo -n -e "user: $i.\tFicheros: "
   find $1 -type f -user $i | wc -l
done
El detalle es que así no cumplíamos los requisitos propuestos, que no eran otros que usar las funciones getline y system. Comenzamos por lo tanto a intentar crear un script que lo hiciese. La primera aproximación fue la siguiente:
#/bin/bash
awk -v raiz=$1 'BEGIN { FS=":"
   if(system("test -d "raiz)!=0)
      print ("No existe el directorio");
   else
   {
      while (getline < "/etc/passwd" != 0)
      {
         system( "find "raiz" -user "$1" | wc -l" | getline aa
         print "El usuario " $1 " tiene "aa" ficheros en " raiz;
      }
   }
}'
Puesto que el comando find sí se podía usar, lo aprovechamos (flag -user) y con ello hacemos lo que se nos pide de forma muy sencilla. El problema de esta solución es que la línea del segundo system, la que realiza el find, no funciona, puesto que el paso de parámetros así en awk no es válido.
La solución final por que se se optó no fue otra que hacer el script directamente en awk. Así evitaríamos el paso intermedio de enlace entre bash y awk. Desde luego, una solución más limpia.
El resultado final, tendría por ejemplo el siguiente aspecto:
BEGIN { FS=":"
   print "Introduce el directorio a evaluar"
   getline dir < "-"
   if(system("test -d "dir) != 0)
      print ("No existe el directorio");
   else
   {
      while ((getline < "/etc/passwd") != 0)
      {
         cmd = sprintf("find %s -type f -user %s | wc -l",dir,$1);
         cmd | getline line
         if(line != 0)
            print "El usuario "$1" tiene "line" ficheros en "dir"."
      }
   }
}
Acepto que no es eficiente ni queda bonito el código, pero hace lo que tiene que hacer. Un ejemplo de salida:
shell> awk -f prueba.awk
Introduce el directorio a evaluar
/home
El usuario javier tiene 8297 ficheros en /home.
El usuario user tiene 7949 ficheros en /home.
El usuario root tiene 3 ficheros en /home.
El usuario www-data tiene 4 ficheros en /home.
Leer más

Memoria para el concurso de SL

Tras la finalización de mi PFC sobre Pupppet decidí sacarle un poco más de partido y me presenté al concurso de software libre con él. La idea no era ganarlo, ni de lejos, sino dar a conocer las ventajas que tiene el software de meta-administración y sobre todo en el ámbito universitario.
Os colgaré aquí la memoria que presenté para el concurso y que intenta resumir, en muy poco espacio, todo el trabajo que se ha realizado para el proyecto, pero que en realidad será el que evalúen. Puesto que considero que el objetivo no es el concurso, sino que la gente de sistemas pueda cambiar el chip y empezar a usar estas herramientas, pues entre otras muchas facilidades, está la de mantener las configuraciones de todos los equipos en el mismo estado. Y eso, para los administradores de sistemas es lo más importante.
Por cierto, si te animas a probarlo, deja un comentario :-)
Leer más

LaTeX, notas de advertencia

Para finalizar el tema de los estilos en LaTeX y antes de profundizar algo más en como se hizo la plantilla, que eso será en otro post, a continuación se va a mostrar el código necesario para crear el estilo de advertencia. Como es lógico suponer, se empleará en aquellos casos que se desee destacar algo o algún error. La imagen empleada es la que va a continuación (error.png) y el código LaTeX necesario para crear dicho estilo es el que sigue.
warning error
error.png
\newenvironment{advertencia} [1] {
\tikzstyle{mybox} = [draw=red!75, fill=blue!35, very thick,
   rectangle, rounded corners, inner sep=15pt, inner ysep=15pt]
\tikzstyle{fancytitle} = [fill=red, text=white]
\begin{center}
\begin{tikzpicture}
\node [mybox] (box){%
   \begin{minipage}[c]{0.2cm}
   \centering
\ 
   \end{minipage}
   \begin{minipage}[c]{12cm}
#1
   \end{minipage}
};
\node[fancytitle, left=20pt, rounded corners] at (box.north east) {\ \ Advertencia\ \ };
\node[fancytitle, rounded corners] at (box.west) {\includegraphics[width=0.8cm]{./imagen/error.png}};
\end{tikzpicture}%

\end{center}
}
Y la forma de usar este nuevo estilo, al igual que en el empleo de las notas,
\begin{advertencia}
   {Nota de advertencia}
\end{advertencia}
El resultado final es el que se puede ver a continuación.
LaTeX, nota de advertencia

Relacionado:
Leer más

LaTeX, notas

Hoy ya comenzamos con las partes más complicadas del tema de notaciones en LaTeX. Vamos a crear un estilo ya más personalizado y útil, con un fondo y una imagen que enmarquen un texto. Este estilo se empleó para marcar aquellas notas importantes durante el transcurso de la documentación y que clarificaban partes o puntos un poco más confusos. Como su propio nombre indican, es una nota destacada.
Este post y el siguiente muestran todo el potencial de LaTeX en comparación con Office u OpenOffice. Como podéis ir observando, el código necesario para generar esto es muy poco y una vez escrito su reutilización se hace inmediata. Crear esto en Office puede ser muy costoso, en caso de que se de hecho.
El empleo de un nuevo entorno, hace su posterior uso muy simple.
knotes.png
\newenvironment{nota} [1] {
\tikzstyle{mybox} = [draw=red!75, fill=yellow!5, very thick,
    rectangle, rounded corners, inner sep=15pt, inner ysep=15pt]
\tikzstyle{fancytitle} =[fill=red, text=white]
\begin{center}
\begin{tikzpicture}
\node [mybox] (box){%
     \begin{minipage}[c]{0.2cm}
 \centering
\
     \end{minipage}
    \begin{minipage}[c]{12cm}
#1
    \end{minipage}
};
\node[fancytitle, left=20pt, rounded corners] at (box.north east) {\ \ Nota\ \ };
\node[fancytitle, rounded corners] at (box.west) {\includegraphics[width=0.8cm]{./imagen/knotes.png}};
\end{tikzpicture}%
\end{center}
}
Y como veis, para poder emplearlo nos llega con,
\begin{nota}
     {Nota destacada}
\end{nota}
El resultado final,
LaTeX, nota destacada
Relacionado:
Leer más

LaTeX, configuración destacada

En la serie de post sobre código LaTex, hoy os dejo ya disponible el código LaTeX que genera el estilo que se usó para las partes importantes de configuración de los servicios de Puppet.



\lstdefinestyle{no_fileconf} {
    numbers=none,
    xleftmargin=\parindent,
    xrightmargin=\parindent,
    aboveskip=3mm,
    belowskip=0.01mm,
    basicstyle=\footnotesize\ttfamily,
    backgroundcolor=\color{blue!9},
}
Su forma de uso, al igual que las anteriores es simple, tal como se describe a continuación:
\begin{lstlisting}[style=no_fileconf]
[main]
    autosign = false
\end{lstlisting}
\begin{center}
  \vspace{-0.35cm}
  {\scriptsize\sffamily Ejemplo de dato importante}
\end{center}
Relacionado:
Leer más

LaTeX, comandos del sistema

Continuando con el orden marcado, hoy queda ya disponible el código necesario para enmarcar los comandos del sistema, es decir, las líneas en bash que se ejecutan. Espero que os pueda ser de utilidad.


\lstdefinestyle{consola} {
    numbers=none,
    xleftmargin=\parindent,
    xrightmargin=\parindent,
    aboveskip=3mm,
    belowskip=0.01mm,
    basicstyle=\scriptsize\bf\ttfamily,
    backgroundcolor=\color{black!30},
}
Nuevamente para emplearlo, tal que así,
\begin{lstlisting}[style=consola]
root@xenserver:~/$ cat /etc/mailname
\end{lstlisting}
\begin{center}
  \vspace{-0.35cm}
  {\scriptsize\sffamily Ejemplo de ejecución en consola}
\end{center}
Relacionado:
Leer más

LaTeX, source code

Puesto que lo prometido es deuda, en una serie de post os voy a ir dejando todo el material necesario para que veáis cómo crear los diferentes estilos en LaTeX que empleé en la documentación de mi PFC. Aunque lógicamente cada uno tendrá que adaptarlo a lo suyo, espero sea una buena base para comenzar.
Hoy, vamos a ver el código que define el marco que engloba un trozo de código fuente. Una de las partes más importantes a la hora de mostrar un trozo de código fuente es sin duda la numeración de las líneas, por si tenéis que hacer referencia a una parte concreta.
\lstdefinestyle{fileconf} {
   xleftmargin=\parindent,
   xrightmargin=\parindent,
   aboveskip=3mm,
   belowskip=0.01mm,
   basicstyle=\footnotesize\ttfamily,
   backgroundcolor=\color{black!6},
}
A la hora de usarlo, únicamente,
\begin{lstlisting}[style=fileconf]
#include 
int main(int argc, char* argv[]) {
   puts("Hola mundo!");
}
\end{lstlisting}
\begin{center}
  \vspace{-0.35cm}
  {\scriptsize\sffamily Ejemplo de código fuente}
\end{center}
Relacionado:
Leer más

LaTeX, documentando un PFC

En mi proyecto fin de carrera de la Ingeniería Técnica Informática hice un amplio estudio sobre lo que por aquellas era una tecnología emergente y que prometía, la virtualización. Y más concretamente sobre Xen.
Por aquel entonces, por los apuros con la documentación y estar cursando en paralelo la superior, opté por realizarla en OpenOffice y, aunque desde mi punto de vista para documentos pequeños va genial, para documentos grandes quizás se queda algo corto. Con corto me refiero a que manejar un documento de 150 páginas, con texto e imágenes todo se movía muy lento y tuve muchos problemas para conseguir un resultado final bueno.
Para el PFC de la Superior decidí no cometer el mismo error, así que opté por emplear LaTeX como lenguaje de documentación. Durante toda la documentación sobre Puppet, estuve aprendiendo también en paralelo una gran cantidad de cosas de LaTeX y la verdad, la calidad de la documentación fue inigualable. Gracias a ello, conseguí una mención especial del tribunal sobre dicha documentación.
Puesto que iba a emplear LaTeX, una de las cosas que más me interesaba era tener el mismo aspecto en todos los lugares de la documentación. Por suerte, LaTeX soporta estilos, por lo que eso facilitó enormemente la labor de crear documentación. No tanto el trabajo de hacerlos. Los estilos más destacados los comento a continuación,
En posteriores entradas iré mostrando el código necesario para crearlos y que si os hace falta podréis modificar a vuestro gusto. El capítulo iniciar de la documentación, el que hace referencia a las notaciones empleadas, tiene la siguiente pinta.
Leer más

Puppet, herramienta de meta-administración

Aunque durante la andadura de este blog casi seguro que hablaremos de muchas más cosas, en este primer post inaugural, vamos a hablar sobre por qué emplear Puppet como herramienta de administración descentralizada.
Este post tiene el origen en que mi proyecto fin de carrera de la Ingeniería Informática opté por realizar un trabajo de investigación sobre herramientas de meta-administración, y entre ellas Puppet.
Aunque en el mercado y también como software libre existen más herramientas que hacen lo mismo, las ventajas que ofrece Puppet sobre las demás, decantaron la balanza a su favor. Así que en contraposición a herramientas más conocidas como rsynccfengine o ZENwork, optaremos por emplear Puppet para que haga el trabajo por nosotros.
Puppet, entre otras ventajas presenta,
  • Software libre
  • Idempotencia
  • Simplicidad y rapidez
  • Ahorro de costes
  • Evitar fallos repetitivos
  • Lenguaje declarativo
  • El qué vs el cómo
  • Diferenciación en tres capas
A continuación se dejo el capítulo que hace referencia al análisis más exhaustivo que hice sobre esta herramienta de meta-administración, las ventajas y también sus desventajas.
Leer más

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios