Desde hace unos años queria hacer una live como servidor dedicado de juegos fps (campus de 2004) y como voy a volver este año a la campus me puse las pilas para ver que tipo de live podia hacer.
Buscando por la red encontre este
wiki al que doy gracias a su creador y posteadores ya que este post es basicamente una traduccion obviando las cosas que no he utilizado en mi live y agregando alguna que he utilizado que no aparece en el wiki.
Todos los paso comentados son para ejecutarse como root y el directorio elegido que contendra la livecd se ubicara en /root/livecd
Hay que tener en cuenta que segun las cosas que instalemos vamos a necesitar un minimo de 200 Gb (o mas) para compilar etc... asi que df -h para ver el espacio que hay en /root/
Requerimientos :
emerge -va squashfs-tools cdrtools qemu
Sitio de instalacion del original :
cd ~
mkdir -p ~/livecd/source
Cogiendo packetes basicos
# cd ~/livecd
wget [YOUR FAVORITE MIRROR]/releases/x86/current/stages/stage2-x86-2006.0.tar.bz2
wget [YOUR FAVORITE MIRROR]/snapshots/portage-latest.tar.bz2
Extrayendo el stage
cd ~/livecd/source
tar jxvpf ~/livecd/stage2-x86-2006.0.tar.bz2
mkdir newroot
Extrayendo el portage
cd ~/livecd/source/usr/
tar jxvf ~/livecd/portage-latest.tar.bz2
Preparandonos para hacer el chroot
cd ~/livecd/source
mkdir -p proc dev
mount -o bind /proc proc
mount -o bind /dev dev
mount -o bind /sys sys
mkdir usr/portage/distfiles
mount -o bind /usr/portage/distfiles usr/portage/distfiles
cp /etc/resolv.conf etc/resolv.conf
chroot al nuevo entorno
cd ~/livecd/source
Normalmente
chroot . /bin/bash --login
Pero si deseas generar una iso compatible con x86 desde 64 bits seria...
linux32 chroot . /bin/bash --login
Actualizacion del entorno
env-update
source /etc/profile
Obligatorioamente hay que bajarse el systema base
emerge -va system
Por si se ha actualizado algo durante el emerge system (por ejemplo gcc)
emerge -uva world
Yo siempre paso de hacerlo (no por que sea un machote sino por que soy un vago)
Editamos el mapa de caracteres del teclado (/etc/conf.d/keymaps)
Para el tipico español
KEYMAP="es"
SET_WINDOWKEYS="yes"
Muy importante editar el /etc/fstab para dejarlo como sigue
echo "" > /etc/fstab
echo "/dev/loop0 / squashfs ro,defaults 0 0" >> /etc/fstab
echo "none /proc proc defaults 0 0" >> /etc/fstab
echo "none /dev/shm tmpfs defaults 0 0" >> /etc/fstab
echo "none /dev/pts devpts defaults 0 0" >> /etc/fstab
echo "" >> /etc/fstab
Zona horaria de la peninsula iberica
ln -sf /usr/share/zoneinfo/Europe/Madrid /etc/localtime
Modificamos el resto de ficheros en /etc/ que te interese
Instalamos lo que te interese, algunos recomendados son :
emerge -va memtest86+ localepurge genkernel dhcpcd mingetty nano
No tan necesario pero recomendable es el coldplug y nada necesario ni recomendable pero super-chuli es el splashutils con algun tema que os apetedca, eso ya depende de cada uno
Emerge de juegos fps basados en el engine de quake3 (Esto es totalmente necesario :o)
USE="dedicated" emerge -va quake3 quake3-alliance quake3-alternatefire quake3-bfp quake3-brainworks quake3-cpma quake3-data quake3-defrag quake3-matrix quake3-nsco quake3-osp quake3-ra3 quake3-ruinhunters quake3-teamarena quake3-threewave quake3-tremulous quake3-truecombat quake3-urbanterror quake3-wop enemy-territory enemy-territory-etpro enemy-territory-fortress enemy-territory-truecombat
NOTA : localepurge es para limpiar de ficheros sobre configuracion de idioma que no usas el mingetty es para hacer autologin y las splashutils son para arrancar con el framebuffer superchuli que nos tiene acostumbrados las instalaciones de gentoo (es posible que tu lo supieras pero yo no :o)
Modificamos otra vez los /etc/ que nos interese
Actualizamos los servicios requeridos para el arranque red, gdm... depende de lo que os hayamos instalado
rc-update add net.eth0 default
Compilando el kernel genkernel forever
emerge gentoo-sources
genkernel all
Si queremos meterle el gensplash (splashutils)
genkernel --gensplash=[theme] all
Configurando grub
Borramos el link de menu.lst a grub.conf (los sistemas de archivo iso no admiten links) y editamos /boot/grub/grub.conf
Salvo excepciones lo podemos dejar algo parecido a esto
default 0
timeout 30
splashimage=(cd)/boot/grub/splash.xpm.gz
title=LiveCD
root (cd)
kernel (cd)/boot/kernel-genkernel-x86-2.6.16-gentoo-r9 vga=791 root=/dev/ram0 init=/linuxrc looptype=squashfs loop=/livecd.squashfs udev nodevfs cdroot dodmraid
initrd (cd)/boot/initramfs-genkernel-x86-2.6.16-gentoo-r9
title=LiveCD NO-FB
root (cd)
kernel (cd)/boot/kernel-genkernel-x86-2.6.16-gentoo-r9 root=/dev/ram0 init=/linuxrc looptype=squashfs loop=/livecd.squashfs udev nodevfs cdroot dodmraid
initrd (cd)/boot/initramfs-genkernel-x86-2.6.16-gentoo-r9
title=Memtest86+
root (cd)
kernel (cd)/boot/memtest86plus/memtest.bin
Si hemos utilizado gensplash, debemos añadir un par de parametros al kernel
splash=silent,theme:livecd-2006.0 CONSOLE=/dev/tty1 quiet
Asi que la linea de LiveCD del grubconf quedaria algo asin:
title=LiveCD
root (cd)
kernel (cd)/boot/kernel-genkernel-x86-2.6.16-gentoo-r9 vga=791 root=/dev/ram0 init=/linuxrc looptype=squashfs loop=/livecd.squashfs udev nodevfs cdroot dodmraid splash=silent,theme:livecd-2006.0 CONSOLE=/dev/tty1 quiet
initrd (cd)/boot/initramfs-genkernel-x86-2.6.16-gentoo-r9
Copiamos grub.conf como menu.lst
cp /boot/grub/grub.conf /boot/grub/menu.lst
Si utilizamos mingetty debemos editar el archivo /etc/inittab y reemplazar
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
por
c1:12345:respawn:/sbin/mingetty --autologin root --noclear tty1
tambien editaremos el archivo /sbin/rc y reemplazar
if [ -f "/sbin/livecd-functions.sh" -a -n "${CDBOOT}" ]
then
ebegin "Updating inittab"
livecd_fix_inittab
eend $?
/sbin/telinit q &>/dev/null
fi
por
if [ -f "/sbin/livecd-functions.sh" -a -n "${CDBOOT}" ]
then
ebegin "Updating inittab"
/bin/true #livecd_fix_inittab
eend $?
/bin/true #/sbin/telinit q &>/dev/null
fi
si no lo utilizamos, deberiamos poner password al root al menos ejecutando passwd
Nos salimos del chroot con exit
Para generar la iso, ejecutamos el script 02 que he puesto al final que hace mas o menos esto:
Desmontar unidades y actualizar el entorno
cd ~/livecd/source
umount sys proc dev usr/portage/distfiles
env-update
source /etc/profile
Copiar la live a un directorio temporal para limpiarla
rm -rf ~/livecd/target
mkdir ~/livecd/target
cp -a ~/livecd/source/boot ~/livecd/target/
mkdir -p ~/livecd/target/files/source
rsync -a --delete --progress --exclude "var/cache/*" --exclude "usr/portage" --exclude "usr/share/doc" --exclude "usr/src" ~/livecd/source/ ~/livecd/target/files/source/
cd ~/livecd/target/files/source/
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
Crea el sistema de archivos squash y la iso
cd ~/livecd/target/files
time mksquashfs source/ ~/livecd/target/livecd.squashfs
touch ~/livecd/target/livecd
rm -rf ~/livecd/target/files
cd ~/livecd/
time mkisofs -R -udf -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -iso-level 3 -hide-rr-moved -c boot.catalog -o ~/livecd/livecd.iso ~/livecd/target/
Por ultimo, para probar el iso sin necesidad de hacer posavasos
cd ~/livecd/
nice -n 2 qemu -m 512 -cdrom livecd.iso
El -m 512 le dice al qemu que utilce hasta 512 Mb de memoria lo pongo por que al cambiar a la version con gensplash requeria mas que los 128 que te pone por defecto
Cada vez que queramos actualizar cosas o instalar nuevos paquetes he generado dos scripts que son mu sencillos de usar.
Ejecutas el 01-entrar-livecd.sh que te ejecuta los pasos hasta el chroot y ejecutas
env-update
source /etc/profile
(Esto se debe a que no se como continuar la ejecucion del script una vez hecho el chroot)
Haces lo que te venga en gana emerge -va world, emerge nuevos paquetes etc
Te sales del chroot con exit y por ultimo ejecutas el script 02-limpiar-y-crear-livecd.sh
Los dos scripts los pongo a continuacion
# 01-entrar-livecd.sh
# ===================
cd ~/livecd/source
mkdir -p proc dev
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
echo -n "Vas a generar una live compatible con x86 desde un entorno de 64 bits? [Y/n] : "
read yn
echo ""
echo "No te olvides de ejecutar :"
echo "env-update"
echo "source /etc/profile"
echo ""
echo "Despues de hacer esto ya puedes hacer emerges y demas chorradas"
echo ""
echo "Si es la primera vez que entras en tu live (source) tendrias que hacer emerge como poco de system"
echo ""
echo "Cuando termines y salgas 'exit' ejecuta el paso 02-limpiar-y-crear-livecd.sh"
echo ""
if test x"$yn" = x -o x"$yn" = xy -o x"$yn" = xY; then
linux32 chroot . /bin/bash --login
else
chroot . /bin/bash --login
fi
# 02-limpiar-y-crear-livecd.sh
# ============================
echo -n "Desea desmontar unidades y actualizar el entorno (solamente es necesario si se hico el chroot) [Y/n] : "
read yn
echo ""
if test x"$yn" = x -o x"$yn" = xy -o x"$yn" = xY; then
echo "Desmontar unidades y actualizar entorno"
cd ~/livecd/source
umount sys proc dev usr/portage/distfiles
env-update
source /etc/profile
fi
echo -n "Desea copiar la nueva live? (esto borrara la live anterior -target-) [Y/n] : "
read yn
echo ""
if test x"$yn" = x -o x"$yn" = xy -o x"$yn" = xY; then
echo "Borrando la live anterior -target-"
rm -rf ~/livecd/target
mkdir ~/livecd/target
cp -a ~/livecd/source/boot ~/livecd/target/
mkdir -p ~/livecd/target/files/source
echo "Copiando la nueva live -desde source a target-"
rsync -a --delete --progress --exclude "var/cache/*" --exclude "usr/portage" --exclude "usr/share/doc" --exclude "usr/src" ~/livecd/source/ ~/livecd/target/files/source/
echo "Limpiando la nueva live"
cd ~/livecd/target/files/source/
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 "Desea crear la nueva live (iso)? [Y/n] : "
read yn
echo ""
if test x"$yn" = x -o x"$yn" = xy -o x"$yn" = xY; then
echo "Creando el live"
echo "Creando el sistema squash"
cd ~/livecd/target/files
time mksquashfs source/ ~/livecd/target/livecd.squashfs
touch ~/livecd/target/livecd
rm -rf ~/livecd/target/files
cd ~/livecd/
echo "Creando el iso"
rm -rf /root/livecd/livecd.iso
time mkisofs -R -udf -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -iso-level 3 -hide-rr-moved -c boot.catalog -o ~/livecd/livecd.iso ~/livecd/target/
fi
echo -n "Desea probar la nueva live (iso) con qemu? [Y/n] : "
read yn
echo ""
if test x"$yn" = x -o x"$yn" = xy -o x"$yn" = xY; then
echo "Probando live..."
nice -n 2 qemu -m 512 -cdrom ~/livecd/livecd.iso
fi
echo "Finish..."