Posts tagged web
Debian: VSFTPD ed Apache
0Scrivo questo veloce post più per utilità personale che altro, visto che in rete esistono già decine di tutorial su come configurare VSFTPD su Debian. Ho notato però che per poterlo utilizzare con Apache HTTP servono alcune piccole accortezze. Ovviamente la configurazione che vado a spiegare è con gli utenti virtuali con PAM.
Procediamo dunque per gradi:
# apt-get install vsftpd libpam-pwdfile
per avere il VSFTPD ed il modulo PAM di autenticazione installati. La configurazione del server FTP è in /etc/vsftpd.conf. Creiamo adesso la directory /etc/vsftp/ che conterrà il file con le credenziali degli utenti virtuali:
# mkdir /etc/vsftp/
e nel file /etc/vsftpd.conf scriviamo:
listen=YES anonymous_enable=NO local_enable=YES virtual_use_local_privs=YES write_enable=YES connect_from_port_20=YES secure_chroot_dir=/var/run/vsftpd pam_service_name=vsftpd guest_enable=YES local_umask=022 anon_umask=0666 guest_username=www-data # per uso con utenti multipli scommentate le righe seguenti # user_sub_token=$USER # local_root=/var/www/$USER local_root=/var/www/ chroot_local_user=YES hide_ids=YES
e poi configuriamo il relativo file di PAM (/etc/pam.d/vsftpd) sostituendo all’originale le righe seguenti:
# Customized login using htpasswd file auth required pam_pwdfile.so pwdfile /etc/vsftpd/passwd account required pam_permit.so
A questo punto utilizziamo l’utility htpasswd per creare e gestire gli utenti (nel mio caso solamente uno):
# htpasswd -c /etc/vsftpd/passwd wwwuser
ed al relativo prompt inseriamo la password prescelta. Riavviamo VSFTPD:
# /etc/init.d/vsftpd restart
e…buon divertimento !
EPrints: ESSPER Import Plugins
0Come sapete sono alle prese con EPrints in merito ad un importante progetto dell’Università di Siena. Attualmente sto dedicando tanto tempo allo sviluppo di nuovi plugin e sistemi per importare metadati relativi alle pubblicazioni che i Ns docenti e ricercatori hanno in giro per il mondo di Internet, tra cui la banca dati dell’Associazione ESSPER. Come fare per importare i metadati presenti su questa banca dati ? Beh, non c’è il modo di esportare, come per altre, in formati standard quali BibTeX o MARC ma, solamente per chi è iscritto, si può esportare in RefWorks. Insomma, EPrintsamente parlando, un disastro
.
Nella pagina però noto una certa regolarità nella presentazione dei metadati, oltre alla possibilità di recuperare ciascun record direttamente dal parametro GET codice dell’URL, così decido di dare una sbirciata al sorgente html. Noto che non vi sono particolari difficoltà nella realizzazione di un semplice parser, basato sulle Regular Expressions, per catturare i metadati che ci interessano. Così decido di fare un tentativo e scrivo qualche riga di codice in Perl:
my $browser = LWP::UserAgent->new; my $url = "http://www.biblio.liuc.it/scripts/essper/ricerca.asp?tipo=scheda&codice=150406"; my $response = $browser->get( $url ); my $plain_text = HTML::FormatText->new(leftmargin => 0, rightmargin => 256)->format(parse_html($response->content)); my %fields = (); my @vars = split(/\n/,$plain_text); foreach (@vars) { my $line = $_; if($line =~ m/^\s*(Autori|Titolo|Periodico|Anno|Volume|Fascicolo|Pagina iniziale|Pagina finale|SICI):\s*(.*)\s*$/) { print "$1: $2\n"; $fields{$1} = $2; } }
Carramba…funziona ! Praticamente nessun magheggio strano: faccio un fetch dell’html della pagina, elimino tutti i tags ed il codice html (HTML::FormatText) ed eseguo una operazione di matching riga per riga usando le perl Re salvando i metadati e relativo valore dentro una lista hash.
Riesco pertanto ad estrarre i seguenti metadati:
- Titolo
- Autori
- Rivista
- Anno
- Pagina iniziale, pagina finale, volume, serie, fascicolo
- ISSN (direttamente dal SICI)
Interessante approfondire quest’ultimo punto sull’estrazione dell’ISSN. Il SICI contiene sia ISSN della rivista che altri dati univoci dell’articolo, organizzati in maniera univoca. Attraverso una espressione regolare riesco ad estrapolare l’ISSN:
my $sici = $fields{SICI};
if($sici =~ m/^(\d+)-(\d+).*\s*$/) {
print "ISSN: $1-$2\n";
}
A questo punto sviluppare un plugin di importazione per EPrints è un gioco da ragazzi: devo preoccparmi esclusivamente di fare l’override delle classi new, input_fh e convert_input, aggiungendo alcuni controlli per verificare che l’utente inserisca o l’URL completo (da cui poi estrapolo il numero del documento) o direttamente il numero:
if ($ids =~ /^http:.*/) {
my $query = CGI->new("$ids");
$ids = $query->param('codice');
}
if (!($ids =~ /^\d+/)) {
print "Invalid ID: $ids\n";
}
ed alla fine ecco a voi il Plugin di Import EssPer.pm pronto per essere copiato dentro /perl_lib/EPrints/Plugin/Import/ !

Commenti recenti