Para empezar tenemos que compilar el kernel con soporte para usb-storage incluido en el propio kernel y no como modulo (que es como normalmente se suele poner y te pone por defecto el genkernel)
# hacemos el chroot
cd ~/livecd/source
mount -o bind /proc proc
mount -o bind /dev dev
mount -o bind /sys sys
mount -o bind /usr/portage/distfiles usr/portage/distfiles
cp /etc/resolv.conf etc/resolv.conf
# Para sistemas de 32 bits desde 32 bits
chroot . /bin/bash --login
# Para sistemas de 32 bits desde 64 bits
linux32 chroot . /bin/bash --login
env-update
source /etc/profile
genkernel --gensplash=livecd-2006.0 --menuconfig all
# En el menuconfig buscamos estas opciones de configuracion para ponerlas en el kernel por defecto
# No se si son necesarias todas ellas pero para mi usb-stick con estas ha funcionado
Device Drivers --->
USB support --->
<*> USB Mass Storage support
[ ] USB Mass Storage verbose debug
[*] Datafab Compact Flash Reader support (EXPERIMENTAL)
[*] Freecom USB/ATAPI Bridge support
[*] ISD-200 USB/ATA Bridge support
[*] Microtech/ZiO! CompactFlash/SmartMedia support
[ ] USBAT/USBAT02-based storage support (EXPERIMENTAL)
[*] SanDisk SDDR-09 (and other SmartMedia) support (EXPERIMENTAL)
[*] SanDisk SDDR-55 SmartMedia support (EXPERIMENTAL)
[*] Lexar Jumpshot Compact Flash Reader (EXPERIMENTAL)
[ ] Olympus MAUSB-10/Fuji DPC-R1 support (EXPERIMENTAL)
# Salvamos la configuracion y esperamos a que termine de compilar el nuevo kernel
# Salimos del chroot
exit
env-update
source /etc/profile
cd ~/livecd/source
mount -o bind /proc proc
mount -o bind /dev dev
mount -o bind /sys sys
mount -o bind /usr/portage/distfiles usr/portage/distfiles
cp /etc/resolv.conf etc/resolv.conf
# Para sistemas de 32 bits desde 32 bits
chroot . /bin/bash --login
# Para sistemas de 32 bits desde 64 bits
linux32 chroot . /bin/bash --login
env-update
source /etc/profile
genkernel --gensplash=livecd-2006.0 --menuconfig all
# En el menuconfig buscamos estas opciones de configuracion para ponerlas en el kernel por defecto
# No se si son necesarias todas ellas pero para mi usb-stick con estas ha funcionado
Device Drivers --->
USB support --->
<*> USB Mass Storage support
[ ] USB Mass Storage verbose debug
[*] Datafab Compact Flash Reader support (EXPERIMENTAL)
[*] Freecom USB/ATAPI Bridge support
[*] ISD-200 USB/ATA Bridge support
[*] Microtech/ZiO! CompactFlash/SmartMedia support
[ ] USBAT/USBAT02-based storage support (EXPERIMENTAL)
[*] SanDisk SDDR-09 (and other SmartMedia) support (EXPERIMENTAL)
[*] SanDisk SDDR-55 SmartMedia support (EXPERIMENTAL)
[*] Lexar Jumpshot Compact Flash Reader (EXPERIMENTAL)
[ ] Olympus MAUSB-10/Fuji DPC-R1 support (EXPERIMENTAL)
# Salvamos la configuracion y esperamos a que termine de compilar el nuevo kernel
# Salimos del chroot
exit
env-update
source /etc/profile
Borramos el contenido total del usb-sitck y la particion (contamos que el usb es /dev/sdd, si no tienes disco duro sata es casi seguro que sea /dev/sda, pero ten mucho cuidado por que te borraras el contenido del usb-stick)
# Para ver que particiones tenemos
sfdisk -l /dev/sdd
# Borramos el contenido
dd if=/dev/zero of=/dev/sdd
# Esto tardara un ratito, se paciente
sfdisk -l /dev/sdd
# Borramos el contenido
dd if=/dev/zero of=/dev/sdd
# Esto tardara un ratito, se paciente
Una vez borrado el contenido y las particiones del usb creamos unas nuevas, esto es igual que particionar cualquier disco duro, asi que si no sois neonatos en el tema no os deberia costar demasiado, yo lo voy a relatar para el sistema mas sencillo que se me ocurre que es una particion con todo el contenido del usb-stick en sistema de ficheros ext2.
# Como ya hemos comentado, con esto particionamos con sfdisk el /dev/sdd para crear una nueva particion con todo el contenido del usb-stick.
sfdisk -q /dev/sdd << EOF
0,,L,*
;
;
;
EOF
# Yo siempre he utilizado fdisk, esto es el ejemplo que venia en el wiki, pero supongo que podras utilizar el que mas te apetedca.
# Formateamos con ext2
mke2fs -m0 /dev/sdd1
fi
sfdisk -q /dev/sdd << EOF
0,,L,*
;
;
;
EOF
# Yo siempre he utilizado fdisk, esto es el ejemplo que venia en el wiki, pero supongo que podras utilizar el que mas te apetedca.
# Formateamos con ext2
mke2fs -m0 /dev/sdd1
fi
Despues de formatear, montamos el usb-stick y copiamos el directorio donde tenemos la live, podemos copiarla integramente o copiar solo la parte que mas nos convenga, aqui os pongo un ejemplo de rsync contando que el directorio donde montamos se llame /mnt/usbstick y el directorio donde tenemos la live sea el /root/livecd/source/, y excluyendo los archivos inecesarios para el uso de la distro.
# montamos
mount /dev/sdd1 /mnt/usbstick
# copiamos
rsync -a --delete --progress --exclude "*.h" --exclude "etc/bootsplash" --exclude "usr/tmp" --exclude "var/cache/*" --exclude "var/db/*" --exclude "var/log/*" --exclude "var/tmp/*" --exclude "usr/portage" --exclude "usr/share/doc" --exclude "usr/src" /root/livecd/source/ /mnt/usbstick/
# limpiamos cosillas por si las moscas
cd /mnt/usbstick
rm -rf var/tmp/*
rm -rf var/run/*
rm -rf var/lock/*
rm -rf var/cache/*
rm -rf var/db
rm -rf tmp/*
rm -f etc/mtab
touch etc/mtab
rm -rf var/log
mkdir var/log
mkdir var/lib/
mkdir var/lib/dhcpc
rm -rf usr/portage
rm -rf etc/portage
rm -rf usr/share/doc
rm -rf usr/src/
rm root/.bash_history
mount /dev/sdd1 /mnt/usbstick
# copiamos
rsync -a --delete --progress --exclude "*.h" --exclude "etc/bootsplash" --exclude "usr/tmp" --exclude "var/cache/*" --exclude "var/db/*" --exclude "var/log/*" --exclude "var/tmp/*" --exclude "usr/portage" --exclude "usr/share/doc" --exclude "usr/src" /root/livecd/source/ /mnt/usbstick/
# limpiamos cosillas por si las moscas
cd /mnt/usbstick
rm -rf var/tmp/*
rm -rf var/run/*
rm -rf var/lock/*
rm -rf var/cache/*
rm -rf var/db
rm -rf tmp/*
rm -f etc/mtab
touch etc/mtab
rm -rf var/log
mkdir var/log
mkdir var/lib/
mkdir var/lib/dhcpc
rm -rf usr/portage
rm -rf etc/portage
rm -rf usr/share/doc
rm -rf usr/src/
rm root/.bash_history
Si venimos de la live del post anterior para cd hay que modificar un par de archivos, el grub.conf y el /etc/fstab
# Configs del grub
sed 's/(cd)/(hd0,0)/g' /mnt/usbstick/boot/grub/menu.lst > /mnt/usbstick/boot/grub/menu.lst-tmp && mv /mnt/usbstick/boot/grub/menu.lst-tmp /mnt/usbstick/boot/grub/grub.conf
# Metemos el real_root (reemplazandolo por el cdroot)
sed 's/cdroot/real_root=\/dev\/sda1/g' /mnt/usbstick/boot/grub/menu.lst > /mnt/usbstick/boot/grub/menu.lst-tmp && mv /mnt/usbstick/boot/grub/menu.lst-tmp /mnt/usbstick/boot/grub/grub.conf
# quitamos la paja del squashfs
sed 's/looptype=squashfs//g' /mnt/usbstick/boot/grub/menu.lst > /mnt/usbstick/boot/grub/menu.lst-tmp && mv /mnt/usbstick/boot/grub/menu.lst-tmp /mnt/usbstick/boot/grub/grub.conf
sed 's/loop=/livecd.squashfs//g' /mnt/usbstick/boot/grub/menu.lst > /mnt/usbstick/boot/grub/menu.lst-tmp && mv /mnt/usbstick/boot/grub/menu.lst-tmp /mnt/usbstick/boot/grub/grub.conf
# hacemos el link de grub.conf a menu.lst (ext2 admite links :D)
rm /mnt/usbstick/boot/grub/menu.lst
cd /mnt/usbstick/boot/grub/
ln -sf grub.conf menu.lst
# cambiamos completamente el fstab
echo "/dev/sda1 / ext2 noatime 0 0" > /mnt/usbstick/etc/fstab
echo "none /proc proc defaults 0 0" >> /mnt/usbstick/etc/fstab
echo "none /dev/shm tmpfs defaults 0 0" >> /mnt/usbstick/etc/fstab
sed 's/(cd)/(hd0,0)/g' /mnt/usbstick/boot/grub/menu.lst > /mnt/usbstick/boot/grub/menu.lst-tmp && mv /mnt/usbstick/boot/grub/menu.lst-tmp /mnt/usbstick/boot/grub/grub.conf
# Metemos el real_root (reemplazandolo por el cdroot)
sed 's/cdroot/real_root=\/dev\/sda1/g' /mnt/usbstick/boot/grub/menu.lst > /mnt/usbstick/boot/grub/menu.lst-tmp && mv /mnt/usbstick/boot/grub/menu.lst-tmp /mnt/usbstick/boot/grub/grub.conf
# quitamos la paja del squashfs
sed 's/looptype=squashfs//g' /mnt/usbstick/boot/grub/menu.lst > /mnt/usbstick/boot/grub/menu.lst-tmp && mv /mnt/usbstick/boot/grub/menu.lst-tmp /mnt/usbstick/boot/grub/grub.conf
sed 's/loop=/livecd.squashfs//g' /mnt/usbstick/boot/grub/menu.lst > /mnt/usbstick/boot/grub/menu.lst-tmp && mv /mnt/usbstick/boot/grub/menu.lst-tmp /mnt/usbstick/boot/grub/grub.conf
# hacemos el link de grub.conf a menu.lst (ext2 admite links :D)
rm /mnt/usbstick/boot/grub/menu.lst
cd /mnt/usbstick/boot/grub/
ln -sf grub.conf menu.lst
# cambiamos completamente el fstab
echo "/dev/sda1 / ext2 noatime 0 0" > /mnt/usbstick/etc/fstab
echo "none /proc proc defaults 0 0" >> /mnt/usbstick/etc/fstab
echo "none /dev/shm tmpfs defaults 0 0" >> /mnt/usbstick/etc/fstab
Por ultimo instalamos el grub en el mbr del usb-stick
grub-install --root-directory=/mnt/usbstick /dev/sdd --recheck
Y eso es todo amigos... Supongo que en el caso de que tengamos discos duros sata habra que poner otro real_root en el grub, pero lo desconodco por que no lo he probado.
Si sabeis de alguna forma que se pueda arrancar parecido estableciendo el root como usbroot que te lo coja automaticamente no estaria de mas que me lo contarais :D
Aqui dejo un pequeño script con la ejecucion de todo para posteriores pasos y actualizaciones.
Lo unico que no hace es el tema del kernel que lo teneis que hacer a mano.
#!/bin/bash
# 02-copiar-a-usb.sh
# ==================
LIVECD=~/livecd
TARGET=${LIVECD}/target
TARGET_SOURCE=${TARGET}/files/source/
SOURCE=${LIVECD}/source
#USB settings
USBDEV=/dev/sdd
MNTDIR=/mnt/usbstick
echo -n "Desea particionar el usbstick y formatearlo (solo es necesario la primera vez) [y/N] : "
read yn
echo ""
if test x"$yn" = xy -o x"$yn" = xY; then
#USB
echo "Warning!!! Estas a punto de borrar el contenido de ${USBDEV}!!!"
echo "Las siguientes particiones se sobreescribiran :"
sfdisk -l ${USBDEV}
echo "Estas seguro de que es tu intencion?"
echo "Presiona ENTER para continuar o CTRL-C para salir."
read user_reply
echo "Espera, preparando ${USBDEV} . . ."
dd if=/dev/zero of=${USBDEV}
sfdisk -q ${USBDEV} << EOF
0,,L,*
;
;
;
EOF
mke2fs -m0 ${USBDEV}1
fi
mkdir ${MNTDIR}
mount ${USBDEV}1 ${MNTDIR}
echo -n "Desea copiar el contenido del directorio ${SOURCE} a ${MNTDIR} (toda la informacion que contenga el directorio se borrara) [Y/n] : "
if test x"$yn" = x -o x"$yn" = xy -o x"$yn" = xY; then
echo "Borrando el contenido de . . . "
cd ${MNTDIR}
rm -rf *
echo "Copiando ficheros a ${MNTDIR} . . ."
rsync -a --delete --progress --exclude "*.h" --exclude "etc/bootsplash" --exclude "usr/tmp" --exclude "opt/enemy-territory/etmain/video/*" --exclude "var/cache/*" --exclude "var/db/*" --exclude "var/log/*" --exclude "var/tmp/*" --exclude "usr/portage" --exclude "usr/share/doc" --exclude "usr/src" ${SOURCE}/ ${MNTDIR}/
echo "Limpiando la nueva live"
cd ${MNTDIR}
rm -rf var/tmp/*
rm -rf var/run/*
rm -rf var/lock/*
rm -rf var/cache/*
rm -rf var/db
rm -rf tmp/*
rm -f etc/mtab
touch etc/mtab
rm -rf var/log
mkdir var/log
mkdir var/lib/
mkdir var/lib/dhcpc
rm -rf usr/portage
rm -rf etc/portage
rm -rf usr/share/doc
rm -rf usr/src/
rm root/.bash_history
fi
echo -n "Vienes de una live iso? (Esto es para cambiar el contenido de algunos archivos como el fstab para que te monte los archivos como dios manda y el config del grub para que te arranque desde el usb) [Y/n] : "
if test x"$yn" = x -o x"$yn" = xy -o x"$yn" = xY; then
# Configs del grub
echo "Modificando el fichero ${MNTDIR}/boot/grub/menu.lst . . ."
# Si viene de la generacion de un cd de arranque
sed 's/(cd)/(hd0,0)/g' ${MNTDIR}/boot/grub/menu.lst > ${MNTDIR}/boot/grub/menu.lst-tmp && mv ${MNTDIR}/boot/grub/menu.lst-tmp ${MNTDIR}/boot/grub/grub.conf
# Metemos el real_root (reemplazandolo por el cdroot)
sed 's/cdroot/real_root=\/dev\/sda1/g' ${MNTDIR}/boot/grub/menu.lst > ${MNTDIR}/boot/grub/menu.lst-tmp && mv ${MNTDIR}/boot/grub/menu.lst-tmp ${MNTDIR}/boot/grub/grub.conf
# quitamos la paja del squashfs
sed 's/looptype=squashfs//g' ${MNTDIR}/boot/grub/menu.lst > ${MNTDIR}/boot/grub/menu.lst-tmp && mv ${MNTDIR}/boot/grub/menu.lst-tmp ${MNTDIR}/boot/grub/grub.conf
sed 's/loop=/livecd.squashfs//g' ${MNTDIR}/boot/grub/menu.lst > ${MNTDIR}/boot/grub/menu.lst-tmp && mv ${MNTDIR}/boot/grub/menu.lst-tmp ${MNTDIR}/boot/grub/grub.conf
# hacemos el link de grub.conf a menu.lst
rm ${MNTDIR}/boot/grub/menu.lst
cd ${MNTDIR}/boot/grub/
ln -sf grub.conf menu.lst
# fstab
echo "/dev/sda1 / ext2 noatime 0 0" > ${MNTDIR}/etc/fstab
echo "none /proc proc defaults 0 0" >> ${MNTDIR}/etc/fstab
echo "none /dev/shm tmpfs defaults 0 0" >> ${MNTDIR}/etc/fstab
fi
echo -n "Desea instalar grub en el arranque de ${USBDEV} (solo es necesario la primera vez) [y/N] : "
read yn
echo ""
if test x"$yn" = xy -o x"$yn" = xY; then
echo "Instalando Grub . . ."
grub-install --root-directory=${MNTDIR} ${USBDEV} --recheck
fi
echo "Desmontando ${MNTDIR} . . ."
umount ${MNTDIR}
echo "Tu usb auto-arrancable esta listo."
# 02-copiar-a-usb.sh
# ==================
LIVECD=~/livecd
TARGET=${LIVECD}/target
TARGET_SOURCE=${TARGET}/files/source/
SOURCE=${LIVECD}/source
#USB settings
USBDEV=/dev/sdd
MNTDIR=/mnt/usbstick
echo -n "Desea particionar el usbstick y formatearlo (solo es necesario la primera vez) [y/N] : "
read yn
echo ""
if test x"$yn" = xy -o x"$yn" = xY; then
#USB
echo "Warning!!! Estas a punto de borrar el contenido de ${USBDEV}!!!"
echo "Las siguientes particiones se sobreescribiran :"
sfdisk -l ${USBDEV}
echo "Estas seguro de que es tu intencion?"
echo "Presiona ENTER para continuar o CTRL-C para salir."
read user_reply
echo "Espera, preparando ${USBDEV} . . ."
dd if=/dev/zero of=${USBDEV}
sfdisk -q ${USBDEV} << EOF
0,,L,*
;
;
;
EOF
mke2fs -m0 ${USBDEV}1
fi
mkdir ${MNTDIR}
mount ${USBDEV}1 ${MNTDIR}
echo -n "Desea copiar el contenido del directorio ${SOURCE} a ${MNTDIR} (toda la informacion que contenga el directorio se borrara) [Y/n] : "
if test x"$yn" = x -o x"$yn" = xy -o x"$yn" = xY; then
echo "Borrando el contenido de . . . "
cd ${MNTDIR}
rm -rf *
echo "Copiando ficheros a ${MNTDIR} . . ."
rsync -a --delete --progress --exclude "*.h" --exclude "etc/bootsplash" --exclude "usr/tmp" --exclude "opt/enemy-territory/etmain/video/*" --exclude "var/cache/*" --exclude "var/db/*" --exclude "var/log/*" --exclude "var/tmp/*" --exclude "usr/portage" --exclude "usr/share/doc" --exclude "usr/src" ${SOURCE}/ ${MNTDIR}/
echo "Limpiando la nueva live"
cd ${MNTDIR}
rm -rf var/tmp/*
rm -rf var/run/*
rm -rf var/lock/*
rm -rf var/cache/*
rm -rf var/db
rm -rf tmp/*
rm -f etc/mtab
touch etc/mtab
rm -rf var/log
mkdir var/log
mkdir var/lib/
mkdir var/lib/dhcpc
rm -rf usr/portage
rm -rf etc/portage
rm -rf usr/share/doc
rm -rf usr/src/
rm root/.bash_history
fi
echo -n "Vienes de una live iso? (Esto es para cambiar el contenido de algunos archivos como el fstab para que te monte los archivos como dios manda y el config del grub para que te arranque desde el usb) [Y/n] : "
if test x"$yn" = x -o x"$yn" = xy -o x"$yn" = xY; then
# Configs del grub
echo "Modificando el fichero ${MNTDIR}/boot/grub/menu.lst . . ."
# Si viene de la generacion de un cd de arranque
sed 's/(cd)/(hd0,0)/g' ${MNTDIR}/boot/grub/menu.lst > ${MNTDIR}/boot/grub/menu.lst-tmp && mv ${MNTDIR}/boot/grub/menu.lst-tmp ${MNTDIR}/boot/grub/grub.conf
# Metemos el real_root (reemplazandolo por el cdroot)
sed 's/cdroot/real_root=\/dev\/sda1/g' ${MNTDIR}/boot/grub/menu.lst > ${MNTDIR}/boot/grub/menu.lst-tmp && mv ${MNTDIR}/boot/grub/menu.lst-tmp ${MNTDIR}/boot/grub/grub.conf
# quitamos la paja del squashfs
sed 's/looptype=squashfs//g' ${MNTDIR}/boot/grub/menu.lst > ${MNTDIR}/boot/grub/menu.lst-tmp && mv ${MNTDIR}/boot/grub/menu.lst-tmp ${MNTDIR}/boot/grub/grub.conf
sed 's/loop=/livecd.squashfs//g' ${MNTDIR}/boot/grub/menu.lst > ${MNTDIR}/boot/grub/menu.lst-tmp && mv ${MNTDIR}/boot/grub/menu.lst-tmp ${MNTDIR}/boot/grub/grub.conf
# hacemos el link de grub.conf a menu.lst
rm ${MNTDIR}/boot/grub/menu.lst
cd ${MNTDIR}/boot/grub/
ln -sf grub.conf menu.lst
# fstab
echo "/dev/sda1 / ext2 noatime 0 0" > ${MNTDIR}/etc/fstab
echo "none /proc proc defaults 0 0" >> ${MNTDIR}/etc/fstab
echo "none /dev/shm tmpfs defaults 0 0" >> ${MNTDIR}/etc/fstab
fi
echo -n "Desea instalar grub en el arranque de ${USBDEV} (solo es necesario la primera vez) [y/N] : "
read yn
echo ""
if test x"$yn" = xy -o x"$yn" = xY; then
echo "Instalando Grub . . ."
grub-install --root-directory=${MNTDIR} ${USBDEV} --recheck
fi
echo "Desmontando ${MNTDIR} . . ."
umount ${MNTDIR}
echo "Tu usb auto-arrancable esta listo."
No hay comentarios.:
Publicar un comentario