summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2009-10-23 11:54:12 +0000
committerramon <ramongomez@us.es>2009-10-23 11:54:12 +0000
commit3458879bfb56041bf1ac7ae0b2b058ef97407640 (patch)
treed0726de381c66d0eefc0c1c59c23244f4f11ab8f /client
parent5a6001315c05c2d5b7388a13d5133fc444b233ce (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-xclient/engine/Disk.lib21
-rwxr-xr-xclient/engine/FileSystem.lib75
-rwxr-xr-xclient/engine/Image.lib33
-rwxr-xr-xclient/engine/System.lib9
-rwxr-xr-xclient/nfsexport/scripts/boot.sh11
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