# rm-rf.es

Crea imagenes de arranque Windows o Linux en tu USB

UNetbootin

UNetbootin es un software gratuito que permite crear discos de arranque de una gran variedad de distribuciones Linux y Windows sin la necesidad de quemar la imagen en un CD, se pueden crear directamente en nuestro USB con un simple click.

El programa te ofrece un listado de distribuciones, eliges la que quieres y se encarga de descargarla y grabarla en el USB para que directamente puedas arrancar el sistema con él. También puedes bajar tu mismo la distribución que quieras y decir al programa que la utilice, personalizar parámetros del kernel, initrd, etc.

Podéis ver todas sus funcionalidades y descargarlo en el sitio web oficial: unetbootin.sourceforge.net

Gracias Vaxter

AWK: imprimir a partir de una expresión regular hasta el final del fichero

En el caso de necesitar recoger de un fichero a partir de una determinada cadena de texto hasta el final del mismo, podemos utilizar AWK del siguiente modo:

awk '/regex/,0'

ó

 awk '/regex/,EOF'

Voy a mostrar un ejemplo, tenemos un fichero de texto que contiene lo siguiente:

vim test
esto es
una prueba
test
probando

Pongamos el caso de que necesitamos sacar el contenido del fichero “test” a partir de la línea que tenga el texto prueba:

#] awk '/prueba/,0' test
una prueba
test
probando

En este caso es un ejemplo muy sencillo, para ficheros de log o similares podéis hacer uso de la potencia de las expresiones regulares para sacar la cadena de texto a partir de la cual imprimir el contenido del fichero.

Os recomiendo también leer este otro artículo de iniciación a AWK.

Cómo montar un fichero .iso como CD-ROM

mount /ruta/fichero.iso /mnt/cdrom -oloop

Con el comando mencionado arriba podréis montar de forma sencilla una imagen .iso como si fuera un CD-ROM en Linux y poder trabajar con ella. Posteriormente, cuando hayáis terminado de trabajar simplemente desmontadla con el comando unmount (si tenéis entorno gráfico simplemente botón derecho en la unidad y desmontar):

umount /mnt/cdrom

Cómo crear un Linux Logical Volume Manager (LVM) usando fdisk

LVM es el administrador de volúmenes lógicos para el kernel Linux. LVM gestiona los discos duros y sistemas similares, como dispositivos de almacenamiento masivo. Entre las características principales del Linux Logical Volume Manager encontramos el redimensionado de grupos lógicos, redimensionado de volúmenes lógicos, capacidad de realización de snapshots en modo lectura, adición de nuevos discos a los volúmenes, etc. Se podría decir que LVM es un mecanismo para “virtualizar” discos.

LVM logical volume manager Linux
Esquema básico de LVM (Wikipedia)

Antes de poder comenzar a trabajar con los discos en LVM (creando grupos, volumenes, particionando, etc) hemos de “prepararlos” para poder utilizar este sistema. Para ello utilizaremos fdisk, especificando a cada uno de los discos que queremos utilizar con LVM que utilicen el tipo de partición 8e “Linux LVM”.

Supongamos que tenemos un disco duro nuevo, /dev/sda, vamos a prepararlo para utilizar LVM, ejecutamos fdisk sobre el disco para ello:

fdisk /dev/hdb

Una vez dentro, presionamos “n” para crear una nueva particion:

   n   Añade una nueva partición

Presionamos “p” para crear una nueva partición primaria

   p   Partición primaria (1-4)

Presionamos 1 para crearla como la primera partición del disco, posteriormente presionamos ENTER hasta aceptar todos los valores por defecto de primer y último cilindro.

Una vez finalizado y de nuevo en el menú de fdisk, presionamos “t” para cambiar el identificador de sistema de una partición:

   t   Cambia el identificador de sistema de una partición

La cambiaremos al tipo “LVM partition type (0×8e)”, para ello introducimos 8e. Podemos en este punto presionar “p” para imprimir la tabla de particiones y ver que todo es correcto:

   p   Imprime la tabla de particiones

Finalmente guardamos los cambios con “w”

Al hacer un fdisk -l del nuevo disco, veremos que efectivamente ya utiliza LVM, ejemplo (ficticio):

# fdisk -l /dev/sda

Disk /dev/sda: 200.0 GB, 201000193024 bytes
200 heads, 63 sectors/track, 30515 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device            Start   End      Blocks      Id  System
/dev/sda1         1       30515    205111706   8e  Linux LVM

Próximamente haré otro artículo de LVM en el cual ya comenzaremos a trabajar propiamente con Linux Logical Volume Manager, creando grupos, volumenes, etc.

Apagar o reiniciar máquina Windows remotamente desde Linux

Para apagar o reiniciar una máquina Windows de forma remota, y desde un equipo Linux lo primero que tenemos que hacer es tener instalado el paquete samba-common, que contiene herramientas y ficheros que se utilizan para la comunicación entre el cliente y servidor Samba.

En sistemas Debian lo instalaremos del siguiente modo:

sudo apt-get install samba-common

Y en sistemas RHEL / CentOS:

yum install samba-common

Una vez instalado el paquete, podremos hacer uso del comando “net rpc” (revisad la documentación de net porque tiene muchas más posibilidades) para reiniciar o apagar un servidor Windows de forma remota.

Apagar un servidor Windows desde Linux:

net rpc shutdown -I IP_SERVIDOR_WINDOWS -U usuario%password

Reiniciar un servidor Windows desde Linux:

net rpc shutdown -r IP_SERVIDOR_WINDOWS -U usuario%password

Hay que tener en cuenta que el usuario que utilicéis para realizar estas tareas debe encontrarse dentro del grupo administradores de la máquina Windows. Si tenéis pensado administrar en mayor o menor medida equipos Windows desde Linux os recomiendo revisar todas las demás opciones de net.

Script para arranque automático en inicio del sistema Linux (init.d)

En caso de querer ejecutar un script/programa/servicio al arranque del sistema (Linux), hemos de crear un pequeño script dentro de la carpeta /etc/init.d/ en el cual se especifican los comandos de arranque y parada del mismo.
Normalmente al instalar cualquier cosa desde gestores de paquetes como yum o apt, se crea automáticamente el script en init.d que realiza esta tarea (httpd, exim, mysql, etc) pero si queremos hacerlo con un programa o script propio tendremos que crearlo a mano.

Es muy sencillo, a continuación tenéis un ejemplo de este script, en el cual especificamos el comando a ejecutar cuando se le pasa el parametro start o stop, simplemente hay que añadir el comando correspondiente para arrancar el servicio o pararlo.

#! /bin/sh
# Script ejemplo para arranque de servicios en /etc/init.d/
#

case "$1" in
  start)
    echo "Iniciando servicio... "
    # Aquí comando a ejecutar para arrancar el servicio
    ;;
  stop)
    echo "Deteniendo servicio..."
    # Aquí comando a ejecutar para detener el servicio
    ;;
  *)
    echo "Modo de empleo: /etc/init.d/mi_script {start|stop}"
    exit 1
    ;;
esac
exit 0

Posteriormente, hemos de crear un enlace simbólico en el runlevel correspondiente para que se ejecute cada vez que arranquemos la máquina. En otro artículo ya explique el tema de runlevels y añadir servicios al inicio del sistema en RHEL y CentOS , podéis revisarlo. No obstante si quisieramos ejecutar dicho script en cada arranque crearíamos el enlace simbólico así:

ln -s  /etc/init.d/mi_script /etc/rc3.d/S98miscript

Lo que hacemos es crear un enlace simbólico cuya primera letra es la S (de Start, K sería de kill) y el nº98 (define el momento en el que se va a ejecutar, a menor número, antes se ejecuta). Veréis que el enlace simbólico lo creo en el runlevel 3 (Multiusuario con soporte de red), que es en el que arranca esta máquina en concreto. En el fichero /etc/inittab podéis averiguar el vuestro:

# cat /etc/inittab
#
# inittab       This file describes how the INIT process should set up
#               the system in a certain run-level.
#
# Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
#               Modified for RHS Linux by Marc Ewing and Donnie Barnes
#

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:

Y esto es todo, de este modo cada vez que arranquéis la máquina debería ejecutarse el script configurado.

Cómo montar un servidor DHCP

Esta es una forma sencilla de instalar y configurar un servidor DHCP en una máquina Linux (Red-Hat, CentOS, Fedora). Voy a mostraros los pasos para hacerlo y una configuración básica para hacer funcionar el equipo como servidor DHCP.

DHCP (sigla en inglés de Dynamic Host Configuration Protocol – Protocolo Configuración Dinámica de Servidor) es un protocolo de red que permite a los nodos de una red IP obtener sus parámetros de configuración automáticamente. Se trata de un protocolo de tipo cliente/servidor en el que generalmente un servidor posee una lista de direcciones IP dinámicas y las va asignando a los clientes conforme éstas van estando libres, sabiendo en todo momento quién ha estado en posesión de esa IP, cuánto tiempo la ha tenido y a quién se la ha asignado después. (Wikipedia)

En primera instancia, instalamos el paquete necesario vía yum:

yum install dhcp.i586

Una vez instalado, podemos utilizar como base para el fichero de configuración el que nos ofrecen con la instalación. Incorpora comentarios sobre cada una de las opciones y configuraciones para hacer más sencilla la puesta en marcha del servicio:

cp /usr/share/doc/dhcp-4.1.0p1/dhcpd.conf.sample /etc/dhcp/dhcp.conf

El fichero de ejemplo es el siguiente:

# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#

# option definitions common to all supported networks...
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;

default-lease-time 600;
max-lease-time 7200;

# Use this to enble / disable dynamic dns updates globally.
#ddns-update-style none;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;

# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.

subnet 10.152.187.0 netmask 255.255.255.0 {
}

# This is a very basic subnet declaration.

subnet 10.254.239.0 netmask 255.255.255.224 {
 range 10.254.239.10 10.254.239.20;
 option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}

# This declaration allows BOOTP clients to get dynamic addresses,
# which we don't really recommend.

subnet 10.254.239.32 netmask 255.255.255.224 {
 range dynamic-bootp 10.254.239.40 10.254.239.60;
 option broadcast-address 10.254.239.31;
 option routers rtr-239-32-1.example.org;
}

# A slightly different configuration for an internal subnet.
subnet 10.5.5.0 netmask 255.255.255.224 {
 range 10.5.5.26 10.5.5.30;
 option domain-name-servers ns1.internal.example.org;
 option domain-name "internal.example.org";
 option routers 10.5.5.1;
 option broadcast-address 10.5.5.31;
 default-lease-time 600;
 max-lease-time 7200;
}

# Hosts which require special configuration options can be listed in
# host statements.   If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.

host passacaglia {
 hardware ethernet 0:0:c0:5d:bd:95;
 filename "vmunix.passacaglia";
 server-name "toccata.fugue.com";
}

# Fixed IP addresses can also be specified for hosts.   These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP.   Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
host fantasia {
 hardware ethernet 08:00:07:26:c0:a5;
 fixed-address fantasia.fugue.com;
}

# You can declare a class of clients and then do address allocation
# based on that.   The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.

class "foo" {
 match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
}

shared-network 224-29 {
 subnet 10.17.224.0 netmask 255.255.255.0 {
   option routers rtr-224.example.org;
 }
 subnet 10.0.29.0 netmask 255.255.255.0 {
   option routers rtr-29.example.org;
 }
 pool {
   allow members of "foo";
   range 10.17.224.10 10.17.224.250;
 }
 pool {
   deny members of "foo";
   range 10.0.29.10 10.0.29.230;
 }
}

Veréis que es un fichero con muchísimas opciones, os dejo un ejemplo más sencillo. En el siguiente dhcp.conf utilizamos la interfaz de red eth0 para las tareas de DHCP, esta interfaz tiene configurada la red 192.168.0.0/24 (subnet), sobre la cual vamos a reservar las IPs desde la 192.168.0.200 a la 192.168.0.220 para las asignaciones DHCP (range).

Esto es lo más básico, respecto a las distintas opciones añadidas en el fichero sample de configuración véis especificado lo que es cada cosa:

ddns-update-style none;
ddns-updates off;
deny client-updates;
one-lease-per-client false;
allow bootp;
option T150 code 150 = string;

subnet 192.168.0.0 netmask 255.255.255.0 {
  interface eth0;
   range 192.168.0.200 192.168.0.220;
       option subnet-mask 255.255.255.0;
       default-lease-time 6000;
       max-lease-time 7200;
       option time-offset -3600;
}

Finalmente, arrancamos el servicio:

/etc/init.d/dhcp start

Y el log (en mi caso vuelca a messages):

Oct 23 19:35:37 sylv1006 dhcpd: Internet Systems Consortium DHCP Server 4.1.0p1
Oct 23 19:35:37 sylv1006 dhcpd: Copyright 2004-2009 Internet Systems Consortium.
Oct 23 19:35:37 sylv1006 dhcpd: All rights reserved.
Oct 23 19:35:37 sylv1006 dhcpd: For info, please visit http://www.isc.org/sw/dhcp/
Oct 23 19:35:37 sylv1006 dhcpd: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file
Oct 23 19:35:47 sylv1006 dhcpd: Internet Systems Consortium DHCP Server 4.1.0p1
Oct 23 19:35:47 sylv1006 dhcpd: Copyright 2004-2009 Internet Systems Consortium.
Oct 23 19:35:47 sylv1006 dhcpd: All rights reserved.
Oct 23 19:35:47 sylv1006 dhcpd: For info, please visit http://www.isc.org/sw/dhcp/
Oct 23 19:35:47 sylv1006 dhcpd: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file
Oct 23 19:35:47 sylv1006 dhcpd: Wrote 0 leases to leases file.
Oct 23 19:35:47 sylv1006 dhcpd: Listening on LPF/eth0/00:16:3e:1d:36:42/192.168.0.0/24
Oct 23 19:35:47 sylv1006 dhcpd: Sending on   LPF/eth0/00:16:3e:1d:36:42/192.168.0./24
Oct 23 19:35:47 sylv1006 dhcpd: Sending on   Socket/fallback/fallback-net

Ahora que todo funciona correctamente, podemos configurar DHCP para que arranque automáticamente:

chkconfig dhcpd on

Instalar y configurar vnc-server en CentOS/RHEL/Fedora

La instalación de un servidor vnc en sistemas CentOS, Fedora y Red Hat es muy sencilla. Gracias a la instalación de este servicio podremos conectarnos a la máquina de forma remota y con entorno gráfico con un cliente vnc o con el propio visor de escritorio remoto de Linux (Vinagre en Ubuntu).

En primera instancia, procedemos a la instalación vía yum del servidor vnc:

yum install vnc-server

Una vez finalizada, hemos de retocar el fichero de configuración “/etc/sysconfig/vncservers”, en el que definimos los usuarios a los que vamos a permitir conectar remotamente y las preferencias de sus conexiones. En el siguiente ejemplo permitimos la conexión al usuario “alex”, con una resolución de pantalla de 1024×768:

# vim /etc/sysconfig/vncservers

VNCSERVERS="1:alex"
VNCSERVERARGS[1]="-geometry 1024x768"

Si quisieramos tener múltiples usuarios:

VNCSERVERS="1:alex 2:pepe 3:laura"
VNCSERVERARGS[1]="-geometry 1024x768"
VNCSERVERARGS[2]="-geometry 640x480"
VNCSERVERARGS[3]="-geometry 800x600"

Ahora hemos de asignar una clave a cada uno de los usuarios vnc. Debemos loguearnos con cada usuario en la shell y ejecutar el siguiente comando:

vncpasswd

Finalmente arrancamos vnc-server como root:

service vncserver start

Por defecto se configura para que arranque automáticamente, pero por si acaso:

chkconfig vncserver on

Ahora ya podemos conectarnos desde un cliente VNC o el visor de escritorios remotos de Linux. El puerto a utilizar es el 5900 + el número de pantalla asignado (es el ID asignado en el fichero vncservers, 1:alex 2:pepe 3:laura…), alex sería el 5901, pepe el 5902, etc.

Un punto a tener en cuenta, si accedéis por VNC y no entráis con el gestor de ventanas Gnome, editad el fichero de configuración del usuario (~/.vnc/xstartup) y cambiad la referencia a “twm” por “gnome-session”

#!/bin/sh

# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &  # Esto cambiadlo por exec gnome-session