Crea sito

Rilascio pacchetto debian e rpm per flatnuke 3.0.0

Ho creato un pacchetto debian e rpm per la versione 3.0.0 di Flatnuke in modo da facilitare l’installazione su sistemi linux Debian e Red Hat based.

Il download é disponibile qui:
Pacchetto Debian Flatnuke (490 download)
Pacchetto Rpm Flatnuke (492 download)

Installazione Deb:

E’ sufficiente eseguire dpkg -i flatnuke-3.0.0_all.deb come utente root oppure sudo dpkg -i flatnuke-3.0.0_all.deb nel caso di ubuntu. Il pacchetto di default viene installato in /var/www/

Installazione Rpm:

E’ sufficiente eseguire rpm -i flatnuke-3.0.0-2.noarch.rpm come utente root. Il pacchetto di default viene installato in /var/www/Il pacchetto è stato ottenuto tramite alien dal debian.

Read More

Un ramdisk per firefox

Per incrementare le prestazioni del mio Asus EEEPC 900A durante la navigazione web, ho pensato di creare un RAM disk e di usarlo come cache per Firefox. Ho pensato di realizzarlo in questo modo: mi sono creato uno script per la creazione del ramdisk al boot di ubuntu del netbook, poi una volta creato il disco copio al suo interno tutta la cache di Firefox che mi ero precedentemente salvato in modo da mantenere tutte le estensioni già installate. Allo shutdown di ubuntu del netbook vado ad aggiornare la copia di backup della cache di Firefox tramite rsync. Tutte queste copie chiaramente influiscono sui tempi di avvio e spegnimento del PC ma devo dire che la navigazione mi sembra molto più veloce. Inoltre questo ramdisk posso utilizzarlo come directory temporanea di lavoro.

Script per la creazione del ramdisk al boot:

[email protected]:~$ cat mkramdisk.sh
#!/bin/bash

if [ -e ~/ramdisk ]; then
 if [ ! -d ~/ramdisk ]; then
 echo "E' gia presente un file ramdisk"
 exit 1
 fi
else
 #--- No file or directory, lo creo
 mkdir ~/ramdisk
fi

#--- Lo monto se non è già montato
mount | grep -q ~/ramdisk
rez=$?
if [ $rez = 1 ]; then
 mount -t tmpfs tmpfs /home/alex/ramdisk -o size=256m
fi

cd /home/alex/ramdisk
mkdir firefox
chmod 777 firefox
cp -r /home/alex/bck_firefox/* /home/alex/ramdisk/firefox/
cd /home/alex/.mozilla
ln -s /home/alex/ramdisk/firefox firefox
chmod -R 777 /home/alex/ramdisk/firefox/*

Lo script mkramdisk.sh è “linkato” sotto la directory /etc/rc2.d:

[email protected]:/etc/rc2.d$ ls -lrt /etc/rc2.d/ | tail -4
lrwxrwxrwx 1 root root  21 2009-06-06 20:57 S20eee-control -> ../init.d/eee-control
lrwxrwxrwx 1 root root  17 2009-07-11 22:10 S91apache2 -> ../init.d/apache2
lrwxrwxrwx 1 root root  14 2009-08-14 22:24 S20gpsd -> ../init.d/gpsd
lrwxrwxrwx 1 root root  23 2010-05-11 20:37 S99ramdisk -> /home/alex/mkramdisk.sh

Script di sincronizzazione della cartella di backup del profilo firefox:

[email protected]:~$ cat sync_firefox.sh
#!/bin/bash

rsync -av /home/alex/.mozilla/firefox/n7b0wdkv.default /home/alex/bck_firefox

Lo script sync_firefox.sh è “linkato” sotto la directory /etc/rc0.d:

[email protected]:/etc/rc0.d# pwd
/etc/rc0.d
[email protected]:/etc/rc0.d# ln -s /home/alex/sync_firefox.sh K99sync-firefox
[email protected]:/etc/rc0.d# ls -lrt
totale 4
lrwxrwxrwx 1 root root  14 2009-08-14 22:24 K20gpsd -> ../init.d/gpsd
lrwxrwxrwx 1 root root  26 2011-01-30 19:42 K99sync-firefox -> /home/alex/sync_firefox.sh

Ecco invece come si presenta la situazione dei file nel profilo di firefox:

[email protected]:~$ cd .mozilla/firefox
[email protected]:~/.mozilla/firefox$ ls -lrt
totale 12
-rwxrwxrwx  1 root root  96 2011-01-30 18:43 profiles.ini.ramdisk
-rwxrwxrwx  1 root root  94 2011-01-30 18:43 profiles.ini.backup
-rwxrwxrwx  1 root root  94 2011-01-30 18:43 profiles.ini
lrwxrwxrwx  1 root root  26 2011-01-30 18:43 firefox -> /home/alex/ramdisk/firefox
drwxrwxrwx 10 root root 960 2011-01-30 19:49 n7b0wdkv.default
[email protected]:~/.mozilla/firefox$ cat profiles.ini
[General]
StartWithLastProfile=1

[Profile0]
Name=default
IsRelative=1
Path=n7b0wdkv.default
Read More

Catalogo di libri di testo in licenza Creative Commons

Maurizio Grillini ha pubblicato il catalogo aggiornato dei libri di testo con licenza creativa, liberamente scaricabili dalla rete per vari ordini di scuola.

Il catalogo è suddiviso per disciplina e presenta una breve descrizione per ciascun testo.

Download Catalogo 2011

Read More

Il less a colori

Sicuramente vi sarà capitato di vedere che é possibile usare i colori in shell tramite dei comandi di escape invece del solito terminale monocronatico. Non sono qui per spiegare come si impostano i colori in shell; per questo ci sono già tantissimi esempi in rete ma come mantenere la visualizzazione a colori se vengono passati in pipe al comando less ? Ad esempio se avete uno script che vi riporta in output lo stato di diversi server (occupazione dischi, memoria, processi, ecc) e visualizzate i valori con colori diversi a seconda della soglia raggiunta, se l’output lo passate in pipe al less vi ritrovate una serie di caratteri escape tanto da rendere l’output incomprensibile. Mi spiego meglio utilizzando un semplice ls colorato:

[email protected]:~$ ls -l *.png *.tar --color | less
-rw-r--r-- 1 alex alex   102400 2011-09-07 16:25 ESC[01;31mcreate_test.tarESC[00m
-rw-r--r-- 1 alex alex     1938 2011-04-27 08:08 ESC[01;35mdata_export.pngESC[00m
-rw-r--r-- 1 alex alex     2716 2011-04-27 08:06 ESC[01;35mload.pngESC[00m
-rw-r--r-- 1 alex alex     5464 2011-04-27 07:55 ESC[01;35mmain-title.pngESC[00m

Tramite il flag -R il less interpreta correttamente la codifica dei colori.

[email protected]:~$ ls -l *.png *.tar --color | less -R
-rw-r--r-- 1 alex alex   102400 2011-09-07 16:25 create_test.tar
-rw-r--r-- 1 alex alex     1938 2011-04-27 08:08 data_export.png
-rw-r--r-- 1 alex alex     2716 2011-04-27 08:06 load.png
-rw-r--r-- 1 alex alex     5464 2011-04-27 07:55 main-title.png

Stessa cosa  se usiamo l’opzione color (o –colour[=WHEN]) del grep (specificando always al posto di auto che disabilita il colore appena incontra una pipe):

grep --colour=always ERROR pippo.txt | less -R
Read More

Cancellare le ultime n-righe di un file

Vediamo un esempio del comando tac (il contrario di cat) che concatena il suo input e lo visualizza in output al contrario. Questa sua particolare funzione ci viene utile per eliminare le ultime n-righe di un file in quanto vengono visualizzate da subito in output ottenendo un notevole risparmio di tempo rispetto a una lettura completa di tutto il file.

[email protected]:~$ cat pippo.txt
1
2
3
4
5
6
7

Se voglio cancellare le ultime n-righe uso il comando tail +(n+1) su un file visualizzato al contrario e poi ri-visualizzato nuovamente al contrario in modo da riportarlo nel suo stato iniziale. Ad esempio se voglio eliminare le ultime 3 righe:

[email protected]:~$ tac pippo.txt | tail +4 | tac
1
2
3
4

Purtroppo, in alcune versioni del comando tail, l’opzione tail +n non è implementata ma solo la classica tail -n. Si può simulare lo stesso comportamento calcolando il numero di righe totali e sottraendo il numero desiderato anche se il wc obbliga a leggere interamente il file.

[email protected]ku:~$ tac pippo.txt  | tail -$(($(wc -l pippo.txt | awk '{print $1}')-3)) | tac
1
2
3
4

Se addirittura siete su un sistema Unix in cui non è presente il comando tac, come ad esempio Sun Solaris, allora bisogna leggere tutto il file e togliere la parte iniziale tramite head (e se il file è di dimensioni elevate allora tale sistema impiegherà parecchio tempo).

ALL=$(wc -l elenco.txt | awk '{print $1}')
TOP=$(($LAST - 3))
head -$(echo $TOP) elenco.txt > elenco.txt.new
mv elenco.txt.new elenco.txt

E’ possibile comunque simulare il comando tac tramite il sed.

[email protected]:~$ sed -n '1!G;h;$p' pippo.txt
7
6
5
4
3
2
1

Infine, sempre con il sed, è possibile cancellare direttamente l’ultima riga di un file; se tale comando lo eseguiamo in un ciclo otteniamo la cancellazione delle ultime n-righe.

[email protected]:~$ sed '$d' pippo.txt
Read More

PHP short tags e Flatnuke

Mi sono ritrovato nel caso di dover installare e testare un sito basato su flatnuke in una distribuzione Red Hat Enterprise Linux in cui il php.ini ha il flag short_open_tag disabilitato (Off) e il sito non funziona in quanto ho notato che in alcuni file di flatnuke è presente la direttiva abbreviata “index.php contiene la forma estesa mentre la functions.php che viene richiamata subito dalla index.php stessa inizia con la forma abbreviata. Il risultato è che nel browser si apre una pagina bianca in cui viene visualizzato tutto il codice sorgente.

$ head -5 index.php

Siccome sul server in questione girano altri siti web e non avendo la possibilità di modificare il php.ini (è necessario avere un utente privilegiato per la modifica del file di configurazione del php e il successivo riavvio di apache) ho optato per l’inserimento del flag short_open_tag nel file “.htaccess” posizionato nella directory radice dell’installazione del sito web basato su flatnuke.

$ cat /etc/php.ini | grep -i -B12 '^short_open_tag'
; This directive determines whether or not PHP will recognize code between
;  tags as PHP source which should be processed as such. It's been
; recommended for several years that you not use the short tag "short cut" and
; instead to use the full  tag combination. With the wide spread use
; of XML and use of these tags by other languages, the server can become easily
; confused and end up parsing the wrong code in the wrong context. But because
; this short cut has been a feature for such a long time, it's currently still
; supported for backwards compatibility, but we recommend you don't use them.
; Default Value: On
; Development Value: Off
; Production Value: Off
; http://www.php.net/manual/en/ini.core.php#ini.short-open-tag
short_open_tag = Off

Ecco il file “.htaccess” che mi ha risparmiato la modifica di tutti i singoli file php (questa soluzione è possibile solo nel caso in cui il php viene eseguito come modulo di apache e non come CGI).

$ cat flatnuke/.htaccess
php_flag short_open_tag On

Comunque, come riportato nel manuale php, è buona norma disabilitare la forma abbreviata ed utilizzare quella estesa, quindi è consigliabile impostare a Off questo valore.

Read More

Flatnuke nightly build

Ecco lo script completo per la creazione di un sistema di “nightly build” per flatnuke. Rispetto all’articolo “Cvs auto login” ho modificato l’invocazione di expect in quanto lo script eseguito da crontab riporta un errore dovuto alla presenza del comando interact che si aspetta una interazione con la tastiera e cron ovviamente non può aprire un terminale in input.

interact: spawn id exp0 not open
    while executing
"interact"

Ho modificato il login prendendo spunto da uno script per il login ssh ma in rete si trovano anche altri esempi. Invocazione dello script da crontab:

$ crontab -l
59 23 * * * /home/soci/aalex/cvs_con_tar.sh > /home/soci/aalex/cvs_con_tar.log 2>&1

Prima di editare la crontab (crontab -e), verificate che l’editor di default sia il vi (in caso contario esportate la variabile d’ambiente EDITOR settando il vostro editor preferito).

$ export EDITOR=vi

Infine lo script completo:

#!/bin/bash

DATA=$(date '+%Y%m%d')
VERSION="3.0.0"
HOST="flatnuke.cvs.sourceforge.net"
USER="anonymous"
HOME_TAR="/home/soci/aalex/www/AutoIndex/appoggio/flatnuke_nightly"

VAR=$(expect -c "
spawn cvs -d:pserver:[email protected]$HOST:/cvsroot/flatnuke login
expect \"CVS password:*\"
send -- \"\r\"
expect eof
")
echo "==============="
echo "$VAR"
cvs -z3 -d:pserver:[email protected]$HOST:/cvsroot/flatnuke co -P flatnuke

mkdir flatnuke-${VERSION}-${DATA}
cp -ivr flatnuke/* flatnuke-${VERSION}-${DATA}
tar zcvf flatnuke-${VERSION}-${DATA}.tar.gz --exclude=CVS flatnuke-${VERSION}-${DATA}
rm -rf flatnuke-${VERSION}-${DATA}
md5sum flatnuke-${VERSION}-${DATA}.tar.gz > flatnuke-${VERSION}-${DATA}.md5
mv flatnuke-${VERSION}-${DATA}.tar.gz $HOME_TAR/
mv flatnuke-${VERSION}-${DATA}.md5 $HOME_TAR/
find $HOME_TAR/ -name 'flatnuke-3*' -mtime +15 -exec rm -f {} \;

L’output completo è visibile qui (è una directory di Autoindex, un file manager in php) ; in particolare sono presenti i tar compressi e i relativi md5 degli ultimi 15 giorni.

Read More

Cvs auto login

Ho intenzione di crearmi un sistema di “nightly build” per flatnuke in modo che in automatico, tramite crontab, ogni giorno vada a scaricare il cvs da sourceforge e mi costruisca il tar già pronto da utilizzare senza tutte le directory CVS.

Il primo problema da affrontare è il login anonymous del cvs; infatti richiede almeno la pressione del tasto ENTER per effettuare l’autenticazione senza inserire nessuna password. Prendendo spunto da altri servizi come ftp e telnet, ho provato svariati metodi tra cui “here document” (“<

Allora mi sono ricordato del comando expect (da installare tramite il proprio gestore di pacchetti) che serve per interagire con i programmi che richiedono l’inserimento di dati (tipicamente user e password). Praticamente si dice a expect che cosa aspettarsi dal comando e di conseguenza mandare la risposta giusta. Nel nostro caso cvs si presenterà a terminale con la stringa esatta “CVS password:” e noi tramite il comando send spediremo un carriage return “(\r) o ^M” in modo da simulare la pressione del tasto INVIO.

#!/usr/bin/expect

spawn cvs -d:pserver:[email protected]:/cvsroot/flatnuke login
expect "CVS password:"
send "\r"
interact
spawn cvs -z3 -d:pserver:[email protected]:/cvsroot/flatnuke co -P flatnuke
interact
exit

Esempio di sintassi here document (che non funziona nel caso di cvs)

ftp -i -n otherhost << EOF
user myname mypassword
mput foo bar
EOF

Esempio di sintassi con pipe:

echo "
user myname mypassword
mput foo bar
" | ftp -i -n otherhost

oppure con telnet:

#!/bin/sh
tpipe() {
sleep 3;echo myname
sleep 1;echo mypassword
}
tpipe | telnet otherhost
Read More

Backreference nelle espressioni regolari

Prendendo spunto da un mio articolo sulla conversione delle news da WordPress a Flatnuke vediamo come utilizzare i backreference delle espressioni regolari per sostituire delle stringhe di caratteri.

La sintassi di un backreference è “( )\n”; dove con le parentesi tonde si cattura la parte che matcha per essere eventualmente usata e con “\n” (dove n è un numero da 1 e 9) la variabile per risalire alla parte referenziata in precedenza.

Ad esempio supponiamo di voler isolare il contenuto di una stringa tra i tag e . Con le parentesi tonde “(.*)” catturo qualsiasi carattere (anche nessun carattere) e successivamente uso il “\1” per indicare i caratteri che ho estratto in precedenza.

[email protected]:~$ echo "Ciao." | grep -E '(.*)<\/b>'
Ciao.
[email protected]:~$ echo "Ciao." | sed -n 's/\(.*\)<\/b>/\1/p'
Ciao.
[email protected]:~$ echo "

titolo

" | grep -E 'titolo' [email protected]:~$ echo "

titolo

" | grep -E 'titolo'

titolo

Ritornando al convertire da WordPress a Flatnuke (wp2fn) ho usato questa caratteristica per isolare le stringhe contenute fra i tag ” [ caption ] ” di WordPress. Da notare che tutti i caratteri “[ ] / ( )” all’interno della espressione regolare vanno preceduti dal carattere di escape “\” (backslash). Inoltre da notare che ho scritto “captio” invece di “caption” altrimenti wordpress lo riconosce come tag e non lo visualizza in questa pagina.

[email protected]:~$ grep -E '\[captio id=(.*)\](.*)\[/captio\]' 1294150483.xml
[captio id="attachment_207" align="aligncenter" width="300" captio="Export database WordPress in formato xml"]Export WordPress in formato xml[/captio]

Bene ora applichiamo la sostituzione tramite il comando sed usando i backreference:

[email protected]:~$ sed -ne 's/^\[captio id=.*\(\).*/\1/p' 1294150483.xml

Otteniamo il link html senza il tag caption:

Export WordPress in formato xml

La stessa cosa si può ottenere usando una combinazione di grep e cut per eliminare un tag xml generico.

[email protected]:~$ grep '' news.20.xml | cut -d '>' -f2 | cut -d '<' -f1
Fri, 20 Aug 2010 15:30:12 +0000

Invece con i back reference:

[email protected]:~$ grep 'pubDate' news.20.xml
Fri, 20 Aug 2010 15:30:12 +0000
[email protected]:~$ grep -E '(.*)<\/pubDate>' news.20.xml | sed 's///g' | sed 's/<\/pubDate>//g'
Fri, 20 Aug 2010 15:30:12 +0000

Oppure direttamente con il comando sed:

[email protected]:~$ grep 'pubDate' news.20.xml
Fri, 20 Aug 2010 15:30:12 +0000
[email protected]:~$ sed -n '//{s/\(.*\)<\/pubDate>/\1/;p;}' news.20.xml
Fri, 20 Aug 2010 15:30:12 +0000
[email protected]:~$ sed -n '//{s/<\(pubDate\)>\(.*\)<\/\1>/\2/;p;}' news.20.xml
Fri, 20 Aug 2010 15:30:12 +0000
Read More

Navigare da pc su apn WAP

In rete ho trovato questo articolo “Navigare da PC attraverso l’apn Wap” che spiega come navigare da PC sfruttando le tariffe mobile internet degli operatori mobili. Faccio notare che tale pratica è vietata; normalmente queste tariffe di mobile internet sono riservate alla navigazione web fatta esclusivamente dal cellulare (e a maggior ragione è vietato il traffico VoIP e Peer-to-peer). Ho fatto delle prove sia con una sim Tim sia con una sim Vodafone ottenendo ottimi risultati. Nel caso dell’operatore Tim, oltre alla navigazione web, sono riuscito anche a collegarmi in remoto a un server ssh tramite putty. Per quanto riguarda l’hardware ho utilizzato un cellulare Samsung Z500 e Nokia 5800 XpressMusic su Windows XP e una chiavetta Huawei E220 sia su Windows XP sia su Ubuntu (in particolare EeePC con EasyPeasy).

Schermata Modifica di TIM

Schermata-Informazioni connessione

Dettaglio stato connessione TIM

Ho creato un pdf con gli screenshot di tutte le varie prove effettuate

Read More
Pagina 4 di 7« Prima...23456...Ultima »