Preboot Execution Environment (Español)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Tango-preferences-desktop-locale-modified.pngLa traducción de este artículo o sección no refleja el texto original.Tango-preferences-desktop-locale-modified.png

Motivos: Basically abandoned since 2013 (285378) (Discusión en Talk:Preboot Execution Environment (Español)#)

De Wikipedia:Preboot Execution Environment:

Preboot eXecution Environment (PXE) (Entorno de ejecución de prearranque), es un entorno para arrancar e instalar el sistema operativo en ordenadores a través de una red, de manera independiente de los dispositivos de almacenamiento de datos disponibles (como discos duros) o de los sistemas operativos instalados.

En esta guía, PXE se usa para arrancar los medios de instalación con una Option Rom apropiada que soporte PXE como objetivo.

Preparación

Descarga el medio de instalación más reciente de aquí.

A continuación monta la imagen:

# mkdir -p /mnt/archiso
# mount -o loop,ro archlinux-2013.02.01-dual.iso /mnt/archiso

Instalación del servidor

Necesitarás instalar un servidor, TFTP, y HTTP para configurar la red, cargar pxelinux/kernel/initramfs, y finalmente cargar el sistema de archivos de la raíz (respectivamente).

Red

Activa tu tarjeta de red ethernet, y asignale una dirección apropiada.

# ip link set eth0 up
# ip addr add 192.168.0.1/24 dev eth0

DHCP + TFTP

Necesitarás servidores DHCP y TFTP para configurar la red en el directorio de instalación y para facilitar la transferencia de archivos entre PXE servidor y cliente; dnsmasq hace las cos cosas, y es extremadamente fácil de instalar.

Instale dnsmasq y configure de la siguiente manera:

# vim /etc/dnsmasq.conf
port=0
interface=eth0
bind-interfaces
dhcp-range=192.168.0.50,192.168.0.150,12h
dhcp-boot=/arch/boot/syslinux/pxelinux.0
dhcp-option-force=209,boot/syslinux/archiso.cfg
dhcp-option-force=210,/arch/
enable-tftp
tftp-root=/mnt/archiso

Inicia dnsmasq:

# systemctl start dnsmasq.service

HTTP

Gracias a recientes cambios en archiso, ahora es posible arrancar desde HTTP (archiso_pxe_http initcpio hook) o NFS (archiso_pxe_nfs initcpio hook); de entre todas las posibilidades, darkhttpd es de lejos el mas sencillo de instalar (y el más ligero).

Primero, instale darkhttpd.

Luego inicia darkhttpd usando /mnt/archiso como raíz de los archivos:

# darkhttpd /mnt/archiso
darkhttpd/1.8, copyright (c) 2003-2011 Emil Mikulic.
listening on: http://0.0.0.0:80/

Instalación

Para esta parte, necesitarás averiguar como decirle al cliente que realice un arranque con PXE; en la esquina de la pantalla junto con los mensajes normales, normalmente habrá alguna pista de que tecla apretar para intentar arrancar primero con PXE. En un IBM x3650 F12 sale un menú de arranque, la primera opción del cual es Network ("Red"); en un Dell PE 1950/2950 apretar F12 inicia el arranque con PXE directamente.

Arranque

Leer [[[Systemd (Español)/Journal (Español)|journald]] en el servidor PXE debería proveernos de cierta información sobre lo que pasa durante las primeras fases del proceso de arranque de PXE:

# journalctl -u dnsmasq -f
dnsmasq-dhcp[2544]: DHCPDISCOVER(eth1) 00:1a:64:6a:a2:4d 
dnsmasq-dhcp[2544]: DHCPOFFER(eth1) 192.168.0.110 00:1a:64:6a:a2:4d 
dnsmasq-dhcp[2544]: DHCPREQUEST(eth1) 192.168.0.110 00:1a:64:6a:a2:4d 
dnsmasq-dhcp[2544]: DHCPACK(eth1) 192.168.0.110 00:1a:64:6a:a2:4d 
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/pxelinux.0 to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/whichsys.c32 to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe_choose.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/ifcpu64.c32 to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe_both_inc.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_head.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe32.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe64.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_tail.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/vesamenu.c32 to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/splash.png to 192.168.0.110

Tras cargar pxelinux.0 y archiso.cfg vía TFTP, se presentará (ojalá) un menú de arranque syslinux con varias opciones, dos de la cuales nos serán especialmente útiles.

Selecciona

Boot Arch Linux (x86_64) (HTTP)

o

Boot Arch Linux (i686) (HTTP)

dependiendo de la arquitectura de tu CPU.

Luego el kernel y initramfs (de acuerdo con la arquitectura seleccionada) serán transferidos vía TFTP:

dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/x86_64/vmlinuz to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/x86_64/archiso.img to 192.168.0.110

Si todo va bien, tras esto deberías ver actividad en darkhttpd proviniente del objetivo PXE; en este momento el kernel debería estar cargado en el objetivo PXE, e iniciado:

1348347586 192.168.0.110 "GET /arch/aitab" 200 678 "" "curl/7.27.0"
1348347587 192.168.0.110 "GET /arch/x86_64/root-image.fs.sfs" 200 107860206 "" "curl/7.27.0"
1348347588 192.168.0.110 "GET /arch/x86_64/usr-lib-modules.fs.sfs" 200 36819181 "" "curl/7.27.0"
1348347588 192.168.0.110 "GET /arch/any/usr-share.fs.sfs" 200 63693037 "" "curl/7.27.0"

Tras la descarga de la raíz del sistema vía HTTP, finalmente acabarás en un terminal zsh como superusuario, con un fantástico grml config.

Tras el arranque

A no ser que quieras que todo el tráfico pase por tu servidor PXE (que igualmente no funcionará a no ser que lo configures correctamente), te interesa detener dnsmasq y definir un nuevo asentamiento en el objetivo de la instalación, de acuerdo con el diseño de tu red.

# systemctl stop dnsmasq.service

También puedes detener darkhttpd; el objetivo ya ha descargado el sistema de archivos base, así que ya no es necesario. Mientras lo haces, también puedes desmontar la imagen de desinstalación:

# umount /mnt/archiso

Ahora ya puedes seguir la guía oficial de instalación.

Métodos Alternativos

Por estar implicado con el menú syslinux, hay varias alternativas más:

NFS

Necesitarás instalar un servidor NFS exportando la raíz a la raíz de tu medio de instalación montado —sería /mnt/archiso si seguiste las primeras secciones de esta guía—. Después de configurar el servidor, agregue la siguiente línea a su archivo /etc/exports:

/etc/exports
/mnt/archiso 192.168.0.0/24(ro,no_subtree_check)

Si el servidor ya estaba en marcha, reexporte los sistemas de archivos con exportfs -r -a -v.

La configuración por defecto del instalador espera encontrar el servidor NFS en /run/archiso/bootmnt, por lo que tendrá que modificar las opciones de arranque. Para ello, presione la tecla Tab sobre el menú de arranque apropiado para elegir y editar la opción archiso_nfs_srv que corresponda:

archiso_nfs_srv=${pxeserver}:/mnt/archiso

De otro modo, puede utilizar /run/archiso/bootmnt para completar el proceso.

Una vez cargado el kernel, la imgen bootstrap de Arch copiará el sistema de archivos root a través de NFS para el arranque del equipo anfitrión. Una vez que esto se haya completado, tendrá un sistema en ejecución.

NBD

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:Preboot Execution Environment (Español))

Instala nbd y configúralo:

# vim /etc/nbd-server/config
[generic]
[archiso]
    readonly = true
    exportname = /srv/archlinux-2013.02.01-dual.iso

Memoria baja

Puedes usar la opción copytoram de initramfs para controlar si la raíz del sitema de archivos debe copiarse a la ram integramente en el inicio del arranque.

Es muy recomendado dejar esta opción, y solo desactivarla si es realmente necesario (sistemas con menos de ~256MB de memoria RAM). Añade copytoram=n a la línea del kernel si quieres hacer esto.