ENUNCIADO DEL PROBLEMA
GESTIÓN DE SERVIDORES DE AULA
Para
la realización de este script el alumnado debe tener en cuenta las siguientes
cuestiones:
- Se deben utilizar funciones.
- Todas las peticiones de introducción de datos por teclado deben ser filtradas correctamente.
- Los comentarios a lo largo del código fuente serán valorados positivamente.
- El orden del código fuente, tabulaciones y estructura del programa se tendrán muy en cuenta.
- Se prestará especial atención al funcionamiento y sintaxis de las estructuras condicionales, condicionales múltiples, bucles, etc.
Una
vez descritos los requisitos generales que el script debe cumplir, se detalla a
continuación el enunciado a resolver.
Función para crear un archivo “log”
(4 puntos):
Realiza
una función que cree en la carpeta del programa una carpeta llamada “log”. Se
ha de comprobar si la carpeta ya existía. Si es así, no se borrará. Si no
existía, se creará y se comprobará su correcta creación. Seguidamente, se
comprobará si existía un archivo en dicha carpeta llamado “log.txt”. Si es así,
no se modificará nada y si no existía, se creará conteniendo en su interior la
siguiente cabecera:
REGISTRO DE
OPERACIONES REALIZADAS
Programa:
<nombre del script>
Alumno/a:
<nombre del alumno/a>
Curso:
<curso>
2011/2012
Función para escribir en archivo
“log” (4 puntos):
Realiza
una función genérica para registrar en el archivo “log” del programa, todas
aquellas acciones que el enunciado indique que han de anotarse. Para ello, se
ha de tener en cuenta la fecha y hora
en la que se realiza la anotación, así como la operación realizada. Esta función debe recibir como parámetro la
cadena de texto que se quiere escribir en el archivo “log” del programa.
Nota:
Si la función se denomina registrar_en_log y queremos escribir en
el archivo el mensaje “El usuario
Antonio ha sido creado con éxito”, dentro de la función debemos utilizar $1 que representará el parámetro que
recibirá la cadena de caracteres. Cuando vayamos a realizar la llamada a la
función en nuestro programa principal o desde otra función, tendremos que
escribir:
registrar_en_log
“El usuario Antonio ha sido creado con éxito”.
De
este modo, podremos utilizar esta función genérica desde cualquier parte de
nuestro script para insertar las anotaciones que sean necesarias.
Función para instalación de
aplicaciones (3 puntos):
Realiza
una función genérica que sirva para realizar la instalación de aplicaciones. Se
debe solicitar al usuario que introduzca por teclado el nombre de la aplicación
a instalar. Antes de intentar instalarla, el programa debe comprobar si esta
aplicación ya está instalada en el sistema. Si lo está, se comunicará al
usuario. Si no lo está, se lanzará una orden de instalación y se comprobará el
resultado de ésta informando al usuario. Para cada acción realizada se debe
llevar a cabo una anotación en el
archivo “log” del programa.
Función para desinstalación de
aplicaciones (3 puntos):
Realiza
una función genérica que sirva para realizar la desinstalación de aplicaciones.
Se debe solicitar al usuario que introduzca por teclado el nombre de la
aplicación a desinstalar. Antes de intentar desinstalarla, el programa debe
comprobar si esta aplicación ya está instalada en el sistema. Si lo está, se
comunicará al usuario y se lanzará una orden de desinstalación, se comprobará
el resultado de ésta informando al usuario. Si la aplicación no está instalada,
se informará al usuario. . Para cada acción realizada se debe llevar a cabo una
anotación en el archivo “log” del
programa.
Función para el chequeo del estado de
todos los servicios (2 puntos):
Realiza
una función que muestre por pantalla el estado actual de todos los servicios
del sistema.
Función para la activación,
desactivación o reinicio de servicios (2 puntos):
Realiza
una función que solicite al usuario el nombre de un servicio. El script debe
comprobar el estado del servicio y mostrarlo por pantalla. Una vez hecho esto,
se ha de preguntar al usuario si quiere iniciarlo, pararlo o reiniciarlo. En
función de la respuesta, se llevará a cabo dicha acción. Para cada acción que
se realice, se debe llevar a cabo una anotación
en el archivo “log” del programa.
Función para la preparación del aula
(6 puntos):
Realiza
una función genérica que sirva para la preparación de un aula. Esta función
deberá funcionar como un “asistente” llevando a cabo su trabajo a través de
varias preguntas:
- Primer paso: Se solicitará al usuario que introduzca el nombre del aula, una vez introducido se comprobará si el aula existe como grupo dentro del sistema. Si no está creado dicho grupo, se creará.
- Segundo paso: Se creará en la carpeta del script, una carpeta con el mismo nombre que la del aula.
- Tercer paso: Se solicitará al usuario que introduzca el nombre de usuario del profesor. Se ha de comprobar si este usuario existe en el sistema, si no se creará y se integrará en el grupo del aula. Se establecerá su home en el interior de la carpeta correspondiente al aula.
- Cuarto paso: Se solicitará al usuario que introduzca el número de usuarios que forman el aula. Se dará de alta a tantos usuarios como se haya indicado, integrando a cada uno de ellos en el grupo del aula. Se establecerá su home en el interior de la carpeta correspondiente al aula. Para cada usuario a crear, se deben realizar las comprobaciones previas necesarias.
Para
cada uno de los pasos, se ha de realizar una anotación en el archivo “log” del programa. Estas anotaciones deben
realizarse tanto si el aula, profesor o usuarios son creados
satisfactoriamente, como si no es así.
Función para mostrar el estado de
particiones del servidor (2 puntos):
Realiza
una función que muestre por pantalla el estado actual de todas las particiones
del sistema, su tamaño, porcentaje de utilización, etc.
Programa principal (2 puntos):
Construye
el programa principal que debe crear en primer lugar el archivo “log” del
programa. Una vez realizada esta acción, se mostrará por pantalla el siguiente
menú de opciones:
1)
Instalar
aplicaciones
2)
Desinstalar
aplicaciones
3)
Visualizar estado
de servicios
4)
Gestionar un
servicio
5)
Preparación del
aula
6)
Visualizar estado
almacenamiento
7)
Visualizar log de
operaciones
8)
Salir
Tanto
el menú, como las distintas opciones deben gestionarse a través de las
estructuras de control adecuadas.
CÓDIGO FUENTE DE UNA POSIBLE SOLUCIÓN
#!/bin/bash
# Función para crear un archivo log
function crea_log()
{
if [ -d /home/$USERNAME/finalsor/log ]
then
echo "La carpeta que alojará el log del programa ya existe, no se creará"
else
echo "Creando carpeta para alojar log"
mkdir /home/$USERNAME/finalsor/log
if [ $? -ne 0 ]
then
echo "Error al crear la carpeta para alojar log"
else
echo "Carpeta para alojar log creada con éxito"
fi
fi
echo "Comprobando la existencia de un archivo log..."
if [ -f /home/$USERNAME/finalsor/log/log.txt ]
then
echo "Ya existe un archivo log, no se creará"
else
echo "No existe un archivo log, procediendo a su creación..."
touch /home/$USERNAME/finalsor/log/log.txt
if [ -f /home/$USERNAME/finalsor/log/log.txt ]
then
echo "Archivo log creado con éxito"
echo "Insertando cabecera..."
echo "###################################" >> /home/$USERNAME/finalsor/log/log.txt
echo "REGISTRO DE OPERACIONES REALIZADAS" >> /home/$USERNAME/finalsor/log/log.txt
echo "Programa: finalsor.sh" >> /home/$USERNAME/finalsor/log/log.txt
echo "Alumno/a: profesor" >> /home/$USERNAME/finalsor/log/log.txt
echo "Curso: 2ºSMR" >> /home/$USERNAME/finalsor/log/log.txt
echo "2011/2012" >> /home/$USERNAME/finalsor/log/log.txt
echo "###################################" >> /home/$USERNAME/finalsor/log/log.txt
else
echo "Error al crear el archivo log"
fi
fi
}
function escribe_en_log()
{
#Función genérica que escribirá en el archivo log el mensaje que le pasemos como parámetro
hora=`date +%T`
fecha=`date +%d/%m/%Y`
#echo "El mensaje a registrar en el log es: " $1
#echo "Insertando mensaje en log..."
echo $fecha" "$hora".............."$1 >> /home/$USERNAME/finalsor/log/log.txt
if [ $? -eq 0 ]
then
echo "Inserción en log realizada con éxito"
else
echo "Error al insertar en el log"
fi
}
function instala()
{
# Función para instalación de aplicaciones
echo "INSTALACIÓN DE APLICACIONES"
while [ -z $programa ]
do
read -p "Introduce el nombre de la aplicación a instalar: " programa
done
which $programa > /dev/null
if [ $? -eq 0 ]
then
echo "La aplicación: $programa ya está instalada en su sistema"
else
echo "La aplicación: $programa no se encuentra instalada, procediendo..."
sudo apt-get install $programa
if [ $? -eq 0 ]
then
echo "Instalación satisfactoria"
escribe_en_log "Aplicación: $programa - Éxito en la instalación"
else
echo "Error al instalar"
escribe_en_log "Aplicación: $programa - Error durante la instalación"
fi
fi
}
function desinstala()
{
echo "DESINSTALACIÓN DE APLICACIONES"
while [ -z $programades ]
do
read -p "Introduce el nombre de la aplicación a desinstalar: " programades
done
which $programades > /dev/null
if [ $? -eq 0 ]
then
echo "La aplicación: $programades se encuentra instalada en su sistema, procediendo a su desinstalación..."
sudo apt-get remove $programades --purge
if [ $? -eq 0 ]
then
echo "Desinstalación satisfactoria"
escribe_en_log "Aplicación: $programades - Éxito al desinstalar"
else
echo "Error al desinstalar"
escribe_en_log "Aplicación: $programades - Error durante la desinstalación"
fi
else
echo "La aplicación: $programades no se encuentra instalada, no se puede desinstalar"
fi
}
function estado_servicios()
{
clear
echo "VISUALIZACIÓN DE ESTADO DE SERVICIOS DEL SERVIDOR"
service --status-all | more
read -p "Pulse una tecla para continuar"
}
function gestiona_servicio()
{
clear
echo "GESTIÓN DE SERVICIO"
servicio=""
while [ -z $servicio ]
do
read -p "Introduzca el nombre del servicio a gestionar: " servicio
done
echo "El servicio introducido es: " $servicio
which $servicio > /dev/null 2>/dev/null
if [ $? -eq 0 ]
then
echo "Estado del servicio $servicio: "
service $servicio status
echo "Pulse 1 para detener, 2 para iniciar, 3 para reiniciar"
operacion=""
while [ -z $operacion ]
do
read -p "operación: " operacion
done
case $operacion in
1) echo "Deteniendo servicio: $servicio";
sudo service $servicio stop;
escribe_en_log "Servicio: $servicio detenido";
read -p "Pulse una tecla para continuar";;
2) echo "Iniciando servicio: $servicio";
sudo service $servicio start;
escribe_en_log "Servicio: $servicio iniciado";
read -p "Pulse una tecla para continuar";;
3) echo "Reiniciando servicio: $servicio";
sudo service $servicio restart;
escribe_en_log "Servicio: $servicio reiniciado";
read -p "Pulse una tecla para continuar";;
*) echo "Opción no válida";
read -p "Pulse una tecla para continuar";;
esac
else
echo "El servicio: $servicio, no se encuentra disponible"
read -p "Pulse una tecla para continuar"
fi
}
function prepara_aula()
{
clear
echo "PREPARACIÓN DE AULA"
aula=""
while [ -z $aula ]
do
read -p "Introduzca el nombre del aula: " aula
done
cat /etc/group | grep -w $aula > /dev/null
if [ $? -eq 0 ]
then
echo "El grupo: $aula existe en el sistema, no se creará"
else
echo "El grupo: $aula no existe en el sistema, creando..."
sudo addgroup $aula
if [ $? -eq 0 ]
then
echo "Grupo: $aula creado con éxito"
escribe_en_log "Grupo: $aula - Éxito al crear"
else
echo "Grupo: $aula no creado"
escribe_en_log "Grupo: $aula - Error al crear"
fi
fi
if [ -d /home/$USERNAME/finalsor/$aula ]
then
echo "La carpeta del aula: $aula existe en el sistema"
else
echo "Creando ahora la carpeta del aula: $aula..."
mkdir /home/$USERNAME/finalsor/$aula
if [ $? -eq 0 ]
then
echo "Éxito al crear la carpeta del aula: $aula"
escribe_en_log "Carpeta:$aula - Éxito al crear"
else
echo "Error al crear la carpeta del aula:$aula"
escribe_en_log "Carpeta:$aula - Error al crear"
fi
fi
echo "PROFESOR DEL AULA"
echo "Creando el usuario del profesor del aula: $aula"
profesor=""
while [ -z $profesor ]
do
read -p "Introduzca el nombre de usuario del profesor: " profesor
done
cat /etc/passwd | grep -w $profesor > /dev/null
if [ $? -eq 0 ]
then
echo "El usuario: $profesor del profesor ya existe en el sistema, no se creará"
else
echo "El usuario $profesor no existe, creando..."
sudo adduser --home /home/$USERNAME/finalsor/$aula/$profesor $profesor
if [ $? -eq 0 ]
then
echo "Usuario: $profesor creado con éxito"
escribe_en_log "Usuario: $profesor - Éxito al crear"
else
echo "Usuario: $profesor creado sin éxito"
escribe_en_log "Usuario: $profesor - Error al crear"
fi
fi
echo "ALUMNOS DEL AULA"
alumnos=""
while [ -z $alumnos ]
do
read -p "Introduzca el número de alumnos del aula $aula: " alumnos
done
echo "Ha introducido: $alumnos"
echo "Comienza la creación automática de los $alumnos alumnos..."
for ((contador=1;contador<=$alumnos;contador++))
do
nombre_alumno=$aula"_alumno"$contador
cat /etc/passwd | grep -w $nombre_alumno > /dev/null
if [ $? -eq 0 ]
then
echo "El usuario: $nombre_alumno ya existe en el sistema, no se creará"
else
echo "El usuario $nombre_alumno no existe, creando..."
sudo adduser --home /home/$USERNAME/finalsor/$aula/$nombre_alumno $nombre_alumno
if [ $? -eq 0 ]
then
echo "Usuario: $nombre_alumno creado con éxito"
escribe_en_log "Usuario: $nombre_alumno - Éxito al crear"
else
echo "Usuario: $nombre_alumno creado sin éxito"
escribe_en_log "Usuario: $nombre_alumno - Error al crear"
fi
fi
done
}
#........................................................................................
# PROGRAMA PRINCIPAL
#........................................................................................
crea_log
opcion=9
while [ $opcion -ne 8 ]
do
clear
echo "******************************************"
echo "* GESTIÓN DE SERVIDORES DE AULA *"
echo "******************************************"
echo "* 1)Instalar aplicaciones *"
echo "* 2)Desinstalar aplicaciones *"
echo "* 3)Visualizar estado de servicios *"
echo "* 4)Gestionar servicio *"
echo "* 5)Preparación del aula *"
echo "* 6)Visualizar estado almacenamiento *"
echo "* 7)Visualizar log de operaciones *"
echo "* 8)Salir *"
echo "******************************************"
read -p "Introduzca una opción: " opcion
echo "******************************************"
case $opcion in
1)instala;;
2)desinstala;;
3)estado_servicios;;
4)gestiona_servicio;;
5)prepara_aula;;
6)clear; echo "ESTADO DE ALMACENAMIENTO DEL SISTEMA"; df -h;read -p "Pulse una tecla para continuar";;
7)clear; echo "VISUALIZANDO LOG DE OPERACIONES"; cat /home/$USERNAME/finalsor/log/log.txt;read -p "Pulse una tecla para continuar";;
8)clear; echo "GRACIAS POR UTILIZAR ESTE SOFTWARE";exit 0;;
*)clear; echo "Error, opción no válida. Inténtelo de nuevo";;
esac
done
No hay comentarios:
Publicar un comentario