Il blog di morphey
Post con tag Howto
Subversion – compilare l’ultima versione disponibile
12 feb
Durante la mia esperienza lavorativa, ho notato che molte distribuzioni (Centos in primis) non hanno nei loro repositories l’ultima versione di subversion (svn).
Per esempio, in Fedora 12, l’ultima release disponibile è la 1.6.6 (ultima) mentre su Centos 5.3 (usata molto sui server per l’hosting e servizi web) c’è la 1.4.2.
Popularity: 1% [?]
TuxFeed 2.0
7 gen
Nuova veste grafica per il nuovo Tuxfeed 2.0!
Finalmente uscita il nuovo template grafico dell’aggregatore italiano per eccellenza sul mondo linux.
Contraccambio dei ringraziamenti gli autori del sito.
Popularity: 6% [?]
HOWTO – Risolvere il problema delle query in sleep su mysql
5 gen
E’ 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, facendo un mysqladmin proc da root, ci troviamo di fronte una marea di query in sleep.
Ho aggirato il problema, facendo questo script che posto di seguito.
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.
Ma passiamo al codice.
File: mysql_sleep_query_kill.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<=$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->".$arr[1]." | Time->".$arr[6]." | User->".$arr[2]." | Query->".$query;
if ($time>=$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 " ==> killed!";
}
}
echo "\n";
}
} else { $c++; }
}
}
if ($times!=0) { $active_times++; }
if ($times!=0) {
if ($active_times<$times) {
sleep($times_sleep);
echo "[sleep->".$active_times."] for ".$times_sleep." seconds...\n";
}
}
}
?>
Per semplificare le cose, questo è il codice da lanciare a mano da root:
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 > /dev/null &" >> /var/spool/cron/root
This article in english version
Popularity: 8% [?]
Installazione: cPanel + Subversion + Apache 2
6 dic
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 “ftp://rpmfind.net/linux/redhat/9/en/os/i386/RedHat/RPMS/perl-URI-1.21-7.noarch.rpm”
yum -y install subversion
cd /var/
mkdir -p repo/source/
svnadmin create /var/repo/source
#install apache
cd /usr/src/
rm -rf httpd*
wget “ftp://mirror.nohup.it/apache/httpd/httpd-2.2.6.tar.gz”
tar zxvf httpd-2.2.6.tar.gz
cd httpd-2.2.6
./configure –prefix=/usr/local/apache_svn –with-port=2080 –enable-dav –enable-dav-fs –enable-proxy –enable-rewrite –enable-so –with-included-apr
make
make install
#install apr and apr-util
cd /usr/src/
rm -rf apr*
wget “http://apache.panu.it/apr/apr-1.2.12.tar.gz”
tar zxvf apr-1.2.12.tar.gz
cd apr-1.2.12
./configure
make
make install
cd /usr/src/
wget “http://apache.panu.it/apr/apr-util-1.2.12.tar.gz”
tar zxvf apr-util-1.2.12.tar.gz
cd apr-util-1.2.12
./configure –with-apr=/usr/local/apr/
make
make install
#install subversion
yum info subversion | grep “Version:” | cut -d ” ” -f 2-2
cd /usr/src/
rm -rf subversion*
wget http://subversion.tigris.org/downloads/subversion-`yum info subversion | grep “Version:” | cut -d ” ” -f 2-2`.tar.gz
tar zxvf subversion-*
cd subversion-*
./configure –with-apxs=/usr/local/apache_svn/bin/apxs –with-apr=/usr/local/apr/ –with-apr-util=/usr/local/apr/
make
make install
A seguito, far partire apache: /usr/local/apache_svn/bin/apachectl start
Quando ci serve un reposity svn basta mettere gli entry in httpd.conf dell’apache appena installato, del tipo:
<location>
SVNPath /var/repo/source
AuthzSVNAccessFile /var/repo/conf/svnpolicy
AuthType Basic
AuthName “Imthiaz Subversion repository”
AuthUserFile /var/repo/conf/svnusers
Require valid-user
</location>
Howto ottimizzato e modificato rispetto all’originale.
Popularity: 8% [?]
Problema Graylist – Errori smtp 451 or 452
26 ott
Molti provider utilizzano vari sistemi di protezione per lo spam . Uno di questi è il cosidetto sistema di graylist.
In pratica succede questo:
- SERVER-A invia una email a SERVER-B ;
- SERVER-B riceve la mail ma, per essere sicuro che SERVER-A sia un server mail vero, invia un errore con codice 451 o 452 (se non è un server vero vorrà dire, con alta probabilità, che la mail è stata inviata da uno spammer);
- Se SERVER-A è, quindi, il vero server da cui è partita la mail risponderà all’errore 451 o 452;
- SERVER-B riceve la risposta e verifica, quindi, il mittente facendo recapitare all’account email locale la mail.
La configurazione standard (impostata di default da cPanel) di exim non è istruita per riconoscere questo metodo (e gli errori 45x).
Per risolvere il problema, entriamo nel VHM della macchina con permessi di root. Andiamo alla voce “Exim Configuration Editor” e clicchiamo su “Advanced Editor“.
Inseriamo quanto segue nell’ultimo box:
* rcpt_4xx F,10m,2m; F,2h,10m
Popularity: 6% [?]

Commenti recenti