Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

viernes, 30 de octubre de 2015

Claves en APT

En alguna ocasión que otra he recomendado evitar (a ser posible) el uso de repositorios no oficiales; es decir el uso de repositorios ajenos a los implementados por el sistema operativo por defecto... Aún así hay veces en las que no queda otra que recurrir a éstos, ocasiones en las que al añadir "a pelo" los repositorios, generalmente tendremos notificaciones de que algo no va como debería. en caso de estar trabajando en un entorno basado en Debian: véase Ubuntu, Mint, Elementary Os, etc...


Esto es debido a que todos ellos comparten el mismo gestor de paquetes: APT. Imaginemos que hemos querido añadir un repositorio de Opensuse a nuestra lista de repositorios mediante:

echo 'deb http://download.opensuse.org/repositories/filesystems:/snapper/Debian_8.0/ /' >> /etc/apt/sources.list.d/snapper.list

El mero hecho de ejecutar apt-get update nos dará este error:

  1. Obj http://download.opensuse.org  Packages
  2. Ign http://download.opensuse.org  Translation-es_ES
  3. Ign http://download.opensuse.org  Translation-es
  4. Ign http://download.opensuse.org  Translation-en
  5. Descargados 4.408 B en 8seg. (524 B/s)
  6. W: Error de GPG: http://download.opensuse.org  Release: Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY 98C97FE7324E6311

Este problema es bastante conocido por aquellos que trabajan con apt. y la causa es debido a la carencia de la clave pública. Las claves públicas tienen un único objetivo: Verificar que el origen del paquete que se está descargando es legítimo. La mejor forma de saber qué claves poseemos actualmente es listandolas; listado que se obtiene con gran facilidad mediante:

apt-key finger

Este comando nos ofrecerá un listado detallado, en el cual se nos mostrarían las claves con sus respectivos nombres, fechas de caducidad, fingerprint... Dichas claves serán las encargadas de verificar que el paquete bajado y de comprobar que el paquete en cuestión es aquel que se ha pedido y no uno fraudulento... Es por ello que en caso de querer instalar un paquete desde un repositorio CUYA CLAVE NO TENEMOS; es decir, desde un repositorio "no confiable". El sistema nos preguntará si efectivamente queremos instalar el paquete en cuestión. El mensaje rezaría:

Clave_invalida

Esto no significa que no nos vaya a dejar instalar el paquete, pero sí que nos preguntará si realmente deseamos instalar un paquete de origen desconocido. Para añadir la clave tendremos que saber de donde descargarla; generalmente el repositorio que hemos añadido posee un fichero llamado Release.key, que almacena la clave pública del repositorio. Dicho Release.Key proviene de la misma ruta que el repositorio que hemos añadido, y tendría que ser descargado mediante el comando wget. Así como el repositorio que hemos añadido es:

deb http://download.opensuse.org/repositories/filesystems:/snapper/Debian_8.0/

El comando para obtener el Release.key de dicho repositorio sería:

wget http://download.opensuse.org/repositories/filesystems:snapper/Debian_8.0/Release.key

Es decir que la ruta de descarga sería la misma que la del repositorio, añadiendole el nombre Release.key al final. Gracias a ésto habríamos obtenido la clave pública si bien no la hemos añadido a nuestro listado de claves; esto no se lograría hasta no recurrir al comando apt-key add; tal y como hacemos a continuación:

apt-key add - < Release.key

Ahora, si efectuásemos el comando apt-get update no tendríamos ningún aviso por falta de verificación y cualquier aplicación descargada desde dicho repositorio no daría aviso alguno... Ahora si realizásemos de nuevo el comando apt-key finger, veríamos la clave que recién hemos añadido en el listado:


Imaginemos que en el futuro queremos eliminar esa clave; ¿Cómo lo haríamos? Si observáis bien ,la clave tiene una sección con la estructura: 2048R/32E6311. Dicha sección representa la clave pública, a la cual se puede hacer referencia nombrando a la sección posterior al caracter /. El comando de borrado de claves es apt-key del, con lo que para borrar esta clave en concreto tendríamos que escribir:

apt-key del 324E6311

Es recomendable borrar las claves que no se vayan a usar, pues el exceso de claves puede llegar a ser tan peligroso como la carencia de ellas.

Con esto ya tendríamos las nociones generales sobre las claves usadas en apt con el fin de mantener nuestro sistema seguro; este sistema no es infalible, pero sí que puede resultar de gran ayuda para comprobar que la veracidad de un paquete.

Espero que os haya resultado útil.

Saludos.

miércoles, 28 de octubre de 2015

Cómo gestionar snapshots con Virtualbox

Hoy me gustaría hablaros de uno de los aspectos más comunes dentro de los entornos virtualizados... ¿Quien no ha estado realizando pruebas con una máquina virtual y se ha dado cuenta que una determinada acción ha "roto" el sistema? Para este tipo de eventos suelen haber tres opciones: La primera y la más común suele ser intentar enmendar el error volviendo sobre nuestros pasos... intentar encontrar el error y ver cómo poder revertirlo... Dependiendo de hasta que punto hemos podido errar, este proceso puede durar desde unos pocos minutos hasta arias horas. Otra alternativa, más brusca pero que puede ser viable dependiendo del grado de gravedad, sería reinstalar la máquina virtual, un proceso que dependiendo lo que contenga la máquina puede ser largo y tedioso... Por ello hoy quiero hablaros de la última opción de todas: Los snapshots.

Portada_virtualbox

Un snapshot de máquina virtual nada menos que una instantánea tomada en un momento determinada. Dicha instantánea almacena toda la información de la máquina, incluyendo la información, los programas instalados, etc... Podría decirse que se trata de una especie de copia de seguridad instantánea de la máquina virtual... Copia de seguridad que puede crearse y restaurarse con gran velocidad, siendo un método MUCHO más eficiente que los dos anteriores para solventar catástrofes causadas en máquinas virtuales.

Todos los entornos de virtualización poseen esta capacidad; ya sean entornos profesionales como Proxmox, o entornos más diseñados para el uso domestico como VMWare Workstation  o Virtualbox... En este caso particular me he centrado en Virtualbox, ya que puede usarse sin problema alguno tanto en entorno de sobremesa basado en Windows y Linux, siendo una de las opciones favoritas de la mayoría de la gente... 

Ahora llegaría el turno de sacarle partido a esta estupenda utilidad... Lo primero que tenemos que hacer es tomar una instantánea de nuestro sistema. Esto requiere que nuestra máquina esté en marcha... Una vez esta se encuentre en marcha, dentro de ésta habría que dirigirse a Máquina --> Tomar instantánea.

Toma_instantánea

Habiendo seleccionado dicha opción, se nos ofrecerá la opción de escoger un nombre para dicha instantánea; por ejemplo podríamos podríamos establecer un nombre genérico como Snapshot 1. 

toma_instantánea

Esta instantánea guardaría incluso la pantalla que se mostraba durante la toma de ésta... Ahora para restaurar la máquina al estado de la última instantánea es necesario detener la máquina virtual en cuestión; es decir apagarla; en caso contrario no sería posible realizar la restauración, pero tranquilos, el proceso de restauración es muy veloz, con lo que pronto podremos disfrutar de ella de nuevo. 

Ahora únicamente tendríamos que restaurarla... Para ello sería necesario seleccionar nuestra máquina dentro del listado de máquinas virtuales disponibles... Si nos fijamos bien, veremos que a la derecha se mostrará los detalles de la máquina, tales como la memoria ram asignada, espacio en el disco duro, etc... Además de dicha información, arriba a la derecha observaremos un icono que reza: Instantáneas

Estado_máquina

Dentro de dicha sección se muestra un listado de las instantáneas tomadas; este caso únicamente habría una: Snapshot 1. Con tal solo seleccionarla y clickar el botón de restauración de instantáneas, la máquina volvería al estado en el que se tomó la instantánea:

Restauración_máquina

Con tan sólo arrancar la máquina virtual de nuevo, ya tendríamos nuestro sistema restaurado y completamente operativo en unos pocos segundos. Simple, rápido y, lo más importante, efectivo.

Espero que os haya resultado útil.

Saludos.

lunes, 26 de octubre de 2015

Cómo cambiar la "ubicación" de los puertos de red en Linux

El pequeño post que relataré a continuación está especialmente dirigido a aquellos que está acostumbrados a trabajar con más de una interfaz de red física en Linux. Cualquiera que haya experimentado con varias interfaces de red sabrá que cada interfaz física de red tiene asignado una nomenclatura interna que comienza por eth (wlan y ath serían en caso de ser inalámbrica). Estas nomenclaturas son asignadas automáticametne a cada interfaz de red, siguiendo un orden que ,supuestamente, ya ha sido preestablecido a nivel de hardware... El problema con este supuesto es que no siempre es así: A veces el fabricante ha errado con el posicionamiento de los puertos de red (lo he visto más de una vez) o a veces la ubicación física de eth0 (que podría denominarse como la primera interfaz física de red) no se encuentra en una posición tan intuitiva como nos gustaría.


Este problema es bastante conocido y por suerte tiene una solución bastante sencilla: Cada puerto de red posee una mac en concreto, MAC que se asocia internamente con una nomenclatura interna fácilmente identificable: eth0, eth1, etc... Dicha interfaz puede ser configurada con gran facilidad gracias a multitud de recursos: desde el famoso Network Manager de Debian hasta la configuración "a pelo" en el fichero /etc/network/interfaces; pero las únicas modificaciones que se pueden realizar desde ambos pertenecen al ámbito de configuración de red (ip, mascara) nada con respecto a su ubicación física en el equipo...

Para alcanzar nuestro objetivo deberemos recurrir a un fichero bastante poco conocido pero que puede resultar realmente útil para todo lo relativo a las tarjetas físicas de red... Este fichero se denomina 70-persistent-net.rules, ubicado /etc/udev/rules.d y aloja las reglas referentes a las interfaces de red, desde su MAC a su nombre interno en el sistema. Cada línea del fichero en cuestión posee una estructura muy parecida a la siguiente:

SUBSYSTEM=="net",ACTION=="add", DRIVERS=="?*", ATTR{address}=="${MAC}", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="${nombre_interno}"

Aunque la estructura puede parecer compleja, en verdad únicamente hay tres valores que nos interesan en cada línea, estos valores son::
  • ATTR{address}: Aquí se mostraría la MAC del puerto de red detectado por el sistema; dicha MAC es un identificador único que posee cada interfaz de red.
  • KERNEL: Dependiendo del tipo de puerto de red detectado, el kernel lo asociará a un tipo de "grupo"... Las interfaces de red físicas siempre tienen la nomenclatura eth, más un número. Las inalámbricas suelen poseer la denominación wlan o ath, dependiendo del típo de tarjeta inalámbrica.
  • NAME: Aquí veríamos el nombre designado por sistema a la tarjeta de red (eth0, eth1, wlan0...). Dicho nombre será el que asociará el sistema con la tarjeta de red; por ejemplo eth0 estaría asociado a una MAC x, eth1 a una MAC y, etc...
Pongamos que tenemos este contenido dentro del fichero 70-persistent-net.rules:

  1. # PCI device 0x14e4:/sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.0 (bnx2)
  2. SUBSYSTEM=="net"ACTION=="add"DRIVERS=="?*", ATTR{address}=="d4:ae:52:b9:ec:7b", ATTR{dev_id}=="0x0", ATTR{type}=="1"KERNEL=="eth*",NAME="eth0"
  3. # PCI device 0x14e4:/sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.1 (bnx2)
  4. SUBSYSTEM=="net"ACTION=="add"DRIVERS=="?*", ATTR{address}=="d4:ae:52:b9:ec:7c", ATTR{dev_id}=="0x0", ATTR{type}=="1"KERNEL=="eth*",NAME="eth1"

Si quisiesemos que la ubicación física de estas dos tarjetas se intercambiasen la una con la otra, simplemente habría que cambiar sus nombres de esta forma:


  1. # PCI device 0x14e4:/sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.0 (bnx2)
  2. SUBSYSTEM=="net"ACTION=="add"DRIVERS=="?*", ATTR{address}=="d4:ae:52:b9:ec:7b", ATTR{dev_id}=="0x0", ATTR{type}=="1"KERNEL=="eth*",NAME="eth1"
  3. # PCI device 0x14e4:/sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.1 (bnx2)
  4. SUBSYSTEM=="net"ACTION=="add"DRIVERS=="?*", ATTR{address}=="d4:ae:52:b9:ec:7c", ATTR{dev_id}=="0x0", ATTR{type}=="1"KERNEL=="eth*",NAME="eth0"


Ahora únicamente con reiniciar el equipo podríamos disfrutar de las nuevas posiciones de nuestros puertos de red.

Espero que os resulte útil.

Saludos.

jueves, 22 de octubre de 2015

Cómo limitar el ancho de banda en Linux

Hola a todos, hoy vengo a hablaros sobre algo cuyo uso, aunque poco habitual; puede ser realmente útil en entornos en los que deseamos que nuestra red se vea menos saturada o en los que deseamos que las personas posean una navegación por Internet más limitada; hablo por supuesto de la limitación del ancho de banda de una tarjeta de red... ¿Cuantas veces hemos querido poner alguna limitación a un PC con el fin de que éste no desborde la red por accidente (especialmente en redes que no están preparadas para grandes cantidades de tráfico)? El establecimiento de límites es más sencillo de lo que puede parecer, y no nos llevaría más de unos minutos. Dicha limitación se puede establecer de dos formas: Mediante un firewall que limite el ancho de banda a toda la red o limitando el ancho de banda en un equipo específico.

Portada_ancho_banda

Limitación desde un firewall

Imaginemos que deseamos poner un router/firewall entre nuestros equipos e Internet... Dicho router no sólo nos haría posible la comunicación con internet, sino que además podría brindarnos seguridad a nuestra red... Para ello lo primero de todo sería convertir nuestro equipo en un router... Esto es muy sencillo en caso de poseer nociones de la tabla NAT de iptables, pues simplemente habría que crear un entorno que todo lo que entrase por una interfaz, saliese por la otra sin problema alguno; supongamos que poseemos un servidor con dos tarjeta de red: Una con la ip 192.168.0.1 (y una mascara de red 24 bits), que sería la que estaría conectada a nuestra red interna; y otra con la ip 192.168.1.1 (también con mascara de 24 bits) conectada a un router con la ip 192.168.1.100. Para esclarecer un poco el entorno que he descrito, he aquí un pequeño esquema:



Para poder crear un router en este escenario habría que hacer que todo el tráfico que fluya desde nuestra VLAN, sea "enmascarado" para que tenga una ip válida dentro de la VLAN en la que se encuentra el router. Esto es tan sencillo como escribir estas líneas en la consola de nuestro servidor:

  1. echo 1 > /proc/sys/net/ipv4/ip_forward
  2. iptables -A FORWARD -j ACCEPT
  3. iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Obviamente con esto lo único que lograríamos sería que nuestro servidor se convirtiese en un router, cosa útil, pero que en este caso no nos es suficiente; queremos ir un paso más allá y tener una política restrictiva con el tráfico que fluye a través del servidor. Esto se puede lograr gracias a un parámetro de iptables llamado hashlimit, y habría que aplicarlo de forma de que pudiésemos limitar el tráfico que pasa a través de nuestro servidor. Por ejemplo podemos toda ip que se encuentre en la red local, pueda únicamente transferir un máximo de 20 paquetes de red por segundo tal que así:

iptables -A INPUT -i eth0 -s 192.168.0.0/24 -m hashlimit --hashlimit-above 20/sec --hashlimit-mode srcip --hashlimit-name all -j DROP

Esto haría que cualquier ip que pase por eth0 con el rango de ip 192.168.0.0/24, no podría enviar más de 20 paquetes por segundo; número de paquetes que podría adaptarse perfectamente a las necesidades de cada entorno.


Limitación en el propio equipo

Aunque esta limitación es muy útil, está más bien diseñada para limitar a nivel global y requiere poner un firewall entre el router y la red local para poder lograr esa limitación, cosa que no siempre es posible, especialmente en entornos "caseros". Por ello, a veces es más recomendable buscar alternativas diseñadas para limitar el ancho de banda a nivel de equipo local, y ahí es donde entra la siguiente utilidad: wondersharper.

Wondersharper no es ni más ni menos que una herramienta capaz de limitar tanto el ancho de banda de subida como el de bajada en un equipo local, siendo capaz de establecer diferentes límites a la subida y la bajada... Se trata de una herramienta que no está instalada por defecto en el sistema, pero que está incluida en los repositorios oficiales, con lo que instalarla sería tan sencillo como escribir:

sudo apt-get install wondershaper

Su uso es muy sencillo, pues para poner un límite simplemente habría que escribir:

wondersharper ${interfaz} ${límite_bajada} ${límite_subida}

Hemos de tener en cuenta que los límites que establezcamos serán especificados en Kilobytes por sesgundo, con lo que hemos de tener en cuenta que 1024 Kilobytes por segundo equivaldrían a 1 megabyte por segundo. Teniendo en cuenta dicho dato podríamos poner cualquier límite a nuestro gusto; por ejemplo en este caso pondremos un límite de 1024 kilobytes de bajada por segundo y 512 kilobytes por segundo de subida; límite que le pondríamos a la interfaz eth0.

wondershaper eth0 1024 512

Simple y rápido... En caso de querer consultar los límites impuestos a la interfaz, únicamente deberíamos escribir:

wondershaper eth0

Por último, pero no por ello no menos importante, quedaría la eliminación de límites. Todo límite impuesto puede ser eliminado mediante una sola orden; dicha orden se basaría en el comando wondersharper, seguido del parámetro clear y la interfaz cuyos límites queremos "limpiar".  En caso de la interfaz eth0 sería:

wondershaper clear eth0


Ambos métodos son excelentes para filtrar el ancho de banda, cada uno con sus pros y sus contras... Solamente dependería de uno mismo elegir qué opción de las dos se adapta más a sus necesidades.

Espero que os haya resultado útil.

Saludos.

martes, 20 de octubre de 2015

Cómo crear un instalador de Debian personalizado

Hace relativamente poco ya mostré cómo podíamos crear nuestras propias isos de linux personalizadas; isos que podían tener el contenido que nosotros necesitásemos, pero hoy quiero darle una pequeña vuelta de tuerca a ese concepto y mostraros algo diferente pero realmente útil. Todo sistema operativo posee su propio instalador en el que debemos de seguir una serie de pasos previamente establecidos, pero... ¿Y si pudiésemos personalizar esos pasos y hacer que algunos valores sean establecidos de antemano sin tener que introducirlos a mano? El proceso es bastante elaborado, pero sin lugar a dudas merece la pena realizarlo si se van a realizar varias instalaciones "repetitivas", además de ser un concepto de lo más interesante. 

Portada_debian

En este caso me he centrado en realizar el proceso en Debian, si bien en sistemas derivados de éste el proceso es muy parecido... Parar lograr nuestro objetivo necesitamos cumplir únicamente de tres requisitos:

  • Un sistema operativo Linux; preferiblemente Debian con los siguientes paquetes instalados: rsync, y genisoimage. Cómo ambos paquetes pertenecen a los repositorios oficiales del sistema, puede instalarse fácilmente mediante el comando:
apt-get install rsync genisoimage
  • Todo lo que se vaya a ejecutar de aquí en adelante en el sistema, es altamente recomendable que se realice como root.
  • Dicho sistema debe de tener una iso de Debian almacenada en alguna carpeta. Dicha iso no importa que sea parte de un CD completo o una versión ligera (netinstall). Para descargarnos la iso podemos hacerlo desde la sección de descargas de la página oficial. Yo en este caso en particular he seleccionado descargarme Debian 8.2, netinstall para una arquitectura amd64.

Teniendo estos requisitos cumplidos, deberemos crear una carpeta que servirá cómo punto de montaje de nuestra iso. En este caso yo he creado una carpeta llamada montaje dentro del directorio /usr/src con el fin de que ésta sea lo más informativa posible; dicha creación se realiza mediante el comando mkdir de la siguiente forma:

mkdir /usr/src/montaje

Ahora faltaría montar la imagen (la iso) en dicho directorio para poder aprovechar el contenido de ésta, pero para ello es recomendable comprobar que tenemos el módulo loop activado. Dicho módulo no habilita acceder al contenido de una iso como si fuese una carpeta, si bien dicha carpeta solo tendría permisos de lectura; aún así es necesario tenerlo, pues sino no podremos asegurarnos de que podremos proseguir... Aunque la mayoría de los sistemas actuales poseen dicho módulo activado por defecto, en algunas ocasiones me he topado con éste módulo desactivado, con lo que para comprobar que efectivamente está en activo habría que verificar que se encuentra en el listado de módulos activos, para lo cual se recurriría al siguiente comando:

lsmod |grep loop

Lo más normal sería que nos mostrase una línea con el resultado... En caso contrario significaría que el módulo no está activo; afortunadamente este módulo puede ser activado fácilmente escribiendo el comando de a continuación:

modprobe loop

Ahora que tenemos la certeza de que vamos a poder la imagen sin problemas, procederíamos al montaje el cuestión. En mi caso en particular la iso se denomina debian-8.2.0-amd64-netinst.iso que también he almacenado en la carpeta /usr/src; y el comando de montaje de isos siempre posee esta estructura:

mount -o loop ${iso} ${punto_de_montaje}

Así que en este caso el comando quedaría así:

mount -o loop debian-8.2.0-amd64-netinst.iso /usr/src/montaje

Veremos que la iso se ha montado, si bien está en modo solo lectura (no podemos modificar su contenido), así que no nos quedará otra que copiar todo su contenido en otro lado. Para ello primero habría que crear una carpeta contenedora (por ejemplo CD), y luego volcar todo el contenido de la carpeta montaje en la nueva carpeta mediante el comando rsync.

  1. mkdir /usr/src/CD
  2. rsync -a -H --exclude=TRANS.TBL /usr/src/montaje/ /usr/src/CD

Gracias al comando rsync hemos logrado volcar el contenido de la iso en la carpeta CD, una carpeta que NO tiene las restricciones de la carpeta montaje.  Al no requerir del contenido de la iso original más, podríamos desmontar la iso mediante el comando umount y elimar la carpeta que hemos usado como punto de montaje:

  1. umount /usr/src/montaje
  2. rm /usr/src/montaje

Ahora que tenemos más libertad para manipular el contenido de la iso, hemos de buscar un fichero en particular en la carpeta CD; dicho archivo se denomina initrd.gz, el cual se halla dentro del directorio install.${arquitectura}. En este caso he descargado una iso preparada para una arquitectura amd64, con lo que la carpeta que habría que buscar sería install.amd64... Si hacemos un ls de dicha carpeta veremos el fichero deseado:

ls /usr/src/CD/install.amd64

El fichero initrd.gz se trata de un fichero comprimido con una gran cantidad de archivos y carpetas, con lo que es importante volcar su contenido dentro de una carpeta aislada. Como todo lo que hemos hecho hasta ahora se ha realizado dentro del directorio /usr/src, crearemos una nueva carpeta dentro de éste, una carpeta que llamaremos contenedor que crearemos y a la que luego accederemos.

  1. mkdir /usr/src/contenedor
  2. cd /usr/src/contenedor

Dentro de la carpeta volcaríamos el contenido descomprimido del fichero initrd.gz que hemos hallado antes... Al ser un fichero comprimido mediante gzip, usaremos este comando para el volcado:

gzip -d < ../CD/install.amd/initrd.gz | cpio --extract --verbose --make-directories --no-absolute-filenames

La carpeta se ha llenado de todo tipo de ficheros y carpetas, pero no nos interesa nada de lo que hay allí presente sino que lo que queremos es añadir un fichero a todo lo que hay allí presente...  La instalación personalizada de un sistema debian se especifica dentro del archivo comprimido initrd.gz, pero el fichero de su interior que se encarga de personalizar la instalación se llama preseed.cfg; fichero que por defecto NO está incluido dentro de dicho fichero comprimido. Ese fichero es creado y usado con el único propósito de personalizar la instalación del sistema operativo, y la iso no ofrece pista alguna sobre su estructura...

Aún así, la página oficial de Debian sí que ofrece una plantilla muy completa; plantilla cuyo enlace dejo aquí. Si os fijais bien, esta plantilla contiene multitud de líneas, si bien todas tienen esta estructura:

d-i parámetros...

Aquí cada uno puede personalizar esta plantilla a su gusto (siempre y cuando mantenga use siempre el mismo nombre de fichero); yo por ejemplo he creado le siguiente preseed.cfg:

  1. d-i debian-installer/language string es
  2. d-i debian-installer/country string ES
  3. d-i debian-installer/locale string es_ES.UTF-8
  4. d-i netcfg/choose_interface select eth0
  5. d-i netcfg/disable_autoconfig boolean true
  6. d-i netcfg/hostname string PRESEEDED
  7. d-i mirror/country string manual
  8. d-i mirror/http/hostname string http://ftp.es.debian.org
  9. d-i mirror/http/directory string /debian
  10. d-i mirror/http/proxy string
  11. d-i clock-setup/utc boolean true
  12. d-i time/zone string Europe/Madrid
  13. d-i partman-auto/method string lvm
  14. d-i partman-lvm/device_remove_lvm boolean true
  15. d-i partman-md/device_remove_md boolean true
  16. d-i partman-lvm/confirm boolean true
  17. d-i partman-lvm/confirm_nooverwrite boolean true
  18. d-i partman-auto/choose_recipe select atomic
  19. d-i partman-partitioning/confirm_write_new_label boolean true
  20. d-i partman/choose_partition select finish
  21. d-i partman/confirm boolean true
  22. d-i partman/confirm_nooverwrite boolean true
  23. d-i partman-md/confirm boolean true
  24. d-i partman-partitioning/confirm_write_new_label boolean true
  25. d-i partman/choose_partition select finish
  26. d-i partman/confirm boolean true
  27. d-i partman/confirm_nooverwrite boolean true
  28. d-i grub-installer/only_debian boolean true
  29. d-i grub-installer/with_other_os boolean true
  30. d-i finish-install/reboot_in_progress note

Este fichero tan "pequeño" que tengo aquí, lo tengo almacenado en la carpeta /home/ivan, pero tendría que moverlo dentro de la carpeta contenedor, carpeta que representa el contenido de initrd.gz.

cp /home/ivan/preseed.cfg /usr/src/contenedor/preseed.cfg

El contenido del contenedor ha sido cambiado, pero éste debe de volver a convertirse en el fichero comprimido que era antes para poder ser "usable" por la iso; es decir que habría que volver a comprimirlo y dejarlo donde estaba antes; en la carpeta CD. Esto esta tan sencillo como escribir (dentro de la carpeta contenedor):

find . | cpio -H newc --create --verbose | gzip -9 > ../CD/install.amd/initrd.gz

El fichero initrd.gz ha ya tiene nuestro pequeño preseed.cfg en su interior, pero el fichero md5sum.txt de la carpeta /usr/src/CD no tiene una información realista, ya que el la suma md5 del fichero que hemos modificado es diferente a la suma que tenía establecida antes en el txt... Para evitar problemas, nos moveremos a la carpeta CD y pondremos la suma correcta, cosa que lograremos mediante:

  1. cd /usr/src/CD
  2. md5sum `find -follow -type f` > md5sum.txt

Ahora que nuestra carpeta tiene la información correcta, solamente quedaría volver a convertir dicha carpeta en una iso que podamos convertir en liveusb o en CD más adelante... Esto lo lograremos gracias a la utilidad que hemos instalado al principio: genisoimage. Para convertir la carpeta en una iso, que en mi caso llamaré NUEVO_DEBIAN, mediante dicha utilidad habría que escribir:

genisoimage -o NUEVO_DEBIAN.iso -r -J -no-emul-boot -boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin -c isolinux/boot.cat/usr/src/CD

El proceso tardará cierto, pero al finalizar podremos disfrutar de nuestra iso un instalador hecho a nuestra medida.

Espero que os haya resultado útil e interesante.

Saludos.