Debian preseed revisitado

agosto 27, 2017 at 23:15 Deja un comentario

Esta es la versión actualizada de Debian squeeze netinstall usando preseed desde una unidad usb.

Ir directamente al script.

Repositorio en github para este script.

  • Descargamos el ISO netinstall de Debian, en este caso se usa uno de los iso que incluye firmware adicional para más comodidad:
    cd /home/usuario
    wget https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/9.1.0+nonfree/amd64/iso-cd/firmware-9.1.0-amd64-netinst.iso
  • Creamos un directorio llamado loopdir en /mnt (o en /media):
    mkdir /mnt/loopdir
  • Montamos el ISO descargado en la carpeta recién creada:
    mount -o loop /home/usuario/firmware-9.1.0-amd64-netinst.iso   /mnt/loopdir
  • Se crea el directorio remaster en /mnt:
    mkdir /mnt/remaster
  • Se sincroniza la imagen ISO montada en /mnt/loopdir con la carpeta /mnt/remaster:
    rsync -a -H --exclude=TRANS.TBL /mnt/loopdir/ /mnt/remaster
  • Movemos el initrd.gz desde la ruta /mnt/remaster hacia /home/usuario/:
    mv /mnt/remaster/install.amd/initrd.gz /home/usuario/
  • Creamos un directorio para descomprimir el initrd.gz:
    mkdir /home/usuario/initrd
  • Entramos a la carpeta recién creada:
    cd /home/usuario/initrd
  • Descomprimimos el initrd.gz:
    zcat ../initrd.gz | cpio -i -d
  • Agregamos el archivo para preseed (incluído al final):
    cp /home/usuario/preseed.cfg /home/usuario/initrd
  • Recomprimimos el initrd y le damos permiso de ejecución:
    find . | cpio -o -H newc | gzip -9 > ./initrd.gz
    chmod a+x initrd.gz
  • Copiamos de vuelta el initrd.gz a la carpeta /mnt/remaster/:
    cp /home/usuario/initrd/initrd.gz /mnt/remaster/install.amd
  • Remasterizamos el ISO usando mkisofs o usando xorriso:
    mkisofs -r -o /home/usuario/remaster.iso -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table /mnt/remaster
    xorriso -as mkisofs -r -o /home/usuario/remaster.iso -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table /mnt/remaster
  • Si hemos usado mkisofs, le agregamos isohybrid a nuestro ISO para que funcione al ser usado con un dispositivo usb:
    isohybrid /home/usuario/remaster.iso
  • Copiamos el ISO remasterizado a nuestro disposirivo (ej /dev/sdc) usb que debe estar desmontado:
    dd if=/home/usuario/remaster.iso bs=4M count=2048 of=/dev/sdX

Trabajo Pendiente

Algo que aún hace falta en este procedimiento de preseed es que para una pregunta del instalador es necesario oprimir la tecla Enter manualmente, dicha pregunta es la siguiente: ESSID manual

Parece que el posible workaround es modificar los templates del netcfg pero no lo he probado todavía.

Acerca de la receta del partman

Hace un tiempo que usé partman era magia voodoo, no sé si aún lo seguirá siendo pero los trucos de magia voodoo aún funcionan:

  • Cada partición tiene 3 números asociados, el primero es el tamaño mínimo en MB que puede tener la partición, el segundo es el nivel de prioridad y el tercero es el tamaño máximo que puede tener la partición.
  • El nivel de prioridad debe ser un número entre el tamaño mínimo de la partición y el tamaño máximo de la misma.
  • Al menos una de las particiones creadas debe tener como tamaño máximo el número 1000000000 para que tome el espacio vacío sobrante si es que hay alguno, de no utilizarse ese número el partman da errores.
  • El tercer número para la partición linux-swap está en porcentaje, esto indica que dicha partición puede crecer hasta un tamaño de máximo el 200% de la memoria RAM del sistema.
  • Los tamaños de las particiones son redeondeados a cilindros automáticamente de ser necesario.
  • No deben haber espacios entre el texto y el operador {.
  • Es mejor dejar como última partición de la receta la partición que se quiere sea más grande (usualmente /home) para que tome el espacio restante si es posible.

Script

Script para remasterizar el ISO


#!/bin/bash
# Remasteriza un iso netinstall para incluirle preseed.

# Directorio para crear archivos y directorios.
CREATE_DIR=""

# Directorio para montajes.
MOUNT_DIR="/mnt"

# Dispositivo usb
USB_DEV="/dev/sdc"

# Nombre de la distribucion
DIST_NAME="firmware-9.1.0-amd64-netinst.iso"

# Verificar si no existe el directorio $MOUNT_DIR/loopdir.
if [ ! -d "$MOUNT_DIR/loopdir" ]; then
# Crear el directorio /MOUNT_DIR/loopdir
mkdir $MOUNT_DIR/loopdir
fi

# Desmontar loopdir si estaba ya montado.
if ! mountpoint $MOUNT_DIR/loopdir | grep not > /dev/null; then
umount $MOUNT_DIR/loopdir
fi

# Montar el iso de netinstall en $MOUNT_DIR/loopdir.
mount -o loop /root/$CREATE_DIR/$DIST_NAME $MOUNT_DIR/loopdir

# Verificar si existe el directorio $MOUNT_DIR/remaster.
if [ -d "$MOUNT_DIR/remaster" ]; then
# Borrar el directorio $MOUNT_DIR/remaster
rm -r $MOUNT_DIR/remaster
fi

# Crear el directorio $MOUNT_DIR/remaster.
mkdir $MOUNT_DIR/remaster

# Sincronizar todo lo que esté en el directorio $MOUNT_DIR/loopdir con $MOUNT_DIR/remaster.
rsync -a -H --exclude=TRANS.TBL $MOUNT_DIR/loopdir/ $MOUNT_DIR/remaster

# Copiar el initrd.gz original para posteriormente agregarle preseed.
mv $MOUNT_DIR/remaster/install.amd/initrd.gz /root/$CREATE_DIR/

# Verificar si existe el directorio /root/$CREATE_DIR/initrd.
if [ -d "/root/$CREATE_DIR/initrd" ]; then
# Borrar el directorio /root/$CREATE_DIR/initrd
rm -r /root/$CREATE_DIR/initrd
fi

# Descomprimir, agregar preseed y recomprimir el initrd.
mkdir /root/$CREATE_DIR/initrd
cd /root/$CREATE_DIR/initrd
zcat ../initrd.gz | cpio -i -d
cp /root/$CREATE_DIR/preseed.cfg /root/$CREATE_DIR/initrd
find . | cpio -o -H newc | gzip -9 > ./initrd.gz
chmod a+x initrd.gz

# Copiar de vuelta el initrd modificado.
cp /root/$CREATE_DIR/initrd/initrd.gz $MOUNT_DIR/remaster/install.amd

# Corregir el md5.
cd $MOUNT_DIR/remaster
md5sum `find -follow -type f` > md5sum.txt
cd /

# Verificar si existe el archivo remaster.iso
if [ -e /root/$CREATE_DIR/remaster.iso ]
then
# Borrar el archivo remaster.iso para generarlo nuevamente.
rm -r /root/$CREATE_DIR/remaster.iso
fi

# Crear el archivo iso.
#mkisofs -r -o /root/$CREATE_DIR/remaster.iso -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table $MOUNT_DIR/remaster

# Hacer que el iso sea arrancable desde un usb.
#isohybrid /root/$CREATE_DIR/remaster.iso

xorriso -as mkisofs -r -o root/$CREATE_DIR/remaster.iso -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table $MOUNT_DIR/remaster

# Verificar si existe el directorio $MOUNT_DIR/sdc1.
if [ -d "$MOUNT_DIR/sdc1" ]; then
# Desmontar el dispositivo usb $MOUNT_DIR/sdc1 si estaba ya montado.
if ! mountpoint $MOUNT_DIR/sdc1 | grep not > /dev/null; then
umount $MOUNT_DIR/sdc1
fi
fi

# Verificar si existe el directorio $MOUNT_DIR/sdc.
if [ -d "$MOUNT_DIR/sdc" ]; then
# Desmontar el dispositivo usb $MOUNT_DIR/sdc si estaba ya montado.
if ! mountpoint $MOUNT_DIR/sdc | grep not > /dev/null; then
umount $MOUNT_DIR/sdc
fi
fi

# Copiar el iso al dispositivo usb.
dd if=/root/$CREATE_DIR/remaster.iso bs=4M count=2048 of=$USB_DEV
sync

# Desmontar y eliminar el directorio loopdir.
umount $MOUNT_DIR/loopdir
rm -r $MOUNT_DIR/loopdir

# Eliminar el directorio remaster.
rm -r $MOUNT_DIR/remaster

# Eliminar el iso creado que ya copiamos al dispositivo usb.
rm /root/$CREATE_DIR/remaster.iso

# Eliminar los archivos para initrd.
rm /root/$CREATE_DIR/initrd.gz
rm -r /root/$CREATE_DIR/initrd

Archivo de preseed


# Seleccionar lenguaje y país: en mi caso Costa Rica.
d-i debian-installer/locale string es_CR

# Seleccionar el mapa del teclado: latinoamericano.
d-i keyboard-configuration/xkb-keymap select latam

# Seleccionar la tarjeta de red.
d-i netcfg/choose_interface select auto

# Configuración de la red inalámbrica.
d-i netcfg/wireless_show_essids select manual
d-i netcfg/wireless_essid string miRed
d-i netcfg/wireless_security_type select wpa
d-i netcfg/wireless_wpa string miPass

# Establecer el nombre de la computadora (hostname).
d-i netcfg/get_hostname string miHost

# Establecer el nombre de dominio.
d-i netcfg/get_domain string amanita

# Crear la contraseña del usuario root.
d-i passwd/root-password password miPass
d-i passwd/root-password-again password miPass

# Crear un usuario.
d-i passwd/user-fullname string miUsuario
d-i passwd/username string miUsuario

# Y su contraseña.
d-i passwd/user-password password miPass
d-i passwd/user-password-again password miPass

# Indicar al partman (creador de particiones) el volumen del disco a
# utilizar para crear las particiones.
d-i partman-auto/disk string /dev/sda

# Indicar al partman que vamos a particionar de manera regular
# otras opciones son lvm y crypto (para particionar encriptado).
d-i partman-auto/method string regular

# Receta del partman.
# / 150G
# swap 2G
# /home 300G
d-i partman-auto/expert_recipe string \
boot-root :: \
150181 10000 150181 ext4 \
$primary{ } $bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
. \
2148 2148 300% linux-swap \
$primary{ } \
method{ swap } format{ } \
. \
315040 200000 1000000000 ext4 \
$primary{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /home } \
. \

# Indicamos al partman que no nos pregunte más nada.
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true

# Seleccionar la lista de repositorios
# Costa Rica en mi caso.
d-i mirror/country string manual
d-i mirror/http/hostname string ftp://mirrors.ucr.ac.cr
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string

# No enviar estadísticas de uso de paquetes.
popularity-contest popularity-contest/participate boolean false

# Seleccionar paquetes a instalar.
tasksel tasksel/first multiselect standard
tasksel tasksel/desktop multiselect lxde-desktop

# Permitimos que se instale el grub como gestor de arranque.
d-i grub-installer/only_debian boolean true

# Seleccionar el disco en el cuál instalar grub.
d-i grub-installer/bootdev string /dev/sda

# Saltarse el mensaje de: "instalación finalizada".
d-i finish-install/reboot_in_progress note

Referencias

Listo listo.

setas Enjoy!

Entry filed under: bash scripting, Debian, linux, servidores, sistemas operativos.

Agregar modo de video usando xrandr LXC contenedores privilegiados

Dejáte un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Trackback this post  |  Subscribe to the comments via RSS Feed


Acerca de Mi:


Hell-Out world!!

Digo yo

Es difícil hacerse la vida fácil.

Dice Victor Frankl

Lo que importa no es tanto que la vida de una persona esté llena de dolor o de placer, sino que esté llena de sentido.

Digo yo

Que dura está la vida.

Dice Jhon Lennon

La vida es lo que pasa mientras haces planes.

Digo yo

Dónde haya un computín esté dónde esté algo comenzará en cero.

Dice Einstein

Dios no juega a los dados.

Dice Niels Bohr

Einstein no le diga a Dios lo que tiene que hacer.

Dice el Che:

Seamos realistas y hagamos lo imposible.

Dice Goethe:

Lo que no comprendemos no lo poseemos.

Digo yo:

Hay que tratar de travesear todo.

Dice Oscar Wilde:

Cualquier hombre puede llegar a ser feliz con una mujer, con tal de que no la ame.

Digo yo:

De fijo dijo eso porque era homosexual.

Artículos

agosto 2017
L M X J V S D
« Abr   Sep »
 123456
78910111213
14151617181920
21222324252627
28293031  

A %d blogueros les gusta esto: