Area de-PHPizzata  —  This area is free from PHP crapware

19 marzo 2010

Installare Grub con RAID 1

Mettendo un software RAID 1 su Debian il disco di boot rimane uno solo.
Se si desidera che anche il disco clone possa effettuare il boot (altrimenti cosa lo si colna a fare?), allora occorre installare Grub su tutti i dischi del RAID:
# grub
grub> root (hd0,0)
grub> setup (hd0)

grub> root (hd1,0)
grub> setup (hd1)

Etichette: ,

12 novembre 2009

Preparare lo yogurt in casa - senza impazzire

Per preparare lo yogurt in casa, senza impazzire con yogurtiere, riscaldamenti o altre alchimie, è sufficiente utilizzare il Lactobacillus Bulgaricus, ovvero i cosiddetti “fermenti lattici riutilizzabili”.

In realtà non si tratta di veri e propri fermenti, ma di colonie batteriche.
Ma il nome rimasto è quello, quindi continuerò a chiamarli fermenti :-)

I fermenti si presentano in modo simile ai “fiocchi di latte”.
Per utilizzarli ricopriamoli di latte (possibilmente fresco e intero) e lasciamoli posare da 6 a 36 ore.

Un video per iniziare




Questo video, comodo per mostrare la manualità dell’operazione, presenta a mio avviso alcune pecche:
  1. Il coperchio che chiude il barattolo è un errore.
    I fermenti devono respirare, meglio poggiare il coperchio rovesciato.
    Meglio ancora usare un piattino da caffè, invece del coperchio.
  2. Prima di strizzare e maltrattare i poveri fermenti è meglio passare una ventina di secondi a girarli, semplicemente, facendo colare lo yogurt senza troppe pressioni.
  3. Meglio utilizzare un passino fitto in plastica, il metallo potrebbe rovinare i fermenti (me lo hanno detto e lo riferisco, ma questa mi sembra proprio una fisima new age).
  4. Sebbene sia una buona pratica, non è necessario sciacquare i fermenti tutte le volte; in particolare se il latte è molto fresco una volta su due o su tre si può evitare di sciacquarli prima di rimetterli nel latte.

Il latte


La scelta migliore è il latte fresco, intero e di buona qualità.

Anche il latte Parzialmente Scremato può andar bene, sempre meglio se fresco.

In subordine si può utilizzare il latte microfiltrato, quello che dura fresco fino a 10 giorni.
Scendendo nella qualità occasionalmente e in modo non ripetitivo si può arrivare ad utilizzare latte UHT (Lunga Conservazione, Intero o PS), ottenendo uno yogurt che forse sarà da buttare.

Se proprio non c'è latte possiamo lasciarli qualche ora in acqua, o congelarli.

Tutto questo discorso è teorico, poi bisogna provare… ad esempio io mi sto trovando benissimo con il latte intero biologico della Coop, anche se è a lunga conservazione UHT (costa più del non biologico, ma sempre meno del fresco).

I tempi


I tempi variano da 6 a 24 ore, in genere.
Più a lungo fermenta, più lo yogurt viene solido (e acido, se non togliamo il siero).

I tempi si possono aumentare fino a 48 ore utilizzando molto latte in relazione alla quantità di fermenti, e aumentano di sicuro se fa molto freddo (o se i fermenti sono in frigo).

Se i fermenti non sono in frigo considerare che il latte, di suo, fuori dal frigo alla lunga va a male.
In genere è comunque sconsigliabile lasciare i fermenti nello stesso latte per più di tre o quattro giorni, potrebbero morire.

Quando i fermenti hanno lavorato per almeno un giorno, spesso nel barattolo troviamo sia yogurt che siero.
In questi casi in genere li metto nel passino e lascio colare via, buttandolo, il siero. Poi procedo a recuperare lo yogurt, girando i fermenti con un cucchiaio nel passino e poi strizzandoli come mostrato nel video.

Lo yogurt


Lo yogurt ottenuto è molto simile allo yogurt greco: è di sapore acidulo, non è quel misto di panna e zucchero d'uva standardizzato a cui gli yogurt commerciali ci hanno abituato.
Contiene una quantità di fermenti lattici vivi che le marche più strombazzate se la sognano, e di conseguenza regolarizza le funzioni intestinali (in entrambe le direzioni).

Una volta passato può essere consumato subito, caldo, o riposto in frigo.
In frigo i fermenti continuano ad agire, lo yogurt si compatta ancora e diventa meno acidulo… ma chi ha la passione per il sapore vero dello yogurt acido spesso lo preferisce appena passato. Questione di gusti.

Il modo migliore per gustarlo è semplicemente berlo.
Se vogliamo farne una merenda o una colazione, piuttosto che aggiungere zucchero conviene pensare di mescolarlo a frutta secca, cereali o marmellate fatte in casa.

Congelare i fermenti


Se non possiamo badare i fermenti per 4 o più giorni, possiamo comunque congelarli.

Passiamo i fermenti, sciacquamoli bene, strizziamoli accuratamente.
A questo punto li deponiamo in una bustina sigillabile o nel domopack, ne facciamo una palletta e li surgeliamo.

I fermenti possono rimanere surgelati fino a sei mesi, da surgelati li possiamo trasportare (o spedire per posta prioritaria), e per scongelarli li mettiamo direttamente a mollo nel latte nel loro barattolo.

Assicurarsi la sopravvivenza dei fermenti


I fermenti lattici crescono.

Il modo più semplice di assicurarsi di non perderli per errore è quello di fare un piacere ad amici e parenti e distribuirli, mano a mano che crescono.

Etichette: ,

19 giugno 2009

Read a UTF-encoded file using Applescript

Recently I had to shuffle a lot with XML, using applescript together with “TestXSLT” by Marc Liyanage.
Everything was fine while I was reading ISO-8859-1 encoded files and outputting UTF-8 (directly saved by TestXSLT), while some trouble was getting out when the input file was Unicode.

Unfortunately TestXSLT only allows command “set XML code to…” passing the text of the XML, rather than file path, then we need to read correctly Unicode text from inside Applescript.

Here it is my original handler for text reading:

on readFile(filepath)
set foo to (open for access (POSIX file filepath))
set txt to (read foo for (get eof foo))
close access foo
return txt
end readFile


I had to change it slightly in order to read UTF-16 Unicode:

on readFile(filepath)
set foo to (open for access (POSIX file filepath))
set txt to (read foo for (get eof foo) as Unicode text)
close access foo
return txt
end readFile


And this is for UTF-8:

on readFile(filepath)
set foo to (open for access (POSIX file filepath))
set txt to (read foo for (get eof foo) as «class utf8»)
close access foo
return txt
end readFile

Etichette: ,

17 giugno 2009

How-to use "addProgressListener" in XULRunner…

I originally posted this in mozilla.dev.tech.xul newsgroup, server news.mozilla.org, on Nov, 23rd 2006.

/*
First, we’ll associate the progress listener for a "browser"
to a listener object:
*/

browserObject.addProgressListener( listObj,
Components.interfaces.nsIWebProgress.NOTIFY_STATE_WINDOW );

// Remember to define the object, something like this:

listObj = new Object();

listObj.wpl = Components.interfaces.nsIWebProgressListener;

listObj.QueryInterface = function( aIID ) {
if (aIID.equals(listObj.wpl) ||
aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
aIID.equals(Components.interfaces.nsISupports)) return this;
throw Components.results.NS_NOINTERFACE;
}

listObj.onStateChange = function(aProgress, aRequest, aFlag, aStatus) {
if (aFlag & listObj.wpl.STATE_START) {
// This fires when the load event is initiated
} else {
if (aFlag & listObj.wpl.STATE_STOP) {
if ( aFlag & listObj.wpl.STATE_IS_WINDOW ) {
// This fires when ALL load finish
}
if ( aFlag & listObj.wpl.STATE_IS_NETWORK ) {
// Fires when ALL load are REALLY over,
// do something "final" here
} else {
// This fires when a load finishes
}
}
}
return 0;
}

// This fires when the location bar changes i.e load event is confirmed
// or when the user switches tabs
listObj.onLocationChange = function(aProgress, aRequest, aURI) {
// do whatever you want to do
return 0;
}

// For definitions of the remaining functions see XulPlanet.com
listObj.onProgressChange    = function() { return 0 };
listObj.onStatusChange      = function() { return 0 };
listObj.onSecurityChange    = function() { return 0 };
listObj.onLinkIconAvailable = function() { return 0 };

/*
I use the progress listener to trap the end of a local HTML
"template" file loading, and run XSLT transormations.
In addition I need to evaluate the browser contentDocument DOM
in order to clean "target" attributes on links, and so on.

HTH
*/

Etichette:

13 maggio 2009

PPTP VPN through a Linux router/firewall/NAT

Also known as: how-to allow a LAN client to pass-thru Linux router in order to join an external VPN based upon PPTP


Suppose we have a 192.168.x.0/24 LAN - this vale needs to be adjusted in the following examples.

Easiest scenario: Firestarter firewall facility is installed, up and running, then we're going to add Firestarter rules by simply editing file /etc/firestarter/user-post :
$MPB ip_conntrack_pptp 2>/dev/null
$IPT -N pptp
$IPT -A pptp -p tcp --destination-port 1723 --dst 192.168.x.0/24 -j ACCEPT
$IPT -A pptp -p 47 --dst 192.168.x.0/24 -j ACCEPT
$IPT -I FORWARD -j pptp
$IPT -t nat -N pptp
$IPT -t nat -A pptp -i $IF -p tcp --dport 1723 -j DNAT --to 192.168.x.0-192.168.x.255:1723
$IPT -t nat -A pptp -i $IF -p 47 -j DNAT --to 192.168.x.0-192.168.x.255
$IPT -t nat -A PREROUTING -j pptp

Ok, that's over.

In case the firewall was user-defined by some shell script, the we'll add to such script:
/sbin/modprobe ip_conntrack_pptp 2>/dev/null
/sbin/iptables -N pptp
/sbin/iptables -A pptp -p tcp --destination-port 1723 --dst 192.168.x.0/24 -j ACCEPT
/sbin/iptables -A pptp -p 47 --dst 192.168.x.0/24 -j ACCEPT
/sbin/iptables -I FORWARD -j pptp
/sbin/iptables -t nat -N pptp
/sbin/iptables -t nat -A pptp -i ppp0 -p tcp --dport 1723 -j DNAT --to 192.168.x.0-192.168.x.255:1723
/sbin/iptables -t nat -A pptp -i ppp0 -p 47 -j DNAT --to 192.168.x.0-192.168.x.255
/sbin/iptables -t nat -A PREROUTING -j pptp

Please note: in this case we have to change both the 192.168.x.0/24 LAN value and the actual external interface (ppp0, in our example).

Etichette: ,

25 marzo 2009

VMware server 2 per Linux, errore definendo Permissions

Lo scenario è Vmware 2.0 Server per Debian, build number 122956.
L'errore: dopo l'utente root inserisco un nuovo utente,ma il terzo utente non si riesce ad inserirlo:

The server response included one or more errors

If these problems persists, please contact your system administrator.
Details: RunTimeFault: Database temporarily unavailable or has network problems.

La soluzione... login come root su ssh

cd /etc/vmware/hostd
vi authorization.xml

Qui dobbiamo cercare <NextAceId>11</NextAceId> e sostituirlo con <NextAceId>12</NextAceId>.

Quello che accade è che il default viene inserito con id 11, il primo aggiunto viene inserito con ID 10, ed il nextid ad 11 conflitta con l'utente root già presente. Riavviare vmware:

/etc/init.d/vmware restart

ed il gioco è fatto.

Etichette: ,

23 marzo 2009

AFP server con SSL (per Leopard) senza ddp, per Debian

netatalk, il package che gestisce il protocollo AFP e ddp (Apple File Protocol su TCP, ed il vecchio su appletalk broadcast) non supporta l’autenticazione SSL, e questo lo rende inutilizzabile con Leopard.

È però possibile compilarne una propria copia, con semplicità.

Compilare netatalk


Loggandosi come root, eseguire i seguenti comandi:

cd /usr/src
apt-get install openssl cracklib2 libpam-cracklib cracklib2-dev
apt-get source netatalk
apt-get build-dep netatalk


Completato il download, spostarsi nella directory opportuna ed editare il file rules:

cd netatalk-2.0.3
vi debian/rules


Cercare delle righe come:

DEB_UPDATE_RCD_PARAMS := defaults 50
DEB_CONFIGURE_EXTRA_FLAGS := \
--with-shadow --enable-fhs \
--with-tcp-wrappers --with-mangling \
--enable-timelord --enable-overwrite \
--with-pkgconfdir=/etc/netatalk \
--with-nls-dir=/usr/share/netatalk/nls \
--disable-logger --enable-srvloc \
--enable-pgp-uam --enable-krb4-uam --enable-krbV-uam


Aggiungere in fondo:

DEB_BUILD_OPTIONS=ssl debuild


Questa opzione costruirà netatalk con il supporto SSL per le password.

Salviamo ed usciamo, quindi compiliamo il package:

dpkg-buildpackage


Siamo pronti per installare il package:

cd ..
dpkg -i netatalk_2.xxxx_i386.deb


Modificare la configurazione


Editiamo il file /etc/netatalk/afpd.conf, aggiungendo questa linea:

-uamlist uams_dhx.so,uams_guest.so,uams_clrtxt.so,uams_passwd.so,uams_gss.so


Aggiungeremo la linea sotto al blocco dove parla di autenticazione

# Authentication Methods:
# -uampath Use this path to look for User Authentication Modules.
# ...
# (DHX) for authentication.
-uamlist uams_dhx.so,uams_guest.so,uams_clrtxt.so,uams_passwd.so,uams_gss.so


A questo punto editiamo /etc/defaults/netatalk, e cambiamo i valori da

ATALKD_RUN=yes
PAPD_RUN=yes
CNID_METAD_RUN=yes
AFPD_RUN=yes
TIMELORD_RUN=no
A2BOOT_RUN=no

a
ATALKD_RUN=no
PAPD_RUN=no
CNID_METAD_RUN=yes
AFPD_RUN=yes
TIMELORD_RUN=no
A2BOOT_RUN=no


Così facendo abbiamo anche disattivato il "vecchio" appletalk.

Se ci sono errori di login…


Se dopo il login otteniamo su Mac una attesa senza fine e su Linux nel log una stringa come

DB_VERSION_MISMATCH: Database environment version mismatch


allora dobbiamo andare nella home dell’utente che si sta cercando di autenticare, e rimuovere la directory .AppleDB.

Riavviamo netatalk, e il gioco è fatto.

Etichette: , ,

31 dicembre 2008

Debian Lenny, VirtualBox e i device USB

Prima di tutto scarichiamo ed installiamo VirtualBox.

Possiamo scaricare la versione che vogliamo dal sito di Virtualbox, oppure possiamo seguire una strada più in stile debian ed avvalerci di apt-get.

apt-get VirtualBox dal sito Sun

Effettuiamo login come root (oppure apriamo una shell di root).

Editiamo il file /etc/apt/sources.list, aggiungendo:
deb http://download.virtualbox.org/virtualbox/debian lenny non-free

Salvare ed uscire.

Ora va scaricata ed installata la chiave di sicurezza pubblica per apt:
wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | apt-key add -

Finalmente:
apt-get update
apt-get install virtualbox-2.1

Seguire le istruzioni, installare VirtualBox, definire ed installare una macchina virtuale.
Nota: se non si riesce ad installare i client tools, verificare prima di avviare l’installazione di aver effettuato l’eject di qualunque dispositivo CD/DVD (fisico o virtuale) connesso alla macchina.

Siamo pronti.

Attivare la condivisione di dispositivi USB

Una volta che la macchina è stata configurata, installata e correttamente avviata, se vediamo solo dispositivi USB inaccessibili (in grigio) ecco come procedere.

Verifichiamo di aver aggiunto al gruppo vboxusers gli utenti a cui vogliamo far usare VirtualBox.
Useremo questo stesso gruppo per la sicurezza relativa al mount dei dispositivi USB.

Annotiamo il GID (Group ID, numerico)del gruppo vboxusers:
# cat /etc/group | grep vboxusers
vboxusers:x:117:marco

Useremo il valore numerico del gruppo (“117”, in questo esempio) nel file /etc/fstab.
Editiamo il file /etc/fstab, aggiungiamo questa riga:
none /proc/bus/usb usbfs auto,busgid=117,busmode=0775,devgid=117,devmode=0664 0 0

È tutto.
Ora possiamo definire il filtro per dispositivi USB dai settings della macchina virtuale, e la macchina virtuale li vedrà.

Etichette: ,

28 dicembre 2008

Linux con boot su dischi RAID (sotware raid)

Parlando di Linux il riferimento è a Debian, e quanto segue è stato provato con la Etch (4.0), la Etch-and-one-half (4.5) e la Lenny Beta 2 (5.0b2).

Per poter affrontare il boot di Debian direttamente da RAID vanno tracciate due considerazioni importanti...

1) Come è possibile effettuare il boot da una RAID software

Se il RAID è software allora il supporto RAID (madm) viene attivato solo durante il boot di linux, dopo il caricamento del kernel.
Questo significa che, semplicemente, non è possibile disporre del supporto di un RAID software al momento del boot.
Però... il RAID di tipo 1 (mirror) duplica i contenuti di una partizione sull'altra, e questo significa che possiamo partire da una partizione di boot anche se questa partizione fa parte di un RAID 1.
Significa anche che non è possibile partire né da un RAID 5 né da un RAID 0 che siano gestiti a livello software.

2) Come Linux gestisce il RAID software

Occorre creare delle partizioni per uso "Linux RAID", e poi configurare il RAID software e su questo creare i file system effettivi.
La mappa delle partizioni viene letta al boot, dopo la creazione delle partizioni RAID e la configurazione del RAID software è necessario un riavvio coatto, un hard reset, per ripartire ed utilizzare le partizioni create dal RAID.

Lo sporco trucco per non impazzire è che su ogni RAID software creato mettiamo una sola partizione, un solo file system.
Ci sarebbe anche da discutere del LVM (Logical Volume Manager), ma nei casi in cui utilizzo Linux le partizioni non sono destinate a contrarsi o espandersi, quindi l'ho volutamente ignorato.

Avvio dell’installazione

Avviamo dal CD della netinstall di Debian.
Nel caso della Lenny Beta 2 ho dovuto avviare il CD da windows, cliccare sull'eseguibile di install e quindi riavviare (partendo dall’HD di Windows) in modo che il grub installato sul disco di boot avviasse il CD. Alla fine del setup occorre ricordarsi di andare nel BIOS e settare i dischi RAID 1 come dischi di avvio che vengono prima di quello windows nella sequenza di boot.
Non so perché, ma pare che il setup di Debian sia profondamente cambiato da Etch a Lenny, migrando verso quello di Fedora.
Una delle conseguenze è che con la Lenny il setup parte in grafica.
Comunque partiamo.

Creazione delle partizioni per il RAID

Sui dischi fisici creiamo le partizioni “Linux RAID” destinate a comporre il RAID.

Qui si differenziano i casi: quello in cui disponiamo di 2 soli dischi (tutto RAID1), e quello in cui abbiamo 3 o più dischi (e faremo RAID 1 e RAID 5).

Due soli dischi

Nel caso di due dischi creeremo su ogni disco due partizioni: la prima di tipo "Linux RAID" grande quanto il disco meno uno o due GB, e la seconda il poco che rimane di tipo swap.
Dopo aver creato le partizioni, su entrambi i dischi "Configure software RAID": configuriamo la prima come "RAID 1" (2 unità attive, 0 di scorta).
Reset fisico, necessario per rileggere i dischi, e passiamo alla creazione dei file system.

Tre o più dischi

Nel caso di più dischi il consiglio è di ricordarsi che i link simbolici funzionano alla grande.
Personalmente invece di impicciarmi con i vari mount point creo un RAID 1 per / ( e quindi per /boot e /home ecc), un RAID5 per il resto e monto il RAID5 sotto /storage.
Poi dei comandi "mv" e dei link simbolici serviranno a spostare /etc, /var, /home e /usr sulla partizione RAID 5.
Creo quindi su tutti i dischi (tutti meno uno) una partizione dal alcuni GB, diciamo da 2 a 5, di tipo Linux RAID.
I dischi sono tre o più, almeno due sono stati preparati per il RAID 1. Sull'ultimo disco la partizione, della stessa misura, la useremo come swap.
Su ogni disco creo anche una seconda partizione Linux RAID, della dimensione rimanente.
Scegliamo "Configure software RAID".
Creiamo un RAID 1 con due unità attive e tante unità di scorta quanti sono i dischi rimanenti meno uno che abbiamo usato per lo swap; avremo quindi 0 partizioni di scorta nel caso di tre dischi totali, 1 partizione di scorta con quattro dischi ecc.
Creiamo anche un RAID5, e qui sta a voi decidere se volete tutte le unità ative o -avendone più di tre- se preferite tenerne anche una di scorta (cosa che io in genere preferisco).
Reset fisico, necessario per rileggere i dischi, e passiamo alla creazione dei file system.

Creazione dei file system

Con la Lenny beta ho visto che era necessario passare per il dialogo di configurazione raid software e non cambiare nulla accettando e tornando indietro, altrimenti non rileggeva i RAID creati prima.

Due soli dischi

Sulla partizione RAID 1 mettiamo una Etx3, che montiamo in root (/), flagghiamo di boot e formattiamo.
Le partizioni swap le useremo tutte come swap.

Tre o più dischi

Anche in questo caso partizione RAID 1 (considerevolmente più piccola) mettiamo una Etx3, che montiamo in root (/), flagghiamo di boot e formattiamo.
Sulla RAID5 mettiamo una Ext3, non lo flagghiamo di boot, formattiamo, e lo montiamo custom (in "/storage", appunto).
Rimane la partizione piccola per lo swap, quella avanzata alle partizioni RAID 1, e la destiniamo a tale uso.
Installeremo solo un base system, e dopo il primo riavvio ci adopereremo per spostare /home, /var (e magari /etc) sotto /storage, sostituendole con link simbolici.

Fine. Have fun! :-)




Un esempio di configurazione, con due HD da 750GB...

Partizioni hd1Partizioni hd2 Volumi logici
746GB, linux RAID746GB, linux RAID746GB, RAID 1, ext3, /
2.1GB, swap2.1GB, swap2.1GB, swap 2.1GB, swap
2.1GB, swap2.1GB, swap2.1GB, swap 2.1GB, swap


Alla fine della configurazione il sistema utilizza un volume ext3 in RAID 1, bootable, e 4 partizioni di swap.
Le partizioni di swap avrebbero anche potuto essere 2, ma pare che partizioni di swap più piccole (da mezzo GB in sù) siano più efficienti, così ho cercato un compromesso tra 8 partizioni da 1 GB e 2 partizioni da 4GB.

Una configurazione alternativa:

Partizioni hd1Partizioni hd2 Volumi logici
146GB, linux RAID146GB, linux RAID146GB, RAID 1, ext3, /
600GB, linux RAID600GB, linux RAID600GB, RAID 1, ext3, /home
2.1GB, swap2.1GB, swap2.1GB, swap 2.1GB, swap
2.1GB, swap2.1GB, swap2.1GB, swap 2.1GB, swap

Etichette: ,

Linux: scanner USB con SANE o XSANE, per gli utenti

UPDATE: Debian Lenny in distribuzione da fine Aprile 2009 non presenta più il bug, che è stato risolto esattamente come riportato nell'articolo.


Lo scenario: una Debian Lenny con connessa una stampante multifunzione HP, una all-in-one.
"Sane" la supporta, "hplip" è installato e lo supporta, ma lo scanner sembra non funzionare.
Poi la scoperta: esequendo da root sane-find-scanner ottengo:

# sane-find-scanner

# sane-find-scanner will now attempt to detect your scanner. If the
# result is different from what you expected, first make sure your
# scanner is powered up and properly connected to your computer.

# No SCSI scanners found. If you expected something different, make sure that
# you have loaded a kernel SCSI driver for your SCSI adapter.

found USB scanner (vendor=0x03f0 [HP], product=0x7e04 [Deskjet F4100 series]) at libusb:003:006
# Your USB scanner was (probably) detected. It may or may not be supported by
# SANE. Try scanimage -L and read the backend's manpage.

# Not checking for parallel port scanners.

# Most Scanners connected to the parallel port or other proprietary ports
# can't be detected by this program.


E qui scopro che -sorpresa- per l'utente root funziona.

Si tratta di permessi: lo scanner di marca 03f0 e modello 7e04 si trova in /dev/bus/usb/003/006 e può essere utilizzato solo da root, perché ha permission root:root 644.

Sistemare i permessi a mano risolve il problema per ora, ma per risolverlo permanentemente:

1. Aggiungo gli utenti che possono usare lo scanner al gruppo "scanner"

2. in /etc/udev/rules.d edito il file z60_libsane-extras.rules, e nel blocco delle regole degli HP, in fondo, aggiungo un paio di righe:

#Hewlett-Packard Deskjet F4100
SYSFS{idVendor}=="03f0", SYSFS{idProduct}=="7e04", MODE="0664", GROUP="scanner", ENV{libsane_matched}="yes"


Se mi fossi limitato a correggere i permessi al prossimo reboot, o collegando e scollegando lo scanner, avrei dovuto ricominciare.

Salvo, stacco e riattacco lo scanner. Tutto ok.

Etichette: ,

26 agosto 2008

xulRunner 1.9, Mac OS X ed il fullScreen

Far andare a pieno schermo una finestra di xulRunner... un bel problema.

Su tutte le piattaforme fullScreen=true non ha effetto, ma a quello si rimedia:
setTimeout("window.fullScreen=true;",10)

Il problema è su Mac OS X, dove questa modifica non ha effetto se si forza il ricaricamento dello XUL, ed ha effetto solo dal secondo lancio altrimenti. E comunque rimane la titlebar, che invece non rimaneva con xulRunner 1.8.0.9

Come uscirne?
Occorre aprire la finestra che vogliamo a pieno schermo utilizzandone un'altra come launcher.

La finestra da aprire deve essere semplice, un documento XUL con un nodo window in cui ometteremo gli attributi sizemode, width, height, screenX e screenY (ovviamente non comprenderemo questi attributi neanche in un eventuale attributo persist).
Il posizionamento dovrà essere determinato dal comando di apertura, altrimenti si verificherà un conflitto di competenze tra l'evento di apertura e gli attributi della finestra.
Ricordiamoci però di lasciare in questa finestra l'attributo hidechrome="true".

La finestra che apre userà un comando come:
var uri = 'chrome://panel/content/main.xul';
var winName = 'fullscreenWindow',
var winFeatures = "chrome,dependent";
winFeatures += ",top=0,left=0,width=800,height=600";
winFeatures += ",titlebar=no,fullscreen=yes";
window.open(uri,winName,winFeatures );

(al posto di window.open si può anche utilizzare window.openDialog)

Et voilà, aperto a pieno schermo (e da subito) anche su Mac! :-)

Etichette: ,

10 maggio 2007

Accedere a Microsoft SQL Server da Perl DBI su Linux

I passi che seguono spiegano come configurare Debian Linux per accedere a Microsoft SQL server.
Eseguendo i vari "apt-get install" andranno ovviamente installate anche le relative dipendenze.
Questi passi vanno eseguiti con privilegi di root.

Installare Perl DBI:
# apt-get install libdbi-perl

Installare Unix ODBC:
# apt-get install unixodbc

Installare i driver ODBC FreeTDS:
# apt-get install tdsodbc

Configurare "/etc/odbc.ini" (le parti sottolineate vanno modificate):
[odbcsource]
Driver = FreeTDS
Description = My ODBC connection
Trace = No
Server = mysqlserver.mycompany.com
Port = 1433
Database = NORTHWIND


Siamo pronti ad accedere alla nostra sorgente ODBC via DBI:
#!/usr/bin/perl -w
use DBI;
use Data::Dumper;

my $dbh = DBI->connect( 'dbi:ODBC:odbcsource', 'user', 'pwd' );
my $query = "Select * from MYTABLE";

my $q = $dbh->prepare( $query ) ;
$q->execute() ;

my($r,@lines);
while ($r = $q->fetchrow_hashref()) { push @lines, $r }
$q->finish();

$dbh->disconnect();

print Dumper( @lines );

Etichette: ,

09 maggio 2007

Apache 2 su Debian autenticato verso Windows Server (Active Directory)

Il problema: autenticare un utente tramite l'autenticazione standard di apache2 utilizzando il login del server Windows 2003, ovvero LDAP/ActiveDirectory

Scenario:
  • Linux Debian
  • Apache2
  • Dominio ActiveDirectory (Windows Server 2003)


Cominciamo con il dire che l'autenticazione vera e propria (nome utente e password) viene fatta tramite kerberos, sebbene eventuali query vengano poi ftte tamite LDAP.

Tutte le operazioni necessarie sono su Debian.

Loggarsi come root pe ri passi che seguono, modificando opportunamente il testo sottolineato.

1. Installare kerberos



Installiamo il modulo libapache2-mod-auth-kerb:
# apt-get install libapache2-mod-auth-kerb


Abilitiamo il modulo kerberos:
# a2enmod auth-kerb


2. Configurare kerberos


Dovremo creare il file auth_kerb.keytab, leggibile da tutti, nella directory /etc/krb5 (crearla se non esiste).

Da qui in poi supponiamo di voler autenticare i nostri utenti verso il dominio ActiveDirectory "FOO.COM" (scriverlo sempre in maiuscolo), che è tipicamente il nome della società. Sostituirlo con il valore opportuno (ad es. "ACME.IT").

Supponiamo anche che il nome DNS della nostra macchina linux sia "debian.foo.com", da sostituire anche in questo caso con il valore opportuno (ad es. "linuxbox.acme.it").

# echo HTTP/debian.foo.com@FOO.COM > /etc/krb5/auth_kerb.keytab
# chmod a+r /etc/krb5/auth_kerb.keytab


Passiamo a configurare "/etc/krb5.conf":

[logging]
default = FILE:/var/log/kerberos
kdc = FILE:/var/log/kerberos
admin_server = FILE:/var/log/kerberos

[libdefaults]
ticket_lifetime = 24000
default_realm = foo.com
dns_lookup_kdc = false

[realms]
FOO.COM = {
    kdc = FOO-DOMAIN-CONTROLLER-1.foo.com:88
    kdc = FOO-DOMAIN-CONTROLLER-2.foo.com:88
}

[domain_realm]
.foo.com = FOO.COM
foo.com = FOO.COM

[appdefaults]
pam = {
    debug = false
    ticket_lifetime = 36000
    renew_lifetime = 36000
    forwardable = true
    krb4_convert = false
}


3. Configurare la sicurezza per una directory


In una directory di prova da mettere sotto sicurezza creiamo un file ".htaccess", leggibile a tutti:

AuthName "FOO.COM Login"
AuthType Kerberos
Krb5Keytab /path/auth_kerb.keytab
KrbAuthRealm FOO.COM
KrbMethodNegotiate off
KrbSaveCredentials off
KrbVerifyKDC off
Require valid-user


4. Verificare il funzionamento


Controlliamo che con il caricamento di kerberos non ci siano errori di sintassi nella configurazione di apache2, eventualmente dovremo disabilitare altri metodi di autenticazione in conflitto (e relative righe di configurazione):
# apache2ctl -t

Se tutto è a posto riavviamo Apache2:
# apache2ctl graceful

A questo punto accedendo alla directory verrà richiesta l'autenticazione HTTP di base.
"john.smith@foo.com" userà il solo nome utente "john.smith", e la sua password.

Da questo momento Apache2 si occuperà per noi di popolare la variabile di ambiente REMOTE_USER con john.smith@FOO.COM una volta che l'utente si sia autenticato.

Rifiniture


Queste righe possono essere elencate a livello di file di configurazione del virtual site:

Krb5Keytab /path/auth_kerb.keytab
KrbAuthRealm FOO.COM
KrbMethodNegotiate off
KrbSaveCredentials off
KrbVerifyKDC off


Queste devono rimanere in un .htaccess o, nel file di configurazione, nella definizione di una directory:

AuthName "FOO.COM Login"
AuthType Kerberos
Require valid-user

Etichette: ,

21 febbraio 2007

Si comincia bene…

Ti installi i tool di amministrazione per Windows Server, poi cerchi di amministrare e scopri che Micro$oft non vuole i suoi stessi tool di amministrazione… no, signori, per rendere pubblicamente consultabile l’LDAP di Active Directory occorre caricare ed installare altri tool, i fantastici “support tools per Windows 2003 Server”, 30MB di download e 50 di installazione per il raro privilegio di godere dell’imperdibile ed inimitabile “ADSI Edit”.

Eh sì, perché “Active Directory Sites and Services”, “Active Directory Domains and Trusts” e “Active Directory Users and Computer” non bastavano (per non dimenticare “Active Directory Management”, che per semplicità li wrappa tutti insieme).
Eh già, serve proprio “ADSI Edit”.

Serve un quarto (o quinto) tool di amministrazione per lo stesso oggetto, solo per dire a quel grullo di windows come impostare l’LDAP di Active Directory perché un tool gli dice che diritti dare, uno con chi parlare, uno come parlare.

Perché 5 tool? Perché tanto odio?
Forse sarebbe stato troppo semplice, troppo poco Microsoft, avere un solo ed unico “Active Directory Administration” per fare tutto?

Etichette:

That’s All Folks!