Integralismo informatico

Recentemente ho voluto provare a installare una piattaforma LAMP (Linux-Apache-MySQL-PHP) su una VPS per la gestione del sito di gilda su World of Warcraft, come distribuzione ho optato per un Debian Wheezy che ho già sfruttato per fare da server in altri ambiti, non sarò breve perché voglio far capire a cosa porta l’integralismo nell’open source.

L’installazione in sé dei vari componenti mi ha portato via un po’ di tempo, ma si rientra nel ragionevole, al momento di installare PBWoW e bbDKP, entrambi mod di phpBB per la gestione delle gilde con integrazione col forum, mi ritrovo a dover gestire malfunzionamenti, all’inizio penso sia colpa del nome della mia gilda che ha un carattere accentato (a volte ha dato problemi su altri siti), poi controllo che non sia colpa del nome del server su cui giochiamo, che anch’esso è “creativo” avendo spazi, apostrofi e accentati. Nulla, continua a venirmi una schermata bianca se inserisco il nome della mia gilda, se inserisco un nome a caso lo prende.

Torno alla shell e attivo tutte le notifiche del PHP per capire dove sta il problema, ora mi viene fuori una simpatica scritta

Call to undefined function imagelayereffect()
comincio a inveire perché fra il forum base e due mod che si installano uno sull’altro vallo a trovare il problema.

Con la pazienza che mi rimane a quell’ora di notte (speravo fosse una cosa veloce…) cerco notizie relative alle mod e all’errore, nulla li mette in correlazione, alché mi dirigo su una ricerca più generale e spunta un link, suggerisce di installare la libreria GD, cerco e noto che la php5-gd è già installata.

Altre imprecazioni, vado su php.net e mi informo su questa benedetta libreria gd, testo alcune funzioni e vanno tutte eccetto un paio se non ricordo male, a questo punto do la colpa ad una versione non aggiornata, ma andando a leggere, tale funzione è (PHP 4 >= 4.3.0, PHP 5), considero impossibile che non ci sia, cerco a fondo e trovo dei link riguardo a Debian e php5-gd.

“Spulciandoli certosinamente” scopro che per questioni di manutenibilità e sicurezza Debian distribuisce i file installabili tramite apt-get “castrati” per la libreria gd, motivo? Perché chi sviluppa PHP ha risviluppato in proprio la libreria GD partendo dal progetto originale http://libgd.bitbucket.org/ non contribuendo a migliorarne il sorgente. Quindi chi gestisce Debian ha deciso di bypassare le librerie integrate e di fare affidamento sul progetto libgd originale, che ovviamente omette qualsiasi modifica successiva.

A prescindere dal fatto che avranno fatto le loro valutazioni e che saranno pure legittime, perché diavolo non viene avvisato l’utente di questo ENORME dettaglio? Capisco perfettamente che è nello spirito del software open source il potersi personalizzare la macchina come meglio si preferisce, ma almeno si dovrebbe essere consci di cosa succede, non saperlo dopo.

L’unica soluzione infatti è quella di ricompilare l’intero php partendo dai sorgenti abilitando la versione integrata della libreria al posto che puntare a quella esterna, dettagli per ricompilare li trovate a http://mapopa.blogspot.it/2012/06/php-gd-bundled-compilation-instructions.html e si come noterete dal titolo anche Ubuntu è affetto da questa scelta. Vi avverto porta via tanto tempo a seconda della macchina che andate a usare, soprattutto se come nel mio caso siete con un monoprocessore e 512mb di RAM.

Se come nel mio caso avrete la necessità di ricompilare, ricordatevi di segnalare ad apt di non aggiornare tale pacchetto, altrimenti vanificherà ogni sforzo profuso; potete farlo con:
sudo apt-mark hold package_name
e potete rimuovere il blocco con:
sudo apt-mark unhold package_name

Concludendo, capisco le preoccupazioni di chi sviluppa Debian per la sicurezza e la questione di principio di non appropriarsi di una libreria e risvilupparla in proprio senza contribuire al progetto, ma personalmente scelte così radicali come rendere non attive funzioni da una libreria “standard” andrebbero segnalate a tutto schermo all’atto dell’installazione del pacchetto, ciò eviterebbe di perdere tempo a cercare bug inesistenti.