|
@@ -12,6 +12,68 @@
|
|
|
# GPLv3 (https://www.gnu.org/licenses/gpl.html) #
|
|
|
#################################################################
|
|
|
|
|
|
+ayuda() {
|
|
|
+# Muestra ayuda al usuario y termina
|
|
|
+ echo -en "AYUDA AUTO-ELEARNING:\n"
|
|
|
+ echo -en " Instala automáticamente una wiki (MediaWiki) y un campus virtual (Moodle).\n"
|
|
|
+ echo -en " Para ello instala un entorno LEMP (GNU/Linux+Nginx+MySQL/MariaDB+PHP) o LAMP (GNU/Linux+Apache+MySQL/MariaD+PHP).\n"
|
|
|
+ echo -en " Además instala certificados SSL/TLS válidos de Let's Encrypt (o auto-firmados) y genera copias de seguridad diariamente.\n"
|
|
|
+ echo -en " Licencia: GPLv3 (Autor: Guzmán Castanedo Villalba [guzman@castanedo.es]).\n"
|
|
|
+ echo -en "\nSINOPSIS:\n"
|
|
|
+ echo -en " sudo ./"$(basename $0)" (Forma 1)\n"
|
|
|
+ echo -en " sudo ./"$(basename $0)" [OPCIONES] (Forma 2)\n"
|
|
|
+ echo -en "\nDESCRIPCIÓN:\n"
|
|
|
+ echo -en " La primera forma permite instalarlo todo de forma INTERACTIVA (contestando a unas preguntas que saldrán por pantalla).\n"
|
|
|
+ echo -en " La segunda forma permite hacer lo mismo de forma NO INTERACTIVA (indicando todas las opciones desde el terminal).\n"
|
|
|
+ echo -en " Esta aplicación requiere de permisos de administrador (root).\n"
|
|
|
+ echo -en "\nCOMPATIBILIDAD:\n"
|
|
|
+ echo -en " Esta aplicación es compatible con Ubuntu 18.04, 16.04, Debian 9, CentOS 7 y Fedora 28.\n"
|
|
|
+ echo -en " Requiere de un sistema moderno que tenga instalado SystemD.\n"
|
|
|
+ echo -en " Se irán añadiendo nuevas distribuciones en futuras versiones.\n"
|
|
|
+ echo -en "\nOPCIONES:\n"
|
|
|
+ echo -en " -d, --dominio, --fqdn <dominio>: dominio principal del servidor (OBLIGATORIO)\n"
|
|
|
+ echo -en " --lemp: activa servidor web Nginx (Por Defecto)\n"
|
|
|
+ echo -en " --lamp: activa servidor web Apache2\n"
|
|
|
+ echo -en " --mariadb: activa base de datos mariadb (Por Defecto)\n"
|
|
|
+ echo -en " --mysql: activa base de datos mysql\n"
|
|
|
+ echo -en " Sólo es posible para Ubuntu 18.04\n"
|
|
|
+ echo -en " --password-sql <pass>: contraseña root de base de datos (OBLIGATORIO)\n"
|
|
|
+ echo -en " --max-upload-size <size>: tamaño de subida permitido (Por Defecto: \"100M\")\n"
|
|
|
+ echo -en " --lets-encrypt: activa certificados SSL/TLS de Let's Encrypt\n"
|
|
|
+ echo -en " --auto-firmados: activa certificadaos SSL/TLS auto-firmados (sólo para pruebas)\n"
|
|
|
+ echo -en "\nOPCIONES MEDIA WIKI:\n"
|
|
|
+ echo -en " --media-wiki: activa instalación de Media Wiki (Por Defecto)\n"
|
|
|
+ echo -en " Si se activa esta opción --nombre-mw, --dominios-mw y -password-mw son OBLIGARIOS\n"
|
|
|
+ echo -en " --no-media-wiki: desactiva instalación de Media Wiki\n"
|
|
|
+ echo -en " --nombre-mw <nombre>: nombre de la wiki\n"
|
|
|
+ echo -en " --dominios-mw <dominios>: dominios para Media Wiki\n"
|
|
|
+ echo -en " Deben estar configuradas las DNS para que estos apunten a este servidor\n"
|
|
|
+ echo -en " Se pueden indicar más de uno separándolos con espacios\n"
|
|
|
+ echo -en " --password-mw <pass>: contraseña para usuario 'admin'\n"
|
|
|
+ echo -en "\nOPCIONES MOODLE:\n"
|
|
|
+ echo -en " --moodle: activa instalación de Moodle (Por Defecto)\n"
|
|
|
+ echo -en " Si se activa esta opción --nombre-mo, --nombre-corto-mo, --dominios-mo y -password-mo son OBLIGARIOS\n"
|
|
|
+ echo -en " --no-moodle: desactiva instalación de Moodle\n"
|
|
|
+ echo -en " --nombre-mo <nombre>: nombre del campus\n"
|
|
|
+ echo -en " --nombre-corto-mo <nombre>: nombre corto del campus (una sola palabra)\n"
|
|
|
+ echo -en " --dominio-mo <dominio>: dominio para Moodle\n"
|
|
|
+ echo -en " Deben estar configuradas las DNS para que estos apunten a este servidor\n"
|
|
|
+ echo -en " Sólo se puede indicar UN DOMINIO\n"
|
|
|
+ echo -en " --password-mo <pass>: contraseña para usuario 'admin'\n"
|
|
|
+ echo -en "\nOTRAS OPCIONES:\n"
|
|
|
+ echo -en " --php-info: activa info.php (sólo para pruebas)\n"
|
|
|
+ echo -en " --no-php-info: desactiva info.php (Por Defecto)\n"
|
|
|
+ echo -en " --backup: activa los backups automáticos (Por Defecto)\n"
|
|
|
+ echo -en " --no-backup: desactiva los backups automáticos\n"
|
|
|
+ echo -en "\nEJEMPLOS:\n"
|
|
|
+ echo -en " sudo "$0"\n"
|
|
|
+ echo -en " Activa el programa en modo interactivo\n"
|
|
|
+ echo -en " sudo "$0" -d ejemplo.com --lemp --mariadb --password-sql 123456 --media-wiki --nombre-mw \"Wiki de Ejemplo\" --dominios-mw \"ejemplo.com www.ejemplo.com wiki.ejemplo.com\" --password-mw qwerty --no-moodle\n"
|
|
|
+ echo -en " Instala LEMP con mariadb y Media Wiki\n"
|
|
|
+ echo -en " sudo "$0" -d ejemplo.com --lamp --mysql --password-sql 123456 --no-media-wiki --moodle --nombre-mo \"Campus Virtual\" --nombre-corto-mo EJEMPLO --dominio-mo moodle.ejemplo.com --password-mo qwerty\n"
|
|
|
+ echo -en " Instala LAMP con MySQL y Moodle\n\n"
|
|
|
+}
|
|
|
+
|
|
|
comprobarError() {
|
|
|
# Permite comprobar si se ha producido un error y de serlo devuelve un código de error
|
|
|
# comprobarError exitNum codeNum extraInfo
|
|
@@ -50,6 +112,39 @@ comprobarError() {
|
|
|
6)
|
|
|
error="$type $codeNum:\tError interno (selección SSL/TLS).\n"
|
|
|
;;
|
|
|
+ 10)
|
|
|
+ error="$type $codeNum:\tOpción inesperada '$extraInfo'.\n"
|
|
|
+ ;;
|
|
|
+ 11)
|
|
|
+ error="$type $codeNum:\tDominio Principal no definido ('--hostname \"ejemplo.com\"').\n"
|
|
|
+ ;;
|
|
|
+ 12)
|
|
|
+ error="$type $codeNum:\tContraseña SQL no definida ('--password-sql \"pass\"').\n"
|
|
|
+ ;;
|
|
|
+ 13)
|
|
|
+ error="$type $codeNum:\tTamaño de subida no definido ('--max-upload-size \"100M\"').\n"
|
|
|
+ ;;
|
|
|
+ 14)
|
|
|
+ error="$type $codeNum:\tNombre Media Wiki no definida (--nombre-mw \"Wiki de Ejemplo\").\n"
|
|
|
+ ;;
|
|
|
+ 15)
|
|
|
+ error="$type $codeNum:\tDominios Media Wiki no definidos (--dominios-mw \"ejemplo.com wiki.ejemplo.com\").\n"
|
|
|
+ ;;
|
|
|
+ 16)
|
|
|
+ error="$type $codeNum:\tContraseña Media Wiki no definida (--password-mw \"pass\").\n"
|
|
|
+ ;;
|
|
|
+ 17)
|
|
|
+ error="$type $codeNum:\tNombre Moodle no definido (--nombre-mo \"Campus Virtual de Ejemplo\").\n"
|
|
|
+ ;;
|
|
|
+ 18)
|
|
|
+ error="$type $codeNum:\tNombre Corto Moodle no definido (--nombre-corto-mo \"Ejemplo\").\n"
|
|
|
+ ;;
|
|
|
+ 19)
|
|
|
+ error="$type $codeNum:\tDominio Moodle no definido (--dominio-mo \"moodle.ejemplo.com\").\n"
|
|
|
+ ;;
|
|
|
+ 20)
|
|
|
+ error="$type $codeNum:\tContraseña Moodle no definida (--password-mo \"pass\").\n"
|
|
|
+ ;;
|
|
|
100)
|
|
|
error="$type $codeNum:\tError interno (selección del servidor web).\n"
|
|
|
;;
|
|
@@ -556,11 +651,7 @@ instalacionExpress() {
|
|
|
mySQLOn=true
|
|
|
dbType="mariadb"
|
|
|
;;
|
|
|
- ubuntu)
|
|
|
- mariaDBOn=true
|
|
|
- dbType="mariadb"
|
|
|
- ;;
|
|
|
- centos|fedora)
|
|
|
+ ubuntu|centos|fedora)
|
|
|
mariaDBOn=true
|
|
|
dbType="mariadb"
|
|
|
;;
|
|
@@ -571,12 +662,6 @@ instalacionExpress() {
|
|
|
mediaWikiOn=true
|
|
|
moodleOn=true
|
|
|
backupOn=true
|
|
|
- # Preguntas mínimas
|
|
|
- establecerFQDN
|
|
|
- leerSQLPasswd
|
|
|
- mostrarMediaWiki
|
|
|
- mostrarMoodle
|
|
|
- mostrarConfirmacion
|
|
|
}
|
|
|
|
|
|
mostrarBienvenida() {
|
|
@@ -597,7 +682,12 @@ mostrarExpress() {
|
|
|
case $express in
|
|
|
Express)
|
|
|
instalacionExpress
|
|
|
- # DECIDIR QUÉ OPCIONES SON LAS MÍNIMAS
|
|
|
+ # Preguntas mínimas
|
|
|
+ establecerFQDN
|
|
|
+ leerSQLPasswd
|
|
|
+ mostrarMediaWiki
|
|
|
+ mostrarMoodle
|
|
|
+ mostrarConfirmacion
|
|
|
;;
|
|
|
Avanzada)
|
|
|
mostrarAvanzada
|
|
@@ -774,7 +864,7 @@ mostrarMoodle() {
|
|
|
serverName=$dominio
|
|
|
else
|
|
|
# Dominios Secundarios (ServerAlias)
|
|
|
- aliasMeoodle=$aliasMoodle" "$dominio
|
|
|
+ aliasMoodle=$aliasMoodle" "$dominio
|
|
|
fi
|
|
|
cont=$((cont + 1))
|
|
|
done
|
|
@@ -1965,11 +2055,230 @@ configurarBackups() {
|
|
|
OSInfo
|
|
|
comprobarDependencias
|
|
|
|
|
|
-# Bienvenida
|
|
|
- mostrarBienvenida
|
|
|
-
|
|
|
-# Selección de componentes (express vs avanzada)
|
|
|
- mostrarExpress
|
|
|
+# Leer opciones
|
|
|
+ which getopt 2>/dev/null
|
|
|
+ if [ $? -eq 0 ] && [ $# -ne 0 ];then
|
|
|
+ # Configuración por defecto (opciones de Express)
|
|
|
+ instalacionExpress
|
|
|
+ # Leer opciones
|
|
|
+ TEMP=$(getopt -q -o hd: --longoptions help,dominio:,fqdn:,lamp,lemp,mariadb,mysql,password-sql:,max-upload-size:,letsencrypt,auto-firmados,media-wiki,no-media-wiki,nombre-mw:,dominios-mw:,password-mw:,moodle,no-moodle,nombre-mo:,nombre-corto-mo:,dominio-mo:,password-mo:,php-info,no-php-info,backup,no-backup --name $(basename $0) -- $@)
|
|
|
+ eval set -- $TEMP
|
|
|
+ unset TEMP
|
|
|
+ while true; do
|
|
|
+ case $1 in
|
|
|
+ -h|--help)
|
|
|
+ ayuda
|
|
|
+ exit 0
|
|
|
+ ;;
|
|
|
+ -d|--dominio|--fqdn)
|
|
|
+ hostname=$2
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ --lamp)
|
|
|
+ apacheOn=true
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ --lemp)
|
|
|
+ nginxOn=true
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ --mariadb)
|
|
|
+ case $ID in
|
|
|
+ debian)
|
|
|
+ mySQLOn=true
|
|
|
+ dbType="mariadb"
|
|
|
+ ;;
|
|
|
+ ubuntu|centos|fedora)
|
|
|
+ mariaDBOn=true
|
|
|
+ dbType="mariadb"
|
|
|
+ esac
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ --mysql)
|
|
|
+ if [ $ID = "ubuntu" ] && [ $VERSION = "18.04" ];then
|
|
|
+ mySQLOn=true
|
|
|
+ dbType="mysqli"
|
|
|
+ else
|
|
|
+ # No está soportado
|
|
|
+ ayuda
|
|
|
+ comprobarError 1 205
|
|
|
+ fi
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ --password-sql)
|
|
|
+ sqlPasswd=$2
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ --max-upload-size)
|
|
|
+ maxUpload=$2
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ --lets-encrypt)
|
|
|
+ sslOn=true
|
|
|
+ letsEncryptOn=true
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ --auto-firmados)
|
|
|
+ sslOn=true
|
|
|
+ letsEncryptOn=false
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ --media-wiki)
|
|
|
+ mediaWikiOn=true
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ --no-media-wiki)
|
|
|
+ mediaWikiOn=false
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ --nombre-mw)
|
|
|
+ nombreMediaWiki=$2
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ --dominios-mw)
|
|
|
+ dominioMediaWiki=$2
|
|
|
+ cont=1
|
|
|
+ serverName=""
|
|
|
+ aliasMediaWiki=""
|
|
|
+ for dominio in $dominioMediaWiki;do
|
|
|
+ if [ $cont -eq 1 ];then
|
|
|
+ # Dominio Principal (ServerName)
|
|
|
+ serverName=$dominio
|
|
|
+ else
|
|
|
+ # Dominios Secundarios (ServerAlias)
|
|
|
+ aliasMediaWiki=$aliasMediaWiki" "$dominio
|
|
|
+ fi
|
|
|
+ cont=$((cont + 1))
|
|
|
+ done
|
|
|
+ dominioMediaWiki=$serverName
|
|
|
+ unset cont serverName dominio
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ --password-mw)
|
|
|
+ passwdMediaWiki=$2
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ --moodle)
|
|
|
+ moodleOn=true
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ --no-moodle)
|
|
|
+ moodleOn=false
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ --nombre-mo)
|
|
|
+ nombreMoodle=$2
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ --nombre-corto-mo)
|
|
|
+ nombreCortoMoodle=$(echo $2 | cut -d ' ' -f 1)
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ --dominio-mo)
|
|
|
+ dominioMoodle=$2
|
|
|
+ cont=1
|
|
|
+ serverName=""
|
|
|
+ aliasMoodle=""
|
|
|
+ for dominio in $dominioMoodle;do
|
|
|
+ if [ $cont -eq 1 ];then
|
|
|
+ # Dominio Principal (ServerName)
|
|
|
+ serverName=$dominio
|
|
|
+ else
|
|
|
+ # Dominios Secundarios (ServerAlias)
|
|
|
+ aliasMoodle=$aliasMoodle" "$dominio
|
|
|
+ fi
|
|
|
+ cont=$((cont + 1))
|
|
|
+ done
|
|
|
+ dominioMoodle=$serverName
|
|
|
+ unset cont ServerName dominio aliasMoodle
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ --password-mo)
|
|
|
+ passwdMoodle=$2
|
|
|
+ shift 2
|
|
|
+ ;;
|
|
|
+ --php-info)
|
|
|
+ infoPHPOn=true
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ --no-php-info)
|
|
|
+ infoPHPOn=false
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ --backup)
|
|
|
+ backupOn=true
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ --no-backup)
|
|
|
+ backupOn=false
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ --)
|
|
|
+ #Ultimo
|
|
|
+ shift
|
|
|
+ break
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ # Inesperado
|
|
|
+ ayuda
|
|
|
+ comprobarError 1 10 $1
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+ done
|
|
|
+ # Comprobar si los datos son correctos
|
|
|
+ if [ -z "$hostname" ];then
|
|
|
+ ayuda
|
|
|
+ comprobarError 1 10
|
|
|
+ else
|
|
|
+ hostnamectl set-hostname $hostname >/dev/null 2>&1
|
|
|
+ fi
|
|
|
+ if [ -z "$sqlPasswd" ];then
|
|
|
+ ayuda
|
|
|
+ comprobarError 1 11
|
|
|
+ fi
|
|
|
+ if [ -z "$maxUpload" ];then
|
|
|
+ ayuda
|
|
|
+ comprobarError 1 12
|
|
|
+ fi
|
|
|
+ if [ $mediaWikiOn = true ];then
|
|
|
+ if [ -z $nombreMediaWiki ];then
|
|
|
+ ayuda
|
|
|
+ comprobarError 1 13
|
|
|
+ fi
|
|
|
+ if [ -z $dominioMediaWiki ];then
|
|
|
+ ayuda
|
|
|
+ comprobarError 1 14
|
|
|
+ fi
|
|
|
+ if [ -z $passwdMediaWiki ];then
|
|
|
+ ayuda
|
|
|
+ comprobarError 1 15
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ if [ $moodleOn = true ];then
|
|
|
+ if [ -z $nombreMoodle ];then
|
|
|
+ ayuda
|
|
|
+ comprobarError 1 16
|
|
|
+ fi
|
|
|
+ if [ -z $nombreCortoMoodle ];then
|
|
|
+ ayuda
|
|
|
+ comprobarError 1 17
|
|
|
+ fi
|
|
|
+ if [ -z $dominioMoodle ];then
|
|
|
+ ayuda
|
|
|
+ comprobarError 1 18
|
|
|
+ fi
|
|
|
+ if [ -z $passwdMoodle ];then
|
|
|
+ ayuda
|
|
|
+ comprobarError 1 19
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ else
|
|
|
+ # Preguntas interactivas
|
|
|
+ # Bienvenida
|
|
|
+ mostrarBienvenida
|
|
|
+ # Selección de componentes (express vs avanzada)
|
|
|
+ mostrarExpress
|
|
|
+ fi
|
|
|
|
|
|
# Instalación Servidor Web
|
|
|
if [ $apacheOn = true ]; then
|