venerdì 14 agosto 2015

Analisi di un testo [AWK]

Salve!

È da un po' che non scrivo sul blog. Purtroppo d'estate è sempre così. E poi considerando l'eccezionalità del caldo di quest'anno non avrei dovuto scrivere almeno fino al quindici settembre. Dai, speriamo che finisca presto e che ritorni prima di subito il freddo.
Intanto vi dico che lo sviluppo di Lubit 6 prosegue. Si spera che esca per la fine di settembre. Prossimamente vi anticiperemo qualcosa.

Vabbe', oggi voglio semplicemente pubblicare un piccolo script in awk che, dandogli in pasto un testo, vi ritorna il numero totale di righe, di parole, di caratteri, di consonanti e il numero totale di ciascuna vocale.

 
Il testo
Output
Lo script:

#!/usr/bin/awk -f
#Bit3Lux
#count.awk
#Numero di ciascuna vocale, numero di righe, numero di parole,
#Numero di caratteri, numero di consonanti.

BEGIN {
  print "\n\tREPORT\n"

}

{
 Numero_parole += NF
 Numero_caratteri += length
 A += gsub (/[Aaà]/,"*", $0)
 E += gsub (/[EÈeèé]/,"*", $0)
 I += gsub (/[Iiì]/,"*", $0)
 O += gsub (/[Ooò]/,"*", $0)
 U += gsub (/[Uuù]/,"*", $0)
 vocali = A+E+I+O+U

}

END {
  print "\n\tNumero di righe: " NR
  print "\tNumero di parole: " Numero_parole
  print "\tNumero di caratteri: " Numero_caratteri
  print "\tNumero di consonanti: " Numero_caratteri - vocali
  print "\tNumero vocali: " vocali
  print "\tVocale a: " A
  print "\tVocale e: " E
  print "\tVocale i: " I
  print "\tVocale o : " O
  print "\tVocale u: " U"\n"
   
}

Insomma è tutto estremamente semplice, è stato un modo per rompere il ghiaccio (si fa per dire). E poi, ora che guardo meglio, c'è anche un piccolo errore, scopritelo voi... ;)

Per quanto riguarda il blog, bollono in pentola tante idee e tante novità. Si spera che al più presto si possa iniziare con un corso di Sistema linux, un corso su Sed e tanti esercizi su bash, awk, python, lua e... insomma si prospetta un autunno caldissimo (no aspetta, meglio freddissimo :D)

Alla prossima!

lunedì 29 giugno 2015

Estrarre indirizzi e-mail da un file di testo [bash]

Salve!

Non so voi, ma se devo scrivere qualsiasi cosa uso sempre l'editor di testo.

Stamattina ho scritto una lettera lunghissima contenente molti indirizzi e-mail.

Allora mi sono chiesto, c'è un modo per estrarre dalla lettera solo gli indirizzi e-mail? E così ho iniziato a cimentarmi con perl, awk, grep, espressioni regolari e altre diavolerie affini. Tutte cose interessanti, intendiamoci, ma sinceramente impresentabili, e poi diventa difficile spiegare quelle cose in un post, considerando anche che in serata è venuto a farmi visita l'anticiclone africano.

Alla fine mi sono riversato su bash, e  devo dire che c'è un sistema veramente semplice per compiere l'operazione di cui sopra.

Immaginiamo di voler estrapolare gli indirizzi email dal seguente testo: (scusate per l'esempio, ma la mia fantasia è inversamente proporzionale al caldo)


ciao Luigi, mi scrivi il tuo indirizzo email?

Il mio indirizzo è il seguente bit3lux@gmail.com

Altri indirizzi messi alla ca**o di cane ciao.birra@gmail.com, ciao.ciao@yahoo.it

come.stai_bene@gmail.com ######## lubit_linux-for_ever@forzalinux.com ########

etc. 


Lo script, che può essere lanciato semplicemente da riga di comando, è il seguente:

for i in $(cat dati.txt); do echo $i | grep "@"; done


Ecco il risultato:



Alla prossima!

martedì 16 giugno 2015

Costruiti per rompersi

Poniamo che esista una multinazionale, dal nome Mistoft, che produce software proprietario...

La Mistoft vende pere? No, vende software proprietario. E il software si consuma? Niente affatto, il software può essere definito "immortale". E i clienti della Mistoft sono infiniti? Sono tanti, ma non infiniti. E allora, se il software non si consuma, come accade per le pere, e i clienti non sono infiniti, come fa la Mistoft, dopo aver venduto il suo sistema operativo a tutti i suoi clienti, a fare nuovi profitti? E qui entra in gioco la obsolescenza programmata. 

Cos'è la obsolescenza programmata?


È una pratica attraverso cui ti convinco che ciò che hai comprato è già vecchio e ti costringo a comprarne uno nuovo instillandoti falsi bisogni. E quello che compri è quasi sempre identico a ciò che già hai. Quindi butti una cosa nuova per comprarne una identica, ma con il vestitino diverso.

E allora mi viene da pensare: "È difficile spiegare come l'assurdo possa lentamente infiltrarsi nella realtà, fino a sembrare del tutto normale." ¹


¹ Dylan Dog, Albo 7, La zona del crepuscolo, 1987



domenica 7 giugno 2015

Lubit, un sistema per tutti !


Che Lubit sia un sistema operativo semplice, stabile e veloce non è un novità per chi segue questo blog, quindi il titolo di questo post deve avere anche un altro significato , anzi diciamo che ha doppio significato.
L'immagine in alto rappresenta chiaramente l'argomento che andrò a trattare in questo articolo, si tratta di una installazione centralizzata del sistema che "serve" più client.
Andiamo quindi subito a vedere come Lubit può essere un sistema per tutti.

Cos'è un Terminal Server
Siamo abituati a pensare i servers come web server, file server, print server e così via, adesso invece andremo a realizzare un OS Server o per meglio dire un Terminal Server.

Lo scopo di questa soluzione è utilizzare meglio le risorse e la capacità di calcolo di un PC mettendoli a disposizione di PC datati, anche senza memoria di massa , che faranno da semplici Thin-Client connesi in rete locale.
Per intenderci andremo a realizzare quello che accade con i terminali stupidi collegati a server unix, chi ha qualche annetto se li ricorderà ;)
Il sistema operativo sarà installato solo sul server e ogni client, collegato alla rete LAN, farà il boot da rete e  il login come se si operasse direttamente sul Pc server.

Come funziona.
Si parte da una installazione di Lubit su di una macchina che abbia la capacità e le risorse per gestire con tranquillità la multiutenza visto che permetterà di far lavorare più utenti contemporaneamente, tutto il tutorial si basa sulla versione a 32 bit per assicurare il funzionamento anche con i client un pò datati.
Il secondo requisito per realizzare quanto detto è un sistema che permetta ai client di avviarsi prelevando il sistema operativo da remoto, questa funzione si chiama PXE.
Avrete notato che la maggior parte di pc ha la possibilità in fase di boot di scegliere se avviarsi da una memoria locale o da rete, beh questa è proprio la funzione che ci serve.
Il PXE dev'essere installato e configurato sul server, questo si compone di un DHCP server e di un server TFTP (Trivial File Transfer Protocol).
Ricordo velocemente che il DHCP server (Dynamic Host Configuration Protocol), come dice il nome, è un protocollo di rete che permette di gestire le connessioni degli host assegnando ai client che ne fanno richiesta tutti i parametri di rete, per es. indirizzo ip, subnetmask, DNS e altri parametri specifici per il PXE.
In questo caso la prima cosa che fà il DHCP è fornire ai client, oltre ai parametri di rete, l'indirizzo TFTP dove risiedono i files di sistema da caricare.
Il TFTP server è una versione semplificata di FTP che permette di rendere disponibili dei files in rete, non ha necessità di autenticazione.
Quindi avendo installato e configurato questi due componenti abbiamo la possibilità di accettare delle richieste DHCP, riconoscere e fornire tutti i dati ai client per il boot, e inoltre rendiamo disponibile agli stessi client i files di sistema da leggere tramite TFTP.

Oltre a questi due componenti andremo anche a generare i files di sistema per i client.

Dopo aver spiegato, anche se brevemente, come funziona il tutto andiamo alla parte pratica.


Realizziamo il nostro Terminal Server!
Potremmo installare tutte le funzioni che ho descritto prima a mano singolarmente ma  esiste una soluzione rapida e semplice per fare tutto in modo quasi automatico, e siccome quel che conta è il risultato andremo spediti per la via più breve.


Per installare tutto quanto in un colpo solo basta digitare da terminale:


sudo apt-get install ltsp-server-standalone openssh-server



fatto questo abbiamo pronti tutti i servizi che ho elencato in precedenza, naturalmente ora non resta che fare un pò di configurazione.

Innanzitutto partiamo dalla configurazione dei parametri di rete.
Abbiamo appena installato un server dhcp nel nostro PC e quindi, cosa molto importante, se il router ha il servizio dhcp attivo è assolutamente necessario disattivarlo!!!
Configuriamo adesso l'interfaccia di rete del server che garantirà il servizio, dobbiamo configurarla con un ip statico a nosto piacimento, l'unica raccomandazine è di utilizzare ip privati.

Per esempio l'indirizzo ip privato per il server che utilizzerò in questo articolo è 192.168.1.3 netmask 255.255.255.0
Editiamo il file che imposta i parametri per le interfacce di rete:


sudo leafpad /etc/network/interface


inserendo le seguenti righe


auto eth0

iface eth0 inet static

        address 192.168.1.3

        netmask 255.255.255.0

        gateway 192.168.1.1



Il router invece ha indirizzo 192.168.1.1 netmask 255.255.255.0 e garantirà l'accesso ad internet per tutti i PC.


A questo punto cominciamo con il creare l'ambiente di sistema che verrà letto dai client, procediamo da terminale digitando:


sudo ltsp-build-client


ora potete prendere un caffè nel frattempo che viene completata l'operazione (ci vorrà un pò, circa 20 minuti), il caffè non è indispensabile per la riuscita quindi potete optare anche per altro ;)

Finito questo passo, è il momento di configurare i servizi.
Cominciamo con il DHCP, il file da modificare si trova in /etc/ltsp ed ha nome dhcpd.conf , quindi da terminale:



sudo leafpad /etc/ltsp/dhcpd.conf


(chi preferisce un editor old style testuale può usare nano al posto di leafpad)

ci troviamo adesso nei parametri di configurazione che dobbiamo personalizzare in base alle nostre necessità, in particolar modo dobbiamo modificare gli indirizzi di rete del server e il range degli ip a disposizione.

Riporto qui il file già pronto per configurae il server così da rendere piu' facile la modifica, basta copiare ;)



# Default LTSP dhcpd.conf config file.

#



authoritative;



subnet 192.168.1.0 netmask 255.255.255.0 {

    range 192.168.1.20 192.168.1.250;

    option domain-name "lubit.local";

    option domain-name-servers 192.168.1.3;

    option broadcast-address 192.168.1.255;

    option routers 192.168.1.1;

#    next-server 192.168.1.1;

#    get-lease-hostnames true;

    option subnet-mask 255.255.255.0;

    option root-path "/opt/ltsp/i386";

    if substring( option vendor-class-identifier, 0, 9 ) = "PXEClient" {

        filename "/ltsp/i386/pxelinux.0";

    } else {

        filename "/ltsp/i386/nbi.img";

    }
}


Come si può vedere ho impostato la lan 192.168.1.0 e subnet 255.255.255.0 dell' ip 192.168.1.3 che è l'indirizzo dell'interfaccia del server, impostato il range di ip disponibili dal 20 al 250, ho dato un nome al dominio e specificato il broadcast, il resto potete lasciarlo così com'è.

Specifichiamo che il server dhcp deve stare in ascolto sull'interfaccio eth0 editando il file


sudo leafpad /etc/init.d/isc-dhcp-server


modifichiamo le variabili


DHCPD_CONF=/etc/ltsp/dhcpd.conf 

INTERFACES="eth0"


A questo punto aggiorniamo le chiavi ssh:


sudo ltsp­-update­-sshkeys


generiamo l'immagine del file di sistema che verrà letto dai client


sudo lstp-update-image


e riavviamo il server DHCP:


sudo /etc/init.d/isc-dhcp-server restart


Il gioco è fatto!

Ora da Lubit Control Panel creiamo un utente per ogni client, questo passo non è indispensabile ma è lo scopo di tutto il lavoro che abbiamo fatto fino ad ora :)

Colleghiamo i client alla rete e avviamo il boot da network.

Se il vosto client è davvero vechiotto o molto particolare e non supporta il boot da rete a, link http://rom-o-matic.net/gpxe/gpxe-git/gpxe.git/contrib/rom-o-matic/ potete creare un floppy disk, chiavetta usb o cd per risolvere .


Ok, sicuramente a questo punto vi trovate davanti al login di Ubuntu, tranquilli è solo l'avvio ... il resto è solo Lubit!

E' tutto, buon divertimento, alla prossima.

Saluti!