159 lines
3.9 KiB
Bash
159 lines
3.9 KiB
Bash
#!/bin/bash
|
|
|
|
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 add_tftpboot_files() {
|
|
# Navegar al directorio ogboot
|
|
cd ogboot
|
|
|
|
src_dir="tftpboot"
|
|
dest_dir="/opt/opengnsys/tftpboot"
|
|
|
|
# Crear el directorio de destino si no existe
|
|
mkdir -p "$dest_dir"
|
|
|
|
# Copiar los archivos sin sobrescribir los existentes
|
|
cp -rn "$src_dir/." "$dest_dir/"
|
|
|
|
# Comprobar si la copia fue exitosa
|
|
if [ $? -eq 0 ]; then
|
|
echo "Los archivos se añadieron con éxito."
|
|
else
|
|
echo "Hubo un error al añadir los archivos."
|
|
fi
|
|
|
|
# Volver al directorio original
|
|
|
|
}
|
|
|
|
generate_ipxe_script() {
|
|
|
|
echo "Generando script IPXE..."
|
|
ip_address=$(ifconfig eth0 | awk '/inet / {print $2}')
|
|
template="etc/dhcp_boot.ipxe.tmpl"
|
|
|
|
ipxe_output="/opt/opengnsys/tftpboot/ipxe_scripts/dhcp_boot.ipxe"
|
|
|
|
# Reemplazar SERVERIP con la dirección IP en la plantilla y guardarla en el archivo de salida
|
|
sed "s/SERVERIP/$ip_address/g" "$template" > "$ipxe_output"
|
|
|
|
template_default="tftpboot/ipxe_scripts/default.ipxe"
|
|
|
|
default_output="/opt/opengnsys/tftpboot/ipxe_scripts/default.ipxe"
|
|
|
|
sed "s/SERVERIP/$ip_address/g" "$template_default" > "$default_output"
|
|
echo "Creando ficheros MAC script"
|
|
for client in "${CLIENTS[@]}"; do
|
|
IFS=':' read -r -a campos <<< "$client"
|
|
hostname="${campos[0]}"
|
|
mac_address="${campos[1]}"
|
|
ip_address="${campos[2]}"
|
|
filename="01-${mac_address//:/-}"
|
|
sed "s/IP_ADDRESS/$ip_address/g; s/HOSTNAME/$hostname/g; s/MAC_ADDRESS/$mac_address/g" /opt/opengnsys/tftpboot/ipxe_scripts/default.ipxe > /opt/opengnsys/tftpboot/ipxe_scripts/$filename
|
|
|
|
echo "Archivo $filename creado con los parámetros modificados."
|
|
done
|
|
|
|
echo "Archivos creados correctamente."
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
# Definir la función
|
|
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
|
|
|
|
}
|
|
|
|
|
|
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
|
|
|
|
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
|
|
|
|
|
|
|