martes, 9 de febrero de 2010

Instalar Multiple Distribuciones Via PXE

El siguiente código (script) configurara un PXE en tu servidor, haciendo posible instalar distribuciones de Linux vía netboot.

El código ha sido probado en Ubuntu Karmic.

Requisitos: sed,wget y lftp, ejecutándose tftp en tu servidor.

  1. Editar las opciones de configuración.
  2. Ejecutar el código.
  3. Ahora puedes instalar Linux vía netboot.

El código:

#!/bin/bash
#
# Configuration
#
tftp_boot_dir=/var/lib/tftpboot
menu_bg_png_url=http://www.howtoforge.com/images/pxe_install_server_ubuntu_9.10
/howtoforge_pxe.png
#
ubuntu_stable=karmic
ubuntu_testing=lucid
#
debian_stable=lenny
debian_unstable=sid
debian_testing=squeeze
#
fedora_ver=12
#
centos_ver=5.4
#
mandriva_ver=2010.0
#
opensuse_ver=11.2
#
# DON'T TOUCH ANYTHING BELOW THIS
#
ubuntu_stable_url="http://archive.ubuntu.com/ubuntu/dists/$ubuntu_stable/main/
installer-i386/current/images/"
ubuntu_testing_url="http://archive.ubuntu.com/ubuntu/dists/$ubuntu_testing/main/
installer-i386/current/images/netboot/"
#
debian_stable_url="ftp://ftp.nl.debian.org/debian/dists/$debian_stable/main/
installer-i386/current/images/netboot/"
debian_unstable_url="ftp://ftp.nl.debian.org/debian/dists/$debian_unstable/main/
installer-i386/current/images/netboot/"
debian_testing_url="ftp://ftp.nl.debian.org/debian/dists/$debian_testing/main/
installer-i386/current/images/netboot/"
#
fedora_url="http://ftp-stud.fht-esslingen.de/pub/Mirrors/fedora.redhat.com/
linux/releases/$fedora_ver/Fedora/i386/os/images/pxeboot/"
#
centos_url="http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/$centos_ver/
os/i386/images/pxeboot/"
#
mandriva_url="http://ftp-stud.fht-esslingen.de/pub/Mirrors/Mandrivalinux/
official/$mandriva_ver/i586/isolinux/alt0/"
#
opensuse_url="http://download.opensuse.org/distribution/$opensuse_ver/
repo/oss/boot/i386/loader/"
#
# Make dirs exist
#
mkdir -p $tftp_boot_dir
cd $tftp_boot_dir
mkdir -p $tftp_boot_dir/ubuntu
mkdir -p $tftp_boot_dir/debian
mkdir -p $tftp_boot_dir/mandriva
mkdir -p $tftp_boot_dir/fedora
#
# Get Ubuntu Stable
#
echo "Getting Ubuntu Stable ($ubuntu_stable)"
echo "URL : $ubuntu_stable_url"
lftp -c "open $ubuntu_stable_url; mirror netboot/"
mv netboot/* $tftp_boot_dir
rm -fr netboot
rm -rf pxelinux.0/default
mv ubuntu-installer ubuntu/$ubuntu_stable
#
# Get Ubuntu Testing
#
echo "Getting Ubuntu Testing ($ubuntu_testing)"
echo "URL : $ubuntu_testing_url"
lftp -c "open $ubuntu_testing_url; mirror ubuntu-installer/"
mv ubuntu-installer $tftp_boot_dir/ubuntu/$ubuntu_testing
#
# Get Debian Stable
#
echo "Getting Debian Stable ($debian_stable)"
echo "URL : $debian_stable_url"
lftp -c "open $debian_stable_url; mirror debian-installer/"
mv debian-installer $tftp_boot_dir/debian/$debian_stable
#
#Debian UnStable
#
echo "Getting Debian UnStable ($debian_unstable)"
echo "URL : $debian_unstable_url"
lftp -c "open $debian_unstable_url; mirror debian-installer/"
mv debian-installer $tftp_boot_dir/debian/$debian_unstable
#
#Debian Testing
#
echo "Getting Debian Testing ($debian_testing)"
echo "URL : $debian_testing_url"
lftp -c "open $debian_testing_url; mirror debian-installer/"
mv debian-installer $tftp_boot_dir/debian/$debian_testing
#
# Get Fedora
#
echo "Getting Fedora ($fedora_ver"
echo "URL : $fedora_url"
mkdir -p fedora/$fedora_ver/i386
wget $fedora_url/initrd.img -O fedora/$fedora_ver/i386/initrd.img
wget $fedora_url/vmlinuz -O fedora/$fedora_ver/i386/vmlinuz
#
# Get CentOS
#
echo "Getting CentOS ($centos_ver"
echo "URL : $centos_url"
mkdir -p centos/$centos_ver/i386
wget $centos_url/initrd.img -O centos/$centos_ver/i386/initrd.img
wget $centos_url/vmlinuz -O centos/$centos_ver/i386/vmlinuz
#
# Get Mandriva
#
echo "Getting Mandriva ($mandriva_ver"
echo "URL : $mandriva_url"
mkdir -p mandriva/$mandriva_ver/i386
wget $mandriva_url/all.rdz -O mandriva/$mandriva_ver/i386/all.rdz
wget $mandriva_url/vmlinuz -O mandriva/$mandriva_ver/i386/vmlinuz
#
# Get Suse
#
echo "Getting Suse ($opensuse_ver"
echo "URL : $opensuse_url"
mkdir -p suse/$opensuse_ver/i386
wget $opensuse_url/initrd -O suse/$opensuse_ver/i386/initrd
wget $opensuse_url/linux -O suse/$opensuse_ver/i386/linux

#
# convert bootmenu Ubuntu(Stable)
#
OLD="ubuntu-installer"
NEW="ubuntu\/$ubuntu_stable"
DPATH="$tftp_boot_dir/ubuntu/$ubuntu_stable/i386/boot-screens/*.cfg"
BPATH="$tftp_boot_dir/backup/$ubuntu_stable"
TFILE="/tmp/out.tmp.$$"
[ ! -d $BPATH ] && mkdir -p $BPATH || :
for f in $DPATH
do
if [ -f $f -a -r $f ]; then
/bin/cp -f $f $BPATH
sed "s/$OLD/$NEW/g" "$f" > $TFILE && mv $TFILE "$f"
else
echo "Error: Cannot read $f"
fi
done


#
# convert bootmenu Ubuntu(Testing)
#
OLD="ubuntu-installer"
NEW="ubuntu\/$ubuntu_testing"
DPATH="$tftp_boot_dir/ubuntu/$ubuntu_testing/i386/boot-screens/*.cfg"
BPATH="$tftp_boot_dir/backup/$ubuntu_testing"
TFILE="/tmp/out.tmp.$$"
[ ! -d $BPATH ] && mkdir -p $BPATH || :
for f in $DPATH
do
if [ -f $f -a -r $f ]; then
/bin/cp -f $f $BPATH
sed "s/$OLD/$NEW/g" "$f" > $TFILE && mv $TFILE "$f"
else
echo "Error: Cannot read $f"
fi
done

#
# convert bootmenu Debian(Stable)
#
OLD="debian-installer"
NEW="debian\/$debian_stable"
DPATH="$tftp_boot_dir/debian/$debian_stable/i386/boot-screens/*.cfg"
BPATH="$tftp_boot_dir/backup/$debian_stable"
TFILE="/tmp/out.tmp.$$"
[ ! -d $BPATH ] && mkdir -p $BPATH || :
for f in $DPATH
do
if [ -f $f -a -r $f ]; then
/bin/cp -f $f $BPATH
sed "s/$OLD/$NEW/g" "$f" > $TFILE && mv $TFILE "$f"
else
echo "Error: Cannot read $f"
fi
done

#
# convert bootmenu Debian(UnStable)
#
OLD="debian-installer"
NEW="debian\/$debian_unstable"
DPATH="$tftp_boot_dir/debian/$debian_unstable/i386/boot-screens/*.cfg"
BPATH="$tftp_boot_dir/backup/$debian_unstable"
TFILE="/tmp/out.tmp.$$"
[ ! -d $BPATH ] && mkdir -p $BPATH || :
for f in $DPATH
do
if [ -f $f -a -r $f ]; then
/bin/cp -f $f $BPATH
sed "s/$OLD/$NEW/g" "$f" > $TFILE && mv $TFILE "$f"
else
echo "Error: Cannot read $f"
fi
done
DPATH="$tftp_boot_dir/debian/$debian_unstable/i386/boot-screens/kde/*.cfg"
BPATH="$tftp_boot_dir/backup/$debian_unstable/kde"
[ ! -d $BPATH ] && mkdir -p $BPATH || :
for f in $DPATH
do
if [ -f $f -a -r $f ]; then
/bin/cp -f $f $BPATH
sed "s/$OLD/$NEW/g" "$f" > $TFILE && mv $TFILE "$f"
else
echo "Error: Cannot read $f"
fi
done

DPATH="$tftp_boot_dir/debian/$debian_unstable/i386/boot-screens/lxde/*.cfg"
BPATH="$tftp_boot_dir/backup/$debian_unstable/lxde"
[ ! -d $BPATH ] && mkdir -p $BPATH || :
for f in $DPATH
do
if [ -f $f -a -r $f ]; then
/bin/cp -f $f $BPATH
sed "s/$OLD/$NEW/g" "$f" > $TFILE && mv $TFILE "$f"
else
echo "Error: Cannot read $f"
fi
done
DPATH="$tftp_boot_dir/debian/$debian_unstable/i386/boot-screens/xfce/*.cfg"
BPATH="$tftp_boot_dir/backup/$debian_unstable/xfce"
[ ! -d $BPATH ] && mkdir -p $BPATH || :
for f in $DPATH
do
if [ -f $f -a -r $f ]; then
/bin/cp -f $f $BPATH
sed "s/$OLD/$NEW/g" "$f" > $TFILE && mv $TFILE "$f"
else
echo "Error: Cannot read $f"
fi
done


#
# convert bootmenu Debian(Testing)
#
OLD="debian-installer"
NEW="debian\/$debian_testing"
DPATH="$tftp_boot_dir/debian/$debian_testing/i386/boot-screens/*.cfg"
BPATH="$tftp_boot_dir/backup/$debian_testing"
TFILE="/tmp/out.tmp.$$"
[ ! -d $BPATH ] && mkdir -p $BPATH || :
for f in $DPATH
do
if [ -f $f -a -r $f ]; then
/bin/cp -f $f $BPATH
sed "s/$OLD/$NEW/g" "$f" > $TFILE && mv $TFILE "$f"
else
echo "Error: Cannot read $f"
fi
done
DPATH="$tftp_boot_dir/debian/$debian_testing/i386/boot-screens/kde/*.cfg"
BPATH="$tftp_boot_dir/backup/$debian_testing/kde"
[ ! -d $BPATH ] && mkdir -p $BPATH || :
for f in $DPATH
do
if [ -f $f -a -r $f ]; then
/bin/cp -f $f $BPATH
sed "s/$OLD/$NEW/g" "$f" > $TFILE && mv $TFILE "$f"
else
echo "Error: Cannot read $f"
fi
done

DPATH="$tftp_boot_dir/debian/$debian_testing/i386/boot-screens/lxde/*.cfg"
BPATH="$tftp_boot_dir/backup/$debian_testing/lxde"
[ ! -d $BPATH ] && mkdir -p $BPATH || :
for f in $DPATH
do
if [ -f $f -a -r $f ]; then
/bin/cp -f $f $BPATH
sed "s/$OLD/$NEW/g" "$f" > $TFILE && mv $TFILE "$f"
else
echo "Error: Cannot read $f"
fi
done
DPATH="$tftp_boot_dir/debian/$debian_testing/i386/boot-screens/xfce/*.cfg"
BPATH="$tftp_boot_dir/backup/$debian_testing/xfce"
[ ! -d $BPATH ] && mkdir -p $BPATH || :
for f in $DPATH
do
if [ -f $f -a -r $f ]; then
/bin/cp -f $f $BPATH
sed "s/$OLD/$NEW/g" "$f" > $TFILE && mv $TFILE "$f"
else
echo "Error: Cannot read $f"
fi
done

#
# Copy vesamenu and get PNG for background
#
wget $menu_bg_png_url -O splash.png
cp ubuntu/$ubuntu_stable/i386/boot-screens/vesamenu.c32 .
echo "default vesamenu.c32" > pxelinux.cfg/default
echo "Menu Background splash.png" >> pxelinux.cfg/default
echo "Menu Title Boot Menu" >> pxelinux.cfg/default
#
# Create Menu Entries
#
echo "# Ubuntu Stable" >> pxelinux.cfg/default
echo "LABEL Ubuntu Stable ($ubuntu_stable)" >> pxelinux.cfg/default
echo "MENU LABEL Ubuntu Stable ($ubuntu_stable)" >> pxelinux.cfg/default
echo "KERNEL vesamenu.c32" >> pxelinux.cfg/default
echo "APPEND ubuntu/$ubuntu_stable/i386/boot-screens/menu.cfg" >> pxelinux.cfg/
default
echo "#" >> pxelinux.cfg/default
echo "# Ubuntu Testing" >> pxelinux.cfg/default
echo "LABEL Ubuntu Testing ($ubuntu_testing)" >> pxelinux.cfg/default
echo "MENU LABEL Ubuntu Testing ($ubuntu_testing)" >> pxelinux.cfg/default
echo "KERNEL vesamenu.c32" >> pxelinux.cfg/default
echo "APPEND ubuntu/$ubuntu_testing/i386/boot-screens/menu.cfg" >> pxelinux.cfg/default
echo "#" >> pxelinux.cfg/default
echo "# Debian Stable" >> pxelinux.cfg/default
echo "LABEL Debian Stable ($debian_stable)" >> pxelinux.cfg/default
echo "MENU LABEL Debian Stable ($debian_stable)" >> pxelinux.cfg/default
echo "KERNEL vesamenu.c32" >> pxelinux.cfg/default
echo "APPEND debian/$debian_stable/i386/boot-screens/menu.cfg" >> pxelinux.cfg/
default
echo "#" >> pxelinux.cfg/default
echo "# Debian UnStable" >> pxelinux.cfg/default
echo "LABEL Debian UnStable ($debian_unstable)" >> pxelinux.cfg/default
echo "MENU LABEL Debian UnStable ($debian_unstable)" >> pxelinux.cfg/default
echo "KERNEL vesamenu.c32" >> pxelinux.cfg/default
echo "APPEND debian/$debian_unstable/i386/boot-screens/menu.cfg" >> pxelinux.cfg/
default
echo "#" >> pxelinux.cfg/default
echo "# Debian Testing" >> pxelinux.cfg/default
echo "LABEL Debian Testing ($debian_testing)" >> pxelinux.cfg/default
echo "MENU LABEL Debian Testing ($debian_testing)" >> pxelinux.cfg/default
echo "KERNEL vesamenu.c32" >> pxelinux.cfg/default
echo "APPEND debian/$debian_testing/i386/boot-screens/menu.cfg" >> pxelinux.cfg/
default
echo "#" >> pxelinux.cfg/default
echo "# Fedora" >> pxelinux.cfg/default
echo "LABEL Fedora ($fedora_ver)" >> pxelinux.cfg/default
echo "MENU LABEL Fedora ($fedora_ver)" >> pxelinux.cfg/default
echo "KERNEL fedora/$fedora_ver/i386/vmlinuz" >> pxelinux.cfg/default
echo "APPEND append initrd=fedora/$fedora_ver/i386/initrd.img" >> pxelinux.cfg/
default
echo "#" >> pxelinux.cfg/default
echo "# CentOS" >> pxelinux.cfg/default
echo "LABEL CentOS ($centos_ver)" >> pxelinux.cfg/default
echo "MENU LABEL CentOS ($centos_ver)" >> pxelinux.cfg/default
echo "KERNEL centos/$centos_ver/i386/vmlinuz" >> pxelinux.cfg/default
echo "APPEND append initrd=centos/$centos_ver/i386/initrd.img" >> pxelinux.cfg/
default
echo "#" >> pxelinux.cfg/default
echo "# Mandriva" >> pxelinux.cfg/default
echo "LABEL Mandriva ($mandriva_ver)" >> pxelinux.cfg/default
echo "MENU LABEL Mandriva ($mandriva_ver)" >> pxelinux.cfg/default
echo "KERNEL mandriva/$mandriva_ver/i386/vmlinuz" >> pxelinux.cfg/default
echo "APPEND append initrd=mandriva/$mandriva_ver/i386/all.rdz vga=788
splash=silent automatic=method:http,network:dhcp,server:www.gtlib.gatech.edu,
directory:/pub/mandrake/official/2010.0/i586" >> pxelinux.cfg/default
echo "#" >> pxelinux.cfg/default
echo "# Suse" >> pxelinux.cfg/default
echo "LABEL Suse ($opensuse_ver)" >> pxelinux.cfg/default
echo "MENU LABEL Suse ($opensuse_ver)" >> pxelinux.cfg/default
echo "KERNEL suse/$opensuse_ver/i386/linux" >> pxelinux.cfg/default
echo "APPEND append initrd=suse/$opensuse_ver/i386/initrd splash=silent
showopts install=http://download.opensuse.org/distribution/$opensuse_ver/repo/oss/" >> pxelinux.cfg/default
echo "#" >> pxelinux.cfg/default
echo "prompt 0" >> pxelinux.cfg/default
echo "timeout 0" >> pxelinux.cfg/default

Fuente HowtoForge.

No hay comentarios: