diff options
Diffstat (limited to 'client/engine')
-rwxr-xr-x | client/engine/Boot.lib | 58 | ||||
-rwxr-xr-x | client/engine/Disk.lib | 2 | ||||
-rwxr-xr-x | client/engine/Image.lib | 73 |
3 files changed, 132 insertions, 1 deletions
diff --git a/client/engine/Boot.lib b/client/engine/Boot.lib index 2cda9095..695feba7 100755 --- a/client/engine/Boot.lib +++ b/client/engine/Boot.lib @@ -2166,3 +2166,61 @@ fi #Cambiamos la entrada el fichero de configuración. sed -i s/gfxmode=.*$/gfxmode=$NEWRESOLUTION/g $CFGFILE } + + +# ogRefindInstall int_ndisk bool_autoconfig +#@brief Instala y actualiza el gestor rEFInd en la particion EFI +#@param int_ndisk +#@param bolean_Check__auto_config true | false[default] +#@return +#@exception OG_ERR_FORMAT Formato incorrecto. +#@version 1.1.0 - Primeras pruebas. +#@author Juan Carlos Garcia. Universidad de ZAragoza. +#@date 2017-06-26 +#*/ ## +function ogRefindInstall { + +# Variables locales. +local DISK EFIDIR CONFIG EFIPARTITIONID + + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk boolean_autoconfig " \ + "$FUNCNAME 1 TRUE" + return +fi + +# Error si no se recibe 1 parámetro. +[ $# -ge 1 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?) + + +DISK=$1 +EFIDIR=/mnt/$(ogDiskToDev $1 1 | cut -c 6-8)$1/EFI +CONFIG=${2:-"FALSE"} +EFIPARTITIONID=$(ogGetPartitionId $1 1) +if [ "$EFIPARTITIONID" == "EF00" ] || [ "$EFIPARTITIONID" == "ef00" ]; then + cp -pr /opt/opengnsys/lib/refind ${EFIDIR} + case "$CONFIG" in + FALSE) + if [ -a ${EFIDIR}/ubuntu ]; then + echo "menuentry \"Ubuntu\" {" >> ${EFIDIR}/refind/refind.conf + echo "loader /EFI/ubuntu/grubx64.efi" >> ${EFIDIR}/refind/refind.conf + echo "icon /EFI/refind/icons/os_linux.png" >> ${EFIDIR}/refind/refind.conf + echo "}" >> ${EFIDIR}/refind/refind.conf + fi + if [ -a ${EFIDIR}/Microsoft ]; then + echo "menuentry \"Windows\" {" >> ${EFIDIR}/refind/refind.conf + echo "loader /EFI/Microsoft/Boot/bootmgfw.efi" >> ${EFIDIR}/refind/refind.conf + echo "}" >> ${EFIDIR}/refind/refind.conf + fi + ;; + TRUE) + cp ${EFIDIR}/refind/refind.conf.auto ${EFIDIR}/refind/refind.conf + ;; + esac +else +$(ogRaiseError $OG_ERR_FORMAT; echo $?) +fi +} + diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib index 3316d0d3..0b1a4c20 100755 --- a/client/engine/Disk.lib +++ b/client/engine/Disk.lib @@ -494,7 +494,7 @@ fi # Listar dispositivos de discos. ALLDISKS=$((lsblk -n -e 1,2 -x MAJ:MIN 2>/dev/null || lsblk -n -e 1,2) | \ awk '$6~/^disk$/ {gsub(/!/,"/"); printf "/dev/%s ",$1}') -#ALLDISKS=$(lsblk -Jd -e 1,2 | jq -r '.blockdevices[] | "/dev/"+select(.type=="disk").name') +#ALLDISKS=$(lsblk -Jdp | jq -r '.blockdevices[] | select(.type=="disk").name') # Listar volúmenes lógicos. VOLGROUPS=$(vgs -a --noheadings 2>/dev/null | awk '{printf "/dev/%s ",$1}') ALLDISKS="$ALLDISKS $VOLGROUPS" diff --git a/client/engine/Image.lib b/client/engine/Image.lib index dfbcb487..13d234ec 100755 --- a/client/engine/Image.lib +++ b/client/engine/Image.lib @@ -1075,3 +1075,76 @@ IMGFILE=$(ogGetPath "$1" "$2.img") || return $? ogGetImageInfo $IMGFILE | awk -F: '{print $4}' } + +#/** +# ogCreateGptImage int_ndisk str_repo path_image +#@brief Crea una imagen de la tabla de particiones GPT de un disco. +#@param int_ndisk nº de orden del disco +#@param str_repo repositorio de imágenes (remoto o caché local) +#@param path_image camino de la imagen (sin extensión) +#@return (nada, por determinar) +#@note repo = { REPO, CACHE } +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. +#@exception OG_ERR_IMAGE error al crear la imagen del sistema. +#@version 1.1 - Adaptación a OpenGnSys 1.1 +#@author Juan Carlos Garcia. Universidad de Zaragoza +#@date 2017/03/29 +#*/ ## +function ogCreateGptImage () +{ +# Variables locales +local DISK IMGDIR IMGFILE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk path_dir str_image" \ + "$FUNCNAME 1 REPO /aula1/gpt" + return +fi +# Error si no se reciben 3 parámetros. +[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? + +DISK=$(ogDiskToDev "$1") || return $? +IMGDIR=$(ogGetParentPath "$2" "$3") +[ -n "$IMGDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$2 $(dirname $3)" || return $? +IMGFILE="$IMGDIR/$(basename "$3").gpt" + +# Crear imagen de la tabla GPT. +sgdisk -b="$IMGFILE" "$DISK" || ogRaiseError $OG_ERR_IMAGE "$1 $IMGFILE" || return $? +} + +#/** +# ogRestoreGptImage str_repo path_image int_ndisk +#@brief Restaura la imagen de la tabla de particiones GPT de un disco. +#@param str_repo repositorio de imágenes o caché local +#@param path_image camino de la imagen +#@param int_ndisk nº de orden del disco +#@return (por determinar) +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero de imagen o partición no detectados. +#@exception OG_ERR_IMAGE error al restaurar la imagen del sistema. +#@version 1.1 - Adaptación a OpenGnSys 1.1 +#@author Juan Carlos Garcia, Universidad de Zaragoza +#@date 2017/03/29 +#*/ ## +function ogRestoreGptImage () +{ +# Variables locales +local DISK IMGFILE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME path_dir str_image int_ndisk" \ + "$FUNCNAME REPO /aula1/gpt 1" + return +fi +# Error si no se reciben 3 parámetros. +[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Procesar parámetros. +DISK=$(ogDiskToDev "$3") || return $? +IMGFILE=$(ogGetPath "$1" "$2.gpt") || return $? +[ -r "$IMGFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$IMGFILE" || return $? + +# Restaurar tabla GPT del disco. +sgdisk -l="$IMGFILE" "$DISK" || ogRaiseError $OG_ERR_IMAGE "$1 $IMGFILE" || return $? +} + |