questa è una piccola guida su come mettere il tomcat su un server virtuale pidocchioso (cioè quello da poveri) di arubba.
Gli era una volta un utente che voleva Tomcat. E lo voleva ardentemente, più d'ogni altra cosa al mondo.
Ma 'un lo voleva sulla propria macchina, dove già aveva apache, IIS e glassfish a fargli compagnia, col povero netbeans intento a mettere ordine tra questi apparenti amici, lo voleva sulle linee, online! anzi, ONLINES!
Così un bel giorno l'amico utente s'affaccio' su aruba, www.aruba.it. E rimase incantato dall'offerte di questi, dai prezzi stracciati e dai colori pastello.
E sobbalzò vedendo i prezzi dei server dedicati: uimmenà! 'e un me li posso permette!
ma poi vide i server virtuali, che già conosceva per mano dell'antico vmware e dei vari suoi fratellini open source (plex, bochs), ms (vpc) e anche quell'altri che proprio virtual machine non sono pero' ci si pole fa cose veramente belline, come ad esempio il wine, winex e compagnia sfavillante.
Così l'utente, armato di winamp e auricolari, si mise a frugare tra le offerte di aruba per i server virtuali e, con sommo disappunto, scoprì che un c'era tanto da tiralla per le lunghe.
e c'era il server virtuale serio e il server virtuale pei poveri. Mai differenze tecniche tra i due fureno così abissali tanto che il povero utente, che voleva tomcat, si perplì!
O come faro' col server da poveri, che cià solo 140 mega di bytes, a facci girà tutto! o come faro' con questo poco disco io che come prima cosa ricompilo tutto.
o come faro'?
ma pero' 'e un si perse d'animo e deciso a investire soldi e tempo, almeno quel poco rimasto, preso la volpe di fuoco a quattro mani e inizio' a riempire quintali di form per autorizzare anche la culotte della nonna.
infine, pago e contento, sprofondo' su slashdot.
Al che il sole bacio' i posteggiatori abusivi su via dell'umanesimo, una mail falsamente radiosa, ma sotto plumbea come la marmitta del califfone, arrivo' e disse: pinocchio pinocchio! il server è pronto! o che tu fai ancora nel letto.. alzeti e vai a configurallo.
E così fu che pinocchio, l'utente pidocchio, si connise (passato superremoto di connettere, VABBENE?) al server e scopri' con disprezzo e naftalina di trovarsi davanti al plesk, con un web server che faceva piangere, senza jsp, senza tomcat e senza memoria.
ma 'e un si perse d'animo, entro come maestro di gioia e potere, violenza e distruzione (root) e fece
# cd /etc/init.d
poi si disse: certo a rimuove le cose poi fo' casino.. meglio fassi un bel culosu (backup) e comando'
# mkdir unused
detto fatto inizio' a spostarci dentro tutte le robe che un gli servivano, dapprima.
# mv (per esempio) qmail unused
e lo fece per tutti i seguenti:
courier-imap psa-spamassassin
httpd psa-vpn
mailman qmail
mysqld sendmail
postgresql spamassassin
psa tomcat5
psa-firewall xinetd
psa-firewall-forward
indi riavvio' la macchina virtuale tramite il pennello di 'ontrollo.
e la macchina risali' subito, veloce come lo sguardo triste della tipa col marchese dopo una bella pomiciata.
certo la memoria libera unn'era poi così tanta, ma pinocchio, l'utente pidocchio, era convinto di potercela fare.
allora da bravo apri' la volpe di fuoco sul suo laptop, navigo' sul sito sun, si informo' su quale jvm occupava meno memoria tra le versioni funzionanti con tomcat e,giunto alla pagina del download, tasto destro copia link, torno' sul putty e comando':
#wget http://blahblah.sun.com/ultima/version/java.zip
il trasferimento ando' avanti un po', poi si fermo', riprese e infine pinocchio capi' che così non poteva esse.
Scarico' allora winscp sul suo desktop e, dopo averlo istruito coi parametri fondamentali, trasferi' la jvm dal laptop al suo server, con un numero stranamente alto di riconnessioni del client winscp. ma non indago' su questo curioso aspetto.
poi scarico' apache, ma torno' subito sui suoi passi giacchè metterci di mezzo il webserver poteva rendere infruttuoso l'uso di tomcat e java, sopra.
allora prese tomcat, lo installo' sotto /opt seguendo le facili istruzioni del README e INSTALL
e poi scrisse
# java -version
e venne fuori una versione a sorgente aperto che pero' non si sapeva se fosse compatibile con tomcat, e a dirla tutta non si voleva mai sapere!
così pinocchio mise la jvm sotto /opt anch'ella e digito', sotto bin:
# ./java -version
ma icchè venne fori? OUT OF MEMORY EXCEPTION.
fatta eccezione per Exception è sostanzialmente lo stesso errore che si otteneva con il C64 quando si faceva un DIM un po' troppo arguto.
c'erano due problematiche da risolvere, quindi:
- il tomcat prendeva la java di default, ed era cosa sbagliata
- il java 1.6 non partiva neppure.
Dopo estenuanti tentativi e mezzo giga di mp3 suonati il buon pinocchio capi' che si doveva agire alla sorgente, comandandando JAVA con parametri specifici per la memoria.
Brutta cattivona di una virtual machine java! si scopre che in partenza, la porca, prova a prendersi un sacco di memoria. e il misero fallimento era segnalato dal pannello di controllo della macchina virtuale di aruba: indicatore rosso, ovvero qualcuno voleva fare il furbo.
infatti, poveri noi, solo la versione professionale del server virtuale è fornito con tomcat, per gli altri... puppa!
ma pinocchio ando' sotto /opt/tomcat/bin e disse:
# vi startup.sh
e il vi fu, e lo startup.sh fu aperto.
e in cima al file, subito dopo i commenti di rito, prima del #better OS400 detection, comando', ancora, benchè stanco:
export CATALINA_OPTS="-server -Xmx256m -Xms16m"
export JAVA_HOME="/opt/jdk1.6"
e colse i piccioni con la fava giusta, la sua.
Il primo export comandava JAVA di aprirsi senza essere troppo esoso, mentre il secondo serviva al tomcat per capire quale java usare.
Certo pinocchio avrebbe potuto impostare questi parametri da qualche altra parte, globalizzarli, o quel che l'era.
ma pinocchio, un po' no global e un po' chirurgico, non voleva impattare i sistemi con alcuna scaramuccia, e così si mosse nell'ombra.
Tomcat parti', IT WORKS, recitava il sito
anzi no, non parti' perchè, dopo aver messo qualche script di avvio (in calce) il fetentone non riusciva a "mettersi in ascolto sulla porCa 80"
o perdincibacco, uimmei.
spiegato l'arcano: la macchina virtuale aruba ha preimpostato l'utente tomcat .. e ... lo script di avvio che ho usato prevede di lanciare tomcat con la sua personale utenza, quella di tomcat.
peccato che tale utonto tomcat non possa mettersi in ascolto su una porta < 1024. e siccome la porta web è la 80 che è minore di 1024, tomcat non poteva partire.
orbene pinocchio era sì un esperto di sicurezza, come si suol dire, ma anche una persona semplice e, tutto sommato, preferiva non mettersi a ravanare in vandalismi per'chiudere tutto' e assicurarsi che la security fosse al 100%. così decise che tomcat poteva stare sulla 8080, e ancora comandò:
# vi conf/server.xml
e configuro' la porta. e poi edito' tomcat-users.xml e si configuro' un utente manager.
e gatto tom (tom cat) parti' al riavvio della macchina, silente come una serpe, aggressivo come il mago othelma con l'uovo di upupa.
così, per sfizio, carico' due o tre webapp, le provo' e le testo' e dopo qualche giorno trovolle ancora funzionanti e quindi concluse:
# logout
in fondo non fu poi così dura organizzarsi per far cio' che si vuole.
ma un altro problema si celava nascosto.
infatti al comando shutdown del tomcat questo rispondeva ancora OUT OF MEMORY.
te tu vuoi vedere che si son scordati di prendere in considerazione i JAVA_OPTS?
e così gli era!
Pinocchio ando' su tutte le furie perchè, dopo esser andato su shutdown.sh non trovo' nulla e aprendo catalina.sh trovo' un gran casino!
ma non si perse d'animo e poco sotto la linea "elif [ "$1" = "stop" ] ; then"
laddove si malcelava: "$_RUNJAVA" $JAVA_OPTS \
lui comando', per esteso:
"$_RUNJAVA" -Xmx128m $JAVA_OPTS \
e così fu che anche shutdown.sh faceva il suo lavoro egregio.
e lo script di avvio in /etc/init.d fu:
RETVAL=$?
CATALINA_HOME="/opt/tomcat"
case "$1" in
start)
if [ -f $CATALINA_HOME/bin/startup.sh ];
then
echo $"Starting Tomcat"
/bin/su tomcat $CATALINA_HOME/bin/startup.sh
fi
;;
stop)
if [ -f $CATALINA_HOME/bin/shutdown.sh ];
then
echo $"Stopping Tomcat"
/bin/su tomcat $CATALINA_HOME/bin/shutdown.sh
fi
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
;;
esac
exit $RETVAL
e vissero felici e contenti.