Re: Problemes amb automysqlbackup combinat amb un "locale" en català
Comento entre solucions i retallo part del missatge
El 19/12/20 a les 19:48, orestes@riseup.net ha escrit:
Benvolguda llista, a veure si em podeu ajudar en una cosa:
[...]
Fent una mica de recerca he pogut deduir l'origen del problema i fins i
tot sabria solucionar-lo, però voldria saber si hi ha alguna manera
millor de la que jo penso. M'explico:
"automysqlbackup" és un script situat a /usr/sbin. Les línies rellevants
d'aquest script són les següents:
----------------------------
DATE=`date +%Y-%m-%d_%Hh%Mm`                            # Datestamp e.g
2002-09-21
DOW=`date +%A`                                                  # Day of
the week e.g. Monday
DNOW=`date +%u`                                         # Day number of
the week 1 to 7 where 1 represents Monday
DOM=`date +%d`                                                  # Date
of the Month e.g. 27
M=`date +%B`                                                    # Month
e.g January
W=`date +%V`                                                    # Week
Number e.g 37
----------------------------
             ...
----------------------------
         # Monthly Full Backup of all Databases
         (...)
         dbdump "$MDB" "$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql"
----------------------------
O sigui que usa "dbdump" (que és una funció definida en un altre lloc de
l'script i acaba usant "mysqldump") amb un nom de fitxer que expandeix
la variable "$M", la qual és el resultat de "date +%B" que, en un
sistema amb locale en català donarà "de desembre" si l'executeu avui,
per exemple.
Crec que part del problema pot venir, precisament, d'aquesta la funció 
dbdump (no uso mysql i no ho puc verificar). Tenir espais en blanc a 
noms de fitxer, tot i que en general és bona pràctica evitar-los, no 
hauria de ser un problema sempre i quan s'escapin correctament les 
variables. En aquest sentit, l'ús de les cometes dobles és correcte en 
aquest punt, i el nom del fitxer (així com el del directori) haurien de 
ser tolerants.
Em fa la fila que, en algun lloc de la funció shell dbdump, hi haurà un 
$2 en lloc d'un "$2" a l'hora d'escriure el fitxer de sortida. A menys 
que se sàpiga del cert que no hi haurà espais en blanc o que precisament 
interessi que els espais impliquin una separació d'elements, tota 
referència a una variable de shell jo la posaria entre cometes dobles 
(compte, que les simples signifiquen quelcom ben diferent!)
Tal i com ho veig jo, podria fer el següent:
1) Canviar el "locale" del sistema, el problema és que és un servidor
que córre un Moodle i si canvio el locale del sistema hi ha algunes
cosetes del moodle que surten en anglès.
No necessites canviar el locale del sistema, només el del propi shell, 
ja sigui cridant-lo passant com a prefix:
LC_ALL=C automysqlbackup
En general, per a scripts de backups que usen dates no és mala idea, 
especialment si s'usen noms literals de mes o del dia de la setmana, 
cosa que personalment evito perquè pots acabar amb una col·lecció de 
còpies amb noms inconsistents entre elles si s'han generat amb locales 
diferents
2) Canviar l'script del automysqlbackup per tal que no posi el nom del
mes, el posi sense espai o alguna cosa semblant. El problema que hi veig
és que ho hauria de refer en cada actualització del automysqlbackup. No
em sembla una bona idea.
Jo obriria un bug, precisament per evitar el que deia en en paràgraf 
anterior
3) Potser podria fer un terme mig i crear una configuració "local" del
automysqlbackup, que no es veuria sobreescrita en actualitzar el paquet,
i que forcés un "locale" anglès en executar-se. Potser és la millor
manera però, ni que sigui per curiositat, hi ha alguna manera
d'arreglar-ho preservant el nom del mes en català? Com ho faríeu
vosaltres?
Pots crear un shell on preparis configuracions, com la del locale, i fer 
servir aquest script. Fins i tot podries arribar a donar-li el mateix 
nom i posar-lo en una ubicació amb major prioritat al path (cosa que 
personalment no m'agrada), sempre que l'script es cridi sense ruta absoluta.
En el teu cas podria ser una cosa tan simple com això:
#!/bin/sh
export LC_ALL=C
automysqlbackup "$@"
Pel que fa a poder mantenir els noms dels mesos en català, una altra 
alternativa seria tocar el teu locale (no en tinc experiència ni sabria 
dir fins a quin punt és realment viable i/o prudent) i modificar els 
mesos per tal que s'escriguin sense l'article, és a dir, "maig" en lloc 
de "de maig".
Gràcies!
Orestes.
Reply to: