#802 UEFI Windows compatibility: necessary functions for create and restore images.
parent
39b84ff881
commit
30238abde6
|
@ -91,7 +91,7 @@ case "$TYPE" in
|
|||
# [ -r $f ] && DIRGRUB=$(dirname $f)
|
||||
#done
|
||||
#DIRGRUB=${DIRGRUB#$MNTDIR/}
|
||||
#ogGrubUEFIConf $1 $2 $DIRGRUB || return $?
|
||||
#ogGrubUefiConf $1 $2 $DIRGRUB || return $?
|
||||
|
||||
# Borrar cargador guardado con la misma etiqueta.
|
||||
BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2)
|
||||
|
@ -175,7 +175,7 @@ case "$TYPE" in
|
|||
;;
|
||||
GrubLoader)
|
||||
# Reiniciar.
|
||||
reboot
|
||||
#reboot
|
||||
;;
|
||||
*) ogRaiseError $OG_ERR_NOTOS "$1 $2 ${TYPE:+($TYPE)}"
|
||||
return $?
|
||||
|
@ -732,6 +732,9 @@ ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null
|
|||
#@version 1.1.0 - #827 Entrada para el ogLive si el equipo tiene partición cache.
|
||||
#@author Antonio J. Doblas Viso. Universidad de Malaga.
|
||||
#@date 2018-01-21
|
||||
#@version 1.1.1 - #802 Equipos EFI: Se crea el grub.cfg de la partición EFI
|
||||
#@author Irina Gomez, ETSII Universidad de Sevilla
|
||||
#@date 2019-01-08
|
||||
#*/ ##
|
||||
|
||||
function ogGrubInstallMbr ()
|
||||
|
@ -800,7 +803,7 @@ then
|
|||
# Reactivamos el grub con el grub.cfg original.
|
||||
if ogIsEfiActive; then
|
||||
# Configuración de grub.cfg para EFI
|
||||
ogGrubUEFIConf $1 $2
|
||||
ogGrubUefiConf $1 $2
|
||||
else
|
||||
grub-install --force --root-directory=${SECONDSTAGE} $FIRSTSTAGE
|
||||
fi
|
||||
|
@ -831,7 +834,7 @@ grubSyntax "$KERNELPARAM" >> ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/grub.c
|
|||
# Instalar el grub no EFI, configurar EFI
|
||||
# Para EFI en ESP para otros en la partición de sistema.
|
||||
if ogIsEfiActive; then
|
||||
ogGrubUEFIConf $1 $2 ${PREFIXSECONDSTAGE}
|
||||
ogGrubUefiConf $1 $2 ${PREFIXSECONDSTAGE}
|
||||
else
|
||||
grub-install --force --root-directory=${SECONDSTAGE}${PREFIXSECONDSTAGE} $FIRSTSTAGE
|
||||
fi
|
||||
|
@ -856,6 +859,9 @@ fi
|
|||
#@version 1.0.3 - Ficheros de configuracion independientes segun ubicación de la priemra etapa
|
||||
#@author Antonio J. Doblas Viso. Universidad de Malaga.
|
||||
#@date 2012-03-13
|
||||
#@version 1.1.1 - #802 Equipos EFI: Se crea el grub.cfg de la partición EFI
|
||||
#@author Irina Gomez, ETSII Universidad de Sevilla
|
||||
#@date 2019-01-08
|
||||
#*/ ##
|
||||
|
||||
function ogGrubInstallPartition ()
|
||||
|
@ -919,7 +925,7 @@ then
|
|||
# Reactivamos el grub con el grub.cfg original.
|
||||
if ogIsEfiActive; then
|
||||
# Configuración de grub.cfg para EFI
|
||||
ogGrubUEFIConf $1 $2
|
||||
ogGrubUefiConf $1 $2
|
||||
else
|
||||
grub-install --force --root-directory=${SECONDSTAGE} $FIRSTSTAGE
|
||||
fi
|
||||
|
@ -945,7 +951,7 @@ grubSyntax $DISK $PART "$KERNELPARAM" >> ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot
|
|||
|
||||
#Instalar el grub si no es EFI, configurar si es EFI
|
||||
if ogIsEfiActive; then
|
||||
ogGrubUEFIConf $1 $2 ${PREFIXSECONDSTAGE}
|
||||
ogGrubUefiConf $1 $2 ${PREFIXSECONDSTAGE}
|
||||
else
|
||||
grub-install --force --root-directory=${SECONDSTAGE}${PREFIXSECONDSTAGE} $FIRSTSTAGE
|
||||
fi
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# Las funciones se incluirán las librerías ya existentes
|
||||
|
||||
#/**
|
||||
# ogGrubUEFIConf int_ndisk int_part str_dir_grub
|
||||
# ogGrubUefiConf int_ndisk int_part str_dir_grub
|
||||
#@brief Genera el fichero grub.cfg de la ESP
|
||||
#@param int_ndisk nº de orden del disco
|
||||
#@param int_part nº de partición
|
||||
|
@ -13,14 +13,14 @@
|
|||
#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado.
|
||||
#@TODO Confirmar si el fichero "$EFIDIR/EFI/$BOOTLABEL/grub.cfg" es necesario.
|
||||
#*/ ##
|
||||
function ogGrubUEFIConf {
|
||||
function ogGrubUefiConf () {
|
||||
local EFIDIR BOOTLABEL GRUBEFI UUID DEVICE DIRGRUB
|
||||
|
||||
# Si se solicita, mostrar ayuda.
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_part [ str_dir_grub ]" \
|
||||
"$FUNCNAME 1 2" \
|
||||
"$FUNCNAME 1 3 grubPARTITION/boot/grub" \
|
||||
"$FUNCNAME 1 3 grubPARTITION/boot/grub"
|
||||
return
|
||||
fi
|
||||
|
||||
|
@ -50,7 +50,7 @@ cp $GRUBDIR/grub.cfg "$EFIDIR/EFI/$BOOTLABEL/grub.cfg"
|
|||
}
|
||||
|
||||
#/**
|
||||
# ogUUIDChange int_ndisk str_repo
|
||||
# ogUuidChange int_ndisk str_repo
|
||||
#@brief Reemplaza el UUID de un sistema de ficheros.
|
||||
#@param int_ndisk nº de orden del disco
|
||||
#@param int_part nº de partición
|
||||
|
@ -59,7 +59,7 @@ cp $GRUBDIR/grub.cfg "$EFIDIR/EFI/$BOOTLABEL/grub.cfg"
|
|||
#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado.
|
||||
#@TODO Se utiliza el comando uuidgen que no existe en el ogLive
|
||||
#*/ ##
|
||||
function ogUUIDChange {
|
||||
function ogUuidChange () {
|
||||
local MNTDIR DEVICE UUID NEWUUID f
|
||||
|
||||
# Si se solicita, mostrar ayuda.
|
||||
|
@ -89,3 +89,248 @@ for f in $MNTDIR/etc/fstab $MNTDIR/{,boot/}{{grubMBR,grubPARTITION}/boot/,}{grub
|
|||
[ -r $f ] && sed -i s/$UUID/$NEWUUID/g $f
|
||||
done
|
||||
}
|
||||
|
||||
#/**
|
||||
# ogCopyEfiBootLoader int_ndisk str_repo path_image
|
||||
#@brief Copia el cargador de arranque desde la partición EFI a la de sistema.
|
||||
#@param int_ndisk nº de orden del disco
|
||||
#@param int_part nº de partición
|
||||
#@return (nada, por determinar)
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado.
|
||||
#@note Si existe el cargador en la partición de sistema no es válido
|
||||
#*/ ##
|
||||
function ogCopyEfiBootLoader () {
|
||||
# Variables locales
|
||||
local MNTDIR EFIDIR BOOTLABEL OSVERSION LOADER f
|
||||
|
||||
# Si se solicita, mostrar ayuda.
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_part" \
|
||||
"$FUNCNAME 1 2"
|
||||
return
|
||||
fi
|
||||
|
||||
# Error si no se reciben 2 arámetros.
|
||||
[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_part" || return $?
|
||||
|
||||
# Comprobamos que exista partición de sistema y la ESP
|
||||
MNTDIR=$(ogMount $1 $2) || ogRaiseError $OG_ERR_PARTITION "$DISK $PART" || return $?
|
||||
EFIDIR=$(ogMount $(ogGetEsp)) || ogRaiseError $OG_ERR_PARTITION "ESP" || return $?
|
||||
|
||||
# Comprobamos que exista el cargador
|
||||
BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2)
|
||||
OSVERSION=$(ogGetOsVersion $1 $2)
|
||||
case $OSVERSION in
|
||||
*Windows\ 10*)
|
||||
for f in $EFIDIR/EFI/{$BOOTLABEL,Microsoft}/Boot/bootmgfw.efi; do
|
||||
[ -r $f ] && LOADER=$f
|
||||
done
|
||||
[ -n "$LOADER" ] || ogRaiseError $OG_ERR_NOTOS "$1 $2 ($OSVERSION, EFI)" || return $?
|
||||
# Si existe el directorio Boot lo borramos
|
||||
[ -d $MNTDIR/Boot ] && rm -rf $MNTDIR/Boot
|
||||
DIRLOADER=$(realpath "${LOADER%/*}/..")
|
||||
cp -r ${DIRLOADER}/Boot $MNTDIR
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
#/**
|
||||
# ogRestoreEfiBootLoader int_ndisk str_repo
|
||||
#@brief Copia el cargador de arranque de la partición de sistema a la partición EFI.
|
||||
#@param int_ndisk nº de orden del disco
|
||||
#@param int_part nº de partición
|
||||
#@return (nada, por determinar)
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado (partición de sistema o EFI).
|
||||
#@exception OG_ERR_NOTOS sin sistema operativo.
|
||||
#@note Si existe el cargador en la partición de sistema puede no ser válido
|
||||
#*/ ##
|
||||
function ogRestoreEfiBootLoader () {
|
||||
# Variables locales
|
||||
local MNTDIR EFIDIR BOOTLABEL OSVERSION LOADER f UUID DEVICE
|
||||
|
||||
# Si se solicita, mostrar ayuda.
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_part" \
|
||||
"$FUNCNAME 1 2"
|
||||
return
|
||||
fi
|
||||
|
||||
# Error si no se reciben 2 arámetros.
|
||||
[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_part" || return $?
|
||||
|
||||
# Comprobamos que exista partición de sistema y la ESP
|
||||
MNTDIR=$(ogMount $1 $2) || ogRaiseError $OG_ERR_PARTITION "$DISK $PART" || return $?
|
||||
EFIDIR=$(ogMount $(ogGetEsp)) || ogRaiseError $OG_ERR_PARTITION "ESP" || return $?
|
||||
|
||||
# Comprobamos que exista el cargador
|
||||
#BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2)
|
||||
OSVERSION=$(ogGetOsVersion $1 $2)
|
||||
case $OSVERSION in
|
||||
*Windows\ 10*)
|
||||
BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2)
|
||||
LOADER=$(ogGetPath $MNTDIR/Boot/bootmgfw.efi)
|
||||
[ -n "$LOADER" ] || ogRaiseError $OG_ERR_NOTOS "$1 $2 ($OSVERSION, EFI)" || return $?
|
||||
[ -r $EFIDIR/$BOOTLABEL ] && rm -rf $EFIDIR/$BOOTLABEL
|
||||
mkdir -p $EFIDIR/EFI/$BOOTLABEL
|
||||
cp -r "${LOADER%/*}" $EFIDIR/EFI/$BOOTLABEL
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# ogRestoreUuidPartitions
|
||||
#@brief Restaura los uuid de las particiones y la tabla de particiones
|
||||
#@param int_ndisk nº de orden del disco
|
||||
#@param int_nfilesys nº de orden del sistema de archivos
|
||||
#@param REPO|CACHE repositorio
|
||||
#@param str_imgname nombre de la imagen
|
||||
#@exception OG_ERR_FORMAT Formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND No encontrado fichero de información de la imagen (con uuid)
|
||||
function ogRestoreUuidPartitions () {
|
||||
local DISK PART IMGNAME INFOFILE DEVICE PARTDEVICE DATA GUID UUID IMGGUID IMGUUID
|
||||
local EFIPARTDEVICE EFIDEVICE EFIDATA EFIGUID EFIUUID EFIUUID IMGEFIGUID IMGEFIUUID
|
||||
|
||||
# Si se solicita, mostrar ayuda.
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" "$FUNCNAME REPO|CACHE str_imgname int_ndisk int_npart" \
|
||||
"$FUNCNAME REPO Windows 1 2"
|
||||
return
|
||||
fi
|
||||
# Error si no se reciben 4 parámetros.
|
||||
[ $# -eq 4 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME REPO|CACHE str_imgname int_ndisk int_npart" || return $?
|
||||
|
||||
# Sólo se ejecuta si es UEFI
|
||||
[ ogIsEfiActive ] || return
|
||||
|
||||
# Parámetros de entrada
|
||||
IMGNAME="$2"
|
||||
INFOFILE="$OGIMG/.$IMGNAME.img.json"
|
||||
[ "${1^^}" == "CACHE" ] && INFOFILE="$OGCAC$INFOFILE"
|
||||
# TODO: que la función getPath soporte archivos ocultos
|
||||
ls $INFOFILE &>/dev/null || ogRaiseError $OG_ERR_NOTFOUND "$INFOFILE" || return $?
|
||||
DISK=$3
|
||||
PART=$4
|
||||
|
||||
DEVICE=$(ogDiskToDev $DISK)
|
||||
PARTDEVICE=$(ogDiskToDev $DISK $PART) || return $?
|
||||
read -e EFIDISK EFIPART <<<"$(ogGetEsp)"
|
||||
EFIPARTDEVICE=$(ogDiskToDev $EFIDISK $EFIPART) || return $?
|
||||
|
||||
# Datos de la imagen
|
||||
IMGGUID=$(jq .guid $INFOFILE|tr -d \")
|
||||
IMGUUID=$(jq .uuid $INFOFILE|tr -d \")
|
||||
IMGEFIGUID=$(jq .espguid $INFOFILE|tr -d \")
|
||||
IMGEFIUUID=$(jq .espuuid $INFOFILE|tr -d \")
|
||||
|
||||
# Datos actuales
|
||||
DATA=$(sfdisk -J $DEVICE)
|
||||
GUID=$(echo $DATA|jq ".partitiontable|.id"|tr -d \")
|
||||
UUID=$(echo $DATA|jq ".partitiontable.partitions[]|select(.node==\"$PARTDEVICE\").uuid"|tr -d \")
|
||||
|
||||
if [ "$IMGGUID" != "$GUID" ]; then
|
||||
echo sgdisk -U "$IMGGUID" "$DEVICE"
|
||||
sgdisk -U "$IMGGUID" "$DEVICE"
|
||||
partprobe
|
||||
fi
|
||||
|
||||
if [ "$IMGUUID" != "$UUID" ]; then
|
||||
NUMPART="${PARTDEVICE##$DEVICE}"
|
||||
echo sgdisk -u "${NUMPART}:$IMGUUID" "$DEVICE"
|
||||
sgdisk -u "${NUMPART}:$IMGUUID" "$DEVICE"
|
||||
partprobe
|
||||
fi
|
||||
|
||||
if [ $DISK -eq $EFIDISK ]; then
|
||||
EFIDATA=$DATA
|
||||
EFIDEVICE=$DEVICE
|
||||
else
|
||||
EFIDEVICE=$(ogDiskToDev $EFIDISK) || return $?
|
||||
EFIDATA=$(sfdisk -J $EFIDEVICE)
|
||||
EFIGUID=$(echo $EFIDATA|jq ".partitiontable|.id"|tr -d \")
|
||||
if [ "$IMGEFIGUID" != "$EFIGUID" ]; then
|
||||
echo sgdisk -U "$IMGEFIGUID" "$EFIDEVICE"
|
||||
sgdisk -U "$IMGEFIGUID" "$EFIDEVICE"
|
||||
partprobe
|
||||
fi
|
||||
fi
|
||||
|
||||
EFIUUID=$(echo $EFIDATA|jq ".partitiontable.partitions[]|select(.node==\"$EFIPARTDEVICE\").uuid"|tr -d \")
|
||||
if [ "$IMGEFIUUID" != "$EFIUUID" ]; then
|
||||
EFINUMPART="${EFIPARTDEVICE##$EFIDEVICE}"
|
||||
echo sgdisk -u "${EFINUMPART}:$IMGEFIUUID" "$EFIDEVICE"
|
||||
sgdisk -u "${EFINUMPART}:$IMGEFIUUID" "$EFIDEVICE"
|
||||
partprobe
|
||||
fi
|
||||
}
|
||||
|
||||
# ogSaveImageInfo
|
||||
#@brief Crea un fichero con la información de la imagen.
|
||||
#@param int_ndisk nº de orden del disco
|
||||
#@param int_nfilesys nº de orden del sistema de archivos
|
||||
#@param REPO|CACHE repositorio
|
||||
#@param str_imgname nombre de la imagen
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado.
|
||||
function ogSaveImageInfo () {
|
||||
local DISK PART IMGDIR IMGNAME INFO INFOFILE DEVICE PARTDEVICE DATA GUID UUID
|
||||
local EFIPARTDEVICE EFIDEVICE EFIDATA EFIUUID EFIGUID
|
||||
|
||||
# Si se solicita, mostrar ayuda.
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys REPO|CACHE str_imgname" \
|
||||
"$FUNCNAME 1 2 REPO Windows"
|
||||
return
|
||||
fi
|
||||
# Error si no se reciben 4 parámetros.
|
||||
[ $# -eq 4 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_nfilesys REPO|CACHE str_imgname" || return $?
|
||||
|
||||
DISK=$1
|
||||
PART=$2
|
||||
IMGDIR="$(ogGetParentPath "$3" "/$4")"
|
||||
# Si no existe el directorio de la imagen me salgo
|
||||
[ "$IMGDIR" != "" ] || ogRaiseError $OG_ERR_NOTFOUND "$3 $(dirname $4)" || return $?
|
||||
IMGNAME="$(basename "$4")"
|
||||
INFOFILE="$IMGDIR/.$IMGNAME.img.json"
|
||||
|
||||
DEVICE=$(ogDiskToDev $DISK) || return $?
|
||||
PARTDEVICE=$(ogDiskToDev $DISK $PART) || return $?
|
||||
DATA=$(sfdisk -J $DEVICE)
|
||||
GUID=$(echo $DATA|jq ".partitiontable|.id"|tr -d \")
|
||||
UUID=$(echo $DATA|jq ".partitiontable.partitions[]|select(.node==\"$PARTDEVICE\").uuid"|tr -d \")
|
||||
|
||||
# Información de la imagen. Valor inicial de efi: false
|
||||
INFO=$(cat << EOT | jq .
|
||||
{"name":"$IMGNAME","efi":"false","guid":"$GUID","uuid":"$UUID"}
|
||||
EOT
|
||||
)
|
||||
|
||||
if ogIsEfiActive; then
|
||||
# Cambio valor de efi a true
|
||||
INFO=$(echo $INFO| jq --arg aux true '. + {efi: $aux}')
|
||||
|
||||
# Obtener partición EFI.
|
||||
read -e EFIDISK EFIPART <<<"$(ogGetEsp)"
|
||||
EFIPARTDEVICE=$(ogDiskToDev $EFIDISK $EFIPART) || return $?
|
||||
if [ $DISK -eq $EFIDISK ]; then
|
||||
EFIDEVICE=$DEVICE
|
||||
EFIDATA=$DATA
|
||||
EFIGUID=$GUID
|
||||
else
|
||||
EFIDEVICE=$(ogDiskToDev $EFIDISK) || return $?
|
||||
EFIDATA=$(sfdisk -J $EFIDEVICE)
|
||||
EFIGUID=$(echo $EFIDATA|jq ".partitiontable|.id"|tr -d \")
|
||||
fi
|
||||
EFIUUID=$(echo $EFIDATA|jq ".partitiontable.partitions[]|select(.node==\"$EFIPARTDEVICE\").uuid"|tr -d \")
|
||||
|
||||
# Incluyo valor de EFIGUID (por si partición EFI en distinto disco que la de sistema)
|
||||
INFO=$(echo $INFO| jq --arg aux $EFIGUID '. + {espguid: $aux}')
|
||||
# Incluyo valor de EFIUUID
|
||||
INFO=$(echo $INFO| jq --arg aux $EFIUUID '. + {espuuid: $aux}')
|
||||
fi
|
||||
|
||||
cat << EOT | jq . > $INFOFILE
|
||||
$INFO
|
||||
EOT
|
||||
}
|
||||
|
|
|
@ -131,6 +131,7 @@ MSG_HELP_ogCreateMbrImage="Genera una imagen del sector de arranque (MBR)."
|
|||
MSG_HELP_ogCreatePartitions="Define la estructura de particiones de un disco."
|
||||
MSG_HELP_ogCreatePartitionTable="Genera una tabla de particiones en caso de que no sea valida."
|
||||
MSG_HELP_ogCreateTorrent=""
|
||||
MSG_HELP_ogCopyEfiBootLoader="Copia el cargador de arranque desde la partición EFI a la de sistema."
|
||||
MSG_HELP_ogDeleteCache="Elimina la partición de caché local."
|
||||
MSG_HELP_ogDeleteFile="Borra un fichero de un espacio de almacenamiento."
|
||||
MSG_HELP_ogDeletePartitionTable="Elimina la tabla de particiones del disco"
|
||||
|
@ -196,7 +197,7 @@ MSG_HELP_ogGrubHidePartitions="Configura el grub del MBR para que oculte las par
|
|||
MSG_HELP_ogGrubInstallMbr="Instal·la el carregador d'arrencada GRUB al MBR del primer disc dur"
|
||||
MSG_HELP_ogGrubInstallPartition="Instal·la el carregador d'arrencada BURG al BootSector"
|
||||
MSG_HELP_ogGrubOgliveDefaultEntry="Configura la entrada de ogLive como la entrada por defecto de GRUB."
|
||||
MSG_HELP_ogGrubUEFIConf="Genera el fichero grub.cfg de la partición EFI."
|
||||
MSG_HELP_ogGrubUefiConf="Genera el fichero grub.cfg de la partición EFI."
|
||||
MSG_HELP_ogHelp="Muestra mensajes de ayudas para las funciones."
|
||||
MSG_HELP_ogHidePartition="Oculta una partición de Windows."
|
||||
MSG_HELP_ogIdToType="Devuelve el mnemónico asociado al identificador de tipo de partición."
|
||||
|
@ -249,9 +250,12 @@ MSG_HELP_ogReduceImage="Reduce el tamaño de la imagen"
|
|||
MSG_HELP_ogRestoreAclImage=""
|
||||
MSG_HELP_ogRestoreBootLoaderImage=""
|
||||
MSG_HELP_ogRestoreDiskImage="Restaura una imagen de un disco completo."
|
||||
MSG_HELP_ogRestoreEfiBootLoader="Copia el cargador de arranque de la partición de sistema a la partición EFI."
|
||||
MSG_HELP_ogRestoreImage="Restaura una imagen de sistema operativo."
|
||||
MSG_HELP_ogRestoreInfoImage="Restablece informacion del sistema: acl y enlaces simbolicos"
|
||||
MSG_HELP_ogRestoreMbrImage="Restaura una imagen del sector de arranque (MBR)."
|
||||
MSG_HELP_ogRestoreUuidPartitions="Restaura los uuid de las particiones y la tabla de particiones."
|
||||
MSG_HELP_ogSaveImageInfo="Crea un fichero con la información de la imagen."
|
||||
MSG_HELP_ogSetLinuxName=""
|
||||
MSG_HELP_ogSetPartitionActive="Establece el número de partición activa de un disco."
|
||||
MSG_HELP_ogSetPartitionId="Modifica el tipo de una partición física usando el mnemónico del tipo."
|
||||
|
@ -283,7 +287,7 @@ MSG_HELP_ogUnmountImage="Desmonta la imagen"
|
|||
MSG_HELP_ogUnsetDirtyBit=""
|
||||
MSG_HELP_ogUpdateCacheIsNecesary="Comprueba si es necesario actualizar una archivo en la cache local."
|
||||
MSG_HELP_ogUpdatePartitionTable="Actualiza informacion tabla particiones del disco"
|
||||
MSG_HELP_ogUUIDChange="Reemplaza el UUID de un sistema de ficheros."
|
||||
MSG_HELP_ogUuidChange="Reemplaza el UUID de un sistema de ficheros."
|
||||
MSG_HELP_ogWaitSyncImage=""
|
||||
MSG_HELP_ogWindowsBootParameters=""
|
||||
MSG_HELP_ogWindowsRegisterPartition=""
|
||||
|
|
|
@ -134,6 +134,7 @@ MSG_HELP_ogCreateMbrImage="Creates MBR image."
|
|||
MSG_HELP_ogCreatePartitions="Creates disk partition table."
|
||||
MSG_HELP_ogCreatePartitionTable="Creates partition table, if necessary."
|
||||
MSG_HELP_ogCreateTorrent=""
|
||||
MSG_HELP_ogCopyEfiBootLoader="Copy the boot loader from the EFI partition to system partition."
|
||||
MSG_HELP_ogDeleteCache="Deletes local cache partition."
|
||||
MSG_HELP_ogDeleteFile="Deletes file from storage."
|
||||
MSG_HELP_ogDeletePartitionTable="Deletes disk table partition"
|
||||
|
@ -199,7 +200,7 @@ MSG_HELP_ogGrubHidePartitions="Sets MBR grub to hide non starting Windows partit
|
|||
MSG_HELP_ogGrubInstallMbr="Installs GRUB boot loader on 1st HD MBR"
|
||||
MSG_HELP_ogGrubInstallPartition="Installs GRUB boot loader on BootSector"
|
||||
MSG_HELP_ogGrubOgliveDefaultEntry="Sets ogLive entry as default GRUB entry."
|
||||
MSG_HELP_ogGrubUEFIConf="Generates the grub.cfg file of the EFI partition."
|
||||
MSG_HELP_ogGrubUefiConf="Generates the grub.cfg file of the EFI partition."
|
||||
MSG_HELP_ogHelp="Shows functions help messages."
|
||||
MSG_HELP_ogHidePartition="Hides Windows partition."
|
||||
MSG_HELP_ogIdToType="Returns partition type identifier."
|
||||
|
@ -252,9 +253,12 @@ MSG_HELP_ogReduceImage="Reduces image size."
|
|||
MSG_HELP_ogRestoreAclImage="Restores Windows ACL (Inf. must be on /tmp)."
|
||||
MSG_HELP_ogRestoreBootLoaderImage=""
|
||||
MSG_HELP_ogRestoreDiskImage="Restores disk image."
|
||||
MSG_HELP_ogRestoreEfiBootLoader="Copy the boot loader from the system partition to the EFI partition."
|
||||
MSG_HELP_ogRestoreImage="Restore OS image."
|
||||
MSG_HELP_ogRestoreInfoImage="Restores system information: ACL and symbolic links"
|
||||
MSG_HELP_ogRestoreMbrImage="Restores boot sector image (MBR)."
|
||||
MSG_HELP_ogRestoreUuidPartitions="Restores UUID of partitions and partition table."
|
||||
MSG_HELP_ogSaveImageInfo="Creates the image information file."
|
||||
MSG_HELP_ogSetLinuxName=""
|
||||
MSG_HELP_ogSetPartitionActive="Sets active partition number of disk."
|
||||
MSG_HELP_ogSetPartitionId="Changes partition ID using mnemonic."
|
||||
|
@ -286,7 +290,7 @@ MSG_HELP_ogUnmount="Unmounts file system."
|
|||
MSG_HELP_ogUnsetDirtyBit=
|
||||
MSG_HELP_ogUpdateCacheIsNecesary="Checks if necessary file update in local cache."
|
||||
MSG_HELP_ogUpdatePartitionTable="Updates disk partition table info "
|
||||
MSG_HELP_ogUUIDChange="Replaces the filesystem UUID"
|
||||
MSG_HELP_ogUuidChange="Replaces the filesystem UUID"
|
||||
MSG_HELP_ogWaitSyncImage=""
|
||||
MSG_HELP_ogWindowsBootParameters=""
|
||||
MSG_HELP_ogWindowsRegisterPartition=""
|
||||
|
|
|
@ -131,6 +131,7 @@ MSG_HELP_ogCreateMbrImage="Genera una imagen del sector de arranque (MBR)."
|
|||
MSG_HELP_ogCreatePartitions="Define la estructura de particiones de un disco."
|
||||
MSG_HELP_ogCreatePartitionTable="Genera una tabla de particiones en caso de que no sea valida."
|
||||
MSG_HELP_ogCreateTorrent=""
|
||||
MSG_HELP_ogCopyEfiBootLoader="Copia el cargador de arranque desde la partición EFI a la de sistema."
|
||||
MSG_HELP_ogDeleteCache="Elimina la partición de caché local."
|
||||
MSG_HELP_ogDeleteFile="Borra un fichero de un espacio de almacenamiento."
|
||||
MSG_HELP_ogDeletePartitionTable="Elimina la tabla de particiones del disco"
|
||||
|
@ -196,7 +197,7 @@ MSG_HELP_ogGrubHidePartitions="Configura el grub del MBR para que oculte las par
|
|||
MSG_HELP_ogGrubInstallMbr="Instala el gestor de arranque GRUB en el MBR del primer disco duro"
|
||||
MSG_HELP_ogGrubInstallPartition="Instala el gestor de arranque GRUB en el BootSector"
|
||||
MSG_HELP_ogGrubOgliveDefaultEntry="Configura la entrada de ogLive como la entrada por defecto de GRUB."
|
||||
MSG_HELP_ogGrubUEFIConf="Genera el fichero grub.cfg de la partición EFI."
|
||||
MSG_HELP_ogGrubUefiConf="Genera el fichero grub.cfg de la partición EFI."
|
||||
MSG_HELP_ogHelp="Muestra mensajes de ayudas para las funciones."
|
||||
MSG_HELP_ogHidePartition="Oculta una partición de Windows."
|
||||
MSG_HELP_ogIdToType="Devuelve el mnemónico asociado al identificador de tipo de partición."
|
||||
|
@ -249,9 +250,12 @@ MSG_HELP_ogReduceImage="Reduce el tamaño de la imagen"
|
|||
MSG_HELP_ogRestoreAclImage="Restaura las ACL de Windows (La informacion debe estar copiada en /tmp)."
|
||||
MSG_HELP_ogRestoreBootLoaderImage=""
|
||||
MSG_HELP_ogRestoreDiskImage="Restaura una imagen de un disco completo."
|
||||
MSG_HELP_ogRestoreEfiBootLoader="Copia el cargador de arranque de la partición de sistema a la partición EFI."
|
||||
MSG_HELP_ogRestoreImage="Restaura una imagen de sistema operativo."
|
||||
MSG_HELP_ogRestoreInfoImage="Restablece información del sistema: ACL y enlaces simbolicos"
|
||||
MSG_HELP_ogRestoreMbrImage="Restaura una imagen del sector de arranque (MBR)."
|
||||
MSG_HELP_ogRestoreUuidPartitions="Restaura los uuid de las particiones y la tabla de particiones."
|
||||
MSG_HELP_ogSaveImageInfo="Crea un fichero con la información de la imagen."
|
||||
MSG_HELP_ogSetLinuxName=""
|
||||
MSG_HELP_ogSetPartitionActive="Establece el número de partición activa de un disco."
|
||||
MSG_HELP_ogSetPartitionId="Modifica el tipo de una partición física usando el mnemónico del tipo."
|
||||
|
@ -283,7 +287,7 @@ MSG_HELP_ogUnmountImage="Desmonta la imagen."
|
|||
MSG_HELP_ogUnsetDirtyBit=""
|
||||
MSG_HELP_ogUpdateCacheIsNecesary="Comprueba si es necesario actualizar una archivo en la cache local."
|
||||
MSG_HELP_ogUpdatePartitionTable="Actualiza información de la tabla de particiones del disco."
|
||||
MSG_HELP_ogUUIDChange="Reemplaza el UUID de un sistema de ficheros."
|
||||
MSG_HELP_ogUuidChange="Reemplaza el UUID de un sistema de ficheros."
|
||||
MSG_HELP_ogWaitSyncImage=""
|
||||
MSG_HELP_ogWindowsBootParameters=""
|
||||
MSG_HELP_ogWindowsRegisterPartition=""
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
#@brief Script para realizar la configuracion del sistema operativo restaurado.
|
||||
#@param 1 disco
|
||||
#@param 2 particion
|
||||
#@param 3 Repositorio (CACHE, REPO o dirección IP)
|
||||
#@param 4 Nombre canónico de la imagen (sin extensión)
|
||||
#@return
|
||||
#@TODO comprobar que el tipo de particion corresponde con el sistema de archivos.
|
||||
#@exception OG_ERR_FORMAT # 1 formato incorrecto.
|
||||
|
@ -32,12 +34,45 @@
|
|||
#@version 1.0.6b - llamadas opcionales para mejoras varias. Descomentar la instruccion para su activacion. ogConfigureFstab
|
||||
#@author Antonio J. Doblas Viso. Universidad de Malaga.
|
||||
#@date 2016-11-03
|
||||
#@version 1.1.1 - Equipos UEFI: cambia uuid de las particiones y restaura el cargador de arranque (Windows) (tickect #802)
|
||||
#@author Irina Gomez, ETSII Universidad de Sevilla
|
||||
#@date 2019-01-08
|
||||
#*/ ##
|
||||
|
||||
# Carga el configurador del engine y los parámetros de red.
|
||||
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
|
||||
[ -f $DEVICECFG ] && source $DEVICECFG
|
||||
|
||||
PROG="$(basename $0)"
|
||||
|
||||
# Para Windows en equipos EFI son necesarios cuatro parámetros
|
||||
OSTYPE="$(ogGetOsType $1 $2)"
|
||||
if [ ogIsEfiActive -a "$OSTYPE" == "Windows" ]; then
|
||||
if [ $# -lt 4 ]; then
|
||||
ogRaiseError session $OG_ERR_FORMAT
|
||||
ogHelp "$PROG:" \
|
||||
"$PROG ndisco nparticion [ REPO|CACHE|IPSERVER ] [imagename]" \
|
||||
"$PROG 1 1" \
|
||||
"$PROG 1 2 REPO Windows (UEFI)"
|
||||
exit $OG_ERR_FORMAT
|
||||
fi
|
||||
|
||||
REPO="${3^^}"
|
||||
REPO=${REPO:-"REPO"}
|
||||
IMGNAME="$4"
|
||||
# Cambio de repositorio
|
||||
if [ "$REPO" == "$(ogGetIpAddress)" -o "$REPO" == "CACHE" ]; then
|
||||
REPO="CACHE"
|
||||
else
|
||||
ogCheckIpAddress "$REPO"
|
||||
if [ $? == 0 -o "$REPO" == "REPO" ]; then
|
||||
# Si falla el cambio -> salimos con error repositorio no valido
|
||||
ogChangeRepo $REPO ${OGUNIT} || exit $(ogRaiseError $OG_ERR_NOTFOUND "$REPO $OGUNIT"; echo $?)
|
||||
REPO="REPO"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Si el sistema de archivos no esta extendido, ampliarlo al tamaño de su partición.
|
||||
PARTSIZE=$(ogGetPartitionSize $1 $2) || exit $?
|
||||
FSSIZE=$(ogGetFsSize $1 $2)
|
||||
|
@ -61,9 +96,13 @@ fi
|
|||
HOST="$(ogGetHostname)"
|
||||
|
||||
# Post-configuración personalizada para cada tipo de sistema operativo.
|
||||
OSTYPE="$(ogGetOsType $1 $2)"
|
||||
case "$OSTYPE" in
|
||||
Windows) # Postconfiguración de Windows.
|
||||
# Si es UEFI pongo el UUID de la partición del modelo
|
||||
if ogIsEfiActive; then
|
||||
echo ogRestoreUuidPartitions $REPO $IMGNAME $1 $2
|
||||
ogRestoreUuidPartitions $REPO $IMGNAME $1 $2
|
||||
fi
|
||||
# Cambiar nombre en sistemas Windows.
|
||||
HOST=${HOST:-"pc"}
|
||||
ogSetWindowsName $1 $2 "$HOST"
|
||||
|
@ -80,12 +119,17 @@ case "$OSTYPE" in
|
|||
ogInstallMiniSetup $1 $2 postconf.cmd
|
||||
ogUninstallWindowsClient $1 $2 postconf.cmd
|
||||
fi
|
||||
# Si es UEFI copio el cargador de arranque a la partición EFI
|
||||
if ogIsEfiActive; then
|
||||
echo ogRestoreEfiBootLoader $1 $2
|
||||
ogRestoreEfiBootLoader $1 $2
|
||||
fi
|
||||
;;
|
||||
Linux) # Postconfiguración de GNU/Linux.
|
||||
# Instalamos EFI Boot Loader
|
||||
if [ ogIsEfiActive ]; then
|
||||
# Cambio UUID del sistema de ficheros
|
||||
ogUUIDChange $1 $2
|
||||
ogUuidChange $1 $2
|
||||
ogConfigureFstab $1 $2
|
||||
fi
|
||||
## Instala (no configura) el codigo de arranque del Grub en la partición (no lo configura, se mantiene el original de la imagen)
|
||||
|
|
|
@ -35,6 +35,9 @@
|
|||
#@version 1.1.0 - Se muestra el espacio necesario para alojar la imagen y el disponible (ticket #771)
|
||||
#@author Irina Gomez - ETSII Universidad de Sevilla
|
||||
#@date 2017-03-28
|
||||
#@version 1.1.1 - #802 Equipos EFI: se guarda el cargador de arranque y UUID de las particiones
|
||||
#@author Irina Gomez - ETSII Universidad de Sevilla
|
||||
#@date 2019-01-08
|
||||
#*/ ##
|
||||
|
||||
# Test 1. crear una imagen en un REPO sin espacio libre.
|
||||
|
@ -123,10 +126,20 @@ ogEcho log session "[20] $MSG_HELP_ogCheckFs $PART $SIZEFS (KB)"
|
|||
ogUnmount $1 $2 2>/dev/null
|
||||
ogCheckFs $1 $2 || exit $(ogRaiseError $OG_ERR_PARTITION "ogCheckFs $1 $2" && echo $?)
|
||||
|
||||
# Si es UEFI copio el cargador de arranque a la partición
|
||||
OSTYPE="$(ogGetOsType $1 $2)"
|
||||
if [ ogIsEfiActive -a "$OSTYPE" == "Windows" ] ; then
|
||||
ogEcho log session "[25] $MSG_HELP_ogCopyEfiBootLoader"
|
||||
ogCopyEfiBootLoader $1 $2
|
||||
echo ogSaveImageInfo $1 $2 "$REPO" "$4"
|
||||
ogSaveImageInfo $1 $2 "$REPO" "$4"
|
||||
|
||||
fi
|
||||
|
||||
# Evaluar variable de engine.cfg para reducir el sistema de archivos en la creacion
|
||||
if [ "$IMGREDUCE" == "TRUE" ]
|
||||
then
|
||||
ogEcho log session "[30]: $MSG_HELP_ogReduceFs"
|
||||
ogEcho log session "[30] $MSG_HELP_ogReduceFs"
|
||||
ogReduceFs $1 $2 &>> $OGLOGCOMMAND || exit $(ogRaiseError $OG_ERR_REDUCEFS "$1 $2"; echo $?)
|
||||
NEWSIZEFS=$(ogGetFsSize $1 $2)
|
||||
TIMEAUX=$[SECONDS-TIME1]
|
||||
|
@ -135,7 +148,7 @@ fi
|
|||
|
||||
# Renombrar el fichero de imagen si ya existe.
|
||||
if [ -f "$IMGFILE" ]; then
|
||||
ogEcho log session "[10] $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" -> \"$IMGFILE.ant\"."
|
||||
ogEcho log session "[35] $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" -> \"$IMGFILE.ant\"."
|
||||
mv "$IMGFILE" "$IMGFILE.ant"
|
||||
mv "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
|
||||
mv "$IMGFILE.sum" "$IMGFILE.sum.ant" 2>/dev/null
|
||||
|
@ -170,4 +183,3 @@ TIME=$[SECONDS-TIME1]
|
|||
ogEcho log session "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s"
|
||||
ogEcho log session " FileSystem $PART with $NEWSIZEFS KB data created onto file-image as $4 and used $IMGSIZE KB across DFS $ogprotocol"
|
||||
ogEcho log session " Image-file $4 metada: $IMGOS"
|
||||
|
||||
|
|
|
@ -220,7 +220,7 @@ if which configureOsCustom &>/dev/null; then
|
|||
configureOsCustom "$DISK" "$PART" "$REPO" "$IMGNAME"
|
||||
else
|
||||
ogEcho log session "[90] $MSG_SCRIPTS_OS_CONFIGURE "
|
||||
configureOs "$DISK" "$PART"
|
||||
configureOs "$DISK" "$PART" "$REPO" "$IMGNAME"
|
||||
fi
|
||||
|
||||
TIME=$[SECONDS-TIME1]
|
||||
|
|
Loading…
Reference in New Issue