install 78 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462
  1. #!/bin/bash
  2. #################################################################
  3. # auto-elearning #
  4. # Instala automáticamente una Wiki (MediaWiki) y un Campus #
  5. # Virtual (Moodle). #
  6. # Para ello instala un entorno LEMP (GNU/Linux+Nginx+MySQL/ #
  7. # MariaDB+PHP) o LAMP (GNU/Linux+Apache+MySQL/MariaDB+PHP). #
  8. # Además instala certificados SSL/TLS válidos de Let's Encrypt #
  9. # (o auto-firmados) y genera copias de seguridad diariamente. #
  10. # #
  11. # Guzman Castanedo Villalba (guzman@castanedo.es) Junio 2018 #
  12. # GPLv3 (https://www.gnu.org/licenses/gpl.html) #
  13. #################################################################
  14. ayuda() {
  15. # Muestra ayuda al usuario y termina
  16. echo -en "AYUDA AUTO-ELEARNING:\n"
  17. echo -en " Instala automáticamente una Wiki (MediaWiki) y un Campus Virtual (Moodle).\n"
  18. echo -en " Para ello instala un entorno LEMP (GNU/Linux+Nginx+MySQL/MariaDB+PHP) o LAMP (GNU/Linux+Apache+MySQL/MariaD+PHP).\n"
  19. echo -en " Además instala certificados SSL/TLS válidos de Let's Encrypt (o auto-firmados) y genera copias de seguridad diariamente.\n"
  20. echo -en " Licencia: GPLv3 (Autor: Guzmán Castanedo Villalba [guzman@castanedo.es]).\n"
  21. echo -en "\nSINOPSIS:\n"
  22. echo -en " sudo ./"$(basename $0)" (Forma 1)\n"
  23. echo -en " sudo ./"$(basename $0)" [OPCIONES] (Forma 2)\n"
  24. echo -en "\nDESCRIPCIÓN:\n"
  25. echo -en " La primera forma permite instalarlo todo de forma INTERACTIVA (contestando a unas preguntas que saldrán por pantalla).\n"
  26. echo -en " La segunda forma permite hacer lo mismo de forma NO INTERACTIVA (indicando todas las opciones desde el terminal).\n"
  27. echo -en " Esta aplicación requiere de permisos de administrador (root).\n"
  28. echo -en "\nCOMPATIBILIDAD:\n"
  29. echo -en " Esta aplicación es compatible con Ubuntu 18.04, 16.04, Debian 9, CentOS 7 y Fedora 28.\n"
  30. echo -en " Requiere de un sistema moderno que tenga instalado SystemD.\n"
  31. echo -en " Se irán añadiendo nuevas distribuciones en futuras versiones.\n"
  32. echo -en "\nOPCIONES:\n"
  33. echo -en " -d, --dominio, --fqdn <dominio>: dominio principal del servidor (OBLIGATORIO)\n"
  34. echo -en " --lemp: activa servidor web Nginx (Por Defecto)\n"
  35. echo -en " --lamp: activa servidor web Apache2\n"
  36. echo -en " --mariadb: activa base de datos mariadb (Por Defecto)\n"
  37. echo -en " --mysql: activa base de datos mysql\n"
  38. echo -en " Sólo es posible para Ubuntu 18.04\n"
  39. echo -en " --password-sql <pass>: contraseña root de base de datos (OBLIGATORIO)\n"
  40. echo -en " --max-upload-size <size>: tamaño de subida permitido (Por Defecto: \"100M\")\n"
  41. echo -en " --lets-encrypt: activa certificados SSL/TLS de Let's Encrypt\n"
  42. echo -en " --auto-firmados: activa certificadaos SSL/TLS auto-firmados (sólo para pruebas)\n"
  43. echo -en "\nOPCIONES MEDIA WIKI:\n"
  44. echo -en " --media-wiki: activa instalación de Media Wiki (Por Defecto)\n"
  45. echo -en " Si se activa esta opción --nombre-mw, --dominios-mw y --password-mw son OBLIGARIOS\n"
  46. echo -en " --no-media-wiki: desactiva instalación de Media Wiki\n"
  47. echo -en " --nombre-mw <nombre>: nombre de la wiki\n"
  48. echo -en " --dominios-mw <dominios>: dominios para Media Wiki\n"
  49. echo -en " Deben estar configuradas las DNS para que estos apunten a este servidor\n"
  50. echo -en " Se pueden indicar más de uno separándolos con espacios\n"
  51. echo -en " --password-mw <pass>: contraseña para usuario 'admin'\n"
  52. echo -en "\nOPCIONES MOODLE:\n"
  53. echo -en " --moodle: activa instalación de Moodle (Por Defecto)\n"
  54. echo -en " Si se activa esta opción --nombre-mo, --nombre-corto-mo, --dominios-mo y --password-mo son OBLIGARIOS\n"
  55. echo -en " --no-moodle: desactiva instalación de Moodle\n"
  56. echo -en " --nombre-mo <nombre>: nombre del campus\n"
  57. echo -en " --nombre-corto-mo <nombre>: nombre corto del campus (una sola palabra)\n"
  58. echo -en " --dominio-mo <dominio>: dominio para Moodle\n"
  59. echo -en " Deben estar configuradas las DNS para que estos apunten a este servidor\n"
  60. echo -en " Sólo se puede indicar UN DOMINIO\n"
  61. echo -en " --password-mo <pass>: contraseña para usuario 'admin'\n"
  62. echo -en "\nOTRAS OPCIONES:\n"
  63. echo -en " --php-info: activa info.php (sólo para pruebas)\n"
  64. echo -en " --no-php-info: desactiva info.php (Por Defecto)\n"
  65. echo -en " --backup: activa los backups automáticos (Por Defecto)\n"
  66. echo -en " --no-backup: desactiva los backups automáticos\n"
  67. echo -en "\nEJEMPLOS:\n"
  68. echo -en " sudo "$0"\n"
  69. echo -en " Activa el programa en modo interactivo\n"
  70. 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"
  71. echo -en " Instala LEMP con mariadb y Media Wiki\n"
  72. 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"
  73. echo -en " Instala LAMP con MySQL y Moodle\n\n"
  74. }
  75. comprobarError() {
  76. # Permite comprobar si se ha producido un error y de serlo devuelve un código de error
  77. # comprobarError exitNum codeNum extraInfo
  78. # 1xx: Servidor Web
  79. # 2xx: Base de Datos
  80. # 3xx: PHP
  81. # 4xx: SSL/TLS
  82. # 5xx: MediaWiki
  83. # 6xx: Moodle
  84. # 7xx: Backup automático
  85. # 8xx: Dependencias
  86. # 9xx: Servicios & Firewall
  87. type="ERROR"
  88. exitNum=$1
  89. shift
  90. codeNum=$1
  91. shift
  92. extraInfo=$@
  93. case $codeNum in
  94. 1)
  95. error="$type $codeNum:\tInstalación interrumpida por el usuario.\n"
  96. ;;
  97. 2)
  98. error="$type $codeNum:\tError interno (selección express).\n"
  99. ;;
  100. 3)
  101. error="$type $codeNum:\tError interno (selección avanzada).\n"
  102. ;;
  103. 4)
  104. error="\n$type $codeNum:\tEl archivo '"$(realpath $extraInfo)"' no existe.\n"
  105. ;;
  106. 5)
  107. error="\n$type $codeNum:\tEl directorio '"$(realpath $extraInfo)"' no existe.\n"
  108. ;;
  109. 6)
  110. error="$type $codeNum:\tError interno (selección SSL/TLS).\n"
  111. ;;
  112. 10)
  113. error="$type $codeNum:\tOpción inesperada '$extraInfo'.\n"
  114. ;;
  115. 11)
  116. error="$type $codeNum:\tDominio Principal no definido ('--hostname \"ejemplo.com\"').\n"
  117. ;;
  118. 12)
  119. error="$type $codeNum:\tContraseña SQL no definida ('--password-sql \"pass\"').\n"
  120. ;;
  121. 13)
  122. error="$type $codeNum:\tTamaño de subida no definido ('--max-upload-size \"100M\"').\n"
  123. ;;
  124. 14)
  125. error="$type $codeNum:\tNombre Media Wiki no definida (--nombre-mw \"Wiki de Ejemplo\").\n"
  126. ;;
  127. 15)
  128. error="$type $codeNum:\tDominios Media Wiki no definidos (--dominios-mw \"ejemplo.com wiki.ejemplo.com\").\n"
  129. ;;
  130. 16)
  131. error="$type $codeNum:\tContraseña Media Wiki no definida (--password-mw \"pass\").\n"
  132. ;;
  133. 17)
  134. error="$type $codeNum:\tNombre Moodle no definido (--nombre-mo \"Campus Virtual de Ejemplo\").\n"
  135. ;;
  136. 18)
  137. error="$type $codeNum:\tNombre Corto Moodle no definido (--nombre-corto-mo \"Ejemplo\").\n"
  138. ;;
  139. 19)
  140. error="$type $codeNum:\tDominio Moodle no definido (--dominio-mo \"moodle.ejemplo.com\").\n"
  141. ;;
  142. 20)
  143. error="$type $codeNum:\tContraseña Moodle no definida (--password-mo \"pass\").\n"
  144. ;;
  145. 100)
  146. error="$type $codeNum:\tError interno (selección del servidor web).\n"
  147. ;;
  148. 101)
  149. error="\n$type $codeNum:\tError al instalar Apache2.\nDetalles:\n$extraInfo\n"
  150. ;;
  151. 102)
  152. error="\n$type $codeNum:\tError al instalar Nginx.\nDetalles:\n$extraInfo\n"
  153. ;;
  154. 103)
  155. error="\n$type $codeNum:\tError al nstalar repositorio 'epel-release'.\nDetalles:\n$extraInfo\n"
  156. ;;
  157. 104)
  158. error="\n$type $codeNum:\tError interno (instalación Apache2).\n"
  159. ;;
  160. 105)
  161. error="\n$type $codeNum:\tError interno (instalación Nginx).\n"
  162. ;;
  163. 106)
  164. type="WARNING"
  165. error="\n$type $codeNum:\tImposible instalar 'info.php'.\n"
  166. ;;
  167. 107)
  168. error="\n$type $codeNum:\tError al configurar Nginx.\n"
  169. ;;
  170. 108)
  171. error="\n$type $codeNum:\tError al configurar Apache2.\n"
  172. ;;
  173. 200)
  174. error="$type $codeNum:\tError interno (selección de base de datos).\n"
  175. ;;
  176. 201)
  177. error="\n$type $codeNum:\tError al instalar MySQL.\nDetalles:\n$extraInfo\n"
  178. ;;
  179. 202)
  180. error="\n$type $codeNum:\tError al instalar MariaDB.\nDetalles:\n$extraInfo\n"
  181. ;;
  182. 203)
  183. error="\n$type $codeNum:\tError interno (instalación MySQL).\n"
  184. ;;
  185. 204)
  186. error="\n$type $codeNum:\tError interno (instalación MariaDB).\n"
  187. ;;
  188. 205)
  189. error="\n$type $codeNum:\t$DIST no incluye MySQL en sus repositorios.\n"
  190. ;;
  191. 206)
  192. type="WARNING"
  193. error="\n$type $codeNum:\tUsuario 'root' ya dispone de contraseña."
  194. ;;
  195. 207)
  196. error="\n$type $codeNum:\tImposible cambiar la contraseña de 'root'."
  197. ;;
  198. 208)
  199. error="\n$type $codeNum:\tImposible desactivar acceso 'root' desde el exterior."
  200. ;;
  201. 209)
  202. error="\n$type $codeNum:\tImposible eliminar usuarios anónimos."
  203. ;;
  204. 210)
  205. type="WARNING"
  206. error="\n$type $codeNum:\tImposible eliminar bases de datos de pruebas."
  207. ;;
  208. 211)
  209. type="WARNING"
  210. error="\n$type $codeNum:\tImposible eliminar los permisos de las bases de datos de pruebas."
  211. ;;
  212. 212)
  213. error="\n$type $codeNum:\tImposible recargar base de datos."
  214. ;;
  215. 213)
  216. error="\n$type $codeNum:\tImposible configurar SQL.\n"
  217. ;;
  218. 214)
  219. type="WARNING"
  220. error="\n$type $codeNum:\tSQL ya está configurado."
  221. ;;
  222. 300)
  223. error="\n$type $codeNum:\tError interno (instalación PHP-7).\n"
  224. ;;
  225. 301)
  226. error="\n$type $codeNum:\tError interno (Web Server no seleccionado).\n"
  227. ;;
  228. 302)
  229. error="\n$type $codeNum:\tError al instalar PHP-7.\nDetalles:\n$extraInfo\n"
  230. ;;
  231. 303)
  232. error="\n$type $codeNum:\tError al instalar Repositorio Remi.\nDetalles:\n$extraInfo\n"
  233. ;;
  234. 304)
  235. error="\n$type $codeNum:\tSistema Operativo no compatible con PHP-7 ($OS $DIST $REV).\n"
  236. ;;
  237. 305)
  238. error="\n$type $codeNum:\tImposible configurar PHP-7.\n"
  239. ;;
  240. 401)
  241. error="\n$type $codeNum:\tError al instalar 'certbot' (Let's Encrypt).\n"
  242. ;;
  243. 402)
  244. error="\n$type $codeNum:\tImposible generar Certificados Autofirmados.\n"
  245. ;;
  246. 403)
  247. error="\n$type $codeNum:\tImposible generar claves de intercambio Diffie-Hellman.\n"
  248. ;;
  249. 404)
  250. error="\n$type $codeNum:\tImposible generar Certificados Let's Encrypt.\n"
  251. ;;
  252. 501)
  253. error="\n$type $codeNum:\tImposible descargar MediaWiki-1.31.0.\n"
  254. ;;
  255. 502)
  256. error="\n$type $codeNum:\tImposible configurar MediaWiki-1.31.0.\n"
  257. ;;
  258. 503)
  259. type="WARNING"
  260. error="\n$type $codeNum:\tYa existe una copia configurada de MediaWiki en el dominio: '$extraInfo'."
  261. ;;
  262. 601)
  263. error="\n$type $codeNum:\tImposible descargar Moodle-3.5.1.\n"
  264. ;;
  265. 602)
  266. error="\n$type $codeNum:\tImposible configurar Moodle-3.5.1.\n"
  267. ;;
  268. 603)
  269. type="WARNING"
  270. error="\n$type $codeNum:\tYa existe una copia configurada de Moodle en el dominio: '$extraInfo'."
  271. ;;
  272. 604)
  273. error="\n$type $codeNum:\tImposible configurar SELinux.\n"
  274. ;;
  275. 605)
  276. error="\n$type $codeNum:\tImposible instalar 'policycoreutils-python'.Detalles:\n$extraInfo\n"
  277. ;;
  278. 701)
  279. type="WARNING"
  280. error="\n$tupe $codeNum:\tImposible configurar actualizaciones automáticas.\n"
  281. ;;
  282. 800)
  283. error="$type $codeNum:\tEs necesario ser root ('sudo $0').\n"
  284. ;;
  285. 801)
  286. error="$type $codeNum:\t'whiptail' no instalado.\n"
  287. ;;
  288. 802)
  289. error="$type $codeNum:\t'hostnamectl' no instalado.\n"
  290. ;;
  291. 803)
  292. error="$type $codeNum:\t'apt-get' no instalado.\n"
  293. ;;
  294. 804)
  295. error="$type $codeNum:\t'yum' no instalado.\n"
  296. ;;
  297. 805)
  298. error="\n$type $codeNum:\tImposible actualizar repositorio\nDetalles:\n$extraInfo.\n"
  299. ;;
  300. 806)
  301. error="$type $codeNum:\t'ufw' no instalado.\nDetalles:\n$extraInfo\n"
  302. ;;
  303. 807)
  304. error="$type $codeNum:\t'firewall-cmd' no instalado.\n"
  305. ;;
  306. 808)
  307. error="$type $codeNum:\t'tput' no instalado.\nDetalles:\n$extraInfo\n"
  308. ;;
  309. 809)
  310. error="$type $codeNum:\t'sed' no instalado.\nDetalles:\n$extraInfo\n"
  311. ;;
  312. 810)
  313. error="$type $codeNum:\t'curl' no instalado.\nDetalles:\n$extraInfo\n"
  314. ;;
  315. 811)
  316. error="$type $codeNum:\t'tar' no instalado.\nDetalles:\n$extraInfo\n"
  317. ;;
  318. 812)
  319. error="$type $codeNum:\t'gzip' no instalado.\nDetalles:\n$extraInfo\n"
  320. ;;
  321. 813)
  322. error="$type $codeNum:\t'bzip2' no instalado.\nDetalles:\n$extraInfo\n"
  323. ;;
  324. 814)
  325. error="$type $codeNum:\t'xz' no instalado.\nDetalles:\n$extraInfo\n"
  326. ;;
  327. 815)
  328. error="$type $codeNum:\t'openssl' no instalado.\nDetalles:\n$extraInfo\n"
  329. ;;
  330. 816)
  331. error="$type $codeNum:\t'find' no instalado.\n"
  332. ;;
  333. 817)
  334. error="$type $codeNum:\tLa Distribución '$OS $DIST $REV' no está soportada.\nSoportadas: Ubuntu 16.04, 18.04, Debian 9, CentOS 7 y Fedora 28.\n"
  335. ;;
  336. 900)
  337. error="$type $codeNum:\tError interno (habilitar servicio).\n"
  338. ;;
  339. 901)
  340. error="$type $codeNum:\tImposible encender servicio '$extraInfo'.\n"
  341. ;;
  342. 902)
  343. error="$type $codeNum:\tImposible habilitar servicio '$extraInfo' durante el arranque.\n"
  344. ;;
  345. 903)
  346. error="$type $codeNum:\tError interno (deshabilitar servicio).\n"
  347. ;;
  348. 904)
  349. error="$type $codeNum:\tImposible parar servicio '$extraInfo'.\n"
  350. ;;
  351. 905)
  352. error="$type $codeNum:\tImposible deshabilitar servicio '$extraInfo' durante el arranque.\n"
  353. ;;
  354. 906)
  355. type="WARNING"
  356. error="\n$type $codeNum:\tImposible añadir regla al cortafuegos ('$extraInfo').\n"
  357. ;;
  358. 907)
  359. type="WARNING"
  360. error="\n$type $codeNum:\tImposible encender cortafuegos.\n"
  361. ;;
  362. 908)
  363. error="\n$type $codeNum:\tError interno (instalar Virtual Host).\n"
  364. ;;
  365. 909)
  366. error="\n$type $codeNum:\tVirtual Host '$extraInfo' no existe.\n"
  367. ;;
  368. 910)
  369. error="\n$type $codeNum:\tImposible copiar Virtual Host '$extraInfo'.\n"
  370. ;;
  371. 911)
  372. error="\n$type $codeNum:\tImposible activar Virtual Host '$extraInfo'.\n"
  373. ;;
  374. 912)
  375. error="\n$type $codeNum:\tError interno (recargar servicio).\n"
  376. ;;
  377. 913)
  378. error="\n$type $codeNum:\tImposible recargar servicio '$extraInfo'.\n"
  379. ;;
  380. *)
  381. error="ERROR 13:\tError interno (comprobación de errores)\n"
  382. exitNum=1
  383. codeNum=13
  384. ;;
  385. esac
  386. if [ $exitNum -ne 0 ];then
  387. echo -en "$error" | tee -a $logFile
  388. if [ $type = "ERROR" ];then
  389. exit $codeNum
  390. fi
  391. fi
  392. unset error exitNum codeNum type
  393. }
  394. OSInfo() {
  395. # Detecta el OS en el que se está ejecutando el programa, así como su versión
  396. # Sólo continuará si se trata de una distribución compatible
  397. echo -en "Detectando SO..." >> $logFile
  398. OS=$(uname -s)
  399. if [ $OS = "Linux" ]; then
  400. OS="GNU/Linux"
  401. if [ -f /etc/os-release ]; then
  402. DIST=$(grep ^NAME= /etc/os-release | cut -d = -f 2 | cut -d '"' -f 2)
  403. REV=$(grep ^VERSION= /etc/os-release | cut -d = -f 2 | cut -d '"' -f 2)
  404. ID=$(grep ^ID= /etc/os-release | cut -d = -f 2 | cut -d '"' -f 2)
  405. VERSION=$(grep ^VERSION_ID= /etc/os-release | cut -d = -f 2 | cut -d '"' -f 2)
  406. for i in $ID; do
  407. case $i in
  408. debian)
  409. case $VERSION in
  410. 9)
  411. # Debian 9 Soportado
  412. ;;
  413. *)
  414. comprobarError 1 817
  415. ;;
  416. esac
  417. break
  418. ;;
  419. ubuntu)
  420. case $VERSION in
  421. 18.04)
  422. # Ubuntu 18.04 Soportado
  423. ;;
  424. 16.04)
  425. # Ubuntu 16.04 Soportado
  426. ;;
  427. *)
  428. comprobarError 1 817
  429. ;;
  430. esac
  431. break
  432. ;;
  433. rhel|centos)
  434. case $VERSION in
  435. 7)
  436. # CentOS 7 Soportado
  437. ;;
  438. *)
  439. comprobarError 1 817
  440. ;;
  441. esac
  442. break
  443. ;;
  444. fedora)
  445. case $VERSION in
  446. 28)
  447. # Fedora 28 Soportado
  448. ;;
  449. *)
  450. comprobarError 1 817
  451. ;;
  452. esac
  453. break
  454. ;;
  455. *)
  456. comprobarError 1 817
  457. ;;
  458. esac
  459. done
  460. else
  461. # Other Linux (No Soportado)
  462. comprobarError 1 817
  463. fi
  464. else
  465. # UNIX, OS X, ... (No Soportado)
  466. comprobarError 1 817
  467. fi
  468. echo -en " $OS $DIST $REV\n" >> $logFile
  469. HDInfo=$(df -h | head -1)"\n"$(df -h | grep ^/dev/sd)"\n"$(df -h | grep ^/dev/mapper)
  470. echo -en "$HDInfo\n" >> $logFile
  471. }
  472. comprobarRoot() {
  473. # Comprueba si se está ejecutando con privilegios de root
  474. comprobarError $(id -u) 800
  475. }
  476. comprobarDependencias() {
  477. # Comprueba si están instalados todos los programas necesarios.
  478. # En la mayoría de los casos, trata de instalarlos.
  479. # Comprobamos whiptail
  480. which whiptail > /dev/null 2>&1
  481. comprobarError $? 801
  482. # Comprobamos hostnamectl
  483. which hostnamectl > /dev/null 2>&1
  484. comprobarError $? 802
  485. which find > /dev/null 2>&1
  486. comprobarError $? 816
  487. case $ID in
  488. debian|ubuntu)
  489. # Comprobamos apt-get
  490. which apt-get > /dev/null 2>&1
  491. comprobarError $? 803
  492. # Actualizamos base de datos del repositorio
  493. echo -en "Actualizando repositorio APT..." | tee -a $logFile
  494. result=$(apt-get -q -y update 2>&1)
  495. comprobarError $? 805 $result
  496. echo -en " OK.\n" | tee -a $logFile
  497. # Comprobamos Firewall (ufw)
  498. which ufw > /dev/null 2>&1
  499. if [ $? -ne 0 ];then
  500. result=$(apt-get -q -y install ufw 2>&1)
  501. comprobarError $? 806 $result
  502. fi
  503. # Comprobamos tput
  504. which tput > /dev/null 2>&1
  505. if [ $? -ne 0 ];then
  506. result=$(apt-get -q -y install ncurses-bin 2>&1)
  507. comprobarError $? 808 $result
  508. fi
  509. # Comprobar sed
  510. which sed > /dev/null 2>&1
  511. if [ $? -ne 0 ];then
  512. result=$(apt-get -q -y install sed 2>&1)
  513. comprobarError $? 809 $result
  514. fi
  515. # Comprobar curl
  516. which curl > /dev/null 2>&1
  517. if [ $? -ne 0 ];then
  518. result=$(apt-get -q -y install curl 2>&1)
  519. comprobarError $? 810 $result
  520. fi
  521. # Comprobamos tar, gzip, bzip2 y xz
  522. which tar > /dev/null 2>&1
  523. if [ $? -ne 0 ];then
  524. result=$(apt-get -q -y install tar 2>&1)
  525. comprobarError $? 811 $result
  526. fi
  527. which gzip > /dev/null 2>&1
  528. if [ $? -ne 0 ];then
  529. result=$(apt-get -q -y install gzip 2>&1)
  530. comprobarError $? 812 $result
  531. fi
  532. which bzip2 > /dev/null 2>&1
  533. if [ $? -ne 0 ];then
  534. result=$(apt-get -q -y install bzip2 2>&1)
  535. comprobarError $? 813 $result
  536. fi
  537. which xz > /dev/null 2>&1
  538. if [ $? -ne 0 ];then
  539. result=$(apt-get -q -y install xz-utils 2>&1)
  540. comprobarError $? 814 $result
  541. fi
  542. which openssl > /dev/null 2>&1
  543. if [ $? -ne 0 ];then
  544. result=$(apt-get -q -y install openssl 2>&1)
  545. comprobarError $? 815 $result
  546. fi
  547. ;;
  548. centos|fedora)
  549. # Comprobamos yum
  550. which yum > /dev/null 2>&1
  551. comprobarError $? 804
  552. # Actualizamos base de datos del repositorio
  553. echo -en "Actualizando repositorio YUM..." | tee -a $logFile
  554. result=$(yum -y makecache 2>&1)
  555. comprobarError $? 805 $result
  556. echo -en " OK.\n" | tee -a $logFile
  557. # Comprobamos Firewall (firewall-cmd)
  558. which firewall-cmd > /dev/null 2>&1
  559. comprobarError $? 807
  560. # Comprobamos tput
  561. which tput > /dev/null 2>&1
  562. if [ $? -ne 0 ];then
  563. result=$(yum -y install ncurses 2>&1)
  564. comprobarError $? 808 $result
  565. fi
  566. # Comprobar sed
  567. which sed > /dev/null 2>&1
  568. if [ $? -ne 0 ];then
  569. result=$(yum -y install sed 2>&1)
  570. comprobarError $? 809 $result
  571. fi
  572. # Comprobar curl
  573. which curl > /dev/null 2>&1
  574. if [ $? -ne 0 ];then
  575. result=$(yum -y install curl 2>&1)
  576. comprobarError $? 810 $result
  577. fi
  578. # Comprobamos tar, gzip, bzip2 y xz
  579. which tar > /dev/null 2>&1
  580. if [ $? -ne 0 ];then
  581. result=$(yum -y install tar 2>&1)
  582. comprobarError $? 811 $result
  583. fi
  584. which gzip > /dev/null 2>&1
  585. if [ $? -ne 0 ];then
  586. result=$(yum -y install gzip 2>&1)
  587. comprobarError $? 812 $result
  588. fi
  589. which bzip2 > /dev/null 2>&1
  590. if [ $? -ne 0 ];then
  591. result=$(yum -y install bzip2 2>&1)
  592. comprobarError $? 813 $result
  593. fi
  594. which xz > /dev/null 2>&1
  595. if [ $? -ne 0 ];then
  596. result=$(yum -y install xz 2>&1)
  597. comprobarError $? 814 $result
  598. fi
  599. which openssl > /dev/null 2>&1
  600. if [ $? -ne 0 ];then
  601. result=$(yum -y install openssl 2>&1)
  602. comprobarError $? 815 $result
  603. fi
  604. ;;
  605. esac
  606. }
  607. inicializarVariables() {
  608. # Inicializa las variables que necesitan de un estado previo
  609. apacheOn=false
  610. nginxOn=false
  611. mySQLOn=false
  612. mariaDBOn=false
  613. phpOn=false
  614. sslOn=false
  615. letsEncryptOn=false
  616. mediaWikiOn=false
  617. moodleOn=false
  618. infoPHPOn=false
  619. backupOn=false
  620. hostname=""
  621. logFile="./."$(basename $0)".log"
  622. maxUpload="100M"
  623. webServerName=""
  624. webServerUser=""
  625. webServerGroup=""
  626. sqlServerName=""
  627. dbType=""
  628. phpFPMName=""
  629. nombreMediaWiki=""
  630. dominioMediaWiki=""
  631. passwdMediaWiki=""
  632. nombreMoodle=""
  633. nombreCortoMoodle=""
  634. dominioMoodle=""
  635. passwdMoodle=""
  636. }
  637. instalacionExpress() {
  638. # Permite una instalación rápida, haciendo el menor número de preguntas
  639. # Defecto: Nginx + MariaDB + PHP + Let's Encrypt + MediaWiki + Moodle + Backup
  640. nginxOn=true
  641. case $ID in
  642. debian)
  643. mySQLOn=true
  644. dbType="mariadb"
  645. ;;
  646. ubuntu|centos|fedora)
  647. mariaDBOn=true
  648. dbType="mariadb"
  649. ;;
  650. esac
  651. phpOn=true
  652. sslOn=true
  653. letsEncryptOn=true
  654. mediaWikiOn=true
  655. moodleOn=true
  656. backupOn=true
  657. }
  658. mostrarBienvenida() {
  659. # Pantalla de bienvenida y muestra SO y estado de los discos
  660. ANCHO=$(tput cols)
  661. ALTO=$(tput lines)
  662. whiptail --title "INSTALACION AUTO-ELEARNING" --yesno "Este script automatiza completamente la instalación de una WIKI y un CAMPUS VIRTUAL.\nPara ello instala un servidor LAMP o LEMP, el software MediaWiki y configura todo lo necesario.\n\nInformación del sistema:\nOS: $OS $DIST $REV\n$HDInfo" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --yes-button "Continuar" --no-button "Salir"
  663. comprobarError $? 1
  664. }
  665. mostrarExpress() {
  666. # Pantalla de elección entre instalación express o avanzada
  667. express=$(whiptail --title "INSTALACION EXPRESS" --radiolist "<ESPACIO>: seleccionar <TAB>: cambiar <FLECHAS>: moverse\n\nLa instalación express instala Nginx, MariaDB, PHP-7, Let's Encrypt, MediaWiki, Moodle y backups automáticos.\nSeleccione el tipo de instalación que desee:" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) 2 \
  668. "Express" "Instalación rápida" ON \
  669. "Avanzada" "Permite escoger todas las opciones disponibles" OFF \
  670. --ok-button "Continuar" --cancel-button "Salir" 3>&1 1>&2 2>&3)
  671. comprobarError $? 1
  672. case $express in
  673. Express)
  674. instalacionExpress
  675. # Preguntas mínimas
  676. establecerFQDN
  677. leerSQLPasswd
  678. mostrarMediaWiki
  679. mostrarMoodle
  680. mostrarConfirmacion
  681. ;;
  682. Avanzada)
  683. mostrarAvanzada
  684. ;;
  685. *)
  686. comprobarError 1 2
  687. ;;
  688. esac
  689. unset express
  690. }
  691. mostrarAvanzada() {
  692. # Pantalla que permite instalar un servidor LAMP o LEMP
  693. webServer=$(whiptail --title "INSTALACION AVANZADA" --radiolist "<ESPACIO>: seleccionar <TAB>: cambiar <FLECHAS>: moverse\n\nEscoge el tipo de SERVIDOR WEB a instalar:" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) 2 \
  694. "LEMP" "GNU/Linux + (E)Nginx + MySQL/MariaDB + PHP-7" ON \
  695. "LAMP" "GNU/Linux + Apache + MySQL/MariaDB + PHP-7" OFF \
  696. --ok-button "Continuar" --cancel-button "Salir" 3>&1 1>&2 2>&3)
  697. comprobarError $? 1
  698. for i in $webServer; do
  699. case $i in
  700. LEMP)
  701. nginxOn=true
  702. ;;
  703. LAMP)
  704. apacheOn=true
  705. ;;
  706. *)
  707. comprobarError 1 100
  708. ;;
  709. esac
  710. done
  711. # Opciones comunes
  712. establecerFQDN
  713. mostrarDatabase
  714. phpOn=true
  715. establecerMaxUpload
  716. mostrarComponentes
  717. mostrarConfirmacion
  718. unset webServer
  719. }
  720. leerSQLPasswd() {
  721. # Pantalla para leer la contraseña para el usuario root de SQL
  722. control=false
  723. error=""
  724. # Leemos la contreseña (stdin) y confirmamos
  725. while [ $control = false ]; do
  726. sqlPasswd=$(whiptail --title "CONTRASEÑA SQL" --passwordbox "$error""Introduzca la CONTRASEÑA para el usuario 'root' de la base de datos:" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --ok-button "Continuar" --nocancel 3>&1 1>&2 2>&3)
  727. comprobarError $? 1
  728. sqlPasswd2=$(whiptail --title "CONTRASEÑA SQL" --passwordbox "Confirme la CONTRASEÑA:" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --ok-button "Continuar" --nocancel 3>&1 1>&2 2>&3)
  729. comprobarError $? 1
  730. #echo -en "SQL Password 1: $sqlPasswd\n"
  731. #echo -en "SQL Password 2: $sqlPasswd2\n"
  732. if [ -z "$sqlPasswd" ] || [ -z "$sqlPasswd2" ]; then
  733. error="ERROR: LA CONTRASEÑA NO PUEDE ESTAR VACIA.\n"
  734. elif [ $sqlPasswd != $sqlPasswd2 ];then
  735. error="ERROR: LAS CONTRASEÑAS NO COINCIDEN.\n"
  736. else
  737. control=true
  738. fi
  739. done
  740. #echo -en "SQL Password: $sqlPasswd\n"
  741. unset control error sqlPasswd2
  742. }
  743. establecerFQDN() {
  744. # Configura el FQDN (dominio principal del servidor)
  745. while [ -z "$hostname" ]; do
  746. hostname=$(whiptail --title "FQDN" --inputbox "El nombre de DOMINIO PRINCIPAL (FQDN) de este servidor es:\n"$(hostname)"\n\n¿Quieres cambiarlo por otro?" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --ok-button "Cambiar" --cancel-button "No Cambiar" 3>&1 1>&2 2>&3)
  747. if [ $? -eq 0 ] && [ ! -z "$hostname" ]; then
  748. hostnamectl set-hostname $hostname
  749. else
  750. hostname=$(hostname)
  751. fi
  752. done
  753. echo -en "Hostname: $hostname\n" >> $logFile
  754. }
  755. mostrarDatabase() {
  756. # Pantalla que permite escoger entre instalar MariaDB o MySQL
  757. case $ID in
  758. debian)
  759. whiptail --title "BASE DE DATOS" --yesno "Para su distribucion $OS $DIST $REV, sólo está disponible la base de datos MariaDB." $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --yes-button "Continuar" --no-button "Salir"
  760. comprobarError $? 1
  761. # Excepción: aunque es MariaDB (se instala con el nombre de mysql-server)
  762. mySQLOn=true
  763. dbType="mariadb"
  764. ;;
  765. ubuntu)
  766. case $VERSION in
  767. 18.04)
  768. 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 \
  769. "MariaDB" "Instalar la base de datos MariaDB (fork de MySQL)" ON \
  770. "MySQL" "Instalar la base de datos MySQL (uso no comercial)" OFF \
  771. --ok-button "Continuar" --cancel-button "Salir" 3>&1 1>&2 2>&3)
  772. comprobarError $? 1
  773. case $database in
  774. MariaDB)
  775. mariaDBOn=true
  776. dbType="mariadb"
  777. ;;
  778. MySQL)
  779. mySQLOn=true
  780. dbType="mysqli"
  781. ;;
  782. *)
  783. comprobarError 1 200
  784. ;;
  785. esac
  786. ;;
  787. 16.04)
  788. # Ubuntu 16.04 presenta un bug en MySQL (así que lo deshabilitamos)
  789. whiptail --title "BASE DE DATOS" --yesno "Para su distribucion $OS $DIST $REV, sólo está disponible la base de datos MariaDB." $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --yes-button "Continuar" --no-button "Salir"
  790. comprobarError $? 1
  791. mariaDBOn=true
  792. dbType="mariadb"
  793. ;;
  794. esac
  795. ;;
  796. centos|fedora)
  797. whiptail --title "BASE DE DATOS" --yesno "Para su distribucion $OS $DIST $REV, sólo está disponible la base de datos MariaDB." $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --yes-button "Continuar" --no-button "Salir"
  798. comprobarError $? 1
  799. mariaDBOn=true
  800. dbType="mariadb"
  801. ;;
  802. *)
  803. comprobarError 1 200
  804. ;;
  805. esac
  806. # Otras opciones (contraseña)
  807. leerSQLPasswd
  808. }
  809. establecerMaxUpload() {
  810. # Pantalla para establecer el máximo de subida al servidor (vía PHP)
  811. control=false
  812. error=""
  813. while [ $control = false ];do
  814. maxUpload2=$(whiptail --title "PHP MAX UPLOAD" --inputbox "$error""Introduzca el TAMAÑO MAXIMO permitido de los ficheros subidos al servidor:\n(<K:Kilobyte> <M:Megabyte> <G:Gigabyte>)" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) $maxUpload --ok-button "Continuar" --cancel-button "Salir" 3>&1 1>&2 2>&3)
  815. comprobarError $? 1
  816. if [ -z "$maxUpload2" ];then
  817. error="ERROR: NO PUEDES DEJAR ESTE PARÁMETRO VACIO.\n"
  818. else
  819. control=true
  820. fi
  821. done
  822. maxUpload=$maxUpload2
  823. unset control maxUpload2
  824. }
  825. mostrarComponentes() {
  826. # Pantalla de elección de componentes (SSL/TLS, MediaWiki, Moodle, InfoPHP y Backup)
  827. componentes=$(whiptail --title "INSTALACION AVANZADA" --checklist "<ESPACIO>: seleccionar <TAB>: cambiar <FLECHAS>: moverse\n\nEscoja los componentes a instalar:" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) 5 \
  828. "SSL/TLS" "Instalar certificados para activar HTTPS" ON \
  829. "MediaWiki" "Instalar wiki con MediaWiki" ON \
  830. "Moodle" "Instalar campus virtual con Moodle" ON \
  831. "InfoPHP" "Instalar info.php (sólo para pruebas)" OFF \
  832. "Backup" "Programar backups automáticos" ON \
  833. --ok-button "Continuar" --cancel-button "Salir" 3>&1 1>&2 2>&3)
  834. comprobarError $? 1
  835. for i in $componentes; do
  836. case $i in
  837. \"SSL/TLS\")
  838. # 2 Opciones: Let's Encrypt o Autofirmado
  839. mostrarSSL
  840. ;;
  841. \"MediaWiki\")
  842. mediaWikiOn=true
  843. mostrarMediaWiki
  844. ;;
  845. \"Moodle\")
  846. moodleOn=true
  847. mostrarMoodle
  848. ;;
  849. \"InfoPHP\")
  850. infoPHPOn=true
  851. ;;
  852. \"Backup\")
  853. backupOn=true
  854. ;;
  855. *)
  856. comprobarError 1 3
  857. ;;
  858. esac
  859. done
  860. unset componentes
  861. }
  862. mostrarSSL() {
  863. # Pantalla que permite seleccionar el tipo de certificados
  864. ssl=$(whiptail --title "INSTALACION SSL/TLS" --radiolist "<ESPACIO>: seleccionar <TAB>: cambiar <FLECHAS>: moverse\n\nEscoja el tipo de Certificado SSL/TLS a instalar:" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) 2 \
  865. "LetsEncrypt" "Compatible con todos los navegadores" ON \
  866. "Auto-Firmado" "Certificados auto-firmados (sólo para pruebas)" OFF \
  867. --ok-button "Continuar" --cancel-button "Salir" 3>&1 1>&2 2>&3)
  868. comprobarError $? 1
  869. for i in $ssl; do
  870. case $i in
  871. LetsEncrypt)
  872. sslOn=true
  873. letsEncryptOn=true
  874. ;;
  875. Auto-Firmado)
  876. sslOn=true
  877. ;;
  878. *)
  879. comprobarError 1 6
  880. ;;
  881. esac
  882. done
  883. unset ssl
  884. }
  885. mostrarMediaWiki(){
  886. # Pantalla que pregunta sobre las opciones necesarias para configurar MediaWiki
  887. # Introducir nombre wiki
  888. while [ -z "$nombreMediaWiki" ]; do
  889. 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)
  890. comprobarError $? 1
  891. done
  892. # Introducir dominio
  893. while [ -z "$dominioMediaWiki" ]; do
  894. dominioMediaWiki=$(whiptail --title "CONFIGURACION MEDIAWIKI" --inputbox "Introduzca el DONIMIO/SUBDOMINIO de la Wiki.\nTenga en cuenta que el dominio debe de apuntar a la dirección IP de la máquina mediante un registro DNS.\nSi quiere introducir varios dominios sepárelos con espacios.\nEl primero será el principal.\nPor ejemplo: 'www.$hostname $hostname wiki.$hostname'" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) wiki.$hostname --ok-button "Continuar" --cancel-button "Salir" 3>&1 1>&2 2>&3)
  895. comprobarError $? 1
  896. done
  897. cont=1
  898. serverName=""
  899. aliasMediaWiki=""
  900. for dominio in $dominioMediaWiki;do
  901. if [ $cont -eq 1 ];then
  902. # Dominio Principal (ServerName)
  903. serverName=$dominio
  904. else
  905. # Dominios Secundarios (ServerAlias)
  906. aliasMediaWiki=$aliasMediaWiki" "$dominio
  907. fi
  908. cont=$((cont + 1))
  909. done
  910. dominioMediaWiki=$serverName
  911. # Introducir contraseña
  912. control=false
  913. error=""
  914. while [ $control = false ]; do
  915. passwdMediaWiki=$(whiptail --title "CONFIGURACION MEDIAWIKI" --passwordbox "$error""Introduzca la CONTRASEÑA para el usuario administrador 'admin':" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --ok-button "Continuar" --nocancel 3>&1 1>&2 2>&3)
  916. comprobarError $? 1
  917. passwdMediaWiki2=$(whiptail --title "CONFIGURACION MEDIAWIKI" --passwordbox "Confirme la CONTRASEÑA:" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --ok-button "Continuar" --nocancel 3>&1 1>&2 2>&3)
  918. comprobarError $? 1
  919. if [ -z "$passwdMediaWiki" ] || [ -z "$passwdMediaWiki2" ]; then
  920. error="ERROR: LA CONTRASEÑA NO PUEDE ESTAR VACIA.\n"
  921. elif [ $passwdMediaWiki != $passwdMediaWiki2 ];then
  922. error="ERROR: LAS CONTRASEÑAS NO COINCIDEN.\n"
  923. else
  924. control=true
  925. fi
  926. done
  927. unset control error passwdMediaWiki2 dominio cont serverName
  928. }
  929. mostrarMoodle() {
  930. # Pantalla que pregunta sobre las opciones necesarias para configurar Moodle
  931. # Introducir Nombre Moodle
  932. while [ -z "$nombreMoodle" ]; do
  933. 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)
  934. comprobarError $? 1
  935. done
  936. # Introducir Nombre Corto Moodle
  937. while [ -z "$nombreCortoMoodle" ]; do
  938. nombreCortoMoodle=$(whiptail --title "CONFIGURACION MOODLE" --inputbox "Introduzca el NOMBRE CORTO del campus virtual.\nPor ejemplo: 'Ejemplo'." $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --ok-button "Continuar" --cancel-button "Salir" 3>&1 1>&2 2>&3)
  939. comprobarError $? 1
  940. done
  941. nombreCortoMoodle=$(echo $nombreCortoMoodle | cut -d ' ' -f 1)
  942. # Introducir dominio
  943. while [ -z "$dominioMoodle" ]; do
  944. dominioMoodle=$(whiptail --title "CONFIGURACION MOODLE" --inputbox "Introduzca el DOMINIO/SUBDOMINIO del campus virtual.\nTenga en cuenta que el dominio debe de apuntar a la dirección IP de la máquina mediante un registro DNS.\nMoodle SÓLO permite un ÚNICO DOMINIO." $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) moodle.$hostname --ok-button "Continuar" --cancel-button "Salir" 3>&1 1>&2 2>&3)
  945. comprobarError $? 1
  946. done
  947. cont=1
  948. serverName=""
  949. aliasMoodle=""
  950. for dominio in $dominioMoodle;do
  951. if [ $cont -eq 1 ];then
  952. # Dominio Principal (ServerName)
  953. serverName=$dominio
  954. else
  955. # Dominios Secundarios (ServerAlias)
  956. aliasMoodle=$aliasMoodle" "$dominio
  957. fi
  958. cont=$((cont + 1))
  959. done
  960. dominioMoodle=$serverName
  961. # Introducir contraseña
  962. control=false
  963. error=""
  964. while [ $control = false ]; do
  965. passwdMoodle=$(whiptail --title "CONFIGURACION MOODLE" --passwordbox "$error""Introduzca la CONTRASEÑA para el usuario administrador 'admin':" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --ok-button "Continuar" --nocancel 3>&1 1>&2 2>&3)
  966. comprobarError $? 1
  967. passwdMoodle2=$(whiptail --title "CONFIGURACION MOODLE" --passwordbox "Confirme la CONTRASEÑA:" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --ok-button "Continuar" --nocancel 3>&1 1>&2 2>&3)
  968. comprobarError $? 1
  969. if [ -z "$passwdMoodle" ] || [ -z "$passwdMoodle2" ]; then
  970. error="ERROR: LA CONTRASEÑA NO PUEDE ESTAR VACIA.\n"
  971. elif [ $passwdMoodle != $passwdMoodle2 ];then
  972. error="ERROR: LAS CONTRASEÑAS NO COINCIDEN.\n"
  973. else
  974. control=true
  975. fi
  976. done
  977. unset control error passwdMoodle2 dominio cont serverName aliasMoodle
  978. }
  979. mostrarConfirmacion() {
  980. # Pantalla que presenta una confirmación antes de realizar la instalación
  981. whiptail --title "INSTALACION" --yesno "ESTA TODO LISTO PARA LA INSTALACION.\nNO SE OLVIDE DE GUARDAR LAS CONFIGURACIONES EN UN LUGAR SEGURO, YA QUE SERÁN IMPORTANTES POR SI DESEA REALIZAR ALGÚN CAMBIO EN EL FUTURO.\n¿DESEA CONTINUAR?" $((ALTO * 9 / 10)) $((ANCHO * 9 / 10)) --yes-button "Instalar" --no-button "Salir"
  982. comprobarError $? 1
  983. }
  984. instalarApache() {
  985. # Instala Apache2
  986. case $ID in
  987. debian|ubuntu)
  988. webServerName="apache2"
  989. result=$(apt-get -q -y install apache2 2>&1)
  990. comprobarError $? 101 $result
  991. ;;
  992. centos|fedora)
  993. webServerName="httpd"
  994. result=$(yum -y install httpd 2>&1)
  995. comprobarError $? 101 $result
  996. if [ $sslOn = true ];then
  997. # Instalamos módulo mod_ssl (no se instala por defecto)
  998. result=$(yum -y install mod_ssl 2>&1)
  999. comprobarError $? 101 $result
  1000. fi
  1001. ;;
  1002. *)
  1003. comprobarError 1 104
  1004. ;;
  1005. esac
  1006. deshabilitarServicio $webServerName
  1007. }
  1008. configurarApache() {
  1009. # Configura Apache2
  1010. case $ID in
  1011. debian|ubuntu)
  1012. apacheConfFile="./etc/apache2/apache2.conf"
  1013. if [ ! -f $apacheConfFile ];then
  1014. comprobarError 1 4 $apacheConfFile
  1015. fi
  1016. cp -f $apacheConfFile /etc/$webServerName/apache2.conf 2>/dev/null
  1017. comprobarError $? 108
  1018. webServerUser=$(grep ^User /etc/$webServerName/apache2.conf | cut -d ' ' -f 2)
  1019. webServerGroup=$(grep ^Group /etc/$webServerName/apache2.conf | cut -d ' ' -f 2)
  1020. if [ ! -L /etc/$webServerName/logs ];then
  1021. ln -s /var/log/apache2 /etc/$webServerName/logs 2>/dev/null
  1022. comprobarError $? 108
  1023. fi
  1024. # Activamos mod_rewrite (no viene activado por defecto)
  1025. a2enmod rewrite >/dev/null 2>&1
  1026. comprobarError $? 108
  1027. # Activamos mod_ssl y mod_headers (no viene activado por defecto)
  1028. if [ $sslOn = true ];then
  1029. a2enmod ssl >/dev/null 2>&1
  1030. comprobarError $? 108
  1031. a2enmod headers >/dev/null 2>&1
  1032. comprobarError $? 108
  1033. fi
  1034. unset apacheConfFile
  1035. ;;
  1036. centos|fedora)
  1037. apacheConfFile="./etc/apache2/conf/httpd.conf"
  1038. sslConfFile="./etc/apache2/conf.d/ssl.conf"
  1039. welcomeConfFile="/etc/apache2/conf.d/welcome.conf"
  1040. if [ ! -f $apacheConfFile ];then
  1041. comprobarError 1 4 $apacheConfFile
  1042. fi
  1043. cp -f $apacheConfFile /etc/$webServerName/conf/httpd.conf 2>/dev/null
  1044. comprobarError $? 108
  1045. # Desactivamos Mensaje de Bienvenida
  1046. if [ -f $welcomeConfFile ];then
  1047. sed -i -e 's/^/#/' $welcomeConfFile
  1048. comprobarError $? 108
  1049. fi
  1050. # Configuramos mod_ssl
  1051. if [ $sslOn = true ];then
  1052. if [ ! -f $sslConfFile ];then
  1053. comprobarError 1 4 $sslConfFile
  1054. fi
  1055. cp -f $sslConfFile /etc/$webServerName/conf.d/ssl.conf 2>/dev/null
  1056. comprobarError $? 108
  1057. fi
  1058. webServerUser=$(grep ^User /etc/$webServerName/conf/httpd.conf | cut -d ' ' -f 2)
  1059. webServerGroup=$(grep ^Group /etc/$webServerName/conf/httpd.conf | cut -d ' ' -f 2)
  1060. unset apacheConfFile sslConfFile welcomeConfFile
  1061. ;;
  1062. *)
  1063. comprobarError 1 108
  1064. ;;
  1065. esac
  1066. # Creamos directorios sites-available y sites-enabled
  1067. if [ ! -d "/etc/$webServerName/sites-available" ];then
  1068. mkdir "/etc/$webServerName/sites-available" 2>/dev/null
  1069. comprobarError $? 5 "/etc/$webServerName/sites-available"
  1070. fi
  1071. if [ ! -d "/etc/$webServerName/sites-enabled" ]; then
  1072. mkdir "/etc/$webServerName/sites-enabled" 2>/dev/null
  1073. comprobarError $? 5 "/etc/$webServerName/sites-enabled"
  1074. else
  1075. # Eliminar Virtual Host por defecto
  1076. if [ -f /etc/$webServerName/sites-enabled/000-default.conf ];then
  1077. rm -f /etc/$webServerName/sites-enabled/000-default.conf 2>/dev/null
  1078. fi
  1079. fi
  1080. }
  1081. instalarNginx() {
  1082. # Instala Nginx
  1083. webServerName="nginx"
  1084. case $ID in
  1085. ubuntu|debian)
  1086. result=$(apt-get -q -y install nginx 2>&1)
  1087. comprobarError $? 102 $result
  1088. ;;
  1089. centos)
  1090. # Sólo para CentOS
  1091. result=$(yum -y install epel-release)
  1092. comprobarError $? 103 $result
  1093. result=$(yum -y install nginx 2>&1)
  1094. comprobarError $? 102 $result
  1095. ;;
  1096. fedora)
  1097. result=$(yum -y install nginx 2>&1)
  1098. comprobarError $? 102 $result
  1099. ;;
  1100. *)
  1101. comprobarError 1 105
  1102. ;;
  1103. esac
  1104. deshabilitarServicio $webServerName
  1105. }
  1106. configurarNginx() {
  1107. # Configura Nginx
  1108. rm -Rf "/etc/$webServerName/!(sites-available|sites-enabled)" 2>/dev/null
  1109. comprobarError $? 107
  1110. nginxConfFile="./etc/$webServerName"
  1111. if [ -d "$nginxConfFile" ];then
  1112. cp -Rf $nginxConfFile/* /etc/$webServerName/ 2>/dev/null
  1113. comprobarError $? 107
  1114. else
  1115. comprobarError 1 5 "$nginxConfFile"
  1116. fi
  1117. # Creamos directorios sites-available y sites-enabled
  1118. if [ ! -d "/etc/$webServerName/sites-available" ];then
  1119. mkdir "/etc/$webServerName/sites-available" 2>/dev/null
  1120. comprobarError $? 5 "/etc/$webServerName/sites-available"
  1121. fi
  1122. if [ ! -d "/etc/$webServerName/sites-enabled" ]; then
  1123. mkdir "/etc/$webServerName/sites-enabled" 2>/dev/null
  1124. comprobarError $? 5 "/etc/$webServerName/sites-enabled"
  1125. else
  1126. # Eliminar Virtual Host por defecto
  1127. if [ -f /etc/$webServerName/sites-enabled/default ];then
  1128. rm -f /etc/$webServerName/sites-enabled/default 2>/dev/null
  1129. fi
  1130. fi
  1131. # Configuramos Usuario y Grupo
  1132. case $ID in
  1133. debian|ubuntu)
  1134. webServerUser="www-data"
  1135. webServerGroup=$webServerUser
  1136. ;;
  1137. centos|fedora)
  1138. webServerUser="nginx"
  1139. webServerGroup=$webServerUser
  1140. ;;
  1141. esac
  1142. sed -i '/user /c\user '$webServerUser';' /etc/$webServerName/nginx.conf
  1143. comprobarError $? 107
  1144. unset nginxConfFile
  1145. }
  1146. instalarVirtualHost() {
  1147. # Configuramos un Virtual Host para Apache o Nginx
  1148. # Uso: instalarVirtualHost $root $virtualHost $dominio $alias
  1149. if [ $# -ge 3 ];then
  1150. rootVirtualHost=$(realpath $1)
  1151. shift
  1152. virtualHostFile=$(realpath $1)
  1153. shift
  1154. dominioVirtualHost=$1
  1155. virtualHostName=$dominioVirtualHost".conf"
  1156. shift
  1157. aliasVirtualHost=$@
  1158. else
  1159. comprobarError 1 908
  1160. fi
  1161. if [ ! -f $virtualHostFile ];then
  1162. comprobarError 1 909 $virtualHostName
  1163. fi
  1164. if [ $apacheOn = true ];then
  1165. # Configuramos root, dominio y logs
  1166. sed -i '/ServerName /c\\tServerName '"$dominioVirtualHost" $virtualHostFile
  1167. comprobarError $? 908
  1168. if [ ! -z "$aliasVirtualHost" ];then
  1169. sed -i '/ServerName /a\\tServerAlias '"$aliasVirtualHost" $virtualHostFile
  1170. comprobarError $? 908
  1171. fi
  1172. sed -i '/DocumentRoot /c\\tDocumentRoot '"$rootVirtualHost" $virtualHostFile
  1173. comprobarError $? 908
  1174. sed -i '/ErrorLog /c\\tErrorLog logs/'"$dominioVirtualHost"'-error.log' $virtualHostFile
  1175. comprobarError $? 908
  1176. sed -i '/CustomLog /c\\tCustomLog logs/'"$dominioVirtualHost"'-access.log common' $virtualHostFile
  1177. comprobarError $? 908
  1178. if [ $sslOn = true ];then
  1179. sed -i '/SSLCertificateFile /c\\tSSLCertificateFile ssl/'"$dominioVirtualHost"'.crt' $virtualHostFile
  1180. comprobarError $? 908
  1181. sed -i '/SSLCertificateKeyFile /c\\tSSLCertificateKeyFile ssl/'"$dominioVirtualHost"'.key' $virtualHostFile
  1182. comprobarError $? 908
  1183. fi
  1184. elif [ $nginxOn = true ];then
  1185. # Configuramos root, dominio, logs y php-fpm.sock (NGINX)
  1186. sed -i '/root /c\\troot '$rootVirtualHost';' "$virtualHostFile"
  1187. comprobarError $? 908
  1188. sed -i '/server_name /c\\tserver_name '"$dominioVirtualHost"' '"$aliasVirtualHost"';' $virtualHostFile
  1189. comprobarError $? 908
  1190. sed -i '/access_log /c\\taccess_log /var/log/nginx/'"$dominioVirtualHost"'-access.log;' $virtualHostFile
  1191. comprobarError $? 908
  1192. sed -i '/error_log /c\\terror_log /var/log/nginx/'"$dominioVirtualHost"'-error.log;' $virtualHostFile
  1193. comprobarError $? 908
  1194. socket=$(find /var/run/ -type s -name 'php*.sock')
  1195. sed -i '/fastcgi_pass /c\\t\tfastcgi_pass unix:'"$socket"';' $virtualHostFile
  1196. comprobarError $? 908
  1197. if [ $sslOn = true ];then
  1198. sed -i '/ssl_certificate /c\\tssl_certificate ssl/'"$dominioVirtualHost"'.crt;' $virtualHostFile
  1199. comprobarError $? 908
  1200. sed -i '/ssl_certificate_key /c\\tssl_certificate_key ssl/'"$dominioVirtualHost"'.key;' $virtualHostFile
  1201. comprobarError $? 908
  1202. fi
  1203. fi
  1204. # Copiamos ficheros de configuración
  1205. cp -f $virtualHostFile "/etc/$webServerName/sites-available/$virtualHostName" >> $logFile 2>&1
  1206. comprobarError $? 910
  1207. if [ -f "/etc/$webServerName/sites-enabled/$virtualHostName" ];then
  1208. rm -f /etc/$webServerName/sites-enabled/$virtualHostName 2>/dev/null
  1209. comprobarError 911 $virtualHostName
  1210. fi
  1211. ln -s "/etc/$webServerName/sites-available/$virtualHostName" "/etc/$webServerName/sites-enabled/$virtualHostName" >> $logFile 2>&1
  1212. comprobarError $? 911 $virtualHostName
  1213. recargarServicio $webServerName
  1214. unset rootVirtualHost dominioVirtualHost virtualHostFile virtualHostName aliasVirtualHost socket
  1215. }
  1216. establecerSQLPasswd() {
  1217. # Establecemos SQL root passwd y securizamos BD (mysql_secure_installation)
  1218. # Comprobamos si ya tiene una contraseña asignada
  1219. mysql -e "FLUSH PRIVILEGES" >> $logFile 2>&1
  1220. if [ $? -eq 0 ];then
  1221. # Establecemos contraseña del usuario root (y desactivamos posibles plugins para forzar login por contraseña)
  1222. mysql -e "UPDATE mysql.user SET plugin = '', Password = PASSWORD('$sqlPasswd') WHERE User = 'root'" >> $logFile 2>&1
  1223. if [ $? -ne 0 ];then
  1224. # Lo intentamos de otra forma (para versiones modernas de mysql)
  1225. mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '$sqlPasswd'" >> $logFile 2>&1
  1226. comprobarError $? 207
  1227. fi
  1228. # Aplicamos el cambio de contraseña
  1229. mysql -e "FLUSH PRIVILEGES" >> $logFile 2>&1
  1230. # Desactivamos acceso root desde el exterior (solo localhost)
  1231. mysql -u root --password=$sqlPasswd -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')" >> $logFile 2>&1
  1232. comprobarError $? 208
  1233. # Eliminamos todos los usuarios anónimos
  1234. mysql -u root --password=$sqlPasswd -e "DELETE FROM mysql.user WHERE User=''" >> $logFile 2>&1
  1235. comprobarError $? 209
  1236. # Eliminamos bases de datos 'test'
  1237. mysql -u root --password=$sqlPasswd -e "DROP DATABASE IF EXISTS test" >> $logFile 2>&1
  1238. comprobarError $? 210
  1239. # Eliminamos privilegios de la base de datos 'test'
  1240. mysql -u root --password=$sqlPasswd -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'" >> $logFile 2>&1
  1241. comprobarError $? 211
  1242. # Aplicamos los cambios
  1243. mysql -u root --password=$sqlPasswd -e "FLUSH PRIVILEGES" >> $logFile 2>&1
  1244. comprobarError $? 212
  1245. else
  1246. comprobarError 1 206
  1247. fi
  1248. }
  1249. instalarMySQL() {
  1250. # Instala MySQL (sólo para Debian)
  1251. sqlServerName="mysql"
  1252. case $ID in
  1253. debian|ubuntu)
  1254. result=$(apt-get -q -y install mysql-server mysql-client 2>&1)
  1255. comprobarError $? 201 $result
  1256. ;;
  1257. centos|fedora)
  1258. # MySQL no disponible en RHEL.
  1259. # No se instalará MySQL en distribuciones RHEL
  1260. comprobarError 1 205
  1261. ;;
  1262. *)
  1263. comprobarError 1 203
  1264. ;;
  1265. esac
  1266. deshabilitarServicio $sqlServerName
  1267. }
  1268. instalarMariaDB() {
  1269. # Instala MariaDB
  1270. sqlServerName="mariadb"
  1271. case $ID in
  1272. debian)
  1273. result=$(apt-get -q -y install mariadb-server mariadb-client 2>&1)
  1274. comprobarError $? 202 $result
  1275. ;;
  1276. ubuntu)
  1277. case $VERSION in
  1278. 16.04)
  1279. sqlServerName="mysql"
  1280. ;;
  1281. esac
  1282. result=$(apt-get -q -y install mariadb-server mariadb-client 2>&1)
  1283. comprobarError $? 202 $result
  1284. ;;
  1285. centos|fedora)
  1286. result=$(yum -y install mariadb-server mariadb 2>&1)
  1287. comprobarError $? 202 $result
  1288. ;;
  1289. *)
  1290. comprobarError 1 204
  1291. ;;
  1292. esac
  1293. deshabilitarServicio $sqlServerName
  1294. }
  1295. configurarSQL() {
  1296. # Configura BarracudaFS en mysql (necesario para Moodle)
  1297. # Configura MariaDB o MySQL
  1298. case $ID in
  1299. debian|ubuntu)
  1300. sqlConfFile="/etc/mysql/my.cnf"
  1301. ;;
  1302. centos|fedora)
  1303. sqlConfFile="/etc/my.cnf"
  1304. ;;
  1305. *)
  1306. comprobarError 1 213
  1307. ;;
  1308. esac
  1309. if [ ! -f $sqlConfFile ];then
  1310. comprobarError 1 213
  1311. fi
  1312. grep "# Configuration for Moodle" $sqlConfFile >/dev/null 2>&1
  1313. if [ $? -ne 0 ];then
  1314. # Establecemos UTF8 (codificación de caracteres) y Barracuda (sistema de ficheros)
  1315. echo -en "\n# Configuration for Moodle\n" >> $sqlConfFile
  1316. echo -en "[client]\n" >> $sqlConfFile
  1317. echo -en "default-character-set = utf8mb4\n\n" >> $sqlConfFile
  1318. echo -en "[mysqld]\n" >> $sqlConfFile
  1319. echo -en "innodb_file_format = Barracuda\n" >> $sqlConfFile
  1320. echo -en "innodb_file_per_table = 1\n" >> $sqlConfFile
  1321. echo -en "innodb_large_prefix\n\n" >> $sqlConfFile
  1322. echo -en "character-set-server = utf8mb4\n" >> $sqlConfFile
  1323. echo -en "collation-server = utf8mb4_unicode_ci\n" >> $sqlConfFile
  1324. echo -en "skip-character-set-client-handshake\n\n" >> $sqlConfFile
  1325. echo -en "[mysql]\n" >> $sqlConfFile
  1326. echo -en "default-character-set = utf8mb4\n" >> $sqlConfFile
  1327. else
  1328. comprobarError 1 214
  1329. fi
  1330. unset sqlConfFile
  1331. }
  1332. instalarPHP() {
  1333. # Instalamos PHP-7 y los módulos PHP que necesitan MediaWiki y Moodle
  1334. case $ID in
  1335. debian)
  1336. phpFPMName="php7.0-fpm"
  1337. if [ $apacheOn = true ]; then
  1338. 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)
  1339. comprobarError $? 302 $result
  1340. elif [ $nginxOn = true ];then
  1341. result=$(apt-get -q -y install php-fpm php-mysql php-intl php-mbstring php-xml php-apcu php-gd php-curl php-zip php-soap php-xmlrpc 2>&1)
  1342. comprobarError $? 302 $result
  1343. deshabilitarServicio $phpFPMName
  1344. else
  1345. comprobarError 1 301
  1346. fi
  1347. ;;
  1348. ubuntu)
  1349. case $VERSION in
  1350. 18.04)
  1351. phpFPMName="php7.2-fpm"
  1352. ;;
  1353. 16.04)
  1354. phpFPMName="php7.0-fpm"
  1355. ;;
  1356. esac
  1357. if [ $apacheOn = true ]; then
  1358. 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)
  1359. comprobarError $? 302 $result
  1360. elif [ $nginxOn = true ];then
  1361. result=$(apt-get -q -y install php-fpm php-mysql php-intl php-mbstring php-xml php-apcu php-gd php-curl php-zip php-soap php-xmlrpc 2>&1)
  1362. comprobarError $? 302 $result
  1363. deshabilitarServicio $phpFPMName
  1364. else
  1365. comprobarError 1 301
  1366. fi
  1367. ;;
  1368. centos)
  1369. phpFPMName="php-fpm"
  1370. # Necesitamos un repositorio adicional para PHP-7 (EPEL-RELEASE) sólo en CentOS
  1371. result=$(yum -y install epel-release yum-utils 2>&1)
  1372. comprobarError $? 103 $result
  1373. # Necesitamos un repositorio adicional para PHP-7 (REMI-RELEASE)
  1374. if [ ! -f /etc/yum.repos.d/remi-php72.repo ];then
  1375. result=$(yum -y install "http://remi.mirrors.cu.be/enterprise/remi-release-7.rpm" 2>&1)
  1376. comprobarError $? 303 $result
  1377. fi
  1378. # Activamos repositorio remi-php72
  1379. result=$(yum-config-manager --enable remi-php72 2>&1)
  1380. comprobarError $? 303 $result
  1381. # Instalamos PHP-7.2
  1382. if [ $apacheOn = true ];then
  1383. result=$(yum -y install php php-mysql php-intl php-mbstring php-mcrypt php-xml php-pecl-apcu php-gd php-pear-Net-Curl php-pecl-zip php-soap php-xmlrpc 2>&1)
  1384. comprobarError $? 302 $result
  1385. elif [ $nginxOn = true ];then
  1386. result=$(yum -y install php php-fpm php-mysql php-intl php-mbstring php-mcrypt php-xml php-pecl-apcu php-gd php-pear-Net-Curl php-pecl-zip php-soap php-xmlrpc 2>&1)
  1387. comprobarError $? 302 $result
  1388. deshabilitarServicio $phpFPMName
  1389. else
  1390. comprobarError 1 301
  1391. fi
  1392. ;;
  1393. fedora)
  1394. phpFPMName="php-fpm"
  1395. # Instalamos PHP-7.2
  1396. if [ $apacheOn = true ];then
  1397. result=$(yum -y install php php-mysqlnd php-intl php-mbstring php-pecl-mcrypt php-xml php-pecl-apcu php-gd php-pear-Net-Curl php-pecl-zip php-soap php-xmlrpc php-json 2>&1)
  1398. comprobarError $? 302 $result
  1399. elif [ $nginxOn = true ];then
  1400. result=$(yum -y install php php-fpm php-mysqlnd php-intl php-mbstring php-pecl-mcrypt php-xml php-pecl-apcu php-gd php-pear-Net-Curl php-pecl-zip php-soap php-xmlrpc php-json 2>&1)
  1401. comprobarError $? 302 $result
  1402. deshabilitarServicio $phpFPMName
  1403. else
  1404. comprobarError 1 301
  1405. fi
  1406. ;;
  1407. *)
  1408. comprobarError 1 300
  1409. ;;
  1410. esac
  1411. }
  1412. configurarPHP() {
  1413. # Configura PHP para segurizarlo y establecer máximo de subida.
  1414. case $ID in
  1415. debian)
  1416. phpConfFile="./etc/php/php.ini.debian"
  1417. phpDest="/etc/php/7.0/cli/php.ini"
  1418. ;;
  1419. ubuntu)
  1420. phpConfFile="./etc/php/php.ini.debian"
  1421. case $VERSION in
  1422. 18.04)
  1423. phpDest="/etc/php/7.2/cli/php.ini"
  1424. ;;
  1425. 16.04)
  1426. phpDest="/etc/php/7.0/cli/php.ini"
  1427. ;;
  1428. esac
  1429. ;;
  1430. centos|fedora)
  1431. phpConfFile="./etc/php/php.ini.rhel"
  1432. phpDest="/etc/php.ini"
  1433. ;;
  1434. *)
  1435. comprobarError 1 305
  1436. ;;
  1437. esac
  1438. if [ ! -f $phpConfFile ];then
  1439. comprobarError 1 4 "$phpConfFile"
  1440. fi
  1441. # Copiamos configuración
  1442. cp -f $phpConfFile $phpDest 2>/dev/null
  1443. comprobarError $? 305
  1444. # Configuramos cgi.fix_pathinfo
  1445. sed -i '/cgi.fix_pathinfo=/c\cgi.fix_pathinfo=0' $phpDest
  1446. comprobarError $? 305
  1447. # Configuramos post_max_size
  1448. sed -i '/post_max_size =/c\post_max_size = '$maxUpload $phpDest
  1449. comprobarError $? 305
  1450. # Configuramos upload_max_filesize
  1451. sed -i '/upload_max_filesize =/c\upload_max_filesize = '$maxUpload $phpDest
  1452. comprobarError $? 305
  1453. # Configurar php-fpm (sólo en RHEL con Nginx)
  1454. case $ID in
  1455. centos|fedora)
  1456. if [ $nginxOn = true ];then
  1457. # Configurar Socket UNIX
  1458. phpConfFile="./etc/php/php-fpm.d/www.conf"
  1459. phpDest="/etc/php-fpm.d/www.conf"
  1460. if [ ! -f $phpConfFile ];then
  1461. comprobarError $? 4 "$phpConfFile"
  1462. fi
  1463. cp -f $phpConfFile $phpDest 2>/dev/null
  1464. comprobarError $? 305
  1465. # Configurar Permisos /var/lib/php
  1466. chown -R $webServerUser:$webServerGroup /var/lib/php/
  1467. comprobarError $? 305
  1468. fi
  1469. ;;
  1470. esac
  1471. unset phpConfFile phpDest
  1472. }
  1473. instalarLetsEncrypt() {
  1474. # Instala certbot (para certificados Let's Encrypt)
  1475. # Comprobamos si cerbot está instalado
  1476. which certbot > /dev/null 2>&1
  1477. if [ $? -ne 0 ];then
  1478. # Descargar Let's Encrypt, hacer ejecutable e instalar
  1479. curl -o ./var/certbot https://dl.eff.org/certbot-auto 2>/dev/null
  1480. comprobarError $? 401
  1481. chmod 755 ./var/certbot 2>/dev/null
  1482. comprobarError $? 401
  1483. cp -f ./var/certbot /usr/bin/certbot 2>/dev/null
  1484. comprobarError $? 401
  1485. # Configurar /etc/cron.d/certbot para renovar automáticamente los certificados
  1486. echo -en "# /etc/cron.d/certbot: certbot autorenew the certificates twice a day\n" > /etc/cron.d/certbot
  1487. echo -en "SHELL=/bin/sh\n" >> /etc/cron.d/certbot
  1488. echo -en "PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\n\n" >> /etc/cron.d/certbot
  1489. echo -en "# Job start twice per day (4am & 2pm) in a random minute" >> /etc/cron.d/certbot
  1490. echo -en "0 4,14 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew\n" >> /etc/cron.d/certbot
  1491. fi
  1492. }
  1493. generarCertLetsEncrypt() {
  1494. # Generar Certificados SEGUROS Let's Encrypt
  1495. dominios=""
  1496. if [ $apacheOn = true ];then
  1497. # Usamos plugin para apache
  1498. if [ $mediaWikiOn = true ];then
  1499. if [ ! -z "$aliasMediaWiki" ];then
  1500. dominios=$dominioMediaWiki$(echo "$aliasMediaWiki" | sed -e 's/ /,/g')
  1501. else
  1502. dominios=$dominioMediaWiki
  1503. fi
  1504. certbot -n --agree-tos --email "admin@$hostname" --apache --domains "$dominios" >> $logFile 2>&1
  1505. comprobarError $? 404
  1506. fi
  1507. if [ $moodleOn = true ];then
  1508. certbot -n --agree-tos --email "admin@$hostname" --apache --domains "$dominioMoodle" >> $logFile 2>&1
  1509. comprobarError $? 404
  1510. fi
  1511. elif [ $nginxOn = true ];then
  1512. # Usamos plugin para nginx
  1513. if [ $mediaWikiOn = true ];then
  1514. if [ ! -z "$aliasMediaWiki" ];then
  1515. dominios=$dominioMediaWiki$(echo "$aliasMediaWiki" | sed -e 's/ /,/g')
  1516. else
  1517. dominios=$dominioMediaWiki
  1518. fi
  1519. certbot -n --agree-tos --email "admin@$hostname" --nginx --domains "$dominios" >> $logFile 2>&1
  1520. comprobarError $? 404
  1521. fi
  1522. if [ $moodleOn = true ];then
  1523. certbot -n --agree-tos --email "admin@$hostname" --nginx --domains "$dominioMoodle" >> $logFile 2>&1
  1524. comprobarError $? 404
  1525. fi
  1526. else
  1527. comprobarError 1 404
  1528. fi
  1529. unset dominios
  1530. }
  1531. generarCertAutofirmado() {
  1532. # Genera certificados autofirmados
  1533. # Estos certificados no son seguros, pero valen para pruebas o como paso intermedio para obtener los válidos
  1534. # Uso: generarCertAutofirmado $dominio
  1535. dominio=$1
  1536. sslDir="/etc/$webServerName/ssl"
  1537. keyFile="$sslDir/$dominio.key"
  1538. reqFile="$sslDir/$dominio.csr"
  1539. certFile="$sslDir/$dominio.crt"
  1540. dhParamFile="$sslDir/dhparam.pem"
  1541. if [ ! -d "$sslDir" ];then
  1542. mkdir "$sslDir" 2>/dev/null
  1543. comprobarError $? 5 "$sslDir"
  1544. fi
  1545. # Generamos clave privada RSA de 2048 bits
  1546. openssl genrsa -out "$keyFile" 2048 >/dev/null 2>&1
  1547. comprobarError $? 402
  1548. # Generamos petición de firma
  1549. echo -en "ES\nMadrid\nMadrid\n$dominio\n$dominio\n$dominio\nadmin@$dominio\n\n\n" | openssl req -new -key "$keyFile" -out "$reqFile" >/dev/null 2>&1
  1550. comprobarError $? 402
  1551. # Autofirmados clave para 2 años (730 días)
  1552. openssl x509 -req -days 730 -in "$reqFile" -signkey "$keyFile" -out "$certFile" >/dev/null 2>&1
  1553. comprobarError $? 402
  1554. # Eliminamos petición
  1555. rm -f $reqFile
  1556. comprobarError $? 402
  1557. # Añadimos clave Diffie-Hellman al certificado
  1558. if [ -f "$dhParamFile" ];then
  1559. cat "$dhParamFile" >> $certFile
  1560. comprobarError $? 402
  1561. fi
  1562. # Cambiamos permisos
  1563. chmod 644 $certFile
  1564. comprobarError $? 402
  1565. chmod 400 $keyFile
  1566. comprobarError $? 402
  1567. unset dominio sslDir keyFile reqFile certFile dhParamFile
  1568. }
  1569. generarDHParam() {
  1570. # Genera clave de intercambio Diffie-Hellman y lo configuramos
  1571. # Esto aumenta notablemente la seguridad de SSL/TLS
  1572. sslDir="/etc/$webServerName/ssl"
  1573. dhParamFile="$sslDir/dhparam.pem"
  1574. nginxConfFile="/etc/$webServerName/nginx.conf"
  1575. if [ ! -d "$sslDir" ];then
  1576. mkdir "$sslDir" 2>/dev/null
  1577. comprobarError $? 5 "$sslDir"
  1578. fi
  1579. openssl dhparam -out "$dhParamFile" 2048 >/dev/null 2>&1
  1580. comprobarError $? 403
  1581. # Configuramos Servidor Web
  1582. if [ $nginxOn = true ];then
  1583. sed -i '/ssl_param /c\\tssl_dhparam '$dhParamFile';' $nginxConfFile
  1584. comprobarError $? 403
  1585. fi
  1586. # unset sslDir dhParamFile apacheConfFile nginxConfFile
  1587. unset sslDir dhParamFile nginxConfFile
  1588. }
  1589. habilitarServicio() {
  1590. # Arrancamos y habilitamos el servicio (con SystemD, Upstart o SystemV)
  1591. # Intentamos con systemctl (SystemD)
  1592. #echo -en "Habilitando Servicio '$1'" | tee -a $logFile
  1593. if [ $# -le 0 ];then
  1594. comprobarError 1 900
  1595. fi
  1596. which systemctl > /dev/null 2>&1
  1597. if [ $? -eq 0 ]; then
  1598. #echo -en " (SystemD)..." | tee -a $logFile
  1599. systemctl start $1 > /dev/null 2>&1
  1600. comprobarError $? 901 $1
  1601. systemctl enable $1 > /dev/null 2>&1
  1602. comprobarError $? 902 $1
  1603. else
  1604. # Intentamos con service (Upstart)
  1605. which service > /dev/null 2>&1
  1606. if [ $? -eq 0 ]; then
  1607. #echo -en " (Upstart)..." | tee -a $logFile
  1608. service $1 start > /dev/null 2>&1
  1609. comprobarError $? 901 $1
  1610. else
  1611. # Intentamos con init.d (SystemV)
  1612. #echo -en " (SystemV)..." | tee -a $logFile
  1613. /etc/init.d/$1 start > /dev/null 2>&1
  1614. comprobarError $? 901 $1
  1615. fi
  1616. # Intentamos habilitar en el arranque (Upstart)
  1617. which update-rc.d > /dev/null 2>&1
  1618. if [ $? -eq 0 ];then
  1619. update-rc.d $1 enable
  1620. comprobarError $? 902 $1
  1621. else
  1622. # Intentamos habilitar en el arranque (SystemV)
  1623. which chkconfig > /dev/null 2>&1
  1624. if [ $? -eq 0 ];then
  1625. chkconfig $1 on
  1626. comprobarError $? 902 $1
  1627. else
  1628. # ¿Qué mas opciones nos quedan?
  1629. comprobarError 1 902 $1
  1630. fi
  1631. fi
  1632. fi
  1633. # Mejora: comprobar si el servicio está parado
  1634. #echo -en " OK.\n" | tee -a $logFile
  1635. }
  1636. deshabilitarServicio() {
  1637. # Paramos y deshabilitamos el servicio (con SystemD, Upstart o SystemV)
  1638. # Intentamos con systemctl (SystemD)
  1639. #echo -en "Deshabilitando Servicio '$1'" | tee -a $logFile
  1640. if [ $# -le 0 ];then
  1641. comprobarError 1 903
  1642. fi
  1643. which systemctl > /dev/null 2>&1
  1644. if [ $? -eq 0 ]; then
  1645. #echo -en " (SystemD)..." | tee -a $logFile
  1646. systemctl stop $1 > /dev/null 2>&1
  1647. comprobarError $? 904 $1
  1648. systemctl disable $1 > /dev/null 2>&1
  1649. comprobarError $? 905 $1
  1650. else
  1651. # Intentamos con service (Upstart)
  1652. which service > /dev/null 2>&1
  1653. if [ $? -eq 0 ]; then
  1654. #echo -en " (Upstart)..." | tee -a $logFile
  1655. service $1 stop > /dev/null 2>&1
  1656. comprobarError $? 904 $1
  1657. else
  1658. # Intentamos con init.d (SystemV)
  1659. #echo -en " (SystemV)..." | tee -a $logFile
  1660. /etc/init.d/$1 stop > /dev/null 2>&1
  1661. comprobarError $? 904 $1
  1662. fi
  1663. # Intentamos habilitar en el arranque (Upstart)
  1664. which update-rc.d > /dev/null 2>&1
  1665. if [ $? -eq 0 ];then
  1666. update-rc.d $1 disable
  1667. comprobarError $? 905 $1
  1668. else
  1669. # Intentamos habilitar en el arranque (SystemV)
  1670. which chkconfig > /dev/null 2>&1
  1671. if [ $? -eq 0 ];then
  1672. chkconfig $1 off
  1673. comprobarError $? 905 $1
  1674. else
  1675. # ¿Qué mas opciones nos quedan?
  1676. comprobarError 1 905 $1
  1677. fi
  1678. fi
  1679. fi
  1680. # Mejora: comprobar si el servicio está funcionando
  1681. #echo -en " OK.\n" | tee -a $logFile
  1682. }
  1683. recargarServicio() {
  1684. # Recargamos el servicio (con SystemD, Upstart o SystemV)
  1685. # Intentamos con systemctl (SystemD)
  1686. #echo -en "Recargando Servicio '$1'" | tee -a $logFile
  1687. if [ $# -le 0 ];then
  1688. comprobarError 1 912
  1689. fi
  1690. which systemctl > /dev/null 2>&1
  1691. if [ $? -eq 0 ]; then
  1692. #echo -en " (SystemD)..." | tee -a $logFile
  1693. systemctl reload $1 > /dev/null 2>&1
  1694. comprobarError $? 913 $1
  1695. else
  1696. # Intentamos con service (Upstart)
  1697. which service > /dev/null 2>&1
  1698. if [ $? -eq 0 ]; then
  1699. #echo -en " (Upstart)..." | tee -a $logFile
  1700. service $1 reload > /dev/null 2>&1
  1701. comprobarError $? 913 $1
  1702. else
  1703. # Intentamos con init.d (SystemV)
  1704. #echo -en " (SystemV)..." | tee -a $logFile
  1705. /etc/init.d/$1 reload > /dev/null 2>&1
  1706. comprobarError $? 913 $1
  1707. fi
  1708. fi
  1709. # Mejora: comprobar si el servicio está funcionando
  1710. #echo -en " OK.\n" | tee -a $logFile
  1711. }
  1712. configurarCortafuegos() {
  1713. # Configuramos cortafuegos (añadir reglas y encender)
  1714. # Comprobamos si estamos usando SSH
  1715. esSSH $PPID
  1716. case $ID in
  1717. debian|ubuntu)
  1718. ufw allow 80/tcp >> $logFile 2>&1
  1719. comprobarError $? 906 "80/tcp"
  1720. if [ $sshControl = true ];then
  1721. ufw allow 22/tcp >> $logFile 2>&1
  1722. comprobarError $? 906 "22/tcp"
  1723. fi
  1724. if [ $sslOn = true ];then
  1725. ufw allow 443/tcp >> $logFile 2>&1
  1726. comprobarError $? 906 "443/tcp"
  1727. fi
  1728. ufw --force enable >> $logFile 2>&1
  1729. comprobarError $? 907
  1730. ;;
  1731. centos|fedora)
  1732. firewall-cmd --add-port=80/tcp >> $logFile 2>&1
  1733. comprobarError $? 906 "80/tcp"
  1734. if [ $sshControl = true ];then
  1735. firewall-cmd --add-port=22/tcp >> $logFile 2>&1
  1736. comprobarError $? 906 "22/tcp"
  1737. fi
  1738. if [ $sslOn = true ];then
  1739. firewall-cmd --add-port=443/tcp >> $logFile 2>&1
  1740. comprobarError $? 906 "443/tcp"
  1741. fi
  1742. firewall-cmd --runtime-to-permanent >> $logFile 2>&1
  1743. comprobarError $? 907
  1744. habilitarServicio firewalld >> $logFile 2>&1
  1745. comprobarError $? 907
  1746. ;;
  1747. esac
  1748. unset sshControl
  1749. }
  1750. esSSH() {
  1751. # Comprobamos si nuestro terminal usa SSH
  1752. p=${1:-$PPID}
  1753. #read pid name x ppid y < <( cat /proc/$p/stat )
  1754. read pid name ppid < <( ps -o pid= -o comm= -o ppid= -p $p)
  1755. [[ "$name" =~ sshd ]] && { sshControl=true; return 0; }
  1756. [ "$ppid" -le 1 ] && { sshControl=false; return 1; }
  1757. esSSH $ppid
  1758. }
  1759. descargarMediaWiki() {
  1760. # Descargar la versión 1.31.0 de MediaWiki
  1761. if [ ! -d ./var ];then
  1762. comprobarError 1 5 "./var"
  1763. fi
  1764. curl "https://releases.wikimedia.org/mediawiki/1.31/mediawiki-1.31.0.tar.gz" 2>/dev/null | tar -xz -C "./var/"
  1765. comprobarError $? 501
  1766. }
  1767. configurarMediaWiki() {
  1768. # Configuramos MediaWiki
  1769. if [ ! -f /var/www/$dominioMediaWiki/LocalSettings.php ];then
  1770. # Copiamos archivos
  1771. cp -fR ./var/mediawiki-1.31.0/ /var/www/$dominioMediaWiki
  1772. comprobarError $? 502
  1773. # Configuramos LocalSettings.php (y crea la base de datos por nosotros)
  1774. nombreDBMW=$(echo $dominioMediaWiki | sed -e 's/\./_/g' | sed -e 's/-/_/g')
  1775. userDBMW=$(echo "mediawiki_user" | sed -e 's/\./_/g' | sed -e 's/-/_/g')
  1776. php /var/www/$dominioMediaWiki/maintenance/install.php --dbname=$nombreDBMW --dbserver="localhost" --installdbuser=root --installdbpass=$sqlPasswd --dbuser=$userDBMW --dbpass=$sqlPasswd --scriptpath="" --lang=es --pass=$passwdMediaWiki --with-extensions "$nombreMediaWiki" "admin" >> $logFile 2>&1
  1777. comprobarError $? 502
  1778. # Configuraciones adicionales
  1779. sed -i '/$wgLanguageCode =/c\$wgLanguageCode = "es";' /var/www/$dominioMediaWiki/LocalSettings.php
  1780. comprobarError $? 502
  1781. sed -i '/$wgEnableEmail =/c\$wgEnableEmail = false;' /var/www/$dominioMediaWiki/LocalSettings.php
  1782. comprobarError $? 502
  1783. sed -i '/$wgEnableUploads =/c\$wgEnableUploads = true;' /var/www/$dominioMediaWiki/LocalSettings.php
  1784. comprobarError $? 502
  1785. echo -en "\$wgArticlePath = \"/wiki/\$1\";\n" >> /var/www/$dominioMediaWiki/LocalSettings.php
  1786. echo -en "\$wgUsePathInfo = true;\n" >> /var/www/$dominioMediaWiki/LocalSettings.php
  1787. echo -en "\$wgGroupPermissions['*']['createaccount'] = true;\n" >> /var/www/$dominioMediaWiki/LocalSettings.php
  1788. echo -en "\$wgGroupPermissions['*']['edit'] = false;\n" >> /var/www/$dominioMediaWiki/LocalSettings.php
  1789. echo -en "\$wgGroupPermissions['*']['read'] = true;\n" >> /var/www/$dominioMediaWiki/LocalSettings.php
  1790. # Actualizamos permisos
  1791. chown -R $webServerUser:$webServerGroup /var/www/$dominioMediaWiki
  1792. comprobarError $? 502
  1793. # Configuramos VirtualHost
  1794. if [ $apacheOn = true ] && [ $sslOn = false ];then
  1795. virtualHost="./etc/apache2/sites-available/mediawiki.conf"
  1796. elif [ $nginxOn = true ] && [ $sslOn = false ];then
  1797. virtualHost="./etc/nginx/sites-available/mediawiki.conf"
  1798. elif [ $apacheOn = true ] && [ $sslOn = true ];then
  1799. virtualHost="./etc/apache2/sites-available/mediawiki-ssl.conf"
  1800. elif [ $nginxOn = true ] && [ $sslOn = true ];then
  1801. virtualHost="./etc/nginx/sites-available/mediawiki-ssl.conf"
  1802. else
  1803. comprobarError 1 502
  1804. fi
  1805. if [ ! -f $virtualHost ];then
  1806. comprobarError $? 502
  1807. fi
  1808. instalarVirtualHost "/var/www/$dominioMediaWiki" $virtualHost $dominioMediaWiki $aliasMediaWiki
  1809. unset virtualHost
  1810. else
  1811. comprobarError 1 503 $dominioMediaWiki
  1812. fi
  1813. }
  1814. descargarMoodle() {
  1815. # Descargar la versión 1.31.0 de MediaWiki
  1816. if [ ! -d ./var ];then
  1817. comprobarError 1 5 "./var"
  1818. fi
  1819. #echo -en "Descargando Moodle-3.5-1..." | tee -a $logFile
  1820. #curl -o "./var/moodle-3.5.1.tgz" "https://download.moodle.org/download.php/direct/stable35/moodle-latest-35.tgz" >> $logFile 2>&1
  1821. curl "https://download.moodle.org/download.php/direct/stable35/moodle-latest-35.tgz" 2>/dev/null | tar -xz -C "./var/"
  1822. comprobarError $? 501
  1823. #echo -en " OK.\n" | tee -a $logFile
  1824. }
  1825. configurarMoodle() {
  1826. # Configurar Moodle
  1827. if [ ! -f /var/www/$dominioMoodle/config.php ];then
  1828. # Copiamos archivos
  1829. cp -Rf ./var/moodle/ /var/www/$dominioMoodle
  1830. comprobarError $? 602
  1831. # Crear carperta de datos (no online)
  1832. if [ ! -d /var/www/moodledata ];then
  1833. mkdir /var/www/moodledata 2>/dev/null
  1834. comprobarError $? 602
  1835. fi
  1836. #Actualizamos permisos
  1837. perm=$(stat -c %a /var/www/moodledata)
  1838. if [ $perm -ne 777 ];then
  1839. chmod -R 777 /var/www/moodledata 2>/dev/null
  1840. comprobarError $? 602
  1841. fi
  1842. perm=$(stat -c %U /var/www/moodledata)
  1843. if [ $perm != "$webServerUser" ];then
  1844. chown -R $webServerUser:$webServerGroup /var/www/moodledata 2>/dev/null
  1845. comprobarError $? 602
  1846. fi
  1847. unset perm
  1848. # Creamos Base de Datos
  1849. nombreDBMo=$(echo $dominioMoodle | sed -e 's/\./_/g' | sed -e 's/-/_/g')
  1850. userDBMo=$(echo "moodle_user" | sed -e 's/\./_/g' | sed -e 's/-/_/g')
  1851. crearDBMoodle
  1852. # Configuramos e instalamos Moodle
  1853. if [ $sslOn = true ];then
  1854. wwwroot="https://$dominioMoodle"
  1855. else
  1856. wwwroot="http://$dominioMoodle"
  1857. fi
  1858. php /var/www/$dominioMoodle/admin/cli/install.php --lang=es --wwwroot="$wwwroot" --dataroot="/var/www/moodledata" --dbtype="$dbType" --dbname="$nombreDBMo" --dbuser="$userDBMo" --dbpass="$sqlPasswd" --fullname="$nombreMoodle" --shortname="$nombreCortoMoodle" --adminuser=admin --adminpass="$passwdMoodle" --adminemail="admin@$dominioMoodle" --agree-license --non-interactive >>$logFile 2>&1
  1859. comprobarError $? 602
  1860. # Actualizamos permisos
  1861. chown -R $webServerUser:$webServerGroup /var/www/$dominioMoodle /var/www/moodledata
  1862. # Configurar SE-Linux (RHEL)
  1863. case $ID in
  1864. centos|fedora)
  1865. configurarSELinux
  1866. ;;
  1867. esac
  1868. # Configuramos VirtualHost
  1869. if [ $apacheOn = true ] && [ $sslOn = false ];then
  1870. virtualHost="./etc/apache2/sites-available/moodle.conf"
  1871. elif [ $nginxOn = true ] && [ $sslOn = false ];then
  1872. virtualHost="./etc/nginx/sites-available/moodle.conf"
  1873. elif [ $apacheOn = true ] && [ $sslOn = true ];then
  1874. virtualHost="./etc/apache2/sites-available/moodle-ssl.conf"
  1875. elif [ $nginxOn = true ] && [ $sslOn = true ];then
  1876. virtualHost="./etc/nginx/sites-available/moodle-ssl.conf"
  1877. else
  1878. comprobarError 1 602
  1879. fi
  1880. instalarVirtualHost "/var/www/$dominioMoodle" $virtualHost $dominioMoodle
  1881. unset virtualHost wwwroot
  1882. else
  1883. comprobarError 1 603 $dominioMoodle
  1884. fi
  1885. }
  1886. crearDBMoodle() {
  1887. # Crear base de datos para Moodle
  1888. dbDir="./etc/db"
  1889. if [ ! -d $dbDir ];then
  1890. mkdir $dbDir 2>/dev/null
  1891. comprobarError $? 603
  1892. fi
  1893. dbFile=$dbDir"/moodle.sql"
  1894. echo -en "CREATE DATABASE IF NOT EXISTS $nombreDBMo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n" > $dbFile
  1895. echo -en "GRANT ALL PRIVILEGES ON $nombreDBMo.* TO '$userDBMo'@'localhost' IDENTIFIED BY '$sqlPasswd';\n" >> $dbFile
  1896. mysql -u root --password=$sqlPasswd < $dbFile > /dev/null 2>&1
  1897. control=$?
  1898. rm -f $dbFile 2>/dev/null
  1899. comprobarError $? 603
  1900. comprobarError $control 603
  1901. unset control dbFile dbDir
  1902. }
  1903. configurarSELinux() {
  1904. # Configurar SELinux
  1905. which semanage >/dev/null 2>&1
  1906. if [ $? -ne 0 ];then
  1907. case $ID in
  1908. centos)
  1909. result=$(yum -y install policycoreutils-python 2>&1)
  1910. comprobarError $? 605 $result
  1911. ;;
  1912. fedora)
  1913. result=$(yum -y install policycoreutils-python-utils 2>&1)
  1914. comprobarError $? 605 $result
  1915. ;;
  1916. *)
  1917. comprobarError 1 604
  1918. ;;
  1919. esac
  1920. fi
  1921. semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/moodledata(/.*)?" > /dev/null 2>&1
  1922. #comprobarError $? 604
  1923. restorecon -R /var/www/ > /dev/null 2>&1
  1924. comprobarError $? 604
  1925. }
  1926. instalarPHPInfo() {
  1927. # Instalar fichero info.php y su VirtualHost
  1928. if [ ! -f /etc/$webServerName/sites-enabled/phpinfo.conf ];then
  1929. infoFile="./var/www/info.php"
  1930. if [ ! -f $infoFile ];then
  1931. comprobarError 1 4 "$infoFile"
  1932. fi
  1933. mkdir /var/www/localhost 2>/dev/null
  1934. comprobarError $? 106
  1935. cp -f $infoFile /var/www/localhost/ 2>/dev/null
  1936. comprobarError $? 106
  1937. chown -R $webServerUser:$webServerGroup /var/www/localhost 2>/dev/null
  1938. comprobarError $? 106
  1939. unset infoFile
  1940. # Instalar VirtualHost
  1941. if [ $apacheOn = true ] && [ $sslOn = false ];then
  1942. virtualHost="./etc/apache2/sites-available/phpinfo.conf"
  1943. elif [ $nginxOn = true ] && [ $sslOn = false ];then
  1944. virtualHost="./etc/nginx/sites-available/phpinfo.conf"
  1945. elif [ $apacheOn = true ] && [ $sslOn = true ];then
  1946. virtualHost="./etc/apache2/sites-available/phpinfo-ssl.conf"
  1947. elif [ $nginxOn = true ] && [ $sslOn = true ];then
  1948. virtualHost="./etc/nginx/sites-available/phpinfo-ssl.conf"
  1949. else
  1950. comprobarError 1 106
  1951. fi
  1952. instalarVirtualHost "/var/www/localhost" $virtualHost "localhost"
  1953. unset virtualHost
  1954. return 0
  1955. else
  1956. return 1
  1957. fi
  1958. }
  1959. configurarBackups() {
  1960. # Instala backup-server y lo configura
  1961. letsEncryptCode=""
  1962. if [ ! -d "./var" ];then
  1963. comprobarError 1 5 "./var"
  1964. fi
  1965. which backup-server > /dev/null 2>&1
  1966. if [ $? -ne 0 ];then
  1967. # Descargamos backup-server
  1968. curl "https://code.castanedo.es/guzman/backup-server/archive/2.1.tar.gz" 2>/dev/null | tar -xz -C "./var/"
  1969. if [ $? -ne 0 ];then
  1970. comprobarError 1 701
  1971. return 1
  1972. fi
  1973. # Copiamos backup-server y logrotate
  1974. cp -f ./var/backup-server/backup-server /usr/bin/backup-server
  1975. if [ $? -ne 0 ];then
  1976. comprobarError 1 701
  1977. return 1
  1978. fi
  1979. cp -f ./var/backup-server/scripts/logrotate.d/backup-server /etc/logrotate.d/backup-server
  1980. if [ $? -ne 0 ];then
  1981. comprobarError 1 701
  1982. return 1
  1983. fi
  1984. # Creamos carpeta de backups
  1985. if [ ! -d /var/backup ];then
  1986. mkdir /var/backup 2>/dev/null
  1987. comprobarError $? 5 "/var/backup"
  1988. fi
  1989. # Configuramos cron.d
  1990. if [ $letsEncryptOn = false ];then
  1991. letsEncryptCode="--no-letsencrypt "
  1992. fi
  1993. echo -en "# /etc/cron.d/backup-server: crontab for $hostname\n\n" > /etc/cron.d/backup-server
  1994. echo -en "# Backup every day at 4:00 am\n" >> /etc/cron.d/backup-server
  1995. echo -en "0 4 * * * root [ -x /usr/bin/backup-server ] && /usr/bin/backup-server --xz -u $webServerUser -g $webServerGroup --no-encryption --sql-user root --sql-pass $sqlPasswd --nginx-dir /etc/$webServerName $letsEncryptCode--no-mail --no-gogs --no-postfix --no-dovecot --no-opendkim --no-spf --no-opendmarc --no-amavis --no-spamassassin /var/backup >> /var/log/backup-server.log 2>&1" >> /etc/cron.d/backup-server
  1996. comprobarError $? 701
  1997. fi
  1998. unset letsEncryptCode
  1999. }
  2000. # Comprobación del sistema e inicialización
  2001. horaInicial=$(date +"%s")
  2002. inicializarVariables
  2003. OSInfo
  2004. # Leer opciones
  2005. which getopt >/dev/null 2>&1
  2006. if [ $? -eq 0 ] && [ $# -ne 0 ];then
  2007. # Configuración por defecto (opciones de Express)
  2008. instalacionExpress
  2009. # Leer opciones
  2010. 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) -- "$@")
  2011. eval set -- $TEMP
  2012. unset TEMP
  2013. while true; do
  2014. case $1 in
  2015. -h|--help)
  2016. ayuda
  2017. exit 0
  2018. ;;
  2019. -d|--dominio|--fqdn)
  2020. hostname=$2
  2021. shift 2
  2022. ;;
  2023. --lamp)
  2024. apacheOn=true
  2025. shift
  2026. ;;
  2027. --lemp)
  2028. nginxOn=true
  2029. shift
  2030. ;;
  2031. --mariadb)
  2032. case $ID in
  2033. debian)
  2034. mySQLOn=true
  2035. dbType="mariadb"
  2036. ;;
  2037. ubuntu|centos|fedora)
  2038. mariaDBOn=true
  2039. dbType="mariadb"
  2040. esac
  2041. shift
  2042. ;;
  2043. --mysql)
  2044. if [ $ID = "ubuntu" ] && [ $VERSION = "18.04" ];then
  2045. mySQLOn=true
  2046. dbType="mysqli"
  2047. else
  2048. # No está soportado
  2049. ayuda
  2050. comprobarError 1 205
  2051. fi
  2052. shift
  2053. ;;
  2054. --password-sql)
  2055. sqlPasswd=$2
  2056. shift 2
  2057. ;;
  2058. --max-upload-size)
  2059. maxUpload=$2
  2060. shift 2
  2061. ;;
  2062. --lets-encrypt)
  2063. sslOn=true
  2064. letsEncryptOn=true
  2065. shift
  2066. ;;
  2067. --auto-firmados)
  2068. sslOn=true
  2069. letsEncryptOn=false
  2070. shift
  2071. ;;
  2072. --media-wiki)
  2073. mediaWikiOn=true
  2074. shift
  2075. ;;
  2076. --no-media-wiki)
  2077. mediaWikiOn=false
  2078. shift
  2079. ;;
  2080. --nombre-mw)
  2081. nombreMediaWiki=$2
  2082. shift 2
  2083. ;;
  2084. --dominios-mw)
  2085. dominioMediaWiki=$2
  2086. cont=1
  2087. serverName=""
  2088. aliasMediaWiki=""
  2089. for dominio in $dominioMediaWiki;do
  2090. if [ $cont -eq 1 ];then
  2091. # Dominio Principal (ServerName)
  2092. serverName=$dominio
  2093. else
  2094. # Dominios Secundarios (ServerAlias)
  2095. aliasMediaWiki=$aliasMediaWiki" "$dominio
  2096. fi
  2097. cont=$((cont + 1))
  2098. done
  2099. dominioMediaWiki=$serverName
  2100. unset cont serverName dominio
  2101. shift 2
  2102. ;;
  2103. --password-mw)
  2104. passwdMediaWiki=$2
  2105. shift 2
  2106. ;;
  2107. --moodle)
  2108. moodleOn=true
  2109. shift
  2110. ;;
  2111. --no-moodle)
  2112. moodleOn=false
  2113. shift
  2114. ;;
  2115. --nombre-mo)
  2116. nombreMoodle=$2
  2117. shift 2
  2118. ;;
  2119. --nombre-corto-mo)
  2120. nombreCortoMoodle=$(echo $2 | cut -d ' ' -f 1)
  2121. shift 2
  2122. ;;
  2123. --dominio-mo)
  2124. dominioMoodle=$2
  2125. cont=1
  2126. serverName=""
  2127. aliasMoodle=""
  2128. for dominio in $dominioMoodle;do
  2129. if [ $cont -eq 1 ];then
  2130. # Dominio Principal (ServerName)
  2131. serverName=$dominio
  2132. else
  2133. # Dominios Secundarios (ServerAlias)
  2134. aliasMoodle=$aliasMoodle" "$dominio
  2135. fi
  2136. cont=$((cont + 1))
  2137. done
  2138. dominioMoodle=$serverName
  2139. unset cont ServerName dominio aliasMoodle
  2140. shift 2
  2141. ;;
  2142. --password-mo)
  2143. passwdMoodle=$2
  2144. shift 2
  2145. ;;
  2146. --php-info)
  2147. infoPHPOn=true
  2148. shift
  2149. ;;
  2150. --no-php-info)
  2151. infoPHPOn=false
  2152. shift
  2153. ;;
  2154. --backup)
  2155. backupOn=true
  2156. shift
  2157. ;;
  2158. --no-backup)
  2159. backupOn=false
  2160. shift
  2161. ;;
  2162. --)
  2163. #Ultimo
  2164. shift
  2165. break
  2166. ;;
  2167. *)
  2168. # Inesperado
  2169. ayuda
  2170. comprobarError 1 10 $1
  2171. ;;
  2172. esac
  2173. done
  2174. # Comprobar si los datos son correctos
  2175. if [ -z "$hostname" ];then
  2176. ayuda
  2177. comprobarError 1 11
  2178. else
  2179. hostnamectl set-hostname $hostname >/dev/null 2>&1
  2180. fi
  2181. if [ -z "$sqlPasswd" ];then
  2182. ayuda
  2183. comprobarError 1 12
  2184. fi
  2185. if [ -z "$maxUpload" ];then
  2186. ayuda
  2187. comprobarError 1 13
  2188. fi
  2189. if [ $mediaWikiOn = true ];then
  2190. if [ -z "$nombreMediaWiki" ];then
  2191. ayuda
  2192. comprobarError 1 14
  2193. fi
  2194. if [ -z "$dominioMediaWiki" ];then
  2195. ayuda
  2196. comprobarError 1 15
  2197. fi
  2198. if [ -z "$passwdMediaWiki" ];then
  2199. ayuda
  2200. comprobarError 1 16
  2201. fi
  2202. fi
  2203. if [ $moodleOn = true ];then
  2204. if [ -z "$nombreMoodle" ];then
  2205. ayuda
  2206. comprobarError 1 17
  2207. fi
  2208. if [ -z "$nombreCortoMoodle" ];then
  2209. ayuda
  2210. comprobarError 1 18
  2211. fi
  2212. if [ -z "$dominioMoodle" ];then
  2213. ayuda
  2214. comprobarError 1 19
  2215. fi
  2216. if [ -z "$passwdMoodle" ];then
  2217. ayuda
  2218. comprobarError 1 20
  2219. fi
  2220. fi
  2221. # Comprobaciones
  2222. comprobarRoot
  2223. comprobarDependencias
  2224. else
  2225. # Preguntas interactivas
  2226. # Comprobaciones
  2227. comprobarRoot
  2228. comprobarDependencias
  2229. # Bienvenida
  2230. mostrarBienvenida
  2231. # Selección de componentes (express vs avanzada)
  2232. mostrarExpress
  2233. fi
  2234. # Instalación Servidor Web
  2235. if [ $apacheOn = true ]; then
  2236. echo -en "Instalando Servidor Web Apache..." | tee -a $logFile
  2237. instalarApache
  2238. echo -en " OK.\n" | tee -a $logFile
  2239. elif [ $nginxOn = true ]; then
  2240. echo -en "Instalando Servidor Web Nginx..." | tee -a $logFile
  2241. instalarNginx
  2242. echo -en " OK.\n" | tee -a $logFile
  2243. fi
  2244. # Instalación Base de Datos
  2245. if [ $mySQLOn = true ]; then
  2246. echo -en "Instalando Base de Datos MySQL..." | tee -a $logFile
  2247. instalarMySQL
  2248. echo -en " OK.\n" | tee -a $logFile
  2249. elif [ $mariaDBOn = true ]; then
  2250. echo -en "Instalando Base de Datos MariaDB..." | tee -a $logFile
  2251. instalarMariaDB
  2252. echo -en " OK.\n" | tee -a $logFile
  2253. fi
  2254. # Instalación PHP-7
  2255. if [ $phpOn = true ]; then
  2256. echo -en "Instalando PHP-7..." | tee -a $logFile
  2257. instalarPHP
  2258. echo -en " OK.\n" | tee -a $logFile
  2259. fi
  2260. # Instalación Let's Encrypt
  2261. if [ $letsEncryptOn = true ];then
  2262. echo -en "Instalando Let's Encrypt..." | tee -a $logfile
  2263. instalarLetsEncrypt
  2264. echo -en " OK.\n" | tee -a $logFile
  2265. fi
  2266. # Configuración Web Server
  2267. if [ $apacheOn = true ];then
  2268. echo -en "Configurando Servidor Web Apache..." | tee -a $logFile
  2269. configurarApache
  2270. echo -en " OK.\n" | tee -a $logFile
  2271. elif [ $nginxOn = true ]; then
  2272. echo -en "Configurando Servidor Web Nginx..." | tee -a $logFile
  2273. configurarNginx
  2274. echo -en " OK.\n" | tee -a $logFile
  2275. fi
  2276. # Configuración Database (Configurar Ficheros, Arrancar Base de Datos, establecer contraseña y configuración segura)
  2277. if [ $mySQLOn = true ] || [ $mariaDBOn = true ];then
  2278. echo -en "Configurando Base de Datos..." | tee -a $logFile
  2279. configurarSQL
  2280. echo -en " OK.\n" | tee -a $logFile
  2281. habilitarServicio "$sqlServerName"
  2282. echo -en "Estableciendo contraseña de la Base de Datos..." | tee -a $logFile
  2283. establecerSQLPasswd
  2284. echo -en " OK.\n" | tee -a $logFile
  2285. fi
  2286. # Configuración PHP (cgi.fix_pathinfo=0 y Configurar máximo de subida de archivos)
  2287. if [ $phpOn = true ];then
  2288. echo -en "Configurando PHP-7..." | tee -a $logFile
  2289. configurarPHP
  2290. echo -en " OK.\n" | tee -a $logFile
  2291. fi
  2292. # Configuración SSL/TLS
  2293. # Generar certificados auto-firmados
  2294. if [ $sslOn = true ];then
  2295. echo -en "Generando claves de intercambio Diffie-Hellman (puede llevar un largo tiempo)..." | tee -a $logFile
  2296. generarDHParam
  2297. echo -en " OK.\n" | tee -a $logFile
  2298. echo -en "Generando Certificados Auto-Firmados..." | tee -a $logFile
  2299. if [ $mediaWikiOn = true ];then
  2300. generarCertAutofirmado $dominioMediaWiki
  2301. fi
  2302. if [ $moodleOn = true ];then
  2303. generarCertAutofirmado $dominioMoodle
  2304. fi
  2305. if [ $infoPHPOn = true ];then
  2306. generarCertAutofirmado "localhost"
  2307. fi
  2308. echo -en " OK.\n" | tee -a $logFile
  2309. fi
  2310. # Arrancar y habilitar todos los servicios (SystemD, Service o SystemV)
  2311. echo -en "Habilitando todos los servicios..." | tee -a $logFile
  2312. if [ $apacheOn = true ] || [ $nginxOn = true ];then
  2313. habilitarServicio $webServerName
  2314. fi
  2315. if [ $nginxOn = true ] && [ $phpOn = true ];then
  2316. habilitarServicio $phpFPMName
  2317. fi
  2318. echo -en " OK.\n" | tee -a $logFile
  2319. # Instalar MediaWiki
  2320. if [ $mediaWikiOn = true ]; then
  2321. # Descargar MediaWiki
  2322. echo -en "Descargando MediaWiki-1.31.0..." | tee -a $logFile
  2323. descargarMediaWiki
  2324. echo -en " OK.\n" | tee -a $logFile
  2325. # Configurar MediWiki
  2326. echo -en "Configurando MediaWiki..." | tee -a $logFile
  2327. configurarMediaWiki
  2328. echo -en " OK.\n" | tee -a $logFile
  2329. fi
  2330. # Instalar Moodle
  2331. if [ $moodleOn = true ]; then
  2332. # Descargar Moodle
  2333. echo -en "Descargando Moodle-3.5.1..." | tee -a $logFile
  2334. descargarMoodle
  2335. echo -en " OK.\n" | tee -a $logFile
  2336. # Configuración Moodle
  2337. echo -en "Configurando Moodle (puede llevar un tiempo largo)..." | tee -a $logFile
  2338. configurarMoodle
  2339. echo -en " OK.\n" | tee -a $logFile
  2340. fi
  2341. # Instalar info.php
  2342. if [ $infoPHPOn = true ];then
  2343. echo -en "Configurando 'info.php'..." | tee -a $logFile
  2344. instalarPHPInfo
  2345. if [ $? -eq 0 ];then
  2346. echo -en " OK.\n" | tee -a $logFile
  2347. else
  2348. echo -en " Ya se encuentra configurado.\n" | tee -a $logFile
  2349. fi
  2350. fi
  2351. # Añadir reglas del cortafuegos
  2352. echo -en "Configurando Cortafuegos..." | tee -a $logFile
  2353. configurarCortafuegos
  2354. echo -en " OK.\n" | tee -a $logFile
  2355. # Generar certificados Let's Encrypt
  2356. if [ $letsEncryptOn = true ];then
  2357. echo -en "Generando Certificados Válidos Let's Encrypt..." | tee -a $logFile
  2358. generarCertLetsEncrypt
  2359. echo -en " OK.\n" | tee -a $logFile
  2360. fi
  2361. # Configurar Backup
  2362. if [ $backupOn = true ]; then
  2363. echo -en "Configurando Backup Automático..." | tee -a $logFile
  2364. configurarBackups
  2365. echo -en " OK.\n" | tee -a $logFile
  2366. fi
  2367. # Finalizamos
  2368. horaFinal=$(date +"%s")
  2369. echo -en "\n-------------------------------------------------------------\n" | tee -a $logFile
  2370. echo -en "\t¡INSTALACION FINALIZADA CON EXITO! \n" | tee -a $logFile
  2371. echo -en "\tDuración: "$((horaFinal-horaInicial))" seg." | tee -a $logFile
  2372. echo -en "\n-------------------------------------------------------------\n" | tee -a $logFile
  2373. echo -en " GUARDE LA CONFIGURACION EN UN LUGAR SEGURO\n"
  2374. echo -en " LE SERÁ IMPRESCINDIBLE PARA CUALQUIER CAMBIO FUTURO\n"
  2375. echo -en " Dominio: $hostname\n"
  2376. echo -en " Usuarios SQL: root\n"
  2377. echo -en " $userDBMW\n"
  2378. echo -en " $userDBMo\n"
  2379. echo -en " Contraseña SQL: $sqlPasswd\n"
  2380. if [ $mediaWikiOn = true ];then
  2381. echo -en " Nombre MediaWiki: $nombreMediaWiki\n"
  2382. echo -en " Dominios MediaWiki: $dominioMediaWiki\n"
  2383. for dominio in $aliasMediaWiki;do
  2384. echo -en " $dominio\n"
  2385. done
  2386. echo -en " Usuario MediaWiki: admin\n"
  2387. echo -en " Contraseña MediaWiki: $passwdMediaWiki\n"
  2388. fi
  2389. if [ $moodleOn = true ];then
  2390. echo -en " Nombre Moodle: $nombreMoodle\n"
  2391. echo -en " Dominio Moodle: $dominioMoodle\n"
  2392. echo -en " Usuario Moodle: admin\n"
  2393. echo -en " Contraseña Moodle: $passwdMoodle"
  2394. fi
  2395. echo -en "\n-------------------------------------------------------------\n"