Browse Source

* Limpieza del código
* De las cadenas de texto
* Añadido mostrarConfirmacion()

Guzmán Castanedo Villalba 6 years ago
parent
commit
84d951dc62
1 changed files with 70 additions and 37 deletions
  1. 70 37
      install

+ 70 - 37
install

@@ -9,16 +9,18 @@
 #################################################################
 
 comprobarError() {
-	# comprobarError exitNum codeNum extraInfo
-	#	1xx: Servidor Web
-	#	2xx: Base de Datos
-	#	3xx: PHP
-	#	4xx: SSL/TLS
-	#	5xx: MediaWiki
-	#	6xx: Moodle
-	#	7xx: Actualizaciones automáticas
-	#	8xx: Dependencias
-	#	9xx: Servicios & Firewall
+# Permite comprobar si se ha producido un error y de serlo devuelve un código de error
+# comprobarError exitNum codeNum extraInfo
+#	1xx: Servidor Web
+#	2xx: Base de Datos
+#	3xx: PHP
+#	4xx: SSL/TLS
+#	5xx: MediaWiki
+#	6xx: Moodle
+#	7xx: Backup automático
+#	8xx: Dependencias
+#	9xx: Servicios & Firewall
+	
 	type="ERROR"
 	exitNum=$1
 	shift
@@ -276,6 +278,7 @@ comprobarError() {
 }
 
 OSInfo() {
+# Detecta el OS en el que se está ejecutando el programa, así como su versión
 	echo -en "Detectando SO..." >> $logFile
 	OS=$(uname -s)
 	if [ $OS = "Linux" ]; then
@@ -336,10 +339,13 @@ OSInfo() {
 }
 
 comprobarRoot() {
+# Comprueba si se está ejecutando con privilegios de root
 	comprobarError $(id -u) 800
 }
 
 comprobarDependencias() {
+# Comprueba si están instalados todos los programas necesarios.
+# En la mayoría de los casos, trata de instalarlos.
 	# Comprobamos whiptail
 	which whiptail > /dev/null 2>&1
 	comprobarError $? 801
@@ -465,6 +471,7 @@ comprobarDependencias() {
 }
 
 inicializarVariables() {
+# Inicializa las variables que necesitan de un estado previo
 	debianOS=false
 	rhelOS=false
 	apacheOn=false
@@ -477,7 +484,7 @@ inicializarVariables() {
 	mediaWikiOn=false
 	moodleOn=false
 	infoPHPOn=false
-	actualizacionesOn=false
+	backupOn=false
 	hostname=""
 	logFile="./."$(basename $0)".log"
 	maxUpload="100M"
@@ -496,6 +503,7 @@ inicializarVariables() {
 }
 
 instalacionExpress() {
+# Permite una instalación rápida, haciendo el menor número de preguntas
 	apacheOn=true
 	mariaDBOn=true
 	phpOn=true
@@ -503,7 +511,7 @@ instalacionExpress() {
 	letsEncryptOn=true
 	mediaWikiOn=true
 	moodleOn=true
-	actualizacionesOn=true
+	backupOn=true
 	# Preguntas mínimas
 	establecerFQDN
 	leerSQLPasswd
@@ -512,6 +520,7 @@ instalacionExpress() {
 }
 
 mostrarBienvenida() {
+# Pantalla de bienvenida y muestra SO y estado de los discos
 	ANCHO=$(tput cols)
 	ALTO=$(tput lines)
 	if [ $debianOS = false ] && [ $rhelOS = false ]; then
@@ -523,7 +532,8 @@ mostrarBienvenida() {
 }
 
 mostrarExpress() {
-	express=$(whiptail --title "INSTALACION EXPRESS" --radiolist "<ESPACIO>: seleccionar   <TAB>: cambiar   <FLECHAS>: moverse\n\nLa instalación express instala Apache2, MariaDB, PHP-7, Let's Encrypt, MediaWiki, Moodle y actualizaciones automáticas.\nSeleccione el tipo de instalación que desee:" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) 2 \
+# Pantalla de elección entre instalación express o avanzada
+	express=$(whiptail --title "INSTALACION EXPRESS" --radiolist "<ESPACIO>: seleccionar   <TAB>: cambiar   <FLECHAS>: moverse\n\nLa instalación express instala Apache2, MariaDB, PHP-7, Let's Encrypt, MediaWiki, Moodle y backups automático.\nSeleccione el tipo de instalación que desee:" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) 2 \
 	"Express" "Instalación rápida" ON \
 	"Avanzada" "Permite escoger todas las opciones disponibles" OFF \
 	--ok-button "Continuar" --cancel-button "Salir" 3>&1 1>&2 2>&3)
@@ -544,6 +554,7 @@ mostrarExpress() {
 }
 
 mostrarAvanzada() {
+# Pantalla que permite instalar un servidor LAMP o LEMP
 	webServer=$(whiptail --title "INSTALACION AVANZADA" --radiolist "<ESPACIO>: seleccionar   <TAB>: cambiar   <FLECHAS>: moverse\n\nEscoge el tipo de Servidor Web que quieres instalar:" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) 2 \
 	"LAMP" "GNU/Linux + Apache + MySQL/MariaDB + PHP-7" ON \
 	"LEMP" "GNU/Linux + Nginx + MySQL/MariaDB + PHP-7" OFF \
@@ -568,16 +579,18 @@ mostrarAvanzada() {
 	phpOn=true
 	establecerMaxUpload
 	mostrarComponentes
+	mostrarConfirmacion
 	unset webServer
 }
 
 mostrarComponentes() {
+# Pantalla de elección de componentes (SSL/TLS, MediaWiki, Moodle, InfoPHP y Backup)
 	componentes=$(whiptail --title "INSTALACION AVANZADA" --checklist "<ESPACIO>: seleccionar   <TAB>: cambiar   <FLECHAS>: moverse\n\nEscoge los componentes que quieres instalar:" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) 5 \
 	"SSL/TLS" "Instalar certificados para activar HTTPS" ON \
 	"MediaWiki" "Instalar wiki con MediaWiki" ON \
 	"Moodle" "Instalar campus virtual con Moodle" ON \
 	"InfoPHP" "Instalar info.php (sólo para pruebas)" OFF \
-	"Actualizaciones" "Programar actualizaciones automáticas" ON \
+	"Backup" "Programar backups automáticos" ON \
 	--ok-button "Continuar" --cancel-button "Salir" 3>&1 1>&2 2>&3)
 	comprobarError $? 1
 	# Mejora: autodetección de componentes ya instalados
@@ -598,8 +611,8 @@ mostrarComponentes() {
 			\"InfoPHP\")
 				infoPHPOn=true
 				;;
-			\"Actualizaciones\")
-				actualizacionesOn=true
+			\"Backup\")
+				BackupOn=true
 				;;
 			*)
 				comprobarError 1 3
@@ -610,6 +623,7 @@ mostrarComponentes() {
 }
 
 mostrarSSL() {
+# Pantalla que permite seleccionar el tipo de certificados
 	ssl=$(whiptail --title "INSTALACION SSL/TLS" --radiolist "<ESPACIO>: seleccionar   <TAB>: cambiar   <FLECHAS>: moverse\n\nEscoge el tipo de Certificado SSL/TLS que quieres instalar:" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) 2 \
 	"LetsEncrypt" "Compatible con todos los navegadores" ON \
 	"Auto-Firmado" "Certificados auto-firmados (sólo para pruebas)" OFF \
@@ -633,6 +647,7 @@ mostrarSSL() {
 }
 
 mostrarMediaWiki(){
+# Pantalla que pregunta sobre las opciones necesarias para configurar MediaWiki
 	# Introducir nombre wiki
 	while [ -z "$nombreMediaWiki" ]; do
 		nombreMediaWiki=$(whiptail --title "CONFIGURACION MEDIAWIKI" --inputbox "Introduzca el nombre de la Wiki:" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --ok-button "Continuar" --cancel-button "Salir" 3>&1 1>&2 2>&3)
@@ -677,6 +692,7 @@ mostrarMediaWiki(){
 }
 
 mostrarMoodle() {
+# Pantalla que pregunta sobre las opciones necesarias para configurar Moodle
 	# Introducir Nombre Moodle
 	while [ -z "$nombreMoodle" ]; do
 		nombreMoodle=$(whiptail --title "CONFIGURACION MOODLE" --inputbox "Introduzca el NOMBRE COMPLETO del campus virtual.\nPor ejemplo: 'Campus Virtual Ejemplo'." $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --ok-button "Continuar" --cancel-button "Salir" 3>&1 1>&2 2>&3)
@@ -725,7 +741,14 @@ mostrarMoodle() {
 	unset control error passwdMoodle2 dominio cont serverName aliasMoodle
 }
 
+mostrarConfirmacion() {
+# Pantalla que presenta una confirmación antes de realizar la instalación
+	whiptail --title "INSTALACION" --yesno "ESTA TODO LISTO PARA LA INSTALACION.\n¿DESEA CONTINUAR?" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --yes-button "Instalar" --no-button "Salir"
+	comprobarError $? 1
+}
+
 establecerFQDN() {
+# Configura el FQDN (dominio principal del servidor)
 	while [ -z "$hostname" ]; do
 		hostname=$(whiptail --title "FQDN" --inputbox "El nombre de dominio principal (FQDN) de este servidor es:\n"$(hostname)"\n\nQuieres cambiarlo por otro?" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --ok-button "Cambiar" --cancel-button "No Cambiar" 3>&1 1>&2 2>&3)
 		if [ $? -eq 0 ] && [ ! -z "$hostname" ]; then
@@ -738,6 +761,7 @@ establecerFQDN() {
 }
 
 instalarApache() {
+# Instala Apache2
 	if [ $debianOS = true ];then
 		webServerName="apache2"
 		result=$(apt-get -q -y install apache2 2>&1)
@@ -753,6 +777,7 @@ instalarApache() {
 }
 
 configurarApache() {
+# Configura Apache2
 	if [ $debianOS = true ];then
 		apacheConfFile="./etc/apache2/apache2.conf"
 		if [ ! -f $apacheConfFile ];then
@@ -801,6 +826,7 @@ configurarApache() {
 }
 
 instalarNginx() {
+# Instala Nginx
 	webServerName="nginx"
 	if [ $debianOS = true ];then
 		result=$(apt-get -q -y install nginx 2>&1)
@@ -818,8 +844,8 @@ instalarNginx() {
 }
 
 configurarNginx() {
-	# Configuramos Nginx
-	rm -Rf /etc/$webServerName/* 2>/dev/null
+# Configura Nginx
+	rm -Rf /etc/$webServerName/!(sites-available|sites-enabled) 2>/dev/null
 	comprobarError $? 107
 	nginxConfFile="./etc/$webServerName"
 	if [ -d "$nginxConfFile" ];then
@@ -850,8 +876,8 @@ configurarNginx() {
 }
 
 instalarVirtualHost() {
-	# Configuramos un Virtual Host para Apache o Nginx
-	# Uso: instalarVirtualHost $root $virtualHost $dominio $alias
+# Configuramos un Virtual Host para Apache o Nginx
+# Uso: instalarVirtualHost $root $virtualHost $dominio $alias
 	if [ $# -ge 3 ];then
 		rootVirtualHost=$(realpath $1)
 		shift
@@ -904,6 +930,7 @@ instalarVirtualHost() {
 }
 
 mostrarDatabase() {
+# Pantalla que permite escoger entre instalar MariaDB o MySQL
 	if [ $debianOS = true ]; then
 		database=$(whiptail --title "BASE DE DATOS" --radiolist "<ESPACIO>: seleccionar   <TAB>: cambiar   <FLECHAS>: moverse\n\nEscoge la base de datos que quieres usar:" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) 2 \
 		"MariaDB" "Instalar la base de datos MariaDB (fork de MySQL)" ON \
@@ -934,6 +961,7 @@ mostrarDatabase() {
 }
 
 leerSQLPasswd() {
+# Pantalla para leer la contraseña para el usuario root de SQL
 	control=false
 	error=""
 	# Leemos la contreseña (stdin) y confirmamos
@@ -957,7 +985,7 @@ leerSQLPasswd() {
 }
 
 establecerSQLPasswd() {
-	# Establecemos SQL root passwd y securizamos BD (mysql_secure_installation)
+# Establecemos SQL root passwd y securizamos BD (mysql_secure_installation)
 	# Comprobamos si ya tiene una contraseña asignada
 	mysql -e "FLUSH PRIVILEGES" >> $logFile 2>&1
 	if [ $? -eq 0 ];then
@@ -991,6 +1019,7 @@ establecerSQLPasswd() {
 }
 
 instalarMySQL() {
+# Instala MySQL (sólo para Debian)
 	sqlServerName="mysql"
 	if [ $debianOS = true ];then
 		result=$(apt-get -q -y install mysql-server mysql-client 2>&1)
@@ -1007,6 +1036,7 @@ instalarMySQL() {
 }
 
 instalarMariaDB() {
+# Instala MariaDB
 	sqlServerName="mariadb"
 	if [ $debianOS = true ];then
 		result=$(apt-get -q -y install mariadb-server mariadb-client 2>&1)
@@ -1021,6 +1051,7 @@ instalarMariaDB() {
 }
 
 configurarSQL() {
+# Configura BarracudaFS en mysql (necesario para Moodle)
 	# Configura MariaDB o MySQL
 	if [ $mariaDBOn = true ] && [ $debianOS = true ];then
 		sqlConfFile="/etc/mysql/my.cnf"
@@ -1056,7 +1087,7 @@ configurarSQL() {
 }
 
 instalarPHP() {
-	# Instalamos PHP-7 de forma diferente si es junto a Apache o con Nginx
+# Instalamos PHP-7 y los módulos PHP que necesitan MediaWiki y Moodle
 	if [ $debianOS = true ];then
 		if [ $apacheOn = true ]; then
 			result=$(apt-get -q -y install php libapache2-mod-php php-mysql php-intl php-mbstring php-xml php-apcu php-gd php-curl php-zip php-soap php-xmlrpc 2>&1)
@@ -1112,7 +1143,7 @@ instalarPHP() {
 }
 
 configurarPHP() {
-	# Configura PHP para segurizarlo y establecer máximo de subida.
+# Configura PHP para segurizarlo y establecer máximo de subida.
 	if [ $debianOS = true ];then
 		phpConfFile="./etc/php/php.ini.debian"
 		phpDest="/etc/php/7.2/cli/php.ini"
@@ -1153,6 +1184,7 @@ configurarPHP() {
 }
 
 establecerMaxUpload() {
+# Pantalla para establecer el máximo de subida al servidor (vía PHP)
 	control=false
 	error=""
 	while [ $control = false ];do
@@ -1169,7 +1201,7 @@ establecerMaxUpload() {
 }
 
 instalarPHPInfo() {
-	# Instalar fichero php
+# Instalar fichero info.php y su VirtualHost
 	if [ ! -f /etc/$webServerName/sites-enabled/phpinfo.conf ];then
 		infoFile="./var/www/info.php"
 		if [ ! -f $infoFile ];then
@@ -1203,7 +1235,7 @@ instalarPHPInfo() {
 }
 
 habilitarServicio() {
-	# Arrancamos y habilitamos el servicio (con SystemD, Upstart o SystemV)
+# Arrancamos y habilitamos el servicio (con SystemD, Upstart o SystemV)
 	# Intentamos con systemctl (SystemD)
 	#echo -en "Habilitando Servicio '$1'" | tee -a $logFile
 	if [ $# -le 0 ];then
@@ -1251,7 +1283,7 @@ habilitarServicio() {
 }
 
 deshabilitarServicio() {
-	# Paramos y deshabilitamos el servicio (con SystemD, Upstart o SystemV)
+# Paramos y deshabilitamos el servicio (con SystemD, Upstart o SystemV)
 	# Intentamos con systemctl (SystemD)
 	#echo -en "Deshabilitando Servicio '$1'" | tee -a $logFile
 	if [ $# -le 0 ];then
@@ -1299,7 +1331,7 @@ deshabilitarServicio() {
 }
 
 recargarServicio() {
-	# Recargamos el servicio (con SystemD, Upstart o SystemV)
+# Recargamos el servicio (con SystemD, Upstart o SystemV)
 	# Intentamos con systemctl (SystemD)
 	#echo -en "Recargando Servicio '$1'" | tee -a $logFile
 	if [ $# -le 0 ];then
@@ -1329,7 +1361,7 @@ recargarServicio() {
 }
 
 configurarCortafuegos() {
-	# Configuramos cortafuegos (añadir reglas y encender)
+# Configuramos cortafuegos (añadir reglas y encender)
 	# Comprobamos si estamos usando SSH
 	esSSH $PPID
 	if [ $debianOS = true ];then
@@ -1365,6 +1397,7 @@ configurarCortafuegos() {
 }
 
 esSSH() {
+# Comprobamos si nuestro terminal usa SSH
 	p=${1:-$PPID}
 	#read pid name x ppid y < <( cat /proc/$p/stat )
 	read pid name ppid < <( ps -o pid= -o comm= -o ppid= -p $p)
@@ -1374,7 +1407,7 @@ esSSH() {
 }
 
 descargarMediaWiki() {
-	# Descargar la versión 1.31.0 de MediaWiki
+# Descargar la versión 1.31.0 de MediaWiki
 	if [ ! -d ./var ];then
 		comprobarError 1 5 "./var"
 	fi
@@ -1383,7 +1416,7 @@ descargarMediaWiki() {
 }
 
 configurarMediaWiki() {
-	# Configuramos MediaWiki
+# Configuramos MediaWiki
 	if [ ! -f /var/www/$dominioMediaWiki/LocalSettings.php ];then
 		# Copiamos archivos
 		cp -fR ./var/mediawiki-1.31.0/ /var/www/$dominioMediaWiki
@@ -1431,7 +1464,7 @@ configurarMediaWiki() {
 }
 
 descargarMoodle() {
-	# Descargar la versión 1.31.0 de MediaWiki
+# Descargar la versión 1.31.0 de MediaWiki
 	if [ ! -d ./var ];then
 		comprobarError 1 5 "./var"
 	fi
@@ -1443,7 +1476,7 @@ descargarMoodle() {
 }
 
 configurarMoodle() {
-	# Configurar Moodle
+# Configurar Moodle
 	if [ ! -f /var/www/$dominioMoodle/config.php ];then
 		# Copiamos archivos
 		cp -Rf ./var/moodle/ /var/www/$dominioMoodle
@@ -1510,7 +1543,7 @@ configurarMoodle() {
 }
 
 crearDBMoodle() {
-	# Creamos una base de datos para Moodle
+# Crear base de datos para Moodle
 	dbDir="./etc/db"
 	if [ ! -d $dbDir ];then
 		mkdir $dbDir 2>/dev/null
@@ -1528,7 +1561,7 @@ crearDBMoodle() {
 }
 
 configurarSELinux() {
-	# Configura SELinux (Sólo para RHEL)
+# Configurar SELinux (Sólo para RHEL)
 	which semanage >/dev/null 2>&1
 	if [ $? -ne 0 ];then
 		result=$(yum -y install policycoreutils-python 2>&1)
@@ -1665,9 +1698,9 @@ mostrarExpress
 	echo -en "Configurando Cortafuegos..." | tee -a $logFile
 	configurarCortafuegos
 	echo -en " OK.\n" | tee -a $logFile
-# Configurar actualizaciones
-	if [ $actualizacionesOn = true ]; then
-		echo -en "Configurando Actualizaciones Automáticas..." | tee -a $logFile
+# Configurar Backup
+	if [ $backupOn = true ]; then
+		echo -en "Configurando Backup Automático..." | tee -a $logFile
 		sleep 2
 		echo -en " OK.\n" | tee -a $logFile
 	fi