Al mateix temps que vaig obrir aquest blog també em vaig proposar obrir un Moodle per anar recopilant el material que vaig creant com a professor i tenir-lo estructurat de la mateixa manera que el tinc en els instituts i centres on treballo.
Aquest Moodle l’allotjaria al mateix lloc on hi tinc aquest WordPress, en un hosting compartit a 1and1, concretament amb un tipus de contracte anomenat Unlimited Plus. Bé, com faig sempre, em dirigeixo a la pàgina oficial del projecte Moodle (https://moodle.org) i em baixo l’última versió, que en aquell moment era la 3.5.1. Pujo el zip al meu FTP, creo la BD, apunto el subdomini on toca i començo la instal·lació.
Moodle analitza que tots els requeriments que necessita estiguin disponibles en el servidor…, que segur que sí, tinc un pla Unlimited Plus, caram! Doncs no, hi havia un parell de requeriments de la BD que no es complien: alguna cosa relacionada amb la mida de les columnes de la taula i uns formats, estranys per mi en aquell moment, anomenats Antelope i Barracuda.
Ok, no podia instal·lar de moment el Moodle fins que no arreglés aquell contratemps. Doncs som-hi Google: “Moodle doesn’t work… Barracuda Antelope”. 3770 resultats més tard vaig començar a veure la llum, ara en faig un resum.
Moodle treballa, entre altres SGBD, amb MySQL, concretament requereix la versió 5.1.33. Fins aquí cap problema, el servidor el té actualitzat. Però a partir de la versió 3.1 de Moodle, aquest requereix que el motor de la BD sigui INNODB i que a més el format de les taules sigui del tipus Barracuda i no Antelope que és tal com ve per defecte. Però què és això de Antelope i Barracuda. Deixo al final de l’article enllaços interessants sobre el tema, però per fer-ho resumit, són els noms (exòtics) per definir la quantitat de bytes que pot contenir una columna d’una taula de la BD. Amb Antelope pot contenir 767 bytes i si està configurada com a Barracuda pot arribar fins als 3072 bytes. Sota el paraigües d’aquests títols (que de fet és el paràmetre innodb_file_format) hi ha altres paràmetres com el row_format, que si la taula està definida com a Antelope serà del tipus COMPACT i si la taula és Barracuda serà COMPRESSED.
I per què volem tot això? O per què serveix? Bé, generalment les codificacions de les bases de dades treballen amb el joc de caràcters UTF-8 on es necessiten 3 bytes per representar tots els caràcters que necessita un idioma. Fent càlculs, 3 bytes * 255 caràcters = 765 bytes, per tant ens encaixa en el format Antelope. Per què 255? És la mida màxima (standard i històrica) dels varchars. Aquí deixo un enllaç a la documentació oficial de MySQL on explica el tema de les limitacions en els índexs. Quin “problema” tenim? Molts CMS (com deu ser el cas de Moodle) volen donar suport a les emoticones, i per codificar-les ja no n’hi ha prou amb 3 bytes sinó que en necessitem un més, i aquesta codificació es coneix com a UTF-8mb4 (compatible amb UTF-8). Tornem a fer càlculs, 4 bytes * 255 caràcters = 1020 bytes, ja no podem utilitzar Antelope, o sí, però hem d’anar amb compte i limitar la mida dels índexs a 191 caràcters (passant de les emoticones) i això ens dóna un valor de 4*191=764, justet, però se’ns adapta a Antelope. Per tant, com a conclusió, he d’agafar la BD que he creat al principi de tot i donar-li aquest nou format.
Fer això no és difícil. De fet el propi Moodle porta un script dins la ruta /admin/cli anomenat mysql_compressed_rows.php. Si l’executem amb el paràmetre -l ens mostrarà si cal fer algun canvi a la nostra BD. Si volem saber com tenim configurada la BD podem fer-ho amb el paràmetre -i. I si cal convertir-la només cal executar l’script amb el paràmetre -f. Molt bé, això és el que vaig intentar, em vaig connectar al meu servidor per SSH, però per tema de privilegis no ho vaig poder fer (malgrat tenir el pla Unlimited Plus no deixa de ser un hosting compartit). Vaig provar si anant al phpMyAdmin i escrivint les comandes SQL de forma manual me’n sortia. Les comandes per fer el mateix que fa l’script, però manualment són:
SET GLOBAL innodb_file_per_table=1
SET GLOBAL innodb_file_format=Barracuda
SET GLOBAL innodb_large_prefix = ‘on’
Amb això crec que n’hi hauria d’haver prou. Però si necessitem totes les comandes que fa l’script podem demanar que ens les xivi escrivint al terminal del nostre servidor:
sudo php admin/cli/mysql_compressed_rows.php –showsql
Doncs això no serveix de res! Si no tenia privilegis des de la consola, menys en tindré des de l’aplicació web. ☹
Val a dir que totes aquestes comandes funcionen perfectament en un servidor local on tinc tots els privilegis. Però jo ho volia tenir al núvol. Ja em veia suplicant a 1and1 que fes aquests canvis. Però vaig veure que amb el meu pla Unlimited Plus tinc accés a un instal·lador d’aplicacions! Eureka! Ben invertits els calers! I en aquest instal·lador hi havia el Moodle (no la versió 3.5.1, però sí la 3.4.3 i a mi ja m’anava bé). Provo de fer la instal·lació i… bom! Petava! Al ser un autoinstal·lador no tenia accés als logs, només sabia que alguna cosa del procés no havia anat bé. Vaig provar-ho varies vegades i res. Xafardejant els arxius que l’instal·lador havia creat vaig veure la BD, i me l’havia creat amb format Antelope. Heus ací el problema! Vaig trucar a 1and1, i sense semblar massa pedant (perquè a hores d’ara ja m’havia convertit en un expert en el tema) vaig mirar d’explicar-los-hi tot el tinglado. Primer van intentar culpar-me a mi (no en dubtava pas) però els hi vaig dir que el seu instal·lador també fallava. Al llarg de la trucada no em van saber donar resposta, es va obrir uns incidència, i a esperar.
Vaig esperar una setmana, no vaig veure cap canvi i vaig tornar a trucar. L’escena es va repetir. I les trucades també. Vaig trucar 4 vegades, però no em sabien donar resposta. De fet la resposta ja la sabia, ja sabia què s’havia de modificar. Al final, després de quasi un mes, veig que havien actualitzat l’autoinstal·lador, no me n’havien dit res, va ser casualitat que ho veiés. L’he provat i ara sí que em deixa instal·lar el Moodle. Segur de mi mateix i de tota la teoria mamada, vaig a mirar la BD i estava igual com sempre, configurada com a Antelope i les taules amb índexs més grans de 191 caràcters. No sé què coi han fet però funciona. De moment.