Arranque de Linux sobre HTTP con netboot.me

Hola a todos de nuevoEloy Mier 02debianubuntuopensusefedora

En este tutorial vamos a mostrar como podemos arrancar Linux sobre HTTP con netboot.me. Todo lo que el usuario necesita es una conexión a internet y un pequeño programa (gpxe) para poder arrancar la máquina. Este programa proporciona capacidad de arranque desde la red. netboot.me te permite arrancar las siguientes distribuciones: Debian, Fedora, OpenSUSE, y Ubuntu. Del mismo modo netboot.me proporciona las imágenes para llaves USB, CDs, e incluso para disquetes.

Obteniendo netboot.me

Vamos a la dirección http://www.netboot.me/gettingstarted y bajemos la imagen gpxe apropiada. So lo que quieres es arrancar desde el CD, simplemente descarga el fichero netbootme.iso y tuéstala en un CD, después de esto puedes arrancar desde el disco recién creado. En mi caso quiero usar una llave USB, así que el procedimiento es un pelín mas complejo. Yo he descargado el fichero netbootme.usb a mi escritorio:

netbootme_01

netbootme_02

Ahora debiéramos ver el archivo descargado en el escritorio, si pinchamos la llave USB la debiéramos ver también:

netbootme_03

Ahora abrimos una ventana de terminal (Aplicaciones > Accesorios > Terminal):

netbootme_04

En el terminal ejecutamos el comando

mount

Esto lo hacemos con el objetivo de encontrar el nombre de dispositivo asignado a la llave USB.

eloy@princesa:~$ mount
/dev/sda1 on / type ext3 (rw,relatime,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
varrun on /var/run type tmpfs (rw,nosuid,mode=0755)
varlock on /var/lock type tmpfs (rw,noexec,nosuid,nodev,mode=1777)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
lrm on /lib/modules/2.6.28-11-generic/volatile type tmpfs (rw,mode=755)
securityfs on /sys/kernel/security type securityfs (rw)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
gvfs-fuse-daemon on /home/falko/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=falko)
/dev/sdf1 on /media/disk type vfat (rw,nosuid,nodev,uhelper=hal,shortname=mixed,uid=1000,utf8,umask=077,flush)
eloy@princesa:~$

En mi caso, el dispositivo en cuestión se corresponde con /dev/sfd (punto de montaje /media/disk). Antes de poder transferir la imagen netbootme.usb al dispositivo debemos desmontarlo. Para ello pulsamos el botón derecho del ratón sobre él y aparece la opción siguiente:

netbootme_05

También podríamos haber ejecutado en el terminal

umount /media/disk

Ahora ya estamos listos para transferir la imagen a la llave USB, para ello usamos en el terminal el comando

sudo dd if=~/Desktop/netbootme.usb of=/dev/sdf

Y con esto hemos terminado, ahora ya podemos arrancar otra máquina con la llave USB.

Ahora simplemente insertemos el medio (CD, llave USB o floppys) en el ordenador que queramos arrancar y asegurémonos de que ese dispositivo es el seleccionado en la BIOS para el arranque de la máquina.

Así es como se ve el menú de arranque de netbootme:

netbootme_06

Para instalar una distribución Linux en el disco duro, simplemente tenemos que ir a instaladores…

netbootme_07…y ahora en Linux

netbootme_08

La lista de distribuciones disponibles por el momento para la instalación son: Debian, Fedora, OpenSuse y Ubuntu. En mi caso selecciono Ubuntu…..

netbootme_09

…y seleccionamos la versión que queremos instalar (asegúrate de seleccionar la arquitectura adecuada para la máquina de destino):

netbootme_10

Netbootme ahora descargara todo lo que necesita para comenzar la instalación de la distribución seleccionada. La descarga se realiza desde Inet, asi que se paciente por que puede tardar un ratillo. Una vez tenga la descarga de los elementos necesarios comenzará el proceso normal de instalación de la distribución:

netbootme_14

Netbootme dispone también de una opción para el arranque de Sistemas Live (Live Oses)….

netbootme_11

….el problema es que no contiene distribuciones Live generales y conocidas como podria ser Ubuntu o Fedora. Posiblemente las distribuciones que proporciona no sea lo que buscamos, pero bueno, queda documentada esta funcionalidad y muy posiblemente en versiones sucesivas veamos en este apartado otras posibilidades.

Enlaces de interés

Pues nada más, hasta aqui hemos llegado por hoy. Saludos a todos.

Cómo limitar del uso de CPU de un proceso mediante cpulimit

Hola a todosubuntudebian

En este tutorial vamos a aprender como limitar el uso de CPU de un proceso con la herramienta cpulimit en Debian/Ubuntu. cpulimit es un programa muy simple que logra limitar el consumo de CPU de un proceso (expresado en porcentaje, no en tiempo de CPU). Esta herramienta puede ser muy útil para controlar procesos batch, cuando no nos interese que dichos procesos se coman gran parte de la CPU. La herramienta no actúa sobre el valor de nice ni tampoco sobre valores de prioridad de planificación, solo en el uso real de CPU del proceso. También, es capaz de adaptarse por si mismo a la carga global del sistema, de forma dinámica y rápida.

  1. Nota preliminar
  2. Correremos todos los comandos como root, por lo tanto hagamos loggin como root de forma directa (Debian) o usemos sudo (Ubuntu):

    sudo su

    Si tu máquina tiene 1 solo procesador puedes limitar el porcentaje de 0% a 100%, lo que significa que si por ejemplo seleccionamos un 50%, tu proceso no puede usar mas de 500 ms de tiempo de cpu en casa segundo. En cambio si tu máquina tiene 4 procesadores, el porcentaje variará de 0% a 400%, por lo tanto estableciendo el limite en 200% significará que no se use mas de la mitad de la potencia existente. En cualquier caso, el porcentaje es exactamente el mismo valor que puedes ver cuando corres top.

    cpulimit debe correr como mínimo con el mismo usuario que corre el proceso. Es bastante mas operativo que cpulimit corra con root, con el objetivo de que tenga mayor prioridad y mejor contros sobre el proceso.

  3. Instalando cpulimit
  4. cpulimit se encuentra disponible como un paquete para Debian y Ubuntu, por lo tanto puede ser instalado así:

    aptitude install cpulimit

  5. Usando cpulimit
  6. Echemos un vistazo a la página man de cpulimit para aprender a usarlo:

    man cpulimit
    NAME
    cpulimit – limits the CPU usage of a process

    SYNOPSIS
    cpulimit TARGET [OPTIONS...]

    DESCRIPTION
    TARGET must be exactly one of these:

    -p, –pid=N
    pid of the process

    -e, –exe=FILE
    name of the executable program file

    -P, –path=PATH
    absolute path name of the executable program file

    OPTIONS

    -l, –limit=N
    percentage of CPU allowed from 0 to 100 (mandatory)

    -v, –verbose
    show control statistics

    -z, –lazy
    exit if there is no suitable target process, or if it dies

    -h, –help
    display this help and exit

    EXAMPLES
    Assuming  you  have  started ”foo –bar” and
    you find out with top(1) or ps(1) that this process uses all your CPU time you can either

    # cpulimit -e foo -l 50
    limits the CPU usage of the process by acting on the 
    executable program file (note: the argument ”–bar” is omitted)

    # cpulimit -p 1234 -l 50
    limits the CPU usage of the process by acting on its PID, as shown by ps(1)

    # cpulimit -P /usr/bin/foo -l 50
    same as -e but uses the absolute path name

    AUTHOR
    This  manpage was written for the Debian project 
    by gregor herrmann <gregor+debian@comodo.priv.at> but may be used by others.

    Ahora supongamos que queremos limitar el proceso apache2 al 30%, tendríamos que hacer lo siguiente:

    cpulimit -e apache2 -l 30

    La opción -e toma el nombre del programa ejecutable. Puedes conseguir el nombre de la salida del comando top.

    En vez de usar el nombre del fichero ejecutable, podemos usar el ID de proceso con la opcion -p. Puedes obtener el ID de proceso de apache2 así:

    ps aux

    o

    ps aux | grep apache2

    Asumamos que el ID de proceso de apache2 es el 4510, para limitar la CPU a 30% debieramos hacer:

    cpulimit -p 4510 -l 30

    Tambien podriamos pasar a cpulimit el camino absoluto del ejecutable que queremos controlar con el parámetro -P. El nombre del ejecutable absoluto para apache2 es /usr/bin/apache2, por lo tanto podríamos usar el siguiente comando:

    cpulimit -P /usr/sbin/apache2 -l 30

    Nota: cpulimit correrá en primer plano hasta que pulsemos Ctrl+C, momento en el cual dejará de controlar el proceso.

  7. Enlaces de interés
  8. http://cpulimit.sourceforge.net/

Pues hasta aquí por hoy. Saludos a todos.

Reinstalar los paquetes instalados de una forma mas sencilla

Hola a todosEloy Mierubuntudebian

Todos aquellos que usamos nuestros pc como laboratorio de experimentación, en algunas ocasiones nos vemos en la obligación de reinstalar nuestro ubuntu, al menos en mi caso, lo más pesado de esto es que debes volver a instalar todos los programas que tenías antes del terremoto, me pasó una vez, me pasó una segunda pero antes de que me pasara por tercera vez… encontré esta joyita.

Es un comando para Debian pero… funciona en Ubuntu como no. Se trata de crear una lista con los programas que tengamos instalados y luego volverlos a instalar automáticamente ¿Cómo?… así:

$dpkg --get-selections | grep -v deinstall > ubuntu-files

De esa manera se creará un archivo llamado ubuntu-files el cual se encontrará en nuestro /home y contendrá un listado con todos los programas que tenemos instalados.

En esta parte deberíamos guardar este archivo en un lugar seguro, de manera que cuando reinstalemos lo podamos usar, si se pierde… todo esto no tiene sentido.

Después de reinstalar nuestro sistema, de tener nuestros repositorios en orden y todo lo que ya sabemos, podemos reinstalar nuestras aplicaciones.

Para reinstalar desde ese listado, debemos hacer lo siguiente:

$sudo aptitude update

#Es decir, recargamos nuestra lista de repositorios

$sudo aptitude dist-upgrade

#Actualizamos nuestro ubuntu

$dpkg --set-selections < ubuntu-files

#Instalamos desde el listado

$sudo dselect

#Y por último configuramos los paquetes

Suena bien ¿no?

Nos vemos, saludos a todos.

Automatizar recordatorios para uno mismo usando el mail

Eloy MierdebianHola a todos de nuevo,

hoy vamos a ver cómo podemos establecer recordatorios de una forma automática y que sea el propio sistema quien nos avise mediante mail sobre aquellas tareas que hemos programado.
A veces es interesante establecer recordatorios sencillos a uno mismo mediante correo-e. La manera mas directa de realizar esta labor es usar cron + mail.

Si estuviésemos mandando un mail de forma directa desde la linea de comandos, la sintaxis seria similar a:

mail -s “Test de envío” eloy@local

pero esta forma no realizaría el envío de forma directa, sino que espera la introducción del cuerpo del mensaje (que por supuesto puede estar vacío), para finalizar la entrada del cuerpo debiéramos pulsar Ctrl-D dos veces. Esta forma de mandar el mail puede darnos un poco de dolor de cabeza si lo que queremos es enviar el mail con el cuerpo vacío y además queremos mandar el mail de forma inmediata. Para salvar este problema podemos intentar lo siguiente:

mail -s “Test de envío” eloy@local < /dev/null

Si estas usando cron para el envío de mails, mail corre de forma no interactiva y puede darse el caso de que no se comporte como se espera. En sistemas Debian, por ejemplo, no es necesario hacer la redirección. Esta línea simplemente es suficiente:

59 8 * * 1-5 mail -s “Test de envío” eloy@local

se enviará el mail a las 8:59 de Lunes a Viernes con el cuerpo vacio y sin ningún tipo de intervención. No obstante, como ya hemos comentado, este comportamiento puede no ser el mismo dependiendo del programa mail que estemos ejecutando. Si en tu sistema tienes algún problema trata de añadir como tubería de entrada /dev/null tal y como aparece en la línea de comandos.

Si quieres redirigir la salida del comando mail, también puedes usar la redirección en el sentido inverso:

59 8 * * 1-5 mail -s “Test de envío” eloy@local > /dev/null

Si quieres enviar el mail con algún contenido en el cuerpo del mensaje (por ejemplo los contenidos de un fichero de log), puedes hacer lo siguiente:

15 4 * * * mail -s “Log de hoy” eloy@local < /var/log/messages

De todas formas, en el caso de querer realizar envíos de logs de forma regular, una mejor alternativa es LogWatch. En cualquier caso, el tema del log en este articulo sólo pretendía ser un ejemplo rápido. Si quisiéramos enviar un body en el correo simplemente podríamos escribir el fichero en el sistema de ficheros y posteriormente con las tuberías poblar el mail sin problema, como ya se ha mostrado.

Saludos a todos y hasta mañana.

Avahi (Zeroconf) en Linux: Para que leches sirve?

ubuntudebianavahi se instala por defecto en los sistemas Debian y Ubuntu, pero muy poca gente parece que lo usa.. Se supone que es un servicio de autodescubrimiento, pero ¿que servicios esta preparado para descubrir?

avahi corre mDNS más DNS-SD: ¿que es esto?, multicast DNS mas un servicio de descubrimiento DNS (DNS service discovery). Multicast DNS significa que cada máquina almacena sus propios registros DNS. Una dirección multicast (224.0.0.251) es usada por clientes que desean obtener la dirección IP de un nombre de máquina dado, y esa máquina responde a la petición del cliente con su dirección IP. DNS-SD usa la misma tecnología, pero adicionalmente a la informacion estándar DNS, las máquinas también publican informacion de las instancias de servicios: anuncian que servicios proporcionan y cómo contactar con esos servicios. Todo esto lo que pretende es que las máquinas puedan conectarse a los servicios sin la necesidad de que el usuario intervenga: esto se conoce como compartición sin configuración previa (Zeroconf sharing). Muy interesante para aquellos no se sienten cómodos realizando ajustes manuales o bien para aquellos que son un poco zánganos.

En verdad, hasta el momento no existe demasiado software que use realmente mDNS. Apple es el que mas ha hecho uso de él: el software de Apple se llama Bonjour, y gestiona impresoras, compartición de música mediante iTunes, compartición de fotografías mediante iPhoto, Skype, iChat, y un amplio abanico de servicios de software. No obstante, en términos de implementación técnica, avahi es un elemento de software excelente, y es capaz de hacer todo lo que hace Bonjour. Alguien ha sugerido que los equipos de desarrollo de Debian/Ubuntu dev teams están intentando estimular un poco mDNS con la inclusión de avahi en el sistema.

Por lo tanto, que puedes hacer con avahi en tu máquina Linux? Pues una posibilidad es usarla para compartir música a través de la red local. Particularmente, si tenemos algo de música en algún portátil que aparece o desaparece a medida que enchufamos o desenchufamos la máquina de la LAN, la opción del descubrimiento de fuentes de música puede ser una opción particularmente interesante. De hecho esta es la misma tecnología que Apple usa para iTunes.

Desafortunadamente, este sistema solo funciona en una dirección: rhythmbox puede conectar con la compartición de iTunes pero no puede descargarse nada de música (debido a un cambio en el protocolo desde iTunes 7.0). Esto es realmente frustrante y ademas es única y exclusivamente culpa de Apple. La compartición en la otra dirección funciona correctamente: si usamos el menú de “Plugins” para configurar la compartición vía DAAP (acuérdate de pulsar el botón de configuracion y habilitar el check box de compartir mi música), veras pronto disponible el contenido compartido.

Incluso se puede hacer que las máquinas en la LAN aparezcan como nombremáquina.local (esto puede ser util si no tienes un server DNS corriendo en la LAN). Como ejemplo para echar un vistazo a todos los servicios disponibles en la LAN podemos ejecutar avahi-browse -a -r -t (-a todos los servicios, -r resolución de los detalles del servicio, and -t finaliza una vez que tiene la lista completa)

Aquí tenéis un pantallazo de la orden anterior:avahi01

De forma similar a como CUPS gestiona el setup de una impresora, avahi debe en teoría por lo menos facilitar la labor de configuracion estableciendo la impresora como remota (mediante la configuración de la impresora en la máquina en la que esta conectada y con avahi instalado y corriendo). No obstante, parece que esto en la actualidad es problemático: necesitas picarte tu propio fichero ipp.service y añadirlo al directorio /etc/avahi/services/. La página man de avahi.services (5) es comprensible, pero desafortunadamente no existen ejemplos para las impresoras.

Por otro lado, para avahi existen otras posibilidades como escritorio remoto compartido y compartición de documentos.

Realmente parece interesante lo de establecer los nombres de host a nombrehost.local, pero no tiene mucho sentido que los compartidos de la librería de música no sean autodetectados (y menos sentido aun que no funcione para iTunes, pero esto realmente no es un problema de avahi). Igualmente, parece que la detección de impresoras no funciona todo lo bien que debiera. Si tenemos la posibilidad de comparar con la implementación que Apple hace de esta funcionalidad, podremos darnos cuenta de que la infraestructura necesaria parece que si que esta presente, pero el interfaz de usuario parece que no esta completo.

Por lo tanto y resumiendo, si, existen multitud de buenas opciones para explortar avahi, pero de momento parece que es un proyecto que necesita bastante trabajo por completar. Se puede entender que en el caso de Debian/Ubuntu estén haciendo una instalación por defecto para intentar animar la creación de mas software de usuario que pueda explotar las capacidades de avahi. Estoy seguro de que a muchos de nosotros nos gustará ver y usar las funcionalidades descritas en este artículo. El objetivo no es mas que ser tan útil como sea posible (especialmente para aquellos mas zánganos, o simplemente que tienen en uso un entorno LAN basado en Mac/Linux).

No obstante, y solo como comentario para la gente de Ubuntu, ¿merece la pena que miles de usuarios tengan instalado avahi en este momento cuando no existe software que realmente aprovecha sus capacidades?, no se….Desde mi punto de vista se podría haber planificado la funcionalidad para versiones sucesivas del Sistema Operativo y demás se podría por lo menos, haber dado la opción de que el usuario seleccionase la instalación o no del servicio ¿no es lo mas normal?

Saludos a todos y hasta la próxima.