diff options
author | ramon <ramongomez@us.es> | 2009-10-23 11:54:12 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2009-10-23 11:54:12 +0000 |
commit | 3458879bfb56041bf1ac7ae0b2b058ef97407640 (patch) | |
tree | d0726de381c66d0eefc0c1c59c23244f4f11ab8f /client | |
parent | 5a6001315c05c2d5b7388a13d5133fc444b233ce (diff) |
Correcciones en varias funciones; función en pruebas ogGetIpAddress.
git-svn-id: https://opengnsys.es/svn/trunk@406 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client')
-rwxr-xr-x | client/engine/Disk.lib | 21 | ||||
-rwxr-xr-x | client/engine/FileSystem.lib | 75 | ||||
-rwxr-xr-x | client/engine/Image.lib | 33 | ||||
-rwxr-xr-x | client/engine/System.lib | 9 | ||||
-rwxr-xr-x | client/nfsexport/scripts/boot.sh | 11 |
5 files changed, 88 insertions, 61 deletions
diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib index 91ca9caa..d9e7f83d 100755 --- a/client/engine/Disk.lib +++ b/client/engine/Disk.lib @@ -39,8 +39,9 @@ fi #/// Error si no se reciben menos de 2 parámetros. [ $# -gt 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? -#/// Sustituye nº de disco por su dispositivo. +#/// Desmontar todos los sistemas de archivos del disco. DISK="$(ogDiskToDev $1)" || return $? +ogUnmountAll $1 shift # Nº total de sectores, para evitar desbordamiento @@ -73,14 +74,20 @@ while [ $# -gt 0 ]; do EXTSTART=$START EXTSIZE=$SIZE ;; - NTFS|EXFAT) ID=7 ;; - HNTFS) ID=17 ;; - FAT32) ID=b ;; - HFAT32) ID=1b ;; EXT[234]|REISERFS|REISER4|XFS|JFS) ID=83 ;; LINUX-SWAP) ID=82 ;; + LINUX-LVM) ID=8e ;; + LINUX-RAID) ID=fd ;; SOLARIS) ID=bf ;; + NTFS|EXFAT) ID=7 ;; + HNTFS) ID=17 ;; + FAT32) ID=b ;; + HFAT32) ID=1b ;; + FAT16) ID=6 ;; + HFAT16) ID=16 ;; + FAT12) ID=1 ;; + HFAT12) ID=11 ;; CACHE) ID=ca ;; *) ogRaiseError $OG_ERR_PARTITION "$TYPE" return $? ;; @@ -109,12 +116,10 @@ if [ $PART = 5 -a -n "$EXTSTART" ]; then echo "${DISK}5 : start=$EXTSTART, size=$EXTSIZE, Id=0" >>$tmpsfdisk fi -# Desmontar todos los sistemas de archivos del disco. -ogUnmountAll $1 # Si la tabla de particiones no es valida, volver a generarla. [ $(parted -s $DISK print >/dev/null) ] || fdisk $DISK <<< "w" #/// Definir particiones y notificar al kernel. -sfdisk -f $DISK < $tmpsfdisk 2>/dev/null +sfdisk -f $DISK < $tmpsfdisk 2>/dev/null && sfdisk -R $DISK rm -f $tmpsfdisk } diff --git a/client/engine/FileSystem.lib b/client/engine/FileSystem.lib index 69cd496a..ef1038f9 100755 --- a/client/engine/FileSystem.lib +++ b/client/engine/FileSystem.lib @@ -27,8 +27,8 @@ #*/ function ogCheckFs () { -# Variables locales -local PART TYPE +# Variables locales. +local PART TYPE PROG PARAMS #/// Error si no se reciben 2 parámetros. [ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? @@ -74,7 +74,7 @@ return $ERRCODE # ogExtendFs int_ndisk int_npartition #@brief Extiende un sistema de archivos al tamaño de su partición. #@arg \c int_ndisk nº de orden del disco -#@arg \c npartition nº de orden de la partición +#@arg \c int_npartition nº de orden de la partición #@return (nada) #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. @@ -148,7 +148,7 @@ ogFormatFs "$@" #@brief Formatea un sistema de ficheros según el tipo de su partición. #@arg \c int_ndisk nº de orden del disco #@arg \c int_npartition nº de orden de la partición -#@arg \c type_fstype mnemónico de sistema de ficheros a formatear +#@arg \c type_fstype mnemónico de sistema de ficheros a formatear #@arg \c str_label etiqueta de volumen (opcional) #@return (por determinar) #@exception OG_ERR_FORMAT Formato incorrecto. @@ -190,11 +190,11 @@ case "$3" in REISER4) ID=83; PROG="mkfs.reiser4";; XFS) ID=83; PROG="mkfs.xfs"; PARAMS="-f" ;; JFS) ID=83; PROG="mkfs.jfs"; PARAMS="<<<\"y\"";; - NTFS) ID=7; PROG="mkntfs"; PARAMS="-f" ;; + NTFS) ID=7; PROG="mkntfs"; PARAMS="-f" ;; HNTFS) ID=17; PROG="mkntfs"; PARAMS="-f" ;; - FAT32) ID=b; PROG="mkfs.vfat" ;; + FAT32) ID=b; PROG="mkfs.vfat" ;; HFAT32) ID=1b; PROG="mkfs.vfat" ;; - FAT16) ID=6; PROG="mkfs.msdos" ;; + FAT16) ID=6; PROG="mkfs.msdos" ;; HFAT16) ID=16; PROG="mkfs.msdos" ;; *) LABEL="$3" ;; esac @@ -254,10 +254,10 @@ return $ERRCODE #/** # ogGetFsType int_ndisk int_npartition #@brief Devuelve el mnemonico con el tipo de sistema de archivos. -#@arg \c ndisk nº de orden del disco -#@arg \c npartition nº de orden de la partición +#@arg \c int_ndisk nº de orden del disco +#@arg \c int_npartition nº de orden de la partición #@return Mnemonico -#@note Mnemonico: { EXT2, EXT3, EXT4, REISERFS, LINUX-SWAP, LINUX-LVM, LINUX-RAID, FAT16, HFAT16, FAT32, HFAT32, NTFS, HNTFS, WIN-DYNAMIC, CACHE, EMPTY, EXTENDED, UNKNOWN } +#@note Mnemonico: { EXT2, EXT3, EXT4, REISERFS, XFS, JFS, LINUX-SWAP, LINUX-LVM, LINUX-RAID, SOLARIS, FAT16, HFAT16, FAT32, HFAT32, NTFS, HNTFS, WIN-DYNAMIC, CACHE, EMPTY, EXTENDED, UNKNOWN } #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. #@version 0.9 - Primera adaptación para OpenGNSys. @@ -267,7 +267,7 @@ return $ERRCODE function ogGetFsType () { # Variables locales. -local DISK ID TYPE +local ID TYPE #/// Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -279,8 +279,7 @@ fi [ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? #/// Detectar id. de tipo de partición y codificar al mnemonico. -DISK=$(ogDiskToDev $1) || return $? -ID=$(ogGetPartitionId $1 $2) || return $? +ID=$(ogGetPartitionId "$1" "$2") || return $? case "$ID" in 0) TYPE="EMPTY" ;; 1) TYPE="FAT12" ;; @@ -296,8 +295,8 @@ case "$ID" in 42) TYPE="WIN-DYNAMIC" ;; 82) TYPE="LINUX-SWAP" ;; 83) TYPE="$(parted -s $DISK print | awk -v var=$2 '{if ($1==var) {print toupper($6)}}')" - TYPE=${TYPE:-"EXT3"} - ;; + TYPE=${TYPE:-"EXT3"} + ;; 8e) TYPE="LINUX-LVM" ;; a7) TYPE="CACHE" ;; # (compatibilidad con Brutalix) bf) TYPE="SOLARIS" ;; @@ -317,6 +316,7 @@ echo $TYPE #@return Punto de montaje #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. +#@note Requisitos: \c mount* \c awk #@version 0.9 - Primera versión para OpenGNSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009-10-15 @@ -410,13 +410,13 @@ ogLockPartition "$@" #/** # ogLockPartition int_ndisk int_npartition #@brief Genera un fichero de bloqueo para una partición en uso exlusivo. -#@arg \c ndisk nº de orden del disco -#@arg \c npartition nº de orden de la partición +#@arg \c int_ndisk nº de orden del disco +#@arg \c int_npartition nº de orden de la partición #@return (nada) #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. #@note El fichero de bloqueo se localiza en \c /var/lock/part, siendo \c part el dispositivo de la partición, sustituyendo el carácter "/" por "-". -#@version 0.1 - En pruebas para adaptarla a OpenGNSys. +#@version 0.9 - Primera versión para OpenGNSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009-09-03 #*/ @@ -445,7 +445,7 @@ touch $LOCKFILE #/** # ogMount int_ndisk int_npartition -#@see ogMountFs ogMountCdrom +#@see ogMountFs ogMountCache ogMountCdrom #*/ function ogMount () { case "$*" in @@ -461,8 +461,8 @@ esac #/** # ogMountFs int_ndisk int_npartition #@brief Monta un sistema de archivos. -#@arg \c ndisk nº de orden del disco -#@arg \c npartition nº de orden de la partición +#@arg \c int_ndisk nº de orden del disco +#@arg \c int_npartition nº de orden de la partición #@return Punto de montaje #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. @@ -514,8 +514,8 @@ if [ -z "$MNTDIR" ]; then *) #/// Error, si la partición no es montable. rmdir $MNTDIR ogRaiseError $OG_ERR_PARTITION "$1, $2, $TYPE" - return $OG_ERR_PARTITION - ;; + return $OG_ERR_PARTITION + ;; esac $MOUNT $ARGS $PART $MNTDIR || $MOUNT $ARGS $PART $MNTDIR -o force,remove_hiberfile || ogRaiseError $OG_ERR_PARTITION "$1, $2, $TYPE" || return $? # linea temporal durante desarrollo para poder usar el cliente completo nfs y testeas nuevas herramientas. @@ -546,15 +546,16 @@ echo $MNTDIR #/** # ogReduceFs int_ndisk int_npartition #@brief Reduce el tamaño del sistema de archivos, sin tener en cuenta el espacio libre. -#@arg \c ndisk nº de orden del disco -#@arg \c npartition nº de orden de la partición +#@arg \c int_ndisk nº de orden del disco +#@arg \c int_npartition nº de orden de la partición #@return tamañoKB #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. #@exception OG_ERR_PARTITION Partición desconocida o no accesible. -#@warning El sistema de archivos se amplía al mínimo + 1 KB. -#@note Requisitos: *resize* -#@version 0.1 - En pruebas para adaptarla a OpenGNSys. +#@warning En Windows, se borran los ficheros pagefile.sys e hiberfile.sys +#@warning El sistema de archivos se amplía al mínimo + 1 KB. +#@note Requisitos: *resize* +#@version 0.9 - Primera versión para OpenGNSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009-09-23 #*/ @@ -578,7 +579,7 @@ PART="$(ogDiskToDev $1 $2)" || return $? #/// Redimensionar según el tipo de particion. case "$(ogGetFsType $1 $2)" in EXT[234]) - ogUnmount $1 $2 >/dev/null + ogUnmount $1 $2 2>/dev/null # Ext2/3/4: Tamaño de los bloques del sistema de archivos BLKS=$(tune2fs -l $PART | awk '/Block size/ {print int($3/512)}') # Traduce el num. en sectores de 512B a tamano en MB. @@ -589,8 +590,9 @@ case "$(ogGetFsType $1 $2)" in REISERFS) # Usar "resize_reiserfs" ;; NTFS|HNTFS) - rm -f $(ogGetPath $1 $2 pagefile.sys) - ogUnmount $1 $2 >/dev/null + ogDeleteFile $1 $2 pagefile.sys + ogDeleteFile $1 $2 hiberfile.sys + ogUnmount $1 $2 2>/dev/null # NTFS: Obtiene tamaño mínimo en MB. SIZE=$(ntfsresize -fi $PART | awk '/resize at/ {print $8+1000}') ntfsresize -fns "${SIZE}M" $PART >/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $? @@ -615,13 +617,13 @@ ogUnlockPartition "$@" #/** # ogUnlockPartition int_ndisk int_npartition #@brief Elimina el fichero de bloqueo para una particion. -#@arg \c ndisk nº de orden del disco -#@arg \c npartition nº de orden de la partición +#@arg \c int_ndisk nº de orden del disco +#@arg \c int_npartition nº de orden de la partición #@return (nada) #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. #@note El fichero de bloqueo se localiza en \c /var/lock/part, siendo \c part el dispositivo de la partición, sustituyendo el carácter "/" por "-". -#@version 0.1 - En pruebas para adaptarla a OpenGNSys. +#@version 0.9 - Primera versión para OpenGNSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009-09-03 #*/ @@ -648,7 +650,6 @@ rm -f $LOCKFILE } - #/** # ogUnmount int_ndisk int_npartition #@see ogUnmountFs @@ -660,8 +661,8 @@ ogUnmountFs "$@" #/** # ogUnmountFs int_ndisk int_npartition #@brief Desmonta un sistema de archivos. -#@arg \c ndisk nº de orden del disco -#@arg \c npartition nº de orden de la partición +#@arg \c int_ndisk nº de orden del disco +#@arg \c int_npartition nº de orden de la partición #@return Nada #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. diff --git a/client/engine/Image.lib b/client/engine/Image.lib index 1f3fb330..ca401e67 100755 --- a/client/engine/Image.lib +++ b/client/engine/Image.lib @@ -12,10 +12,10 @@ #/** # ogCreateImage int_ndisk int_npartition str_repo path_image #@brief Crea una imagen a partir de una partición. -#@arg \c ndisk nº de orden del disco -#@arg \c npartition nº de orden de la partición -#@arg \c str_repo repositorio de imágenes (remoto o caché local) -#@arg \c path_image camino completo de la imagen (sin extensión) +#@arg \c int_ndisk nº de orden del disco +#@arg \c int_npartition nº de orden de la partición +#@arg \c str_repo repositorio de imágenes (remoto o caché local) +#@arg \c path_image camino de la imagen (sin extensión) #@return (nada, por determinar) #@note repo = { REPO, CACHE } #@exception OG_ERR_FORMAT formato incorrecto. @@ -24,7 +24,7 @@ #@exception OG_ERR_LOCKED particion bloqueada por otra operación. #@exception OG_ERR_IMAGE error al crear la imagen del sistema. #@warning En pruebas iniciales -#@todo Comprobaciones, control de errores, definir parámetros, caché/repositorio, etc. +#@todo Comprobaciones, control de errores, definir parámetros, etc. #@version 0.9 - Versión en pruebas para OpenGNSys #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009/10/07 @@ -134,8 +134,8 @@ partimage -B gui=no imginfo "$IMGFILE" 2>&1 | \ #/** # ogRestoreImage str_repo path_image int_ndisk int_npartition #@brief Restaura una imagen de sistema de archivos en una partición. -#@arg \c str_repo repositorio de imágenes o caché local -#@arg \c path_image camino de la imagen +#@arg \c str_repo repositorio de imágenes o caché local +#@arg \c path_image camino de la imagen #@arg \c int_ndisk nº de orden del disco #@arg \c int_npartition nº de orden de la partición #@return (por determinar) @@ -152,7 +152,7 @@ partimage -B gui=no imginfo "$IMGFILE" 2>&1 | \ function ogRestoreImage () { # Variables locales -local PART IMGFILE +local PART PARTSIZE IMGFILE IMGSIZE #/// Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -160,14 +160,19 @@ if [ "$*" == "help" ]; then "$FUNCNAME aula1 winxp 1 1" return fi -#/// Error si no se reciben menos de 2 parámetros. +#/// Error si no se reciben 4 parámetros. [ $# -lt 4 ] && ogRaiseError $OG_ERR_FORMAT && return $? - -PART="$(ogDiskToDev $3 $4)" || return $? +# Procesar parámetros. +PART="$(ogDiskToDev "$3" "$4")" || return $? IMGFILE=$(ogGetPath "$1" "$2") || return $? [ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? -# Error si la imagen no cabe en la particion. -[ $(ogGetImageSize "$1" "$2") -gt $(ogGetPartitionSize $3 $4) ] && ogRaiseError $OG_ERR_PARTITION && return $? +#/// Error si la imagen no cabe en la particion. +IMGSIZE=$(ogGetImageSize "$1" "$2") +PARTSIZE=$(ogGetPartitionSize $3 $4) +if [ $IMGSIZE -gt $PARTSIZE ]; then + ogRaiseError $OG_ERR_PARTITION "$IMGSIZE > $PARTSIZE" + return $? +fi #/// Comprobar el bloqueo de la partición, desmontarla y bloquearla. if ogIsLocked $3 $4; then @@ -182,7 +187,7 @@ trap "ogUnlock $3 $4" 1 2 3 6 9 #/// Atención: no se comprueba incongruencia entre partición e imagen. TYPE="$(ogGetFsType $3 $4)" case "$TYPE" in - EXT[234]|REISERFS) + EXT[234]|REISERFS|XFS|JFS) partimage -M -f3 -o -d -V0 -B gui=no -c -z1 --volume=0 restore $PART "$IMGFILE" ;; NTFS|HNTFS) diff --git a/client/engine/System.lib b/client/engine/System.lib index b4cd0e42..bc8e02d8 100755 --- a/client/engine/System.lib +++ b/client/engine/System.lib @@ -62,6 +62,15 @@ HOST="$HOSTNAME" echo $HOST } +# ogGetIpAddress +function ogGetIpAddress () { +local IP +IP=$(awk '/fixed-address/ {gsub(/;/,""); host=$2} + END {print host} + ' /var/lib/dhcp3/dhclient.leases) +echo $IP; +} + #/** # ogRaiseError errcode ["errmessage" ...] diff --git a/client/nfsexport/scripts/boot.sh b/client/nfsexport/scripts/boot.sh index 2a97d8f2..28f5ea02 100755 --- a/client/nfsexport/scripts/boot.sh +++ b/client/nfsexport/scripts/boot.sh @@ -9,10 +9,17 @@ if [ $# -ne 2 ]; then fi # Procesos previos. +PART=$(ogDiskToDev $1 $2) | exit $? # Arrancar. ogEcho info "$PROG: Desmontar todos los sistemas operativos del disco." -ogUnmountAll "$1" | exit $? +ogUnmountAll $1 | exit $? +if [ "$(ogGetOsType $1 $2)" = "Windows" ]; then + ogEcho info "$PROG: Activar partición de Windows $PART." + ogSetPartitionActive $1 $2 + ogEcho info "$PROG: Comprobar sistema de archivos." + ogCheckFs $1 $2 +fi ogEcho info "$PROG: Arrancar sistema operativo." -ogBoot "$1" "$2" +ogBoot $1 $2 |