Algo de Linux: noviembre 2014

sábado, 29 de noviembre de 2014

Instalar un sistema Debian en un directorio de nuestro Debian

Habitualmente utilizamos máquinas virtuales para instalar un sistema dentro de otro, pero hay ocasiones en las que puede interesarnos instalar otro sistema Debian en un directorio de nuestro sistema para hacer pruebas o realizar instalaciones de otra arquitectura diferente.

Mi máquina trabaja con un sistema Debian de 64 bits y tengo un directorio con un sistema Debian de 32 bits para hacer determinadas operaciones en un entorno de 32 bits. Ésto me resulta muy útil porque administro sistemas de 32 y 64 bits y en ocasiones necesito hacer pruebas en un entorno de 32 bits o generar un paquete de 32 bits.

En Debian es muy sencillo e instalar un sistema base dentro de un directorio utilizando la herramienta debootstrap. Veamos un ejemplo en el que instalaremos un sistema base de 32 bits:

Primero, instalamos debootstrap, si no lo tenemos instalado ya:
# apt-get install debootstrap
Una vez instalado, creamos un directorio:
# mkdir /mnt/wheezy-i386
E instalamos un sistema base de 32 bits dentro de él:
# debootstrap --arch=i386 wheezy /mnt/wheezy-i386/ http://ftp.de.debian.org/debian/
Veremos el progreso de instalación en el terminal. Cuando termine, nos mostrará un mensaje en el que nos informa de que el proceso ha terminado correctamente:
I: Base system installed successfully.
Y ya tendremos nuestro sistema de 32 bits instalado en el directorio /mnt/wheezy-i386. Cuando queramos trabajar en él, no tenemos más que hacer un:
# chroot /mnt/wheezy-i386
Cuando hayamos terminado de hacer operaciones dentro del chroot, podremos salir simplemente con:
# exit
Es muy cómodo trabajar así porque al ser un directorio de nuestro sistema, podemos copiarle fácilmente los archivos que necesitemos. Publicado por primera vez en http://enavas.blogspot.com.es

martes, 25 de noviembre de 2014

Establecer gnome-session-fallback como escritorio por defecto

Ahora que se ha puesto xfce como escritorio por defecto en los servidores ltsp, parece que vamos a tener que cambiarlo por el escritorio clásico de gnome (gnome-session-fallback) porque, por lo poco que he podido ver, a los usuarios les cuesta acostumbrarse.

El cambio es muy sencillo de realizar:
# update-alternatives --set x-session-manager /usr/bin/gnome-session-fallback
Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 24 de noviembre de 2014

Crear una entrada de Clonezilla que inicie un terminal con acceso a red y ssh

Aparte de la entrada que hemos visto en el post anterior, puede que nos interese añadir otra que nos permita iniciar sesión en un terminal con acceso a red y ssh:
label Iniciar un terminal con acceso a red y ssh
  # MENU DEFAULT
  # MENU HIDE
  MENU LABEL Iniciar un terminal con acceso a red y ssh
  # MENU PASSWD
  kernel /live-hd/vmlinuz
  append initrd=/live-hd/initrd.img boot=live username=user config bootfrom=/dev/sdb1 live-media-path=/live-hd quiet noswap edd=on nomodeset noeject locales="es_ES.UTF-8" keyboard-layouts="es" ocs_prerun1="dhclient -v eth0" ocs_prerun2="sleep 2" usercrypted=O.rpHIcAKv9a6 ocs_daemonon="ssh" ocs_live_run="/bin/bash" vga=788 ip= nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=no
  TEXT HELP
  Permite iniciar un terminal con acceso a la red y ssh para realizar diagnósticos

  * Clonezilla live version: 2.2.4-12-i686-pae. (C) 2003-2013, NCHC, Taiwan
  * Disclaimer: Clonezilla comes with ABSOLUTELY NO WARRANTY
  ENDTEXT
Como podéis ver, estamos utilizando dhclient para solicitar una IP en la interfaz eth0 y activando el arranque de ssh.

Por defecto, la contraseña de la cuenta "user" es "live". Podemos crear una nueva de la siguiente manera:
# echo mipasswordparticular | mkpasswd -s
Y utilizarla en la entrada mediante el parámetro usercrypted=passwordencriptada
Publicado por primera vez en http://enavas.blogspot.com.es

Crear una entrada de Clonezilla que inicie un terminal para realizar diagnósticos

Habitualmente uso un disco duro USB de 1TB como caja de herramientas en el que tengo montado clonezilla, drbl y system rescue cd  entre otras cosas, y, en ocasiones, me surge la necesidad de arrancar un sistema live básico para chequear las particiones de un equipo, por ejemplo. Recientemente le he añadido una nueva entrada como la siguiente que me permite iniciar una shell directamente:

label Iniciar un terminal 
  # MENU DEFAULT
  # MENU HIDE
  MENU LABEL Iniciar un terminal 
  # MENU PASSWD
  kernel /live-hd/vmlinuz
  append initrd=/live-hd/initrd.img boot=live username=user config bootfrom=/dev/sdb1 live-media-path=/live-hd quiet noswap edd=on nomodeset noeject locales="es_ES.UTF-8" keyboard-layouts="es" ocs_live_run="/bin/bash" vga=788 ip= nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=no
  TEXT HELP
  Permite iniciar un terminal para realizar diagnósticos

  * Clonezilla live version: 2.2.4-12-i686-pae. (C) 2003-2013, NCHC, Taiwan
  * Disclaimer: Clonezilla comes with ABSOLUTELY NO WARRANTY
  ENDTEXT
Publicado por primera vez en http://enavas.blogspot.com.es

Condiciones compuestas en puppet utilizando operadores lógicos

Como ya sabéis los que trabajáis con Puppet, es posible utilizar instrucciones if para aplicar módulos de forma condicional. Por ejemplo:
if $lsbdistcodename == 'wheezy' {
   include "modulo_para_wheezy"
}
elsif $lsbdistcodename == 'squeeze' {
   include "modulo_para_wheezy"
}
else {
   warning('Este módulo tan sólo está diseñado para Debian Wheezy o Squeeze.')
}
Ahora bien, en el ejemplo anterior tan sólo hemos utilizado condiciones simples y en Puppet también es posible evaluar condiciones compuestas mediante los operadores lógicos and y or. Veamos un ejemplo:
if ($lsbdistcodename == 'wheezy') and ($use == 'ltsp-wheezy') {
  include "modulo_para_ltsp_wheezy"
}
Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 21 de noviembre de 2014

Preparar una imagen de disco creada con Clonezilla para restaurar en discos más pequeños

Uno de los problemas que tenemos a la hora de clonar discos con Clonezilla es que no podemos restaurar una imagen de un disco más grande en uno más pequeño. Alguien dirá que ésto es lógico puesto que si el disco de origen es más grande, no va a caber en el más pequeño.

Bien. Esto es cierto. ¿Pero qué pasa si reduzco proporcionalmente las particiones para que quepan en el disco de destino? Pues sencillamente que tampoco podemos restaurar la imagen. Por lo que he podido ver, ésto se debe a que Clonezilla guarda el tamaño del disco, además del tamaño de las particiones, y si el tamaño del disco de origen es mayor que el de destino, no realiza la restauración.

Ahora bien, si abrimos el directorio que contiene todos los archivos que forman parte de la imagen, encontraremos uno que guarda la información del disco y la tabla de particiones: sda-pt.parted

Como podéis deducir, este archivo está generado con la herramienta de gestión de particiones parted.

Si reducimos las particiones para que quepan en el disco de destino y retocamos manualmente la información de tamaño de disco almacenado en el archivo sda-pt.parted, podremos restaurar la imagen sin ningún problema.

Por lo tanto, lo que podemos hacer es ejecutar, en el disco de destino, el comando:
# parted /dev/sda unit s print
Con ésto, le estamos diciendo a parted que muestre la información del disco en sectores. A continuación tomamos nota del número de sectores que tiene este disco y lo modificamos en el fichero sda-pt.parted de la imagen.

Veamos un ejemplo:
Supongamos que vamos a restaurar una imagen de un disco de 500GB y hemos reducido las particiones para que quepan en un disco de 320GB. En el disco más pequeño, tendremos que ejecutar el comando:
# parted /dev/sda unit s print 
Obtendremos una salida parecida a la siguiente:
Model: ATA ST9320325AS (scsi)
Disk /dev/sda: 625142448s
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start       End         Size        Type      File system     Flags
 1      1s          585937s     585937s     primary   ext3            boot
 2      585938s     39656250s   39070313s   primary   ext4
 3      39656251s   78726562s   39070312s   primary   ext4
 4      78726563s   625137344s  546410782s  extended                  lba
 5      78726564s   82632812s   3906249s    logical   linux-swap(v1)
 6      82632814s   312576704s  229943891s  logical   ext4
 7      312576768s  321798014s  9221247s    logical   ext3
 8      321798078s  441916019s  120117942s  logical   ext4
A continuación, nos fijamos en la línea que he resaltado en color rojo y tomamos nota del tamaño del disco.

Por último, abrimos la carpeta donde se encuentran almacenados los archivos que forman la imagen de clonación, editamos el fichero sda-pt.parted y modificamos la información de tamaño de disco para que tenga el tamaño del disco de destino.
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 20 de noviembre de 2014

El comando sed: Insertar texto al principio o al final de una línea

Vamos a ver algunos ejemplos de inserción de texto con el comando sed que utilizo con frecuencia en scripts. Como siempre, lo mejor es verlo con ejemplos concretos para que se entienda fácilmente:

Supongamos que queremos insertar una cadena de texto al principio de una línea concreta, por ejemplo en la línea 1. Haríamos lo siguiente:
$ sed -i "1 s|^|IP=|" /tmp/formulario
Con el comando anterior le estamos diciendo a sed que sustituya el comienzo de la línea por el texto "IP=" en la línea 1 en el archivo /tmp/formulario.

Si en lugar de ésto, lo que queremos es insertar el mismo texto en todas las líneas, cambiaríamos el comando para que quedara así:
$ sed -i "s|^|IP=|g" /tmp/formulario
Si en lugar de insertar el texto al principio de la línea, quisiéramos insertarlo al final de una línea concreta, el comando también sería sencillo:
$ sed -i "2 s|$|=$valor|" /tmp/formulario
En este caso, le estamos diciendo al comando sed que sustituya el final de la línea por el valor de una variable a la que hemos llamado $valor en la línea 2 del archivo /tmp/formulario.
Si ahora quisiéramos realizar la sustitución en todas las líneas del archivo, el comando quedaría así:
$ sed -i "s|$|=$valor|g" /tmp/formulario 
Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 17 de noviembre de 2014

Montar particiones exfat en Debian

exFAT (Extended File Allocation Table) es un sistema de archivos de Microsoft que mejora el antiguo FAT32. 

Para montar particiones extfat en Debian debemos instalar el paquete exfat-utils:
# apt-get install exfat-utils
Publicado por primera vez en http://enavas.blogspot.com.es

sábado, 8 de noviembre de 2014

Forzar la actualización de Raspbmc

Raspbmc se autoactualizará si la opción "Keep Raspbmc updated" se encuentra activada en Ajustes de Raspbmc, en Configuración del Sistema, pero como ya me ha pasado en ocasiones las actualizaciones no se realizan. En este caso, podemos forzar la actualización de Raspbmc borrando los scripts de actualización y descargándolos de nuevo:
# sudo -s
# cd /scripts/upd_sys
# rm *.sh
# wget http://svn.stmlabs.com/svn/raspbmc/release/update-system/getfile.sh
# wget http://svn.stmlabs.com/svn/raspbmc/release/update-system/cdn_env_prep.sh
# reboot
Publicado por primera vez en http://enavas.blogspot.com.es

Aumentar el tamaño de una máquina virtual

A veces creamos una máquina virtual con un tamaño de disco duro adecuado para el momento, pero con el tiempo el disco virtual se va llenando y nos damos cuenta de que necesitamos incrementar su tamaño. Como es muy sencillo aumentarlo, veamoslo con un ejemplo en el que incrementamos el tamaño del disco duro virtual a 8Gb:
# VBoxManage modifyhd xfce.vdi --resize 8192
Veremos una salida como la siguiente:
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 5 de noviembre de 2014

Detectar si hay algún servidor dhcp activo en la red

Podemos detectar si hay algún servidor dhcp activo en la red usando el script broadcast-dhcp-discover de la versión 6.01 de nmap:
# nmap --script broadcast-dhcp-discover
Si en la máquina donde vamos a utilizar el comando hay varias interfaces de red, podemos especificar la interfaz de escaneo mediante el parámetro -e "interfaz". Por ejemplo:
# nmap --script broadcast-dhcp-discover -e eth3
Publicado por primera vez en http://enavas.blogspot.com.es