# CDLive con sistema ya instalado.

## DaRkaHT

Estimados compañeros:

Resulta que pretendo crear un cdlive basado en gentoo, con la configuración que me gusta... pues me sería muy comodo, y me surgen algunas dudas espero ustedes puedan resolvermelas:

En primer lugar he ojeado la siguiente guía:

http://wiki.cecalc.ula.ve/index.php/Creaci%C3%B3n_de_un_LiveCD_basado_en_Gentoo_con_entorno_gr%C3%A1fico

En la guía se crea un directorio dentro de un sistema gentoo ya instalado. En él se descomprimen los ficheros stage y portage...etc, se hace un "chroot" y se prosigue la instalación CASI de la forma tradicional. Luego con la herramienta "squashfs" se crea la imagen del sistema y con "mkisofs" se crea el fichero iso...y listo...

Mi intención es hacerlo en una maquina virtual, de manera que una vez finalizada la instalación, pueda iniciar el sistema en modo X para hacer unos ultimos retoques antes de generar la ISO.

A diferencia de la guia, lo que quiero es CONVERTIR UN SISTEMA INSTALADO en un CDLIVE.

Los pasos que tengo pensado seguir son los siguientes:

1. Iniciar desde un cdlive (system rescue cd).

2. Montar pendrive.

3. Copiar partición del sistema a un directorio en el pendrive. (dd if=/dev/sda2 of=/mnt/pendrive)

4. Copiar partición /boot dentro del directorio del cdlive. (dd if=/dev/sda1 of=/mnt/pendrive/boot)

5. Reconfigurar fstab

6. Mover la imagen del núcleo a directorio vmlinuz. (mv /mnt/pendrive/boot/genkernel-XXX /mnt/pendrive/boot/vmlinuz)

7. Renombrar initramfs (mv /mnt/pendrive/boot/initramfs* /mnt/pendrive/boot/initrd)

8. Reconfigurar grub (cambiar ruta, nombre del nucleo...)

9. Generar image.squashfs

10. Generar fichero .iso

El primer problema me surge en el paso nº3, cuando "dd" me dice que no se puede copiar una partición a un directorio. Si monto la partición y intento copiar en contenido con "cp -Rf", me dice que no se pueden copiar los enlaces simbolicos.

¿Alguien tiene idea de como hacer la copia? ¿Veis que falte algún paso por realizar?

Saludos.

----------

## esteban_conde

Para copiar todo usa "cp -a " o "cp -dpR" para saber por qué utiliza man cp.

----------

## i92guboj

"dd" no funciona de la forma que tú crees que funciona.

Si lo que quieres es hacer una imagen de la partición, tienes que especificar el archivo (o dispositivo de bloque) destino. Por ejemplo, para copiar la partición entera a un archivo llamado "live.img" dentro de tu pendrive, y suponiendo que tu pendrive esté adecuadamente montado en /mnt/pendrive, harías esto:

```
dd if=/dev/sda2 of=/mnt/pendrive/live.img
```

Eso te daría como resultado una imagen 1:1 de tu partición sda2, algo así como un archivo .iso (por comparar con algo conocido, aunque no sea exáctamente lo mismo).

Si lo que quieres es "estampar" tu partición tal cual en el pendrive (asumiendo que quepa), el procedimiento sería distinto:

```
dd if=/dev/sda2 of=/dev/sdb
```

Siendo "/dev/sdb" el nodo de dispositivo asociado a tu pendrive y que quieras usar todo el pendrive sin particionar. Si lo que quieres el volcarlo a una partición concreta del pendrive sería:

```
dd if=/dev/sda2 of=/dev/sdb2
```

Siendo "sdb2" la partición destino dentro del pendrive.

===================

Ahora bien, por la forma en que estás usando "dd", yo más bien diría que lo que pretendes es copiar estructuras de directorios, y no imágenes de disco en bloque. Si ese es el caso, simplemente usa cp -a, rsync o la herramienta con la que más confortable te sientas, pero ten en cuenta que en un sistema Linux hay archivos que no pueden simplemente "copiarse", como por ejemplo el contenido de /dev, /proc o /sys. No hace falta decir que cualquiera que sea el método que escojas el sistema origen debe estar montado en modo de solo lectura, si no ten por seguro que la copia resultante va a tener problemas que pueden ir desde leves desajustes hasta un sistema completamente inservible.

----------

## DaRkaHT

Gracias i92guboj, monté las particiones en modo solo lectura, y con "rsync -av" conseguí copiar todos los enlaces simbolicos. Ahora el problema se me presenta a la hora de crear la imagen ISO. Repaso los pasos que he dado:

#Recordamos que partimos de un sistema gentoo previamente instalado en VM. A continuación booteamos desde un live (System Rescue CD).

# Crear puntos de montaje

mkdir /mnt/boot

mkdir /mnt/sys

mkdir /mnt/pendrive                                            #(Almacenamiento extraible o partición donde se realizará la copia de ficheros)

# Montar particiones

mount /dev/sda1 /mnt/boot --options ro		#Montando como solo lectura.

mount /dev/sda2 /mnt/sys --options ro		        #Montando como solo lectura.

mount /dev/sdb1 /mnt/pendrive

# Copiar partición de sistema                              #COPIADO SIN PROBLEMA.

mkdir /mnt/pendrive/cdlive

rsync -av /mnt/sys /mnt/pendrive/cdlive

# BORRAR FICHEROS INNECESARIOS

rm -Rf /mnt/pendrive/cdlive/usr/portage/distfiles/*

# Copiar partición boot                                       #COPIADO SIN PROBLEMA.

rsync -av /mnt/boot /mnt/pendrive/cdlive/boot

# Cambiar fstab

echo "

/dev/loop0        	/		squashfs     	defaults	0 0

 none		/proc		proc		        defaults	0 0

 none		/dev/shm	tmpfs		defaults	0 0

" > /mnt/pendrive/cdlive/etc/fstab

# Moviendo el kernel

mkdir /mnt/pendrive/cdlive/boot/vmlinuz

mv /mnt/pendrive/cdlive/boot/kernel-genkernel* /mnt/pendrive/cdlive/boot/vmlinuz

# Renombrar initramfs

mv /mnt/pendrive/cdlive/boot/initramfs-genkernel* /mnt/pendrive/cdlive/boot/initrd

# Reconfigurar grub

echo "

default 0

timeout 3

splashimage=/boot/grub/splash.xpm.gz

title=LiveCD Gentoo

kernel /boot/vmlinuz real_root=/dev/loop0 looptype=squashfs loop=/livecd.squashfs vga=ask initrd udev cdroot 

initrd /boot/initrd

" > /mnt/pendrive/cdlive/boot/grub/grub.conf

rm /boot/grub/menu.lst

mv /mnt/pendrive/cdlive/boot/grub/grub.conf /mnt/pendrive/cdlive/boot/grub/menu.lst

# Generar imagen squashfs                            #GENERADA CORRECTAMENTE.

mksquashfs /mnt/pendrive/cdlive /mnt/pendrive/livecd.squashfs

# Crear fichero vacío

touch /mnt/pendrive/cdlive

# Generar ISO                                               #ERROR

mkisofs -no-emul-boot -boot-load-size 4 -boot-info-table -r -b boot/grub/stage2_eltorito -c boot.catalog -o /mnt/pendrive/livecd.iso -x files /mnt/pendrive/cdlive

El error que arroja es el siguiente:

mkisofs: Uh oh, I cant find the boot image '/boot/grub/stage2_eltorito' inside the target tree.

He comprobado que dicho fichero se encuentra en el directorio "/boot/grub". He cambiado la ruta por " /mnt/pendrive/boot/grub" y sigue igual. ¿Alguna idea?

----------

## quilosaq

 *Quote:*   

> # Generar ISO #ERROR
> 
> mkisofs -no-emul-boot -boot-load-size 4 -boot-info-table -r -b boot/grub/stage2_eltorito -c boot.catalog -o /mnt/pendrive/livecd.iso -x files /mnt/pendrive/cdlive
> 
> El error que arroja es el siguiente:
> ...

 

Asegúrate que antes de ejecutar el comando mkisofs la partición /boot está montada.

----------

## DaRkaHT

"/boot" en este caso no es ningún punto de montaje, sino una copia de la partición boot.

----------

## quilosaq

Creo que estás interpretando mal la opción -b de mkisofs. Prueba con esto:

```
# mkisofs -no-emul-boot -boot-load-size 4 -boot-info-table -r -b /mnt/boot/grub/stage2_eltorito -c boot.catalog -o /mnt/pendrive/livecd.iso -x files /mnt/pendrive/cdlive 
```

Tendrás que tener montado /boot como lo tenías antes:

```
# mount /dev/sda1 /mnt/boot --options ro #Montando como solo lectura.
```

----------

## DaRkaHT

Más de lo mismo...

----------

