|
@ -0,0 +1,14 @@
|
|||
#!ipxe
|
||||
echo Booting by ipxe
|
||||
echo MAC Address: ${net0/mac}
|
||||
set macaddress ${net0/mac}
|
||||
set prefix tftp://SERVERIP/ipxe_scripts
|
||||
echo Prefix: ${prefix}
|
||||
set configfile ${prefix}/01-${net0/mac}
|
||||
echo Config File: ${configfile}
|
||||
ifopen net0
|
||||
route
|
||||
# Intentar cargar la configuración personalizada por MAC
|
||||
chain ${configfile} ||
|
||||
# Si no se encuentra la configuración personalizada, cargar la configuración por defecto
|
||||
chain $prefix/default.ipxe
|
|
@ -0,0 +1,14 @@
|
|||
#!ipxe
|
||||
set timeout 0
|
||||
set timeout-style hidden
|
||||
set ISODIR ogLive
|
||||
set default 0
|
||||
set kernelargs ro boot=oginit quiet splash irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true ogtmpfs=15 oglivedir=${ISODIR} LANG=es_ES.UTF-8 ip=IP_ADDRESS:192.168.2.1:192.168.2.1:255.255.255.0:HOSTNAME:eth0:none group=Aula_virtual ogrepo=192.168.2.1 oglive=192.168.2.1 oglog=192.168.2.1 ogshare=192.168.2.1 ogprof=false vga=788
|
||||
echo "OgLive $ISODIR"
|
||||
ifopen net0
|
||||
route
|
||||
kernel tftp://SERVERIP/ogLive/ogvmlinuz ${kernelargs}
|
||||
initrd tftp://SERVERIP/ogLive/oginitrd.img
|
||||
boot
|
||||
|
||||
|
|
@ -1,4 +1,249 @@
|
|||
#!/bin/bash
|
||||
|
||||
echo "Hello world"
|
||||
touch "Hello world"
|
||||
BRANCH=$1
|
||||
CLIENTS=("${@:2}")
|
||||
if [[ -z $BRANCH ]]; then
|
||||
BRANCH="main"
|
||||
fi
|
||||
GIT_REPO="ssh://git@ognproject.evlt.uma.es:21987/opengnsys/ogboot.git"
|
||||
# Obtiene el código fuente del proyecto desde el repositorio de GitHub.
|
||||
function downloadCode()
|
||||
{
|
||||
if [ $# -ne 1 ]; then
|
||||
echo "${FUNCNAME}(): invalid number of parameters"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local url="$1"
|
||||
|
||||
echo "${FUNCNAME}(): downloading code from '$url'..."
|
||||
|
||||
GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=accept-new" git archive --remote=$url --format zip --output ogboot.zip --prefix=ogboot/ $BRANCH && unzip ogboot.zip
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "${FUNCNAME}(): error getting OpenGnsys code from $url"
|
||||
return 1
|
||||
fi
|
||||
rm -f ogboot.zip
|
||||
echo "${FUNCNAME}(): code was downloaded"
|
||||
return 0
|
||||
}
|
||||
|
||||
function checkDependencies() {
|
||||
echoAndLog "Checking dependencies..."
|
||||
|
||||
# Lista de dependencias
|
||||
|
||||
local DEPENDENCIES=(
|
||||
php
|
||||
php-cli
|
||||
php-fpm
|
||||
php-json
|
||||
php-pdo
|
||||
php-mysql
|
||||
php-zip
|
||||
php-gd
|
||||
php-mbstring
|
||||
php-curl
|
||||
php-xml
|
||||
php-pear
|
||||
php-bcmath
|
||||
composer
|
||||
unzip
|
||||
apache2
|
||||
libapache2-mod-php
|
||||
subversion
|
||||
php-ldap
|
||||
isc-dhcp-server
|
||||
bittorrent
|
||||
tftp-hpa
|
||||
tftpd-hpa
|
||||
xinetd
|
||||
build-essential
|
||||
g++-multilib
|
||||
wget
|
||||
curl
|
||||
graphviz
|
||||
bittornado
|
||||
ctorrent
|
||||
samba
|
||||
rsync
|
||||
netpipes
|
||||
debootstrap
|
||||
schroot
|
||||
squashfs-tools
|
||||
btrfs-tools
|
||||
procps
|
||||
arp-scan
|
||||
realpath
|
||||
gettext
|
||||
moreutils
|
||||
jq
|
||||
wakeonlan
|
||||
udpcast
|
||||
libev-dev
|
||||
libjansson-dev
|
||||
libssl-dev
|
||||
shim-signed
|
||||
grub-efi-amd64-signed
|
||||
gawk
|
||||
libdbi-dev
|
||||
libdbi1
|
||||
automake
|
||||
liblz4-tool
|
||||
)
|
||||
|
||||
# Comprobar cada dependencia
|
||||
for dep in "${DEPENDENCIES[@]}"; do
|
||||
if ! dpkg -s "$dep" >/dev/null 2>&1; then
|
||||
echoAndLog "$dep is not installed. Installing..."
|
||||
sudo apt-get install -y "$dep"
|
||||
else
|
||||
echoAndLog "$dep is already installed."
|
||||
fi
|
||||
done
|
||||
|
||||
echoAndLog "Dependencies checked."
|
||||
}
|
||||
|
||||
function add_tftpboot_files() {
|
||||
# Navegar al directorio ogboot
|
||||
cd ogboot
|
||||
|
||||
src_dir="tftpboot"
|
||||
dest_dir="/opt/opengnsys/tftpboot"
|
||||
|
||||
mkdir -p "$dest_dir"
|
||||
|
||||
cp -rn "$src_dir/." "$dest_dir/"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Los archivos se añadieron con éxito."
|
||||
else
|
||||
echo "Hubo un error al añadir los archivos."
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
replace_in_config_kea() {
|
||||
local config_file="/etc/kea/kea-dhcp4.conf"
|
||||
|
||||
sed -i 's/"boot-file-name": "shimx64.efi.signed"/"boot-file-name": "ipxe.efi"/g' "$config_file"
|
||||
sed -i 's/"boot-file-name": "grldr"/"boot-file-name": "undionly.kpxe"/g' "$config_file"
|
||||
}
|
||||
|
||||
|
||||
generate_ipxe_script() {
|
||||
|
||||
echo "Generando script IPXE..."
|
||||
ip_address_server=$(ifconfig eth0 | awk '/inet / {print $2}')
|
||||
template="etc/dhcp_boot.ipxe.tmpl"
|
||||
|
||||
ipxe_output="/opt/opengnsys/tftpboot/ipxe_scripts/dhcp_boot.ipxe"
|
||||
|
||||
sed "s/SERVERIP/$ip_address_server/g" "$template" > "$ipxe_output"
|
||||
|
||||
template_default="tftpboot/ipxe_scripts/default.ipxe"
|
||||
|
||||
default_output="/opt/opengnsys/tftpboot/ipxe_scripts/default.ipxe"
|
||||
|
||||
mac_script_template="etc/mac_script.ipxe.tmpl"
|
||||
|
||||
sed "s/SERVERIP/$ip_address_server/g" "$template_default" > "$default_output"
|
||||
echo "Creando ficheros MAC script"
|
||||
for client_declaration in "${CLIENTS[@]}"; do
|
||||
eval "$client_declaration"
|
||||
|
||||
hostname="${CLIENT[hostname]}"
|
||||
mac_address="${CLIENT[mac_address]}"
|
||||
ip_address="${CLIENT[ip_address]}"
|
||||
mac_address_lower=$(echo "$mac_address" | tr '[:upper:]' '[:lower:]')
|
||||
filename="01-${mac_address_lower}"
|
||||
sed "s/SERVERIP/$ip_address_server/g; s/IP_ADDRESS/$ip_address/g; s/HOSTNAME/$hostname/g; s/MAC_ADDRESS/$mac_address/g" $mac_script_template > "/opt/opengnsys/tftpboot/ipxe_scripts/$filename"
|
||||
echo "Archivo $filename creado con los parámetros modificados."
|
||||
done
|
||||
|
||||
|
||||
echo "Archivos creados correctamente."
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
mount_NFS() {
|
||||
if sudo mount -t nfs ognartefactos.evlt.uma.es:/ /mnt; then
|
||||
echo "Sistema NFS montado correctamente."
|
||||
else
|
||||
echo "Error: No se pudo montar el sistema NFS."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ls /mnt/
|
||||
|
||||
sudo cp -r /mnt/srv/artefactos/ipxe/ /tmp
|
||||
|
||||
cd /tmp/ipxe/src
|
||||
if sudo make -j 4; then
|
||||
echo "Directorio /tmp/ipxe/src montado correctamente."
|
||||
else
|
||||
echo "Error: No se pudo montar el directorio /tmp/ipxe/src."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if sudo make bin/undionly.kpxe EMBED=/opt/opengnsys/tftpboot/ipxe_scripts/dhcp_boot.ipxe; then
|
||||
echo "Fichero de arranque montado correctamente."
|
||||
else
|
||||
echo "Error: No se pudo montar el fichero de arranque."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sudo cp bin/undionly.kpxe /opt/opengnsys/tftpboot
|
||||
|
||||
if sudo make bin-x86_64-efi/ipxe.efi EMBED=/opt/opengnsys/tftpboot/ipxe_scripts/dhcp_boot.ipxe; then
|
||||
echo "Fichero EFI construido correctamente."
|
||||
else
|
||||
echo "Error: No se pudo construir el fichero EFI."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sudo cp bin-x86_64-efi/ipxe.efi /opt/opengnsys/tftpboot
|
||||
|
||||
}
|
||||
|
||||
checkDependencies
|
||||
|
||||
downloadCode $GIT_REPO
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error while getting code from the repository"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
add_tftpboot_files
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error añadiendo ficheros"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
replace_in_config_kea
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error en la sustitución de valores en el archivo de configuración de KEA DHCP"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
generate_ipxe_script
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error en la generación de scripts IPXE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
mount_NFS
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error en el montaje NFS"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
|
Binary file not shown.
|
@ -0,0 +1,12 @@
|
|||
#!ipxe
|
||||
set timeout 0
|
||||
set timeout-style hidden
|
||||
set ISODIR ogLive
|
||||
set default 0
|
||||
set kernelargs ro boot=oginit quiet splash irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true ogtmpfs=15 oglivedir=${ISODIR} LANG=es_ES.UTF-8 ip=192.168.2.11:192.168.2.1:192.168.2.1:255.255.255.0:pc11:eth0:none group=Aula_virtual ogrepo=192.168.2.1 oglive=192.168.2.1 oglog=192.168.2.1 ogshare=192.168.2.1 ogprof=false vga=788
|
||||
|
||||
kernel tftp://172.17.8.71/ogLive/ogvmlinuz ${kernelargs}
|
||||
initrd tftp://172.17.8.71/ogLive/oginitrd.img
|
||||
boot
|
||||
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
#!ipxe
|
||||
set timeout 0
|
||||
set timeout-style hidden
|
||||
set ISODIR ogLive
|
||||
set default 0
|
||||
set kernelargs ro boot=oginit quiet splash irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true ogtmpfs=15 oglivedir=${ISODIR} LANG=es_ES.UTF-8 ip=192.168.2.11:192.168.2.1:192.168.2.1:255.255.255.0:pc11:eth0:none group=Aula_virtual ogrepo=192.168.2.1 oglive=192.168.2.1 oglog=192.168.2.1 ogshare=192.168.2.1 ogprof=false vga=788
|
||||
echo "OgLive $ISODIR"
|
||||
ifopen net0
|
||||
route
|
||||
kernel tftp://SERVERIP/ogLive/ogvmlinuz ${kernelargs}
|
||||
initrd tftp://SERVERIP/ogLive/oginitrd.img
|
||||
boot
|
||||
|
||||
|
Binary file not shown.
Loading…
Reference in New Issue