Posts tagged web

Debian: VSFTPD ed Apache

0

Scrivo 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 !

ESSPER

EPrints: ESSPER Import Plugins

0

Come 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 :-D .

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/ !

Go to Top