Traducción(es): [[Installation+Archive+USBStick|English] - español


Instalar un Debian preconfigurado desde un pincho USB que contenga un archivo de paquetes.

Introducción

Las técnicas descritas en esta página tienen como objetivo

La automatización se realiza a través de la preconfiguración (en) y nos enfocaremos aquí en las arquitecturas i386 Debian 8 (Jessie) y Debian 9 (Stretch) para ilustrar el proceso. Las mismas técnicas deberían ser aplicables a la arquitectura pre-debian 8 (Wheezy y anteriores) y a la arquitectura amd64 de ambas distribuciones.

  • Hay un archivo ?atachment:preseed.cfg de ejemplo disponible para consultar. EStá adaptado para instalar un mínimo sistema operativo de modo texto que tenga una conexión ethernet a Internet.

Requerir privilegios de superusuario root

Para Debian 8, y posteriores, un usuario normal no tiene permisos para escribir en un dispositivo crudo. El uso de las órdenes dd, fdisk, cfdisk, mkfs. vfat y grub-install no funcionarán para dicho usuario. La única manera de que estas órdenes se completen correctamente es que un usuario obtenga privilegios de root con ?su o sudo o inicie una sesión como root.

Para Debian 7 un usuario ordinario sí tiene permisos para escribir en un dispositivo crudo y las órdenes dd, fdisk, cfdisk, mkfs. vfat y grub-install tendrán éxito. No es requisito usar "su" o "sudo" para que un dispositivo sea particionado, formateado y tenga GRUB instalado en su MBR con Debian 7.

Una excepción a la necesidad de tener privilegios de root es cuando se trata de montar una partición en un lápiz USB. Esto se puede hacer con o sin convertirse en root.

Preparando el pincho USB

Enchufa el pincho y usa dmesg para determinar el nombre del dispositivo. Por ejemplo,

 dmesg | tail -n5

puede mostrar:

  [1397586.638562] sd 57:0:0:0: [sdb] Mode Sense: 23 00 00 00
  [1397586.639306] sd 57:0:0:0: [sdb] No Caching mode page found
  [1397586.639316] sd 57:0:0:0: [sdb] Assuming drive cache: write through
  [1397587.391423]  sdb: sdb1 sdb2 sdb3
  [1397587.397023] sd 57:0:0:0: [sdb] Attached SCSI removable disk

En el caso anterior, el nombre de dispositivo es "/dev/sdb". El nombre de dispositivo se asume como "/dev/sdb" en los siguientes comandos. Si no lo es, sustitúyase "/dev/sdb" por el valor correcto.

El nombre del dispositivo también se puede encontrar utilizando el comando

  lsblk

Es mejor jugar seguro y borrar cualquier registro de particionado anterior y del pincho que posiblemente haya tenido una ISO isohíbrida. GRUB se negará a instalar en el MBR de un dispositivo si detecta que alguna vez mantuvo una imagen ISO híbrida.

  dd if=/dev/zero of=/dev/sdb count=100

Particiona el pincho para tener una sola partición primaria FAT16:

  /sbin/fdisk /dev/sdb
o
  /sbin/cfdisk /dev/sdb

Instale el paquete dosfstools, ponga un sistema de ficheros vfat en la partición que ha creado y etiquete la partición.

  /sbin/mkfs.vfat /dev/sdb1
  /sbin/dosfslabel /dev/sdb1 ARCHIVE

Se eligen FAT y VFAT porque los módulos para ellos están disponibles desde el principio de la puesta en marcha del instalador.

Instalación de GRUB en el pincho USB

Ser capaz de montar y desmontar el lápiz USB es un prerrequisito para instalar GRUB en su MBR. Como root:

  mount /dev/sdb1 /mnt
  umount /mnt

Si está trabajando en uno de los entornos de escritorio, es muy probable que el montaje se pueda realizar como usuario desde el administrador de archivos que viene con él. Esto se debe a que udisks2 estará en el sistema. Posiblemente se utilizará una etiqueta para el punto de montaje.

Compruebe el punto de montaje desde el administrador de archivos o con el comando:

  mount

Sin un entorno de escritorio pero con pmount, udevil o udisks2 en el sistema, uno de los siguientes comandos puede ejecutarse como usuario para montar la partición primaria. El punto de montaje para pmount es /media/ARCHIVE. Los otros dos programas indicarán dónde se encuentra el punto de montaje.

  pmount /dev/disk/by-label/ARCHIVE ARCHIVE
  udevil mount /dev/disk/by-label/ARCHIVE
  udisksctl loop-setup -f /dev/disk/by-label/ARCHIVE
  udisksctl mount -b /dev/disk/by-label/ARCHIVE

Desmontar es con:

  pumount /dev/disk/by-label/ARCHIVE
  udevil unmount /dev/disk/by-label/ARCHIVE
  udisksctl unmount -b /dev/disk/by-label/ARCHIVE

Tener GRUB en el Master Boot Record (MBR) de la memoria USB se consigue con:

  /usr/sbin/grub-install --boot-directory=<mount_point>/boot /dev/sdb

Arranque desde el lápiz USB

El método elegido aquí para arrancar un lápiz USB requiere un kernel, un initrd y un grub.cfg. Los dos primeros elementos se pueden obtener para la arquitectura Debian 8 i386 desde

  http://ftp.nl.debian.org/debian/dists/jessie/main/installer-i386/current/images/hd-media/

y ser copiados en <mount_point>/boot:

  cp vmlinuz <mount_point>/boot
  cp initrd.gz <mount_point>/boot

La imagen de instalación

El initrd contiene el programa iso-scan; esto buscará en todos los discos una imagen de instalación. Las imágenes adecuadas son la primera imagen de un set de CD o DVD (etiquetado como debian-something-1) o una imagen netinst. Si usted anticipa que tendrá que depender de firmware no libre para la instalación, podría considerar usar una imagen de

  http://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/

Como parte de un proceso automatizado, puede evitar que se busquen todos los discos construyendo un grub.cfg que designe dónde está la imagen a utilizar para la instalación. shared/ask_device=manual informa al instalador de que el dispositivo donde está la imagen se seleccionará manualmente y shared/enter_device=/dev/disk/by-label/ARCHIVE (si se utiliza el etiquetado) le indica cuál es el dispositivo seleccionado.

El archivo de preconfiguración

Un directorio para guardar la imagen de instalación, el preseed.cfg y cualquier otro archivo es conveniente:

  mkdir <mount_point>/files
  cp <installation_image> <mount_point>/files
  cp preseed.cfg <mount_point>/files

La ubicación para que el instalador busque preseed.cfg se indica como file=/hd-media/preseed.cfg en la línea linux de grub.cfg.

preseed. cfg será encontrado y cargado por el instalador porque la partición que sostiene el initrd estará montada en /hd-media después de que se hagan las preguntas sobre el lenguaje y la disposición del teclado. Esto implica que el lenguaje y la disposición del teclado no pueden preconfigurarse en preseed.cfg. Sin embargo, se pueden preconfigurar, en la línea linux con (por ejemplo) locale=en_GB.UTF-8 and keymap=gb.

Un archivo grub.cfg de ejemplo

Si juntamos lo que tenemos hasta ahora, grub.cfg se vería así:

  menuentry 'Debian 8.2.0 i386 automated install' {
    linux /boot/vmlinuz shared/ask_device=manual                       \
                        shared/enter_device=/dev/disk/by-label/ARCHIVE \
                        file=/hd-media/files/preseed.cfg               \
                        locale=en_GB.UTF-8 keymap=gb
    initrd /boot/initrd.gz
  }

Copie este archivo en el lápiz USB:

  cp grub.cfg <mount_point>/boot/grub

Resumen-1

  1. Después de limpiar los primeros 64 sectores del pincho USB, particiónelo, formatee la partición con vfat y etiquételo.

  2. Instale GRUB en el MBR del pincho.

  3. Cree un directorio files en el pincho. Copie la imagen de instalacion y preseed.cfg al files.

  4. Copie initrd.gz y vmlinuz al /boot.

  5. Copie grub.cfg al /boot/grub. No se olvide de especificar su etiqueta.

  6. Desmonte el pincho y arreanque desde él.

Elija entre varias imágenes de instalación

Es tentador tener más de una imagen de instalación en files y anticipar la elección de uno de ellos. Esto funcionará con una sola partición en el lápiz USB si está preparado para renunciar a alguna de las automatizaciones preconfiguradas de las respuestas a las primeras preguntas presentadas por el instalador.

Un método es añadir

  priority=medium

a la línea linux de grub.cfg. La partición primaria del pincho será escaneada para hayar las imágenes ISO y se dará una elección de cuál utilizar. Después de la selección, la prioridad de debconf se puede volver a poner high (alta) para aprovechar el resto de la preconfiguración.

Este informe de fallo sugiere un segundo método cuando todas las ISO están en un directorio. La instalación se detendrá y mostrará el contenido de morefiles (más archivos). Después de la selección, la preconfiguración se realiza de nuevo sin intervención del usuario.

  mkdir <mount_point>/files/morefiles

y mueva las imágenes de instalación al directorio Morefiles. Luego agregue

  so-scan/ask_second_pass=true

al grub.cfg.

Un tercer método, que preserva toda la automatización, es hacer más particiones en el lápiz USB y poner una ISO en cada una de ellas. Rotule las nuevas particiones (LABEL-2, LABEL-3, etc.) y construya más estrofas de grub. Sólo se diferenciarán del original por tener

   shared/enter_device=/dev/disk/by-label/<LABEL-2>
   shared/enter_device=/dev/disk/by-label/<LABEL-3>

  • Recuerde que las arquitecturas de las imágenes kernel e initrd y la imagen de instalación deben coincidir.

Uso del servicio de ciclo cerrado (Loopback) de GRUB

Esta característica de GRUB permite que las imágenes del núcleo y de initrd dentro de una ISO se utilicen para arrancar una ISO. Esto significa que aparentemente no se requeriría el vmlinuz de medios hd e initrd.gz. Desafortunadamente, las imágenes del instalador (netinst, CD-1, DVD-1, etc.) tienen initrds que no contienen iso-scan, por lo que no se puede buscar una imagen de instalación.

Lo que se podría intentar, sin embargo, es usar el initrd hd-media con una estrofa de ciclo cerrado loopback en grub.cfg.

set isofile="files/firmware-8.2.0-i386-netinst.iso"
menuentry 'loopback' {
     loopback loop (hd0,1)/$isofile
     linux  (loop)/install.386/vmlinuz shared/ask_device=manual                       \
                                       shared/enter_device=/dev/disk/by-label/ARCHIVE \
                                       file=/hd-media/files/preseed.cfg               \
                                       locale=en_GB.UTF-8 keymap=gb
     initrd /boot/initrd.gz
}

  • No hay ninguna garantía de que mezclar un initrd hd-media con el kernel de una ISO produzca un resultado deseable en todas las circunstancias.

Creación de un archivo de paquetes

Monte el lápiz USB y configure una estructura de directorios de paquetes. Para la arquitectura del i386:

  mkdir -p <mount_point>/debian/dists/jessie/main/binary-i386
  mkdir -p <mount_point>/debian/dists/jessie/contrib/binary-i386

Los paquetes binarios para el archivo se obtienen de los conjuntos de CD o DVD, (denominados debian-something-1,debian-something-2, etc.). Por favor considere usar jigdo para descargar paquetes y hacer las imágenes.

Los binarios están en los directorios pool/main y pool/contrib de las imágenes descargadas. Pueden copiarse en el pincho utilizando uno de los métodos descritos ?aqui. Por ejemplo, para DVD-1:

 bsdtar -C <mount_point>/debian -xf debian-8.2.0-i386-DVD-1.iso pool/main

Repetir para otras imágenes.

Los archivos de índice de paquetes

Instale dpkg-dev para obtener dpkg-scanpackages. Entonces:

  cd <mount_point>

y

  dpkg-scanpackages debian/pool/main /dev/null > debian/dists/jessie/main/binary-i386/Packages

Repita para los paquetes contrib.

  dpkg-scanpackages debian/pool/contrib /dev/null > debian/dists/jessie/contrib/binary-i386/Packages

Contarle al sistema operativo sobre el archivo de paquetes

Esto se hace como root en /etc/apt/sources.list del sistema operativo instalado.

  deb [ trusted=yes ] file:/media/<mount_point>/debian jessie main contrib

Con una partición etiquetada <mount_point> podría ser /media/ARCHIVE o /media/$USER/ARCHIVE, dependiendo de la utilidad que se use para montar el lápiz USB.

Resumen-2

  1. Lleve a cabo los pasos 1 a 5 de Resumen-1

  2. Construya una estructura de directorios de paquetes.

  3. Extraiga paquetes binarios de las ISO de Debian y cópielos en el pincho.

  4. Cree Archivos índice de paquetes.

  5. Escriba un sources.list.

Acceso al archivo de paquetes

Enchufe el pincho y móntelo. Como root:

  apt-get update
  apt-get install <packages>