<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog.morphey.org &#187; Howto</title>
	<atom:link href="http://blog.morphey.org/category/linux/howto/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.morphey.org</link>
	<description>Il blog di morphey</description>
	<lastBuildDate>Sat, 24 Jul 2010 03:00:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Subversion &#8211; compilare l&#8217;ultima versione disponibile</title>
		<link>http://blog.morphey.org/2010/02/12/subversion-compilare-ultima-versione-disponibile/</link>
		<comments>http://blog.morphey.org/2010/02/12/subversion-compilare-ultima-versione-disponibile/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 23:11:20 +0000</pubDate>
		<dc:creator>morphey</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemistica]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://blog.morphey.org/?p=489</guid>
		<description><![CDATA[Durante la mia esperienza lavorativa, ho notato che molte distribuzioni (Centos in primis) non hanno nei loro repositories l&#8217;ultima versione di subversion (svn). Per esempio, in Fedora 12, l&#8217;ultima release disponibile è la 1.6.6 (ultima) mentre su Centos 5.3 (usata molto sui server per l&#8217;hosting e servizi web) c&#8217;è la 1.4.2. Questo è molto limitativo]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-488" style="border: 0pt none; margin: 0px 3px;" title="subversion logo" src="http://blog.morphey.org/wp-content/uploads/2010/02/image.axd_-150x150.png" alt="" width="83" height="83" />Durante la mia esperienza lavorativa, ho notato che molte distribuzioni (<a href="http://www.centos.org" target="_blank"><strong>Centos</strong></a> in primis) non hanno nei loro <strong>repositories</strong> l&#8217;ultima versione di <a title="subversion" href="http://subversion.tigris.org/" target="_blank"><strong>subversion</strong></a> (<strong>svn</strong>).</p>
<p>Per esempio, in <a title="fedora" href="http://fedoraproject.org" target="_blank"><em>Fedora 12</em></a>, l&#8217;ultima release disponibile è la <em>1.6.6 </em>(ultima) mentre su <em>Centos 5.3</em> (usata molto sui <em>server</em> per l&#8217;<em>hosting</em> e servizi <em>web</em>) c&#8217;è la <em>1.4.2</em>.</p>
<p><span id="more-489"></span><br />
Questo è molto limitativo in quanto nell&#8217;ultima versione hanno migliorato molto il codice e la velocità, nonché il supporto per altri protocolli.</p>
<p>Di seguito uno script per eseguire la compilazione diretta di subversion dai suoi sorgenti.</p>
<blockquote><p>#installiamo, se ce ne fosse bisogno, i compilatori<br />
yum install -y gcc make</p>
<p>#rimuoviamo l&#8217;eventuale versione attuale<br />
yum remove subversion</p>
<p>#prima di dare l&#8217;ok per l&#8217;eliminazione, controllare se non ci siano dipendenze tipo mod_svn per apache<br />
#se esse ci sono bisogna rimuovere il pacchetto tramite &#8216;rpm&#8217; in questo modo:<br />
# rpm -e `rpm -qa | grep subversion`</p>
<p>#prima di procedere, bisogna installare le librerie openssl-devel per i certificati di sicurezza<br />
yum install -y openssl openssl-devel</p>
<p>#cominciamo spostandoci nella cartella adibita (non è detto <img src='http://blog.morphey.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   ai sorgenti<br />
cd /usr/src</p>
<p># scarichiamo ed estraiamo l&#8217;ultima versione di subversion<br />
wget http://subversion.tigris.org/downloads/subversion-1.6.6.tar.gz<br />
tar zxvf subversion-1.6.6.tar.gz<br />
cd subversion-1.6.6</p>
<p># scarichiamo, estraiamo e spostiamo il pacchetto delle dipendenze<br />
wget http://subversion.tigris.org/downloads/subversion-deps-1.6.6.tar.gz<br />
tar zxvf subversion-deps-1.6.6.tar.gz<br />
mv subversion-1.6.6/* .<br />
rm -rf subversion-1.6.6</p>
<p>#configuriamo zlib (non lo compiliamo adesso)<br />
cd zlib/<br />
./configure &#8211;shared<br />
cd ..</p>
<p>#compiliamo subversion<br />
./configure  &#8211;prefix=/usr CPPFLAGS=&#8221;-Izlib/ -Lzlib/&#8221; &#8211;with-ssl<br />
make<br />
make install</p></blockquote>
<img src="http://blog.morphey.org/?ak_action=api_record_view&id=489&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.morphey.org/2010/02/12/subversion-compilare-ultima-versione-disponibile/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Monitoraggio LSI Logic/Dell SAS 5/iR RAID con mpt-status</title>
		<link>http://blog.morphey.org/2010/02/11/monitoraggio-lsi-logicdell-sas-5ir-raid-con-mpt-status/</link>
		<comments>http://blog.morphey.org/2010/02/11/monitoraggio-lsi-logicdell-sas-5ir-raid-con-mpt-status/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 23:12:44 +0000</pubDate>
		<dc:creator>morphey</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemistica]]></category>
		<category><![CDATA[dell]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[raid]]></category>
		<category><![CDATA[sas]]></category>

		<guid isPermaLink="false">http://blog.morphey.org/?p=483</guid>
		<description><![CDATA[E&#8217; possibile effettuare un monitoring dell&#8217;array RAID di un controller LSI Logic SAS 5/iR che montano macchine DELL, molto basilare, ma utile e immediato. Utilizzeremo il tool mpt-status. La scelta di questo tool è molto semplice e (a volte) obbligata se la macchina in questione ha poca RAM. Infatti molti scelgono di monitorare il tutto tramite]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-484" style="margin-top: 0px; margin-bottom: 0px; margin-left: 2px; margin-right: 2px;" title="RAID-10" src="http://blog.morphey.org/wp-content/uploads/2010/02/RAID-10-150x150.jpg" alt="" width="150" height="150" />E&#8217; possibile effettuare un monitoring dell&#8217;array <strong>RAID</strong> di un controller <strong>LSI Logic SAS 5/iR</strong> che montano macchine <strong><a title="Dell" href="http://www.dell.com" target="_blank">DELL</a></strong>, molto basilare, ma utile e immediato. Utilizzeremo il tool <a href="http://freshmeat.net/projects/mptstatus/" target="_blank">mpt-status</a>.</p>
<p>La scelta di questo tool è molto semplice e (a volte) obbligata se la macchina in questione ha poca RAM.</p>
<p>Infatti molti scelgono di monitorare il tutto tramite <strong>omreport</strong> di Dell (parte della suite <a href="http://www.dell.com/content/topics/global.aspx/sitelets/solutions/management/openmanage?c=us&amp;cs=555&amp;l=en&amp;s=biz" target="_blank"><strong>OpenManage</strong></a>) che sicuramente è il migliore tool di monitoraggio locale per i controller RAID (e non solo) in quanto, oltre a controllare lo stato dei dischi, restituisce molte più <a href="http://support.dell.com/support/edocs/software/svradmin/1.9/en/cli/cli_cc5s.htm" target="_blank">informazioni</a> su tutto l&#8217;hardware della macchina (e del RAID stesso).</p>
<p><span id="more-483"></span></p>
<p>Purtroppo la compilazione di questo tool, a volte, può essere macchinosa su sistemi operativi <strong><a href="http://www.centos.org" target="_blank">CentOS</a></strong>, in particolare sulla versione 5.3.</p>
<p>Infatti la compilazione richiede il pacchetto <em>kernel-devel</em> ma, dopo numerosi test effettuati, non contiene (almeno la versione sui mirror ufficiali) alcune librerie LSI.</p>
<p>Per ovviare a questo problema possiamo adoperare rpmbuild ed il sorgente del kernel nella versione src.rpm.</p>
<p>Ho riassunto, in breve, tutti i comandi da lanciare per compilare correttamente mpt-status su CentOS ad ogni aggiornamento di kernel.</p>
<blockquote><p>yum install rpm-build redhat-rpm-config unifdef -y<br />
cd ~<br />
rm -rf ~/rpmbuild<br />
mkdir -p rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}<br />
echo &#8216;%_topdir %(echo $HOME)/rpmbuild&#8217; &gt; .rpmmacros<br />
rm -f kernel-`uname -r`.src.rpm<br />
wget http://mirror.centos.org/centos/5/updates/SRPMS/kernel-`uname -r`.src.rpm<br />
rpm -i kernel-`uname -r`.src.rpm<br />
rm -f kernel-`uname -r`.src.rpm<br />
cd ~/rpmbuild/SPECS<br />
rpmbuild -bp &#8211;target=`uname -m` kernel-2.6.spec 2&gt; prep-err.log | tee prep-out.log<br />
cd /usr/src<br />
rm -rf mpt-status-1.2.0<br />
wget &#8220;http://freshmeat.net/urls/7a85a1d3af8efa1dbe086c142f773164&#8243; -O mpt-status-1.2.0.tar.gz<br />
tar zxvf mpt-status-1.2.0.tar.gz<br />
cd /usr/src/mpt-status-1.2.0<br />
make KERNEL_PATH=~/rpmbuild/BUILD/kernel-`uname -r | cut -d &#8220;-&#8221; -f1`/linux-`uname -r | cut -d &#8220;-&#8221; -f1`.`uname -m`<br />
make install<br />
mknod /dev/mptctl c 10 220<br />
modprobe mptctl</p></blockquote>
<p>Per chi invece ha un sistema x86 e non ha tempo da dedicare alla compilazione, puo&#8217; sempre trovare l&#8217;rpm <a href="http://www.drugphish.ch/~ratz/mpt-status/RPMS/1.2.0_RC7/" target="_blank">qui</a> disponibile, appunto, solo per sistemi 32bit.</p>
<img src="http://blog.morphey.org/?ak_action=api_record_view&id=483&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.morphey.org/2010/02/11/monitoraggio-lsi-logicdell-sas-5ir-raid-con-mpt-status/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MySQL &#8211; Riparare tabelle corrotte</title>
		<link>http://blog.morphey.org/2010/02/05/mysql-riparare-tabelle-corrotte/</link>
		<comments>http://blog.morphey.org/2010/02/05/mysql-riparare-tabelle-corrotte/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 00:06:28 +0000</pubDate>
		<dc:creator>morphey</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemistica]]></category>
		<category><![CDATA[innodb]]></category>
		<category><![CDATA[myisam]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[repair]]></category>

		<guid isPermaLink="false">http://blog.morphey.org/?p=450</guid>
		<description><![CDATA[Chi usa MySQL deve sapere che i server che utilizzano per la gestione dei database possono subire, nel corso del tempo, down e  problemi sui dischi. Le cause sono le più disparate ma, quella più gettonata (specie chi acquista una VPS di basso livello e con poco spazio disco), è la terminazione dello spazio sulla]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-451" style="border: 0pt none; margin: 0px 5px;" title="MySQL" src="http://blog.morphey.org/wp-content/uploads/2010/02/Logo-mysql-150x150.jpg" alt="Logo di MySQL" width="150" height="150" />Chi usa <a title="MySQL Database" href="http://www.mysql.com" target="_blank"><strong>MySQL</strong></a> deve sapere che i server che utilizzano per la gestione dei database possono subire, nel corso del tempo, down e  problemi sui dischi.</p>
<p>Le cause sono le più disparate ma, quella più gettonata (specie chi acquista una <strong>VPS</strong> di basso livello e con poco spazio disco), è la terminazione dello spazio sulla partizione di MySQL (in genere la /var).</p>
<p>Oltre a tutti i problemi (scrittura logs, down dei servizi, etc.) è quasi inevitabile che alcune tabelle dei database, rimaste aperte da processi attivi nel momento stesso della saturazione del disco, vengano corrotte.<span id="more-450"></span></p>
<p>Se le tabelle sono in <strong>INNODB</strong>, allora bisogna solo recuperarle da un backup. Se invece il motore utilizzato è <strong>MyISAM</strong>, allora possiamo tentare (il più delle volte ci si riesce) un recovery della stessa tabella.</p>
<p>Il primo passo da effettuare (naturalmente dopo aver liberato spazio disco), è quello di eseguire il seguente comando con il servizio MySQL attivo:</p>
<blockquote><p>mysqlcheck nome_database -c -r</p></blockquote>
<p>Sostituendo <em>nome_database </em>con il nome del vostro database.</p>
<p>Se avete molti database e non sapete quali siano effettivamente corrotti, possiamo usare lo stesso comando con opzioni diverse per fare il repair su tutti i database del server:</p>
<blockquote><p>mysqlcheck -A -r</p></blockquote>
<p>Se in questo modo non si riesce a riparare la tabella, allora possiamo adottare un&#8217;altra tecnica.</p>
<p>Ipotizziamo che:</p>
<ul>
<li>La cartella dei database di MySQL è <em>/var/lib/mysql/</em></li>
<li>Il database con la tabella corrotta si chiami <em>mio_db</em></li>
<li>La tabella corrotta si chiami <em>mia_tabella</em></li>
</ul>
<p>Allora possiamo stoppare MySQL ed entrare nella cartella fisica del database, dove troviamo per ogni tabella il suo equivalente file .<strong>MYI</strong>.</p>
<p>Da qui possiamo effettuare un repair a freddo:</p>
<blockquote><p>cd /var/lib/mysql/mio_db ; myisamchk -r mia_tabella.MYI</p></blockquote>
<p>Il tempo di repair dipende dalla grandezza della tabella.</p>
<p>Ora possiamo avviare di nuovo MySQL e vedere se la tabella è stata recuperata effettivamente.</p>
<img src="http://blog.morphey.org/?ak_action=api_record_view&id=450&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.morphey.org/2010/02/05/mysql-riparare-tabelle-corrotte/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Debian reset root password: Authentication token busy</title>
		<link>http://blog.morphey.org/2008/08/27/debian-reset-root-password-authentication-token-busy/</link>
		<comments>http://blog.morphey.org/2008/08/27/debian-reset-root-password-authentication-token-busy/#comments</comments>
		<pubDate>Wed, 27 Aug 2008 12:43:15 +0000</pubDate>
		<dc:creator>morphey</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[authentication token busy]]></category>
		<category><![CDATA[boot]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[edit]]></category>
		<category><![CDATA[grub]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[mount]]></category>
		<category><![CDATA[passwd]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[root]]></category>
		<category><![CDATA[shadow]]></category>
		<category><![CDATA[single user]]></category>

		<guid isPermaLink="false">http://blog.morphey.org/?p=185</guid>
		<description><![CDATA[A chi non è mai capitato di perdere la password di root in Debian? In genere, per reimpostare tale password, basta entrare in single user mode in due modi (a seconda dell&#8217;installazione che si ha di debian): nel grub, selezionare il secondo kernel con nella descrizione (single user mode); nel grub, selezionare il kernel attivo]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-186 alignleft" style="border: 0pt none; margin: 3px;" title="debian-logo-portrait1" src="http://blog.morphey.org/wp-content/uploads/2008/08/debian-logo-portrait1-226x300.jpg" alt="" width="226" height="300" /> A chi non è mai capitato di perdere la <strong>password </strong>di <strong>root </strong>in <strong>Debian</strong>?</p>
<p>In genere, per reimpostare tale password, basta entrare in <strong>single user mode</strong> in due modi (a seconda dell&#8217;installazione che si ha di debian):</p>
<ol>
<li>nel <strong>grub</strong>, selezionare il secondo kernel con nella descrizione <em>(single user mode)</em>;</li>
<li>nel <strong>grub</strong>, selezionare il kernel attivo e premere sulla tastiera il tasto <strong>e</strong> che sta per <strong>edit</strong>. Successivamente selezionare la linea del kernel (la seconda in genere) e premere di nuovo <strong>e</strong> (edit) e aggiungere alla fine della riga la sigla <strong>single</strong>. Premere <strong>invio</strong> e successivamente la lettera della tastiera <strong>b</strong> (<strong>boot</strong>).</li>
</ol>
<p>Nei due casi, bootando, verrà effettuato il boot della macchina escludendo tutti i servizi non essenziali (compresa la rete) e verrà visualizzata da subito una shell bash in utenza <strong>root</strong> senza bisogno di aver messo la password.</p>
<p>Questo ci permetterà di effettuare un <strong>passwd root</strong> per cambiare la password.</p>
<p>Alcune volte, questo può non poter bastare.</p>
<p>Nel caso in cui, entrando in single user non verrà aperta la shell senza password, possiamo aggiungere un ulteriore parametro al <strong>kernel</strong>. Seguiamo lo stesso passo (2):</p>
<ul>
<li>nel <strong>grub</strong>, selezionare il kernel attivo e premere sulla tastiera il tasto <strong>e</strong> che sta per <strong>edit</strong>. Successivamente selezionare la linea del kernel (la seconda in genere) e premere di nuovo <strong>e</strong> (edit) e aggiungere alla fine della riga la sigla (esclusi gli apici)  &#8216;<strong>single init=/bin/bash&#8217;</strong>. Premere <strong>invio</strong> e successivamente la lettera della tastiera <strong>b</strong> (<strong>boot</strong>).</li>
</ul>
<p>Ciò ci porterà alla situazione descritta precedentemente e cioè con una bash root senza login.</p>
<p>Nel caso in cui, nell&#8217;eseguire il comando <strong>passwd root</strong> la shell non ci permette di modificare la password con la restituzione dell&#8217;errore &#8220;<strong>Authentication token busy</strong>&#8220;, possiamo dare un comando prima del passwd in modo da montare la partizione di root in lettura-scrittura (in quanto molto probabilmente è in sola lettura): <strong>mount -o remount,rw /</strong></p>
<p>Successivamente ridiamo il comando <strong>passwd root</strong> e possiamo, finalmente, cambiare la nostra password di root.</p>
<p><!--upnews--></p>
<img src="http://blog.morphey.org/?ak_action=api_record_view&id=185&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.morphey.org/2008/08/27/debian-reset-root-password-authentication-token-busy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TinyMCE: integrare perfettamente Ajax File Manager</title>
		<link>http://blog.morphey.org/2008/05/02/tinymce-integrare-perfettamente-ajax-file-manager/</link>
		<comments>http://blog.morphey.org/2008/05/02/tinymce-integrare-perfettamente-ajax-file-manager/#comments</comments>
		<pubDate>Fri, 02 May 2008 14:05:21 +0000</pubDate>
		<dc:creator>morphey</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[Howto]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[afm]]></category>
		<category><![CDATA[ajax file manger]]></category>
		<category><![CDATA[editor html]]></category>
		<category><![CDATA[tinymce]]></category>
		<category><![CDATA[tinymce file manager]]></category>
		<category><![CDATA[tinymce immagini]]></category>
		<category><![CDATA[tinymce plugins]]></category>
		<category><![CDATA[tinymce upload]]></category>
		<category><![CDATA[WYSIWYG]]></category>

		<guid isPermaLink="false">http://blog.morphey.org/?p=160</guid>
		<description><![CDATA[TinyMCE, come molti sapranno, è un web editor WYSIWYG scritto in javascript che permette a chiunque di creare/editare pagine web senza conoscere l&#8217;HTML (una sorta di Word per il web). Il tutto lato-client (in javascript appunto) senza programmare particolari script php che trasformano le stringhe di testo puro nelle entità HTML equivalenti (per esempio i]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft alignnone size-medium wp-image-161" style="float: left; margin-left: 6px; margin-right: 6px;" title="screenshot tinymce" src="http://blog.morphey.org/wp-content/uploads/2008/05/screenshot_02-300x124.jpg" alt="" width="300" height="124" /> <a title="TinyMCE" href="http://tinymce.moxiecode.com" target="_blank"><strong>TinyMCE</strong></a>, come molti sapranno, è un web editor <a href="http://it.wikipedia.org/wiki/WYSIWYG" target="_blank">WYSIWYG</a> scritto in <a href="http://it.wikipedia.org/wiki/Javascript" target="_blank">javascript</a> che permette a chiunque di creare/editare pagine web senza conoscere l&#8217;HTML (una sorta di Word per il web).</p>
<p>Il tutto lato-client (in <strong>javascript </strong>appunto) senza programmare particolari script php che trasformano le stringhe di testo puro nelle entità HTML equivalenti (per esempio i caratteri accentati come le lettere &#8220;ò&#8221;,&#8221;à&#8221;,&#8221;è&#8221;&#8230;).</p>
<p>L&#8217;installazione e la personalizzazione è estremamente semplice, corredato da un <a href="http://wiki.moxiecode.com/index.php/TinyMCE:Index" target="_blank">wiki</a> molto completo e <a href="http://wiki.moxiecode.com/examples/tinymce/installation_example_00.php" target="_blank">pagine di esempi</a> con tutte le possibile personalizzazioni dello script.</p>
<p><span id="more-160"></span></p>
<p>Si sa, però, che javscript è lato-client e non può essere utilizzato per effettuare <strong>upload </strong>su server se non tramite <strong>ajax </strong>o popup che hanno dietro <strong>pagine php programmate per effettuare tali uploads</strong>. Ciò rappresenta un problema se abbiamo la necessità di effettuare l&#8217;upload e il ridimensionamento di immagini ed inserirle all&#8217;interno dell&#8217;editor tinymce.</p>
<p>In giro ci sono alcuni plugin per tinymce che fanno questa cosa ma, purtroppo, molti sono a pagamento.</p>
<p>Risolviamo il problema utilizzando uno script open source di nome <a title="Ajax File Manager" href="http://www.phpletter.com/Demo/Ajax-File--Manager/" target="_blank"><strong>Ajax File Manager</strong></a>.</p>
<p>Tale script è a se stante e, di base, non vengono fornite spiegazione per integrarlo a TinyMCE, ma viene fornito solamente un pacchetto con TinyMCE e Ajax File Manager incluso.</p>
<p>Il problema del pacchetto è che viene fornito con TinyMCE v. 2.1.2 e Ajax File Manager v. 0.9. Domanda: come facciamo ad avere l&#8217;ultima versione di TinyMCE (<strong>3.08</strong>) e Ajax File Manager (<strong>1.0 RC 1</strong>)?</p>
<p>Ecco qui come integrare AFM 1.0 Rc1 nella versione 3.08 di TinyMCE.</p>
<p>Scarichiamo l&#8217;<strong>ultima versione di TinyMCE</strong> dalla pagina <a href="http://tinymce.moxiecode.com/download.php" target="_blank">http://tinymce.moxiecode.com/download.php</a>, scompattiamolo nella root-dir della nostra applicazione (per es. public_html/). Avremo così la cartella public_html/tiny_mce/.</p>
<p><a href="http://blog.morphey.org/wp-content/uploads/2008/05/screenshot_03.jpg"><img class="alignright alignnone size-thumbnail wp-image-162" style="float: right; margin-left: 6px; margin-right: 6px;" title="screenshot_03" src="http://blog.morphey.org/wp-content/uploads/2008/05/screenshot_03-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>Scarichiamo l&#8217;ultima versione di Ajax File manager dalla pagina <a href="http://www.phpletter.com/DOWNLOAD/" target="_blank">http://www.phpletter.com/DOWNLOAD/</a> e scompattiamo il file nella cartella public_html/tiny_mce/plugins/. Avremo così la cartella <strong>public_html/tiny_mce/plugins/ajaxfilemanager/</strong>.</p>
<p>Per prima cosa impostiamo correttamente il file public_html/tiny_mce/plugins/<strong>ajaxfilemanager/inc/config.base.php</strong> con i giusti parametri (login, formato file, percorsi).</p>
<p>In particolare, i percorsi ipotizzando che il nostro dominio si chiami www.miodominio.it e le immagini le uploadderemo nella cartella <strong>public_html/img con chmod a 777</strong> (avremo anche una <strong>cartella session in public_html/session con chmod a 777</strong> per la cache):</p>
<blockquote><p>/* &#8230;&#8230;&#8230; */<br />
define(&#8216;CONFIG_SYS_DEFAULT_PATH&#8217;, &#8216;../../../img/&#8217;);<br />
define(&#8216;CONFIG_SYS_ROOT_PATH&#8217;, &#8216;../../../img/&#8217;);<br />
define(&#8216;CONFIG_SYS_FOLDER_SHOWN_ON_TOP&#8217;, true);<br />
define(&#8220;CONFIG_SYS_DIR_SESSION_PATH&#8221;, &#8216;../../../session/&#8217;);<br />
/* &#8230;&#8230;&#8230; */<br />
define(&#8216;CONFIG_WEBSITE_DOCUMENT_ROOT&#8217;, &#8216;/home/utente/public_html/&#8217;);<br />
/* &#8230;&#8230;&#8230; */</p></blockquote>
<p>&#8220;Tutti&#8221; i percorsi devono avere il percorso relativo alla posizione public_html/tiny_mce/plugins/ajaxfilemanager/ .</p>
<p>Fatto questo possiamo impostare il nostro TinyMCE con le chiamate di callback dovute.</p>
<p>L&#8217;esempio di configurazione, di seguito, è standard: leggendo il codice possiamo personalizzarlo come vogliamo.</p>
<p>Nella pagina del form con un input testuale multilinea con l&#8217;ipotetico nome id=&#8221;input_txt&#8221; inseriamo nei tags &lt;script&gt;&lt;/script&gt; il seguente codice:</p>
<blockquote><p>&lt;script&gt;<br />
tinyMCE.init({<br />
mode : &#8220;textareas&#8221;,<br />
theme : &#8220;advanced&#8221;,<br />
plugins : &#8220;inlinepopups,advimage,media&#8221;,<br />
theme_advanced_buttons1 : &#8220;bold,italic,underline,separator,strikethrough,justifyleft,justifycenter,justifyright,justifyfull,bullist,numlist,undo,redo,link,unlink,image,removeformat,anchor,blockquote,code&#8221;,<br />
theme_advanced_buttons2 : &#8220;&#8221;,<br />
theme_advanced_buttons3 : &#8220;&#8221;,<br />
<strong>file_browser_callback : &#8220;ajaxfilemanager&#8221;,</strong><br />
theme_advanced_toolbar_location : &#8220;top&#8221;,<br />
theme_advanced_toolbar_align : &#8220;left&#8221;,<br />
theme_advanced_statusbar_location : &#8220;bottom&#8221;,<br />
width : &#8220;676&#8243;,<br />
height : &#8220;300&#8243;,<br />
extended_valid_elements : &#8220;a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]&#8220;,<br />
apply_source_formatting : true,<br />
relative_urls : false,<br />
remove_script_host : false,<br />
document_base_url : &#8220;&lt;?=SITE_URL?&gt;&#8221;,<br />
languages : &#8220;it&#8221;,<br />
theme_advanced_resize_horizontal : false,<br />
theme_advanced_resizing : true,<br />
convert_newlines_to_brs : false,<br />
force_br_newlines : false,<br />
force_p_newlines : false<br />
});<br />
<strong>function ajaxfilemanager(field_name, url, type, win) {</strong><br />
<strong> var ajaxfilemanagerurl = &#8220;http://www.miodominio.it/tiny_mce/plugins/ajaxfilemanager/ajaxfilemanager.php&#8221;;</strong><br />
switch (type) {<br />
case &#8220;image&#8221;:<br />
ajaxfilemanagerurl += &#8220;?type=img&#8221;;<br />
break;<br />
case &#8220;media&#8221;:<br />
ajaxfilemanagerurl += &#8220;?type=media&#8221;;<br />
break;<br />
case &#8220;flash&#8221;: //for older versions of tinymce<br />
ajaxfilemanagerurl += &#8220;?type=media&#8221;;<br />
break;<br />
case &#8220;file&#8221;:<br />
ajaxfilemanagerurl += &#8220;?type=files&#8221;;<br />
break;<br />
default:<br />
return false;<br />
}<br />
var fileBrowserWindow = new Array();<br />
fileBrowserWindow["file"] = ajaxfilemanagerurl;<br />
fileBrowserWindow["title"] = &#8220;Ajax File Manager&#8221;;<br />
fileBrowserWindow["width"] = &#8220;782&#8243;;<br />
fileBrowserWindow["height"] = &#8220;440&#8243;;<br />
fileBrowserWindow["resizable "] = &#8220;yes&#8221;;<br />
fileBrowserWindow["inline"] = &#8220;yes&#8221;;<br />
fileBrowserWindow["close_previous"] = &#8220;no&#8221;;<br />
tinyMCE.activeEditor.windowManager.open(fileBrowserWindow, {<br />
window : win,<br />
input : field_name<br />
});</p>
<p>return false;<br />
<strong>}</strong></p>
<p>&lt;/script&gt;</p></blockquote>
<p>Come potete vedere, abbiamo inserito nell&#8217;init di TinyMCE il richiamo alla funzione di callback <strong>file_browser_callback : &#8220;ajaxfilemanager&#8221;</strong> che fa riferimento alla funzione che abbiamo creato subito dopo.</p>
<p>Da notare che la variabile <strong>ajaxfilemanagerurl</strong> nella funzione <strong>ajaxfilemanager</strong> deve contenere l&#8217;url assoluto al file ajaxfilemanager.php.</p>
<p>Fatto questo possiamo caricare la pagina con il form via web e cliccare, quando abbiamo bisogno di inserire un&#8217;immagine, sull&#8217;icona IMMAGINE di tinymce e, successivamente quando ha caricato la popup del gestore immagini, clicchiamo sull&#8217;icona di fianco a <em>Image Url</em> e si aprirà la finestra di Ajax File Manager.</p>
<p><!--upnews--></p>
<img src="http://blog.morphey.org/?ak_action=api_record_view&id=160&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.morphey.org/2008/05/02/tinymce-integrare-perfettamente-ajax-file-manager/feed/</wfw:commentRss>
		<slash:comments>53</slash:comments>
		</item>
		<item>
		<title>cPanel: register_globals sul singolo virtualhost con apache 2.x e mod_suphp</title>
		<link>http://blog.morphey.org/2008/03/20/cpanel-attivare-register_globals-per-un-solo-dominio-e-personalizzare-del-virtualhost-specifico/</link>
		<comments>http://blog.morphey.org/2008/03/20/cpanel-attivare-register_globals-per-un-solo-dominio-e-personalizzare-del-virtualhost-specifico/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 11:52:31 +0000</pubDate>
		<dc:creator>morphey</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[cPanel]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[configpath]]></category>
		<category><![CDATA[cpanel]]></category>
		<category><![CDATA[httpd.conf]]></category>
		<category><![CDATA[includes]]></category>
		<category><![CDATA[mod_suphp]]></category>
		<category><![CDATA[php.ini]]></category>
		<category><![CDATA[register_globals]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[std]]></category>
		<category><![CDATA[suphp]]></category>
		<category><![CDATA[suPHP_ConfigPath]]></category>
		<category><![CDATA[user.conf]]></category>
		<category><![CDATA[userdate]]></category>
		<category><![CDATA[vhost]]></category>
		<category><![CDATA[virtualhost]]></category>

		<guid isPermaLink="false">http://blog.morphey.org/index.php/2008/03/20/cpanel-attivare-register_globals-per-un-solo-dominio-e-personalizzare-del-virtualhost-specifico/</guid>
		<description><![CDATA[Vediamo come modificare un solo virtualhost senza perdere le modifiche alla rigenerazione dell&#8217;httpd.conf di apache. Se non esiste, creiamo la cartella /usr/local/apache/conf/userdata/std/2/UTENTE/DOMINIO.EST/ Possiamo sostituire &#8220;std&#8221; con &#8220;ssl&#8221; se vogliamo modificare il virtualhost &#8220;solo&#8221; per l&#8217;ssl. Se usiamo apache 1.x dobbiamo cambiare il &#8220;2&#8221; con &#8220;1&#8220;. Creiamo un file di nome user.conf (o di qualsiasi altro]]></description>
			<content:encoded><![CDATA[<p>Vediamo come modificare un solo <strong>virtualhost </strong>senza perdere le modifiche alla rigenerazione dell&#8217;<strong>httpd.conf</strong> di apache.</p>
<p>Se non esiste, creiamo la cartella <strong>/usr/local/apache/conf/userdata/std/2/UTENTE/DOMINIO.EST/</strong><br />
Possiamo sostituire &#8220;<strong>std</strong>&#8221; con &#8220;<strong>ssl</strong>&#8221; se vogliamo modificare il virtualhost &#8220;solo&#8221; per l&#8217;ssl.<br />
Se usiamo apache <strong>1.x </strong>dobbiamo cambiare il &#8220;<strong>2</strong>&#8221; con &#8220;<strong>1</strong>&#8220;.</p>
<p>Creiamo un file di nome <strong>user.conf</strong> (o di qualsiasi altro nome, l&#8217;importante è che risulta l&#8217;estensione <strong>.conf</strong>).</p>
<p>In questo file mettiamo le direttive specifiche per questo dominio in modo che prende le variabili personalizzate del <strong>php.ini</strong> da un altro file.</p>
<p>Nell&#8217;esempio, vogliamo attivare il <strong>register_globals</strong> solo per questo dominio.<br />
Il <strong>mod_suphp</strong> permette di personalizzare questo path con la direttiva &#8220;<strong>suPHP_ConfigPath</strong>&#8220;:</p>
<blockquote><p>### /usr/local/apache/conf/userdata/std/2/UTENTE/DOMINIO.EST/user.conf</p>
<p>&lt;IfModule mod_suphp.c&gt;<br />
suPHP_ConfigPath /usr/local/Zend/register-enabled<br />
&lt;/IfModule&gt;</p></blockquote>
<p>In questo modo, riavviando apache (non lo facciamo ora pero&#8217;), il virtualhost andra&#8217; a cercare il php.ini dentro la directory <strong>/usr/local/Zend/register-enabled</strong> creata ad hoc:</p>
<blockquote><p>mkdir -p /usr/local/Zend/register-enabled<br />
touch /usr/local/Zend/register-enabled/php.ini</p></blockquote>
<p>Nel file <strong>/usr/local/Zend/register-enabled/php.ini</strong> metteremo, quindi, la direttiva per l&#8217;attivazione di register_globals:</p>
<blockquote><p>## /usr/local/Zend/register-enabled/php.ini<br />
register_globals = On</p></blockquote>
<p>Prima di riavviare apache, dobbiamo istruirlo per far includere i files appena creati.<br />
Per fare questo lanciamo il seguente comando:</p>
<blockquote><p><strong>/scripts/ensure_vhost_includes &#8211;user=UTENTE</strong></p></blockquote>
<p>Al termine, possiamo riavviare apache e il lavoro e&#8217; finito.</p>
<p>Per curiosita&#8217; e verifica, possiamo editare /usr/local/apache/conf/httpd.conf e vedere nel virtualhost del dominio se effettivamente le modifiche hanno avuto effetto.<br />
Possiamo notare:</p>
<blockquote><p>    Include &#8220;/usr/local/apache/conf/userdata/*.conf&#8221;<br />
Include &#8220;/usr/local/apache/conf/userdata/*.owner-root&#8221;<br />
Include &#8220;/usr/local/apache/conf/userdata/std/*.conf&#8221;<br />
Include &#8220;/usr/local/apache/conf/userdata/std/*.owner-root&#8221;<br />
Include &#8220;/usr/local/apache/conf/userdata/std/2/*.conf&#8221;<br />
Include &#8220;/usr/local/apache/conf/userdata/std/2/*.owner-root&#8221;<br />
Include &#8220;/usr/local/apache/conf/userdata/std/2/UTENTE/*.conf&#8221;<br />
Include &#8220;/usr/local/apache/conf/userdata/std/2/UTENTE/DOMINIO.EST/*.conf&#8221;</p></blockquote>
<p><!--upnews--></p>
<img src="http://blog.morphey.org/?ak_action=api_record_view&id=142&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.morphey.org/2008/03/20/cpanel-attivare-register_globals-per-un-solo-dominio-e-personalizzare-del-virtualhost-specifico/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>cPanel: Abilitare spamassassin a tutti gli utenti</title>
		<link>http://blog.morphey.org/2008/01/15/cpanel-abilitare-spamassassin-a-tutti-gli-utenti/</link>
		<comments>http://blog.morphey.org/2008/01/15/cpanel-abilitare-spamassassin-a-tutti-gli-utenti/#comments</comments>
		<pubDate>Tue, 15 Jan 2008 16:58:23 +0000</pubDate>
		<dc:creator>morphey</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[cPanel]]></category>
		<category><![CDATA[account]]></category>
		<category><![CDATA[accounts]]></category>
		<category><![CDATA[chmod]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[configurazione]]></category>
		<category><![CDATA[cpanel]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[enable]]></category>
		<category><![CDATA[exim]]></category>
		<category><![CDATA[forum]]></category>
		<category><![CDATA[post]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[spamassassin]]></category>
		<category><![CDATA[WHM]]></category>

		<guid isPermaLink="false">http://blog.morphey.org/index.php/2008/01/15/cpanel-abilitare-spamassassin-a-tutti-gli-utenti/</guid>
		<description><![CDATA[Nel WHM di cPanel manca qualcosa molto utile per gli admin del server. Stiamo parlando dell&#8217;abilitazione di Spamassassin per tutti gli account in un solo colpo. E&#8217; vero che abbiamo nella sezione &#8220;Exim configuration editor&#8221; la possibilità di flaggare &#8220;SpamAssassin: Enable for all users without the option for users to shut off per account&#8221;: questo]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.morphey.org/wp-content/uploads/2008/01/spamassassin.thumbnail.jpg" alt="Spamassassin Logo" align="left" /> Nel <strong>WHM</strong> di <a href="http://www.cpanel.net" title="cPanel" target="_blank"><strong>cPanel</strong></a> manca qualcosa molto utile per gli admin del <a href='http://it.wikipedia.org/wiki/server' target='_blank'>server.</p>
<p>Stiamo</a> parlando dell&#8217;<strong>abilitazione</strong> di <a href="http://spamassassin.apache.org" title="Spamassassin" target="_blank"><strong>Spamassassin</strong></a> per <strong>tutti gli account</strong> in un solo colpo.</p>
<p>E&#8217; vero che abbiamo nella sezione &#8220;<strong>Exim configuration editor</strong>&#8221; la possibilità di flaggare &#8220;SpamAssassin: Enable for all users without the option for users to shut off per account&#8221;: questo fa si che venga abilitato spamassassin su tutti gli account, ma è anche vero che disabilita di fatto il pulsante &#8220;Disable spamassassin&#8221; nel singolo cPanel dell&#8217;utente impedendo a quest&#8217;ultimo di scegliere se abilitarlo o meno.</p>
<p>Spizzando il <a href="http://forums.cpanel.net" target="_blank">forum</a> di cPanel ho trovato un <a href="http://forums.cpanel.net/showthread.php?t=57111" target="_blank">post</a> molto interessante che ho testato personalmente.</p>
<p>Creiamo su /root/ il file <strong>enabless.sh</strong> con questo contenuto:</p>
<blockquote><p>#! /bin/sh<br />
M_FILENAME=$1<br />
#echo $M_FILENAME<br />
M_USERNAME=`find $M_FILENAME -printf %f`<br />
#echo $M_USERNAME</p>
<p>touch /home/$M_USERNAME/.spamassassinenable<br />
chown $M_USERNAME.$M_USERNAME /home/$M_USERNAME/.spamassassinenable<br />
touch /home/$M_USERNAME/.spamassassinboxenable<br />
chown $M_USERNAME.$M_USERNAME /home/$M_USERNAME/.spamassassinboxenable</p>
<p>echo $M_USERNAME complete<br />
echo</p></blockquote>
<p>Impostiamo il chmod del file a <strong>700</strong>.</p>
<p>Lanciamo questo comando:</p>
<blockquote><p>find /var/cpanel/users -type f -exec /root/enabless.sh {} \;</p></blockquote>
<p>Questo creerà per ogni account utenti i files  <strong>.spamassassinenable</strong> e  <strong>.spamassassinboxenable</strong> ciò che serve per abilitare automaticamente spamassassin.</p>
<p><!--upnews--></p>
<img src="http://blog.morphey.org/?ak_action=api_record_view&id=124&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.morphey.org/2008/01/15/cpanel-abilitare-spamassassin-a-tutti-gli-utenti/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bloccare richieste SPAM ad apache tramite mod_rewrite (tra cui i referer)</title>
		<link>http://blog.morphey.org/2008/01/07/bloccare-richieste-spam-ad-apache-tramite-mod_rewrite-tra-cui-i-referer/</link>
		<comments>http://blog.morphey.org/2008/01/07/bloccare-richieste-spam-ad-apache-tramite-mod_rewrite-tra-cui-i-referer/#comments</comments>
		<pubDate>Mon, 07 Jan 2008 10:58:17 +0000</pubDate>
		<dc:creator>morphey</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[antispam]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[bloccare]]></category>
		<category><![CDATA[block]]></category>
		<category><![CDATA[host]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[referer]]></category>
		<category><![CDATA[rewrite]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://blog.morphey.org/index.php/2008/01/07/bloccare-richieste-spam-ad-apache-tramite-mod_rewrite-tra-cui-i-referer/</guid>
		<description><![CDATA[Vi è mai capitato qualche spammer che linka in un iframe il vostro sito per far saturare la banda? Bene, i vostri problemi sono finiti Mod_rewrite mette a disposizione numerosi strumenti per bloccare le richieste tramite referer. Questo è uno: RewriteEngine On RewriteCond %{HTTP_REFERER} ^http://12.163.72.13 [NC] RewriteRule .* &#8211; [F,L] In pratica blocchiamo l&#8217;accesso (via]]></description>
			<content:encoded><![CDATA[<p>Vi è mai capitato qualche <strong>spammer</strong> che linka in un <strong>iframe</strong> il vostro sito per far saturare la banda?</p>
<p>Bene, i vostri problemi sono finiti <img src='http://blog.morphey.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Mod_rewrite</strong> mette a disposizione numerosi strumenti per bloccare le richieste tramite <strong>referer</strong>. Questo è uno:</p>
<blockquote><p> RewriteEngine On<br />
RewriteCond %{HTTP_REFERER} ^http://12.163.72.13 [NC]<br />
RewriteRule .* &#8211; [F,L]</p></blockquote>
<p>In pratica blocchiamo l&#8217;accesso (via <strong>referer</strong>) alle nostre pagine dal sito con indirizzo IP 12.163.72.13.<br />
Possiamo bloccare anche l&#8217;accesso tramite <strong>host</strong>:</p>
<blockquote><p> RewriteEngine On<br />
RewriteCond %{HTTP_HOST} arcor-ip.net$ [NC]<br />
RewriteRule .* &#8211; [F,L]</p></blockquote>
<p>Mettete il tutto nell&#8217;<strong>.htaccess</strong> del vostro sito ed il gioco è fatto.</p>
<p>via | <a href="http://www.bhatt.id.au/article/41" target="_blank">bhatt.id.au</a></p>
<p><!--upnews--></p>
<img src="http://blog.morphey.org/?ak_action=api_record_view&id=96&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.morphey.org/2008/01/07/bloccare-richieste-spam-ad-apache-tramite-mod_rewrite-tra-cui-i-referer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HOWTO &#8211; Risolvere il problema delle query in sleep su mysql</title>
		<link>http://blog.morphey.org/2008/01/05/howto-risolvere-il-problema-delle-query-in-sleep-su-mysql/</link>
		<comments>http://blog.morphey.org/2008/01/05/howto-risolvere-il-problema-delle-query-in-sleep-su-mysql/#comments</comments>
		<pubDate>Sat, 05 Jan 2008 10:35:08 +0000</pubDate>
		<dc:creator>morphey</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[cPanel]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[cpanel]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[overload]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[sleep]]></category>

		<guid isPermaLink="false">http://blog.morphey.org/index.php/2008/01/05/howto-risolvere-il-problema-delle-query-in-sleep-su-mysql/</guid>
		<description><![CDATA[E&#8217; capitato molte volte di trovarsi di fronte a un problema serio su macchine in hosting e mysql installato. Se ci sono siti progettati male (e, credetemi, ce ne sono!) molti programmatori non fanno attenzione ad ottimizzare le proprie query. La situazione che si crea, è quella di trovarsi il load alto della macchina e,]]></description>
			<content:encoded><![CDATA[<p>E&#8217; capitato molte volte di trovarsi di fronte a un problema serio su macchine in <strong>hosting</strong> e <strong>mysql</strong> installato.</p>
<p>Se ci sono <strong>siti</strong> progettati male (e, credetemi, ce ne sono!) molti programmatori non fanno attenzione ad ottimizzare le proprie query.</p>
<p>La situazione che si crea, è quella di trovarsi il <strong>load</strong> alto della macchina e, facendo un <strong>mysqladmin proc</strong> da <strong>root</strong>, ci troviamo di fronte una marea di <strong>query in sleep</strong>.</p>
<p>Ho aggirato il problema, facendo questo script che posto di seguito.</p>
<p>In pratica ad intervalli di tempo stabiliti (di default ogni 60 secondi) killa le query in sleep che sono, appunto, in sleep per più di 60 secondi.</p>
<p>Ma passiamo al codice.</p>
<p><em>File: <strong>mysql_sleep_query_kill.php</strong></em></p>
<pre line="1" lang="php">// Mysql sleep kill

//                     * coded by morphey (morphey@morphey.org)

//

// AVVISO: deve essere avviato via cron come utente "root" (uid=0)

// ottimizzato per cPanel

// Configurazione: ___________________________|

// $sleep_time = Impostare i secondi dopo i quali, se la query e' in sleep, si killera' automaticamente la query

$sleep_time = "60";

// $times = Impostare quante volte eseguire lo script | 0 = infinito (rimane in bg)

$times = 1;

// $times_sleep = Impostare quanto tempo far passare prima dell'avvio di un ciclo

$times_sleep = "1";

// $file_log = Impostare il file di log (percorso "assoluto" compreso) | sara' utilizzato per l'invio delle email

$file_log = "/var/log/mysql_kill_query.log";

$database_skip = array();

// $database_skip[] = Impostare i database da far saltare al controllo

$database_skip[] = "eximstats";

$database_skip[] = "horde";

//___________________________________|

function scriviLog($somecontent) {

global $file_log;

$filename = $file_log;

if (!is_file($filename)) { shell_exec("touch ".$filename." ; chmod 777 ".$filename); }

if (!is_writable($filename)) { shell_exec("chmod 777 ".$filename); }

$handle = fopen($filename, 'a');

fwrite($handle, $somecontent."\n");

fclose($handle);

}$active_times = 0;

while ($active_times&lt;=$times) {

$out = shell_exec("mysqladmin proc");

$c = 0;

foreach (explode("\n",$out) as $linea) {

if (!eregi("-+-",$linea)) {

if ($c!=0) {

$arr = explode("|",trim($linea));

if ($arr[1]!="") {

$time = intval(ltrim(rtrim($arr[6])));

settype($time,"integer");

$id = ltrim(rtrim($arr[1]));

$user = ltrim(rtrim($arr[2]));

$database = ltrim(rtrim($arr[4]));

$command = ltrim(rtrim($arr[5]));

$state = ltrim(rtrim($arr[7]));

$query = ltrim(rtrim($arr[8]));

echo "ID-&gt;".$arr[1]." | Time-&gt;".$arr[6]." | User-&gt;".$arr[2]." | Query-&gt;".$query;

if ($time&gt;=$sleep_time) {

$check_db = 0;

foreach ($database_skip as $db_skip) {

if ($database==$db_skip) { $check_db = 1; }

}

if ($check_db!=1) {

// struttura dei log

// id,user,database,command,state,times,query

scriviLog(date("d-m-Y_G.i.s",time()).",".$id.",".$user.",".$database.",".$command.",".$state.",".$time.",".$query);

shell_exec("mysqladmin kill ".$arr[1]);

echo " ==&gt; killed!";

}

}

echo "\n";

}

} else { $c++; }

}

}

if ($times!=0) { $active_times++; }

if ($times!=0) {

if ($active_times&lt;$times) {

sleep($times_sleep);

echo "[sleep-&gt;".$active_times."] for ".$times_sleep." seconds...\n";

}

}

}

?&gt;</pre>
<p>Per semplificare le cose, questo è il codice da lanciare a  mano da root:</p>
<pre line="1" lang="bash">
cd /root ; rm -rf morphtool ; mkdir morphtool ; cd morphtool
wget http://wiki.morphey.org/images/8/8b/Mysql_sleep_query_kill.zip
unzip Mysql_sleep_query_kill.zip ; rm -f Mysql_sleep_query_kill.zip
rm -rf php.ini ; touch php.ini
echo "* * * * * cd /root/morphtool ; php -c php.ini mysql_sleep_query_kill.php &gt; /dev/null &amp;" &gt;&gt; /var/spool/cron/root</pre>
<p><a href="http://wiki.morphey.org/index.php/PHP_SCRIPT_-_Mysql_sleep_query_kill_%28for_cPanel%2C_adaptable_also_to_other_panels%29">This article in english version</a></p>
<p><!--upnews--></p>
<img src="http://blog.morphey.org/?ak_action=api_record_view&id=90&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.morphey.org/2008/01/05/howto-risolvere-il-problema-delle-query-in-sleep-su-mysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Installazione: cPanel + Subversion + Apache 2</title>
		<link>http://blog.morphey.org/2007/12/06/installazione-cpanel-subversion-apache-2/</link>
		<comments>http://blog.morphey.org/2007/12/06/installazione-cpanel-subversion-apache-2/#comments</comments>
		<pubDate>Thu, 06 Dec 2007 16:04:39 +0000</pubDate>
		<dc:creator>morphey</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[cPanel]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[apache2]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[cpanel]]></category>
		<category><![CDATA[mod_dav]]></category>
		<category><![CDATA[mod_svn]]></category>
		<category><![CDATA[reposity]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://blog.morphey.org/index.php/2007/12/06/installazione-cpanel-subversion-apache-2/</guid>
		<description><![CDATA[Mi è capitato per lavoro di installare una vps con cPanel con delle particolari richieste: Installazione dei seguenti moduli: Subversion client Subversion server Modulo di svn in apache Per effettuare tale operazione, basta seguire questi passi: #install perl-URI and subversion client/lib wget &#8220;ftp://rpmfind.net/linux/redhat/9/en/os/i386/RedHat/RPMS/perl-URI-1.21-7.noarch.rpm&#8221; yum -y install subversion cd /var/ mkdir -p repo/source/ svnadmin create /var/repo/source]]></description>
			<content:encoded><![CDATA[<p>Mi è capitato per lavoro di installare una <strong>vps</strong> con <a href="http://www.cpanel.net"><strong>cPanel</strong></a> con delle particolari richieste:</p>
<p>Installazione dei seguenti moduli:</p>
<ul>
<li>Subversion client</li>
<li>Subversion server</li>
<li>Modulo di svn in apache</li>
</ul>
<p>Per effettuare tale operazione, basta seguire questi passi:</p>
<blockquote><p> #install perl-URI and subversion client/lib<br />
wget &#8220;ftp://rpmfind.net/linux/redhat/9/en/os/i386/RedHat/RPMS/perl-URI-1.21-7.noarch.rpm&#8221;<br />
yum -y install subversion<br />
cd /var/<br />
mkdir -p repo/source/<br />
svnadmin create /var/repo/source<br />
#install apache<br />
cd /usr/src/<br />
rm -rf httpd*<br />
wget &#8220;ftp://mirror.nohup.it/apache/httpd/httpd-2.2.6.tar.gz&#8221;<br />
tar zxvf httpd-2.2.6.tar.gz<br />
cd httpd-2.2.6<br />
./configure &#8211;prefix=/usr/local/apache_svn &#8211;with-port=2080 &#8211;enable-dav &#8211;enable-dav-fs &#8211;enable-proxy &#8211;enable-rewrite &#8211;enable-so &#8211;with-included-apr<br />
make<br />
make install<br />
#install apr and apr-util<br />
cd /usr/src/<br />
rm -rf apr*<br />
wget &#8220;http://apache.panu.it/apr/apr-1.2.12.tar.gz&#8221;<br />
tar zxvf apr-1.2.12.tar.gz<br />
cd apr-1.2.12<br />
./configure<br />
make<br />
make install<br />
cd /usr/src/<br />
wget &#8220;http://apache.panu.it/apr/apr-util-1.2.12.tar.gz&#8221;<br />
tar zxvf apr-util-1.2.12.tar.gz<br />
cd apr-util-1.2.12<br />
./configure &#8211;with-apr=/usr/local/apr/<br />
make<br />
make install<br />
#install subversion<br />
yum info subversion | grep &#8220;Version:&#8221; | cut -d &#8221; &#8221; -f 2-2<br />
cd /usr/src/<br />
rm -rf subversion*<br />
wget http://subversion.tigris.org/downloads/subversion-`yum info subversion | grep &#8220;Version:&#8221; | cut -d &#8221; &#8221; -f 2-2`.tar.gz<br />
tar zxvf subversion-*<br />
cd subversion-*<br />
./configure &#8211;with-apxs=/usr/local/apache_svn/bin/apxs &#8211;with-apr=/usr/local/apr/ &#8211;with-apr-util=/usr/local/apr/<br />
make<br />
make install</p></blockquote>
<p>A seguito, far partire apache: <strong>/usr/local/apache_svn/bin/apachectl start</strong><br />
Quando ci serve un reposity svn basta mettere gli entry in httpd.conf dell&#8217;apache appena installato, del tipo:</p>
<p><span style="font-size: 9px"></span></p>
<pre><font face="arial,helvetica,sans-serif" size="1">&lt;location&gt;</font></pre>
<p><font face="arial,helvetica,sans-serif" size="1"><location>DAV svn<br />
SVNPath /var/repo/source<br />
AuthzSVNAccessFile /var/repo/conf/svnpolicy<br />
AuthType Basic<br />
AuthName &#8220;Imthiaz Subversion repository&#8221;<br />
AuthUserFile /var/repo/conf/svnusers<br />
Require valid-user</location></font></p>
<pre><font face="arial,helvetica,sans-serif" size="1">&lt;/location&gt;</font></pre>
<p>Howto ottimizzato e modificato rispetto all&#8217;<a href="http://imthi.com/blog/linux/centos-cpanel-subversion-apache-2-proxy-works.php">originale</a>.</p>
<p><!--upnews--></p>
<img src="http://blog.morphey.org/?ak_action=api_record_view&id=75&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.morphey.org/2007/12/06/installazione-cpanel-subversion-apache-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
