Sunday, 29 January 2012

Tutto sommato, Windows...

Sono in procinto di dare il benservito a un paio di server tirati su qualche anno fa. La maggior parte delle applicazioni che vi girano, sono state già migrate, più o meno bene, su una nuova piattaforma più aggiornata. Rimangono due applicazioni scritte in php 4, una che utilizza mysql, necessariamente la versione 3.23. L'altra, probabilmente per qualche strano vezzo del programmatore, sparito dalle scene da anni, utilizza un database Sql Server. Entrambe le applicazioni (per uso interno) girano su Apache 2.0/Linux.

I nuovi server, gestiti da altri e divisi rigidamente tra server Windows e server Linux non supportano le due applicazioni. Come minimo sarebbe necessario aggiornarle, modificarle per cambiare database, e/o release di php/mysql, e ritestarle. Roba che può richiedere giornate di lavoro, improponibile. L'unica soluzione che mi viene in mente è virtualizzare.

Non posso pare un P2V del vecchio server, che in realtà è un gruppo di server in cluster. Posso però creare una nuova macchina virtuale, metterci apache 2.0, php 4, mysql 3 e usare un sql server già presente sulla rete per gestire il database della seconda applicazione.


Parto da una CentOS 6 minimal install, per poi ricompilare dai sorgenti i vari pacchetti come era stato fatto del resto nell'installazione originale. Partire con un kernel e un s.o. aggiornato è importante per la sicurezza, se partissi con una vecchia CentOS poi dovrei comunque aggiornarla.

L'installazione di base della macchina virtuale con Vmware va liscia.

Mysql 3 non è più disponibile, ne in sorgente, ne in binario, sul sito ufficiale (mysql.com). Trovo però dei sorgenti su openlogi.com. Unzippo, ./configure... errori su errori. Mancano in realtà diverse librerie, che installo con yum. Il configure supera gli errori giù visti, poi si blocca indicando che gcc non è quello giusto. Cerco su google, problema già noto, però devo cambiare gcc. Sarà sensato forzare un vecchio compilatore? Meglio provare un installazione binaria. Il repository yum di CentOS ha solo mysql 5. Provo i binari di openlogic. Le istruzioni di installazione sono errate, comunque poi lo script safe_mysqld non riesce a far partire mysqld. Trovo dei vecchi rpm mysql-server. Anche per le relative dipendenze il repository centos non è di aiuto. Ma riesco a trovare ancora dei vecchi rpm che girano.
Alla fine della fiera riesco a far girare mysql, cancellando alcune righe che fanno 'nice' sul processo mysqld da safe_mysqld, combinando i file delle due release binarie.

Scarico apache 2.0, che tutto sommato da relativametne pochi problemi. Anche in questo caso devo scaricare vecchie librerie, in alcuni casi sotto forma di pacchetti di compatibilità per l'attuale versione di CentOS.

Per quanto riguada php trovo con relativa facilità i sorgenti della versione usata sul vecchio server, la 4.4.6. Però ricordo che la seconda applicazione usa un database Sql Server. Questo, anche se ovviamente l'inesistente documentazione della vecchia applicazione non lo dice, richiede anche la libreria freeTDS. In pratica un driver open source per Sql Server sotto linux. Su freeTDS.org sembra esserci solo l'ultimissima release, di molto succesiva all'applicazione, scritta nel 2005 o 2006.

Proviamo incrociando le dita. Non ho mai installato freeTDS. Trovo un articolo su linuxjournal sulle opzioni di configurazione. Del 2003, 9 anni fa. Un'altra opzione la trovo sulla documentazione del package mssql sul sito ufficiale php. Per convincere lo script ./configure ad arrivare in fondo devo scaricare qualche altro pacchetto tramite yum, tra cui unixODBC.

Passo a configurare la compilazione di php. L'opzione with-mssql richiede la cartella di installazione di freetds, ma non funziona, anche seguendo le istruzioni. Eppure freetds, usando l'utility tsql, funziona. Su google trovo un messaggio in un forum che dice come le ultime release di freetds non installino più alcuni file controllati dal configure del php. Provo a rimediare seguendo le indicazioni del post, ma continua a non funzionare. Esaminando meglio lo script capisco che due file .h di freetds (o era unixODBC) devono essere copiati in /usr/include e a quel punto il configure arriva in porto.

In realtà il phpinfo() del vecchio server è piuttosto ricco: gd, mcrypt, iconv, mime_magic, pcre, imap, openssl. Riesco a trovare le librerie giuste per compilare tutto, a parte imap e openssl. Pare che ci sia la soluzione anche per l'ultimo errore, ma non credo che le due applicazioni usino imap.. Si sta facendo un po' tardi, del resto.

Il server è pronto: non rimane che spostare il  database mysql (quello sql server si ripristina in un attimo). Uhm, lo script mysqldump da errore. Faccio, anche se non è molto ortodosso, un backup binario direttametne delle tabelle mysql 3.23 e riesco a ripristinare il database. Ancora un'oretta per capire come sono state installate e configurate le due applicazioni per replicare sulla nuova VM.

Evviva, funziona tutto. Provo a riavviare il server. Riparte tutto, a parte mysqld. Lo script di avvio funziona tranquillamente da shell, ma non da init.d o da rc.local. Dopo un (bel) po' di tempo giocando con le opzioni di loggin noto un errore Can't create interrupt-thread (error 13, errno: 13). Un altro post su un forum (non è che posso mettermi a fare il debug di mysqld, specie alle sei del pomeriggio) mi parla di un problema con selinux. Bingo, aggiungo un setenforce 0 a rc.local e funziona tutto.

Whew. Applicazioni spostate. Ho una history di uh.. seicento righe ed è passata in pratica una giornata di lavoro. I love Linux...

1 comment:

  1. I'm trying to use artepupper but am getting a message that says can't find code in second webpage. How do I fix this?

    ReplyDelete