Umask e sticky bit

Veloce incursione nel mondo Linux/Unix.

umask = 777 – diritti di lettura / scrittura (in ottale)

il valore umask è il complemento a 128 dei permessi di scrittura. Ci dice quali permessi vogliamo negare sul file più che concedere.

Ad esempio se una directory è leggibile / scrivibile / eseguibile dal proprietario e solo leggibile/eseguibile dalresto del mondo (il gruppo e tutti gli altri), si ha:

  • proprietario = 111 = 7
  • gruppo = 101 = 5
  • altri = 101 = 5

per cui umask = 777 – 755 = 022 (ottale)

Se anche il gruppo dovesse poter scrivere, si deve impostare la directory con

chmod 775 /path/to/dir

ossia umask = 777 – 775 = 002.

umask è un comando Unix che altera permanentemente i diritti di accesso ai file / directory creati dopo il comando per quella shell. Esempio:

marcob@jsbach:~$ umask 022
marcob@jsbach:~$ touch nuovo
marcob@jsbach:~$ ll nuovo 
-rw-r--r-- 1 marcob marcob 0 2011-03-07 15:28 nuovo
marcob@jsbach:~$ umask 002
marcob@jsbach:~$ touch nuovo1
marcob@jsbach:~$ ll nuovo*
-rw-r--r-- 1 marcob marcob 0 2011-03-07 15:28 nuovo
-rw-rw-r-- 1 marcob marcob 0 2011-03-07 15:28 nuovo1

Ma cosa vuol dire:

drwxrwxrwt  15 root root  4096 2011-03-07 14:55 tmp/

cioè cosa significa la t?

Significa che per la directory /tmp/ è stato impostato lo sticky bit (bit adesivo) che fa in modo che nella directory tutti possano scrivere ma solo i proprietari dei file possano rinominarli o cancellarli.

Per i file: il kernel, quando carica nella swap area un file eseguibile, non lo rimuove (lo incolla letteralmente alla swap area) nemmeno quando ha terminato l’esecuzione. Questo, soprattutto alle origini, per fare in modo che i programmi più frequentemente usati dall’utente rimanessero in memoria per avviarli più rapidamente.

Sull’uso di tablespaces separati per dati e indici

Mi sono imbattuto in questo interessantissimo botta e risposta nel sito dell’Oracle.

La domanda è: sarà più performante il database nelle operazioni di lettura e scrittura (e magari anche per i backup) se mettiamo tabelle e indici in tablespace separati?

I DBA con cui lavoro spesso adottano questo espediente per avere prestazioni migliori, ma alla Oracle stessa non ritengono così certa questa convinzione,  che, a quanto pare, risulta molto diffusa. La separazione può essere utile, ma non per le ragioni per cui di solito viene adottata.

Leggetevi la discussione in questo interessante forum: Ask Tom Oracle … almeno fino ad un certo punto rimane lucida; poi, come capita spesso nei forum, si va a farfalle.

“Howto” per l’installazione di un sistema LAOP (Linux Apache Oracle PHP)

Ho avuto la necessità di realizzarmi un ambiente di sviluppo basato su Linux, Apache e PHP ma con il vincolo di adottare una base dati Oracle.

Oracle da’ la possibilità di utilizzare un server ad uso test Oracle eXpress Edition. Il sistema che ne deriva l’ho chiamato LAOP, ricordando il molto più popolare ambiente LAMP che si basa sul DBMS MySQL (che è di proprietà di Oracle).

Ho seguito un utile howto sull’ottimo sito http://www.danilovizzarro.it/ ma ho voluto “vivisezionare” gli script di automazione per capire ciò che facevano. Ne è risultato un piccolo howto, redatto ovviamente in LaTeX ;-), che volentieri metto a disposizione con la speranza che risulti utile.

XML

Un piccolo problema: avevo la risposta di un web service e volevo renderla leggibile con maggior facilità. I web service rispondono (nella maggior parte dei casi) in XML, l’indentazione non è necessaria per un parser (il software che legge il file) ma per l’occhio umano è preferibile vedere come si annidano i nodi nel gioco di scatole cinesi.

Due soluzioni:

  1. in Ubuntu, aprire Synaptic e cercare xmlindent (probabilmente non è installato); una volta installato si lancia
    $ xmlindent file.xml > file1.xml

    Per chi vuole qualche info in più, man xmlindent

  2. soluzione per chi smanetta un po’ di più: applicare una trasformazione XSLT come suggerito in questo sito. Per chi non conosce le trasformazioni XSLT ho fatto qualche esempio in questa risorsa.

Openoffice.org

Mi è capitato talvolta che all’apertura di Open Office (versione 2.2) venisse avviata la procedura di recupero file corrotti (di solito in seguito ad un crash del programma o ad un arresto inatteso del sistema). Ogni tanto capita che, se fallisce il ripristino di uno o più files, al suo avvio Open Office mostri la schermata di ripristino perché i file da ripristinare non sono più disponibili nella cartella /tmp/, e il ripristino non è comunque più possibile. Questa situazione è destinata a permanere in eterno perché il recupero non può più essere effettuato.

Un modo per rimediare è il seguente:

Posizione file dei recuperi OpenOffice:

 <home>/.openoffice.org/user/registry/data/org/openoffice/Office/Recovery.xcu

La guida online (F1) recita:

Avviare il Programma di notifica errori. Nella maggior parte dei casi di crash del software, il Programma di notifica errori si avvia automaticamente. Tuttavia, se il software sembra essere bloccato e il programma non si avvia automaticamente potete avviarlo manualmente:
Accedete alla cartella del programma {office_install_path}/ e avviate il file crashrep.

Workaround alternativo:

Esco da OO (se già aperto). Con OO spento:

 $ vi <home>/.openoffice.org2/user/registry/data/org/openoffice/Office/Recovery.xcu

cancello le righe relative ai documenti citati nel prompt iniziale (nel campo oor:name) e le sostituisco con le righe:

 <node oor:name="recovery_item_2" oor:op="remove"/>

dove anziché item_2 può essere un item diverso, di solito più righe uguali in ordine da 1 a 15). Salvo e riavvio OO. Non appare più il prompt di recovery.

Nella versione 3.2 che ho in questo momento, tuttavia, il problema è stato risolto, per cui non serve alcun intervento (la coda dei file da ripristinare si svuota da sola).

Personal Computer

“Mi son comprato un personal computer
ma il cuore soffre un poco di aritmia.
Non so come curare i reumatismi”
(Franco Battiato)

Ascoltala su Youtube.

Sommario

Il mio Dell Vostro 3700SambaUn problema


Sì, Babbo Natale mi ha portato un PC nuovo, un Dell Vostro 3700:

root@jsbach:/tmp# cat /proc/cpuinfo
processor    : 0
vendor_id    : GenuineIntel
cpu family   : 6
model        : 37
model name   : Intel(R) Core(TM) i5 CPU       M 460  @ 2.53GHz
stepping     : 5
cpu MHz      : 1197.000
cache size   : 3072 KB

più altri tre processori, che vi risparmio.

RAM:

marcob@jsbach:~$ free -tm
             total       used       free     shared    buffers     cached
Mem:          3763       1643       2119          0         63        745
-/+ buffers/cache:        833       2929
Swap:         8852          0       8852
Total:       12616       1643      10972

3.7 GB insomma, più lo swap su disco circa 10GB.

marcob@jsbach:~$ df -h
File system            Dim. Usati Disp. Uso% Montato su
/dev/sda2             147G  7,0G  133G   5% /
none                  1,9G  344K  1,9G   1% /dev
none                  1,9G  2,8M  1,9G   1% /dev/shm
none                  1,9G  352K  1,9G   1% /var/run
none                  1,9G     0  1,9G   0% /var/lock
/dev/sda5             138G  8,0G  123G   7% /home

300 GB, insomma, in due partizioni ext4: una per la home (dati) e una per il resto del sistema. Più lo swap. A bordo ho trovato Windows 7, carino, ma come si sarà capito ho subito installato Ubuntu 10.10 (Maverick Merkaat).

Scheda Video nVIDIA con motore PhysX.

E' bello vedere quattro processori che si scambiano i task. E' molto veloce e performante, non e' andato in crisi mentre simultaneamente trasferivo file tra due macchine, navigavo sul web e masterizzavo CDROM di backup.

Per trasferire i file dal computer vecchio ho fatto un po' di operazioni, le trascrivo così magari possono essere utili a qualcun altro.

Samba

Per chi non conosce l'informatica non è un ballo brasiliano ma una infrastruttura software open source per condividere file in reti eterogenee (Linux, Mac, Win).

Ho tratto qualche utile informazione utile dal sito Unixmen.

Ho migrato i miei files dalla vecchia macchina "bach" (Hardy Heron 8.04) alla nuova macchina "jsbach" (Maverick 10.10). Scrivo dettagli anche idioti perché per me non lo erano affatto e possono risultare comunque utili a qualche altro.
Nelle vecchia macchina il CDROM-RW ha tirato le cuoia, per cui ho pensato di trasferire nella macchina nuova i file e fare il backup (di striscio, conservo nell'HD parte di questo materiale di lavoro).

Potrebbe essere stata un'altra soluzione quella di condividere un directory di bach da jsbach, ma non mi riesce più di installare samba nella macchina vecchia, è più semplice farlo in quella nuova.

Il tutto cuba circa 20 GB.

Ho configurato a mano le due schede di rete dando a bach l'indirizzo 192.168.0.1 e a jsbach 192.168.0.2

Ho installato samba4 con Synaptic nella macchina jsbach.

Il file /etc/samba4/smb.conf provoca diversi warning all'avvio del server, ma ciò non inficia le operazioni successive (per cui me ne preoccuperò dopo). Non è necessario toccare il file smb.conf, pensavo di doverlo fare limitatamente alla sezione ### Domains ### ma non è stato necessario.

Ora ho un utente marcob in entrambe le macchine, accedere come marcob via Samba da bach a jsbach potrebbe imbarazzare il SO (ed effettivamente solo facendo come segue sono riuscito a finire il giro), per cui creo un nuovo utente bach nella macchina jsbach che mi servirà solo per scaricare i files.

$ sudo adduser bach

seguire le richieste del programma e si crea l'utente. In special modo attenzione alla creazione della shell, se non la si crea non si riesce a fare

$ su - bach

alla fine si controlla:

$ cat /etc/passwd
...
marcob:x:1000:1000:Marco,,,:/home/marcob:/bin/bash
bach:x:1001:1001:Vecchio PC,,,:/home/bach:/bin/bash

Ho correttamente l'indicazione della shell per entrambi gli utenti.

Creo una cartella "bu" in Documenti@jsbach e creo la condivisione (tasto destro sulla cartella - Opzioni di condivisione): in particolare spunto la checkbox che permette di
creare / eliminare cartelle da altri utenti.

La parte server sembra pronta, c'è anche accesso alla documentazione Samba via web:

http://jsbach:901.

(ovviamente se lo faccio dalla macchina bach devo aggiungere una riga in /etc/hosts). La parte client: nel computer bach: Risorse -> Connetti al Server; compare una finestra con i seguenti controlli:

  • tipo di servizio: Condivisione Windows (sì, sono due macchine Linux che si parlano, ma si seleziona Condivisione Windows)
  • Server: jsbach
  • Condivisione: bu (nome della cartella in locale)
  • Cartella: bu (in remoto)
  • Nome utente: bach (quello che ho creato sopra)
  • Nome del dominio: lasciare inalterato.

Nautilus chiede la password, e mi sono collegato: ho un file server per scaricare i file del cpu vecchio!

Il CPU vecchio lo tengo buono, lo pulisco, avanzo la versione di Ubuntu alla 9 (almeno) e lo uso come server mysql, http e samba (da installare).

Nella figura potete vedere come le 4 CPU del mio i5 macinavano durante il trasferimento.

Se trasferisco file e masterizzo CDROM e ascolto Battiato su Youtube invece:

Lavoro delle CPU in spunto di caricoL'utilizzo di memoria è modesto, nessuno swap.

Devo dire che in fondo il mio vecchio bach funziona ancora bene, con Linux. Non da' segni di cedimento, solo che il CDROM che non funziona più (non ho strumenti ermeneutici per ripararlo) e non posso più fare i backup su ottico. Come server andrà ancora benissimo.

Un problema

Abbastanza grave anche: se uso la batteria, pochi secondi dopo aver effettuato il login, la macchina si pianta brutalmente, nessun input funziona più: disperazione.

Google mi ritorna che il problema è la gestione della batteria, sembra ci sia un problema al demone acpi, quello che attua la gestione dell'energia. Apprendo che il controllo energetico della macchina, dall'adozione dello standard ACPI, è fatta ad alto livello, dal sistema operativo, e non esclusivamente dal BIOS.

Ho trovato oggi questo utilissimo post che ha risolto il mio problemone. Mentre scrivo, vado a batteria. In breve: aprire Synaptic e disinstallare le pm-utils (o downgradarle alla versione precedente, ossia < 1.4.1).

Lucene, un potente motore di ricerca open source

Mi è capitato due anni fa di giocare con un motore di ricerca molto potente e flessibile: Lucene, uno dei prodotti dell’Apache Group. Lucene (pronunciato all’incirca lussìn) è scritto in Java ed è integrabile in un software qualsiasi in cui occorra avere a disposizione una funzione di ricerca su filesystem ma anche su database (io ad esempio l’ho usato in quest’ultima situazione).

Ha una API molto fornita a disposizione, buona documentazione ed è tutto sommato semplice sia da installare / configurare che da usare.

Ha funzionalità di ricerca fuzzy come anche su fornitura di espressioni di ricerca (quella che fa uso degli operatori OR, -, e altri, ma che pochi conoscono e usano) e di indicizzazione su più fonti dati, come detto.

Ho scritto un piccolo manualetto per l’installazione, nella speranza che possa essere utile. Di solito quello che scrive il manuale dimentica sempre un caso particolare che in una determinata situazione trasformano immantinente il manuale in carta igienica. Io sicuramente ci sarò riuscito. Però mi sono soffermato, forse, su dettagli che sono scontati per i più bravi.

Premi Breakthrough of The Year 2010

Sono dieci premi assegnati ogni anno da Physics World ai 10 maggiori successi della ricerca nell’ambito della Fisica (a cui sia riconosciuto il rango di una “svolta”).

Quest’anno il primo premio è stato assegnato ai fisici dell’esperimento ALPHA del CERN di Ginevra per avere isolato per 170 ms 38 atomi di antiidrogeno (ho fatto un piccolo tweet anch’io circa un mese fa su questa osservazione straordinaria).

I fisici sperano di osservare delle differenze nei livelli energetici tra idrogeno e antiidrogeno per trovare una motivazione dell’asimmetria nella presenza del primo rispetto al secondo nell’universo.

I dettagli nel sito di Physics World.

CakePHP

Dopo molti tentennamenti, visto il framework Struts per Java, ho deciso di iniziare a sviluppare applicativi PHP con il tool MVC CakePHP.

Il paradigma MVC è una configurazione architetturale (design pattern), un acronimo per Model – View – Controller (approfondimento su Wikipedia inglese).

MVC design pattern - Tratto da Wikipedia

MVC design pattern - Tratto da Wikipedia

Ogni applicativo viene separato in tre componenti interagenti che sono:

  • Model (il modello): è in sostanza il modello dati su cui si basa l’applicativo, può essere un database, o un file xml, o altro ancora. Nel caso del database relazionale, nel modello definisco lo schema entità/relazione, cioè tutto l’insieme delle tabelle e dei vincoli di integrità referenziale: è la parte di PHP che parla direttamente con il database
  • Controller (la logica) definisce le azioni sulle entità del modello (vista, inserimento, modifica); un click dell’utente chiama un componente del controller e una volta terminata l’elaborazione del modello, il controllore invoca la vista adeguata per visualizzare i risultati.
  • View (la presentazione) definisce come visualizzare il risultato delle azioni sul modello (listato di una tabella, inserimento o variazione di una o più tabelle).

CakePHP fornisce nativamente un ambiente di controllo della connessione a database (scaffold, impalcatura) che consente a costo 0 di controllare se la configurazione del modello e le principali azioni su di esso sono funzionanti. Tempo fa avevo scritto uno scaffold che avevo chiamato TABULA che fa la stessa cosa.

Telefonia

Mi è capitato oggi di dover gestire un ambiente di test interconnesso con la rete telefonica. Riporto qui un po’ di appunti, soprattutto per evidenziare l’abbondanza di acronimi nei quali ci si imbatte. E’ solo una lista di acronimi, non la spiegazione di cosa siano. Sul web trovate un sacco di risorse che vi spiegano i dettagli.

  • PSTN (Public Switched Telephone Network) ora più nota in Italia come
  • RTG (Rete Telefonica Generale) è l’Internet della telefonia, anzi, Internet sfrutta la RTG.

Ma talvolta con PSTN intendiamo la vecchia rete commutata (quella che meccanicamente sostituiva il lavoro delle centraliniste con gli spinotti) ma un  acronimo più adeguato è

  • POTS (Plain Old Telephone Service, ma che qualche tempo fa significava Post Office Telephone System).

La rete telefonica italiana, poi, si struttura in quattro livelli (il primo è il più vicino all’apparecchio telefonico di casa, l’ultimo è il più generale):

  • SL (Stadio di Linea) è la centrale da dove parte il famoso ultimo miglio; ce ne sono circa 10.500 che coprono 8100 Comuni;
  • SGU (Stadio di Gruppo Urbano) a cui si collegano più SL: ce ne sono 628, gli SL sono a loro collegati tramite cavo interrato o ponte radio;
  • SGT (Stadio di Gruppo di Transito, o centrali interurbane) a cui accedono gli SGU (ce ne sono 65). Questi numeri non sono certi, fonti diverse riportano numeri leggermente diversi. Diciamo che ci sono 104 SL, 102 SGU e 101 SGT. Giusto l’ordine di grandezza. Queste SGT sono collegate tramite 3 gateway (che si trovano a Milano, Roma e Palermo) alla
  • OPB (Optical Packet Backbone) la dorsale a fibre ottiche internazionale
  • BBN è la dorsale nazionale (Back Bone Nazionale), che dovrebbe sostituire la rete basata su SL/SGU/SGT, da non confondersi con Bolt, Beranek & Newman, l’azienda che ha partecipato alla nascita di Internet (la BBN è dove lavorava Ray Tomlinson. Sì, proprio quello che ha inventato l’email). Ah! Backbone in Anatomia è la colonna vertebrale.

Ogni punto di accesso (il singolo telefono), poi, può al suo interno articolarsi in una piccola sottorete interconnessa che accede alla rete telefonica tramite un

  • PBX (Private Branch Exchange), volgarmente detto centralino e a volte detto
  • PABX (Private Automatic Branch Exchange), che può svolgere varie funzioni:
  • ACD (Automatic Call Distribution)
  • CTI (Computer Telehony Integration)
  • DISA (Direct Inward Selection Access)
  • IVR (Interactive Voice Response) che esistono in modalità di accesso vocale o tramite
  • DTMF (Dual Tone Multi Frequency), la tastiera a toni.

D’altro canto io necessitavo di far accedere un servizio da un server remoto, che a sua volta è collegato al suo PBX tramite il protocollo

  • SIP (Session Initiation Protocol), protocollo a livello di applicazione basato su
  • IP (Internet Protocol), e impiegato principalmente in applicazioni
  • VoIP (Voice over IP)

ma l’ingegnere mio collega mi ha detto di farlo su una

  • VPN (Virtual Private Network)

L’alternativa di esporre il servizio su internet?

  • MPC (omissis, su Google non lo trovo…)

mi ha risposto.