28 de març de 2015

ERROR: Ubuntu es queda esperant per reparar el sistema de fitxers [SOLUCIONAT]

Fa uns mesos em vaig trobar amb un problema en un servidor, que es quedava en el GRUB esperant una tecla per arrencar. Això ja va quedar resolt, però aquesta setmana m'ha passat una cosa molt similar: un servidor s'ha quedat aturat esperant una tecla abans de provar de reparar el sistema de fitxers en arrencar, després d'apagar-se per una fallada elèctrica.

Sembla que Ubuntu fa que s'aturi la comprovació i es demani la intervenció de l'usuari (que normalment consisteix en prémer la tecla per provar de fer la reparació automàtica).

En fi, per evitar que això torni a passar, cal editar un fitxer de configuració i posar l'opció FSCKFIX=yes:
$ sudo nano /etc/default/rcS

Amb això ja arrencarà sense problemes la propera vegada que passi. A menys que hi hagi un problema gros de veritat, es clar !

28 de febrer de 2015

MySQL: Actualitzar una taula a partir d'una selecció sobre la mateixa taula

Treballant amb bases de dades tot sovint ens trobem que cal fer una actualització massiva de dades en una taula. Si la cosa és senzilla, es pot fer amb:
UPDATE LaMevaTaula
SET ElMeuCamp=NouValor
WHERE condició
Evidentment, podem modificar diversos camps, i la condició pot ser més o menys senzilla.

Però, de vegades, la condició pot ser realment complexe i difícil de formular si inclou la mateixa taula i relacions complexes amb d'altes taules. En aquest cas, convé separar la selecció de l'actualització. Això ho podem fer amb dues comandes MySQL, però serà més eficient si ho fem en una de sola:
UPDATE LaMevaTaula
SET ElMeuCamp=NouValor
WHERE id IN 
(
    SELECT T.id FROM (
 SELECT TS.id FROM LaMevaTaula AS TS 
        JOIN unió_complexe_amb_altres_taules
    ) AS T
)
Fixeu-vos com generem els identificadors a actualitzar amb la selecció complexe, i després s'utilitzen aquests per filtrar els registres en l'actualització en massa.

21 de febrer de 2015

Veure la versió d'Ubuntu des de la línia de comandes

Tot  sovint convé saber la versió d'Ubuntu en la que ens trobem, sobretot si treballem amb múltiples servidors al llarg del temps. Pot ser necessari per temes de compatibilitats, etc...

Si disposem d'entorn gràfic, n'hi ha prou d'anar a l'opció de "Quant aquest ordinador" dins del menú de sessions (la rodeta de dreta del tot de la barra d'eines):


Però en un servidor no disposem d'aquesta possibilitat. Per sort, tenim la comanda que en dirà la versió:
$ lsb_release -a
I també la que ens pot dir si estem treballant amb 32 o 64 bits:
$ getconf LONG_BIT
Senzill i molt útil !

7 de desembre de 2014

Trobar els fitxers modificats en l'ultim dia (o hora)

Ubuntu, o Linux en general, disposa de petites joies en forma de comandes del terminal que ens poden fer la vida molt fàcil. O no us heu trobat mai amb la necessitat de saber quins fitxers heu modificat fa un parell d'hores? O fa un parell de dies?
La comanda següent:
$ find . -mtime -1 -ls
ens permet localitzar tots els fitxers modificats durant l'últim dia. Canvieu el 1 pel número de dies que vulgueu...

I si voleu menys d'un dia? No patiu, també hi ha la possibilitat de buscar per minuts. Així:
$ find . -mmin -60 -ls
ens permet trobar els fitxers modificats en la darrera hora.

Fàcil i útil, veritat?

4 d’octubre de 2014

Emulant un Commodore 64 (C-64) a Ubuntu

Als que ja tenim una edat, de tant en tant ens agafa un rampell de nostàlgia. Deu ser per això que avui m'ha donat per instal·lar un emulador del que va ser el meu primer ordinador, el Commodoe 64.

Hi ha diverses opcions, però m'he decidit pel VICE, que ja el tenim present en la distribució:
$ sudo apt-get install vice
L'executem des del terminal per veure si genera algun error:


I efectivament, tenim un error. Si ens fixem en el que ens diu, podem veure que no ha trobat les ROMs per poder emular el C-64. Un tema de llicències.

Ho podem solucionar baixant el paquet amb el codi font, que sí que les inclou. Desempaquetem i copiem els fitxers necessaris:
$ sudo cp -vR vice-2.4/data/* /usr/lib/vice
I a recordar els bons vells temps:

28 de setembre de 2014

XML: identat correcte a Geany

Geany és un excel·lent editor de programació que utilitzo habitualment si no necessito treballar amb un entorn específic. Fins ara, una de les poques pegues que hi havia trobat era que no indentava automàticament els fitxers XML:



Però es pot solucionar fàcilment gràcies a l'execució de comandes externes i el programa xmlindent. En primer lloc, instal·lem aquesta darrera eina:
$ sudo apt-get install xmlindent

I llavors afegim la comanda al Geany, a Edita ->Formata -> Envia la Selecció a... -> Indica Ordre Pròpia i afegim:
xmlindent -i 4 -f

Amb això, ja ens l'haurà afegit. Ara la podem invocar des del menú, o amb l'abreviació de teclat corresponent (Ctrl+1 si és la primera ordre). Seleccionem tot el text, invoquem l'ordre, i el resultat:




Evidentment, podem jugar amb les opcions de xmlindent, o fins i tot utilitzar altres eines amb la mateixa tècnica per a obtenir el resultat desitjat.

Ja comentareu si us ha servit o utilitzeu altres eines o programes !

21 de setembre de 2014

ERROR: Ubuntu es queda esperant una tecla per arrencar [SOLUCIONAT]

Aquesta setmana he tingut un problema amb un servidor que no va arrencar. Vaig haver d'accedir-hi físicament, armat amb teclat i pantalla, per comprovar que simplement estava en el menú del GRUB, esperant una tecla per continuar!!!

Però si hi tinc posat un timeout! Havia d'arrencar sol al cap de tres segons. Cercant sobre el tema, de seguida vaig trobar un bug relacionat que em va portar a un altre bug on es descriu la font del problema: bàsicament, que s'ha afegit l'espera (infinita per defecte) d'una tecla quan el sistema no es va tancar correctament.

En resum, em va recordar allò de "no és una errada, és una prestació".

Per sort, conegut el problema, la solució és ben fàcil, ja que també es va introduir un opció per canviar el temps d'espera, o eliminar-lo completament. Vaja, una altra opció del GRUB que per desgràcia no ve en les configuracions per defecte.

Per solucionar-ho, editem el fitxer de configuració del GRUB a /etc/default/grub i afegim la línia (posant el timeout que vulgueu):
GRUB_RECORDFAIL_TIMEOUT=10
Tot seguit actualitzem amb les noves opcions:
$ sudo update-grub
I ja ho tenim solucionat!