Archive for category lavoro

HOWTO: come redirezionare l’output su file e/o su standard output

Quando si usa la console, soprattutto per gli script, è molto utile saper redirezionare l’output su file o su standard output/error. Questo howto è valido per tutti i sistemi *NIX (linux, unix, osx, bsd, etc) basati su standard POSIX.

Ci sono varie redirezioni, vediamo quali:

  1. Redirezionare l’output in un file:
    echo "hello world" > hello.txt
  2. Redirezionare l’output in un file:
    echo "hello world" | tee hello.txt
  3. Per “appendere” (aggiungere in fondo) l’output in un file si usa il doppio “>”:
    echo "hello world" >> hello.txt
  4. Redirezionare lo standard error in un file e mostrare lo standard output (script.py è uno script che produce uno standard error ed uno standard output)
    ./script.py 2> hello.txt
  5. Redirezionare lo standard error e lo standard output in un file:
    ./script.py 2&> hello.txt
  6. Mostrare e redirezionare lo standard error e lo standard output in un file:
    ./script.py 2>&1 hello.txt

Fonte: linux.byexamples.com

Se hai domande e suggerimenti, commenta oppure contattami

, ,

Comments

HOWTO: Come sostituire in disco rotto da un RAID software su linux

Se sei un sysadmin oppure ti piace smanettare con linux + dischi + RAID questo howto ti potrebbe essere molto utile. Se hai un RAID, qualunque tipo esso sia, questo howto ti indica come procedere nel sostituire il disco rotto di un RAID. Ovviamente se un disco si rompe, il RAID può decidere autonomamente di espellerlo da solo. A volte questo non succede e lo si deve fare a mano. Ecco come:

Supponiamo che il disco da rimuovere sia /dev/sda

  1. Manda in stato di fail il disco su tutte le partizioni in cui è coinvolto (qui nell’esempio 3 partizioni):
    mdadm /dev/md0 --fail /dev/sda1
    mdadm /dev/md1 --fail /dev/sda2
    mdadm /dev/md2 --fail /dev/sda3
  2. Attendi il resync (questa operazione può richiedere molto tempo) tramite:
    cat /proc/mdstats
  3. Rimuovi dal RAID il disco rotto:
    mdadm /dev/md0 --remove /dev/sda1
    mdadm /dev/md1 --remove /dev/sda2
    mdadm /dev/md2 --remove /dev/sda3
  4. Estrai il disco /dev/sda
  5. Copia l’MBR (uguale su tutti i dischi) in un file:
    dd if=/dev/sda of=mbr bs=512 count=1
  6. Inserisci il nuovo disco
  7. Copia l’MBR sul nuovo disco appena inserito:
    dd if=mbr of=/dev/sdf
  8. Immetti il nuovo disco nel RAID:
    mdadm /dev/md0 --re-add /dev/sdf1
    mdadm /dev/md1 --re-add /dev/sdf2
    mdadm /dev/md2 --re-add /dev/sdf3
  9. Ora il disco appena inserito prenderà il ruolo di quello rotto.

Se hai suggerimenti, problemi, domande, commenta il post oppure contattami! :)

Autore originale: Lorenzo

, ,

Comments

HOWTO: Configurare VirtualHost su OSX

OSX, come molte distribuzioni linux hanno integrato il webserver Apache. Apache ha centinaia di opzioni e configurazioni disponibili per la gestione di qualsiasi situazione.
Tra queste configurazioni ci sono i VirtualHost, che permettono l’esecuzioni di più siti (www.sito1.com, www.sito2.com) sulla stessa macchina. I siti possono essere suddivisi basandosi sia su nomi differenti sia su IP.
In OSX tutte le configurazioni si trovano dentro la cartella “/etc/apache2/”. I passi da fare per abilitare i VirtualHost sono i seguenti:

  1. Apri un Terminale e digita il comando:
    sudo vim /etc/apache2/httpd.conf
  2. Intorno alla linea 460 c’è questa direttiva
    # Virtual hosts
    #Include /private/etc/apache2/extra/httpd-vhosts.conf

    che dovrà diventare:

    # Virtual hosts
    Include /private/etc/apache2/extra/httpd-vhosts.conf
  3. Il prossimo passo è editare il file con il comando:
    sudo vim /private/etc/apache2/extra/httpd-vhosts.conf
  4. Ora configura il tuo VirtualHost seguendo questa documentazione
  5. Riavvia Apache per fargli rileggere la configurazione. Per fare ciò vai sulle “Preferenze di Sistema -> Condivisione”
  6. Disabilita ed abilita la condivisione Web cliccando sul segno di spunta.
  7. Apri il tuo browser e testa il corretto funzionamento dei VirtualHost

Se hai suggerimenti, correzioni, domande… sai cosa fare! :)

, , ,

Comments

Tiriamo le somme… del 2009

Eccoci qua, come al solito a scrivere l’ultimo post dell’anno. Quoto totalmente tutto quello che ho scritto lo scorso anno. Dunque non sto a ripetere qui quello già detto… mi sento un po’ come Paganini! :P

Quello che vorrei dire in questo post è un po’ più “egoistico” rispetto a quello dello scorso anno. Infatti vorrei fare considerazioni totalemente personali, che mi serviranno poi come appunto.

Le domande sono due:

  1. cosa mi ha portato il 2009?
  2. cosa mi aspetto dal 2010?

Cosa mi ha portato il 2009?
Dei punti che mi ero prefissato lo scorso anno, diciamo che li ho rispettati tutti ad un buon 85% (sono ottimista). Nello specifico il 2009 mi ha fatto capire cose importanti. Si va dall’ambito lavorativo, organizzativo a quello personale e familiare. La cosa importante è la vicinanza alle persone a te care, sia che siano amici, sia che siano familiari perchè sono le uniche persone che ti saranno vicino, solo se tu lo permetterai.
Per quanto riguarda il lavoro, ne sono molto soddisfatto, ma non mi accontento. Un viaggio di qualche tempo fa mi aperto un po’ gli occhi sulla realtà italiana e non, e quello che mi è rimasto è un grande amaro in bocca. Purtroppo in Italia c’è un sistema che NON funziona. Quando parlo di “sistema”, intendo un insieme di cose come scuola, economico, lavoro, civiltà, governo, stato, sociale. Purtroppo tutti questi sottosistemi sono legati tra di loro e non è semplice venirne a capo.
Per quanto riguarda i rapporti interpersonali, non ho nulla da lamentare. I “social network” se utilizzati bene possono darti una grande mano. Sono dei strumenti molto potenti che se sfuggono di mano possono farti del male (non ignorare queste parole).
L’amore è andato alla grande: alti e bassi, ma tutto superabile se si è in due e con la persona giusta! :)
Una cosa che non ho ancora imparato è una migliore organizzazione del tempo.

Cosa mi aspetto dal 2010?
E’ sempre difficile fare un bilancio preventivo. Beh diciamo che come minimo vorrei mantenere tutto quello fatto nel 2009 e fare dei passi in avanti in tutti gli ambiti, soprattuto quello personale e lavorativo. Nel 2010 voglio migliorare la lingua inglese e quella spagnola. Infatti nel 2010 proverò il D.E.L.E. per quanto riguarda lo spagnolo. Per quanto riguarda l’inglese ho intenzione di rafforzarlo prima da autodidatta (come in questi ultimi anni) e poi fare un qualche cosa (ci sto pensando) per migliorarlo.
Il 2010 deve essere anche un anno di svolta per la mia specializzazione in informatica: mi dovrò impegnare per dare una bella sgrossata agli esami e cercare di laurearmi nel 2011.
Per il lavoro, dico solo che non starò ad aspettare la ruota della fortuna che giri nel verso giusto. Ricordati che la fortuna aiuta gli audaci. Non mi vorrei sbilanciare molto, però.Inoltre vorrei rimarcare il mio impegno in AVIS: attualmente sono consigliere della mia comunale e faccio parte della Consulta Giovani Umbria. Vorrei solo che nel 2010 il mio ruolo in queste figure diventasse un po’ più forte.
Infine per quanto riguarda i rapporti personali si tratta sempre di crescere, confrontarsi in maniera costruttiva, scambiarsi idee, opinioni e conoscere gente nuova.

Questo è solo un mio piccolo pensiero. Ci sarebbero anche tantissime altre cose da menzionare, ma per questioni di tempo, spazio e personali non sto qui a elencare. Vorrei concludere con questa immagine per ringraziare tutte quelle persone che mi sono state vicine, mi hanno fatto crescere, mi hanno fatto diventare quel che sono. Inoltre vorrei ringraziare in anticipo tutte quelle persone che conoscerò nel mio futuro e che incroceranno la mia strada.


GRAZIE :)


, ,

Comments

HOWTO: installare mod_wsgi in OSX

Il mod_wsgi è un modulo di Apache per far girare applicazioni Python che supportano l’interfaccia WSGI. A me personalmente è servito per far girare Django su OSX sfruttando il web server Apache.

Segui questi passi per installare mod_wsgi su OSX:

  1. Scarica i sorgenti di mod_wsgi da qui
  2. Decomprimi il tar.gz appena scaricato
  3. Apri il Terminale di OSX ed entra la directory appena decompress
  4. Lancia questa sequenza di comandi:
    ./configure
    make
    sudo make install
  5. Ora edita il file /etc/apache2/httpd.conf (con i permessi di root) ed aggiungi la seguente riga:
    LoadModule wsgi_module     libexec/apache2/mod_wsgi.so
  6. Riavvia Apache con:
    sudo apachectl restart

Ora il tuo apache è pronto per eseguire applicazioni Python con interfaccia WSGI.

Per qualsiasi problema o suggerimento commenta o scrivimi! :)

, , ,

Comments

HOWTO: autenticazione SSH tramite chiave

Già ho parlato di SSH in questo post. Oggi vedrai impostare il tuo client ed il tuo server per accedere in maniera sicura e veloce tramite l’autenticazione con chiave, piuttosto che con una semplice password. L’autenticazione basata su nomeutente e password rende il sistema potenzialmente insicuro per i seguenti motivi:

  • la password può essere indovinata in qualsiasi momento (tramite attacco brute force)
  • la maggior parte degli utenti non guardano il file secure.log o auth.log per vedere gli accessi non autorizzati
  • per default il server SSH ha l’accesso di root abilitato, mettendo a rischio la sicurezza di tutto il sistema

Per rendere più sicura l’autenticazione puoi usare una coppia di chiavi crittografate al posto dell’autenticazione con password. Esistono due tipi di algoritmi per generare le chiavi ssh: RSA (cripta e firma) e DSA (firma solamente). Personalmente consiglio di usare RSA.

Dunque per generare le chiavi digita:

# ssh-keygen -t rsa
Generating public/private rsa key pair.

A questo punto premi invio se non vuoi dare un nome personalizzato alla chiave:

Enter file in which to save the key (/Users/exampleuser/.ssh/id_rsa):

Se vuoi usare l’algoritmo DSA basta specificare “-t DSA”. Ad un certo punto ti verrà chiesto di inserire una passphrase per proteggere la chiave privata:

Enter passphrase (empty for no passphrase):
 Enter same passphrase again:

La scelta di una passphrase dipenda da situazione a situazione. Se non immetterai nessuna passphrase potrai accedere al tuo server direttamente senza dover digitare niente. Questo però comporta se qualcun altro accede alla tua chiave privata oppure ad una copia può entrare senza nessun problema nel server dove è impostata quella chiave. Se invece decidi di proteggerla con una passphrase dovrai digitare ogni volta la password per sbloccare la chiave privata. Per venirti incontro potresti usare un ssh-agent per memorizzare la password del certificato per un tempo finito come ad esempio un’ora, una giornata, al termine della sessione grafica etc.

Appena finita la creazione delle due chiavi le potrai trovare in “/home/tuo_username/.ssh/” per sistemi GNU/Linux oppure “/Users/tuo_username/.ssh/” per sistemi OSX. Ora devi copiare la tua chiave pubblica nel server remoto tramite il seguente comando:

# scp id_rsa.pub username@server.remoto:/home/username/.ssh/authorized_keys

Questo comando sovrascrive il file authorized_keys nel server remoto. Se vuoi aggiungere la tua chiave ad altre già esistenti fa in questo modo:

  1. copia la chiave sul server remoto
  2. # scp id_rsa.pub username@server.remoto:/home/username/.ssh/
  3. loggati sul server remoto
  4. # ssh username@server.remoto
  5. appendi la tua chiave a quelle esistenti
  6. server_remoto# cd .ssh
    server_remoto# cat ip_rsa.pub >> authorized_keys

Ora devi impostare i giusti permessi. Sul server remoto fai

server_remoto# chmod 700 ~/.ssh
server_remoto# chmod 600 ~/.ssh/authorized_keys

A questo punto puoi accedere al tuo server senza dover far uso della password. Se vuoi proteggere il tuo server da attacchi brute force sulle password puoi dire al server ssh di non accettare l’autenticazione ssh.

ATTENZIONE: prima di fare questa operazione assicurati di avere un accesso secondario alla macchina per non rimanere tagliati fuori

Vai sul tuo server ed edita il file “/etc/sshd_config” in modo da avere questa questa direttiva:

PasswordAuthentication no

Fatto ciò riavvia il server ssh per fargli leggere la nuova configurazione.

Fonte: www.unt.net

, ,

Comments

HOWTO: Geek Tool per OSX

In questo post vedrai un’applicativo per OSX molto utile per il monitoraggio della tua macchina o di sistemi remoti. Il programma si chiama Geek Tool e non è altro che un modulo delle preferenze del sistema per OSX (io ho Snow Leopard) che ti visualizza sul tuo desktop una serie di informazioni con l’ausilio di 3 plugins:

  • File plugin: visualizza il contenuto di file. d esempio puoi monitorare il file di log di OSX “/var/log/system.log” oppure ogni altro file nel tuo filesystem
  • Shell mode: per lanciare comandi shell e visualizzare l’output sul desktop. Comandi utili possono essere: df, uptime, date, top. Ovvviamente puoi eseguire anche combinazioni di comandi (grep, awk, sed, etc)
  • Image Mode: puoi mettere sul tuo desktop sia immagini locali che remote. Puoi usare immagini prodotte da MRTG o RRD per controllare consumi di banda, cpu, ram di sistemi remoti.

Inoltre puoi creare anche gruppi di widget per abilitarli o meno. Ad esempio puoi creare il gruppo “Default” per i tuoi widget che usi spesso e puoi fare anche il gruppo “Work” per usare questi strumenti per il tuo lavoro.

L’immagine sottostante è il mio desktop.

geek_tool_diegor

Come puoi vedere ci sono delle informazioni. Ci sono tre zone del desktop:

  1. la parte superiore è l’esecuzione di un comando da shell: “top -l1 -n 16″
  2. nella parte centrale ci sono dei grafici dell’applicazione MRTG ed il mio avatar :)
  3. nella parte inferiore è il contenuto del file “/var/log/system.log”

Ovviamente puoi importare tutti i widget che ti vengono in mente. Le uniche due limitazioni sono lo spazio del desktop e la tua fantasia! :)

, , , , ,

Comments

HOWTO: Snow Leopard + django + postgresql + psycopg2

Appena installato Snow Leopard, una delle prime applicazioni che ho dovuto installare sono quelle necessarie per il lavoro, ovvero:

  1. Django
  2. Postgresql
  3. Python
  4. Psycopg2

Snow Leopard ha sia Pyhon 2.4, 2.5 che il 2.6, ma per default lui usa il 2.6 (giustissimo). Dunque il python non l’ho dovuto installare: uso il suo di default (che è compilato a 64bit).

La primncipale limitazioni dell’integrazione tra python, psycopg2 (ed in generale dei suoi moduli) ed altre applicazioni è che devono essere compilate tutte alla stessa maniera, o 32 o 64 bit per non incappare in errori strani di utilizzo (tipo: “Symbol not found: _PQbackendPID“).

Il segreto è installarsi tutto dai sorgenti e compilarsi il tutto. Fortunatamente non bisogna fare tutto a mano, ma ci sono i macports. É un progetto open-source che si occupa di compilare, installare ed aggiornare su OSX tutte le applicazioni X11, aqua ed open-source.

Dunque per avere Django + Postgresql + Python + Psycopg2 funzionante segui queste istruzioni:

  1. installa i macports
  2. da terminale digita: “sudo ports install postgresql84-server”
  3. segui le istruzioni dopo l’installazione di postgresql
  4. installa psycopg digitando: “sudo easy_install psycopg2″
  5. installa django1.1 scaricando i sorgenti dal sito

Seguendo questi semplici passi avrai la tua piattaforma in django e postgres per sviluppare le tue web-application.

Come al solito se hai problemi e/o suggerimenti, commenta oppure contattami

, ,

Comments

HOWTO: tunneling con ssh

Il tunnel ssh è un modo sicuro per raggiungere un host che normalmente non potrebbe essere raggiunto. Il metodo sfrutta una canale (tunnel) sicuro tra la tua macchina e la macchina remota sfruttando però un altro server che farà da ponte. Esempi: se vuoi raggiungere una macchina dietro un firewall o dietro NAT, oppure se vuoi usare MSN da una rete aziendale che vieta l’uso dell’instant messenger.

Ci sono fondamentalmente due modi per effettuare il tunnel:

  • forwarding della porta locale
  • forwardind della porta remota

Forwarding della porta locale

Con questo metodo puoi accedere a porte su host che non puoi raggiungere direttamente facendo passare il traffico in una connessione SSH ad un host pubblico (che a sua volta deve poter raggiungere direttamente l’host finale). L’esempio più classico è di voler raggiunere una macchina che si trova dietro NAT sfruttando il server che “natta” l’host finale. L’immagine sottostante può schiarirti ulteriormente le idee! :)

local_tunnel_sshForwarding della porta locale

Per raggiungere ad esempio il webserver che è in esecuzione su OS9 (dell’immagine) devi aprire una connessione SSH verso il firewall dirigendo il tunnel secondo le tue esigenze, come ad esempio effettuare il forward di tutte le richieste fatte sulla porta locale 8080 alla porta 80 del server web che si trova su OS9. Il comando che dovrai eseguire sarà il seguente:

ssh -N -L 8080:os9.server.lan:80 user@firewall.company.com

che letteralmente significa: forwarda la porta locale 8080 a firewall.company.com e digli di mandare il traffico a os9.server.lan sulla porta 80.
I paramentri del comando ssh sono:

  • -N: di a ssh di creare il tunnel senza creare una shell sull’host
  • -L: specifica il tipo di tunneling (locale)
  • 8080: porta locale da usare
  • os9.server.lan: è l’host accessibile dal firewall
  • 80: è la porta da raggiungere su os9.server.lan
  • user: utente per la connessione a ssh
  • firewall.company.com: server publico da usare come rampa di lancio

Ora non resta che connetterti con il tuo browser web al http://127.0.0.1:8080 per raggiungere la porta 80 di os9.server.lan.

Forwarding della porta remota

Questo approccio ti permette di effettuare il forward di connessioni fatte a un host remoto, ad un host della tua rete. Un esempio è che vorresti rendere visibile all’esterno una macchina della tua rete privata. L’immagine sottostante ti aiuta a capire lo scenario:

remote_tunnel_ssh

Forwarding della porta remota

Per farti capire meglio: hai sviluppato una nuova web application in un server di sviluppo che è presente nella tua rete privata. Se vuoi far vedere questa web application ai tuoi clienti devi aprire un tunnel ssh dalla macchina che può raggiungere entrambe i server ovvero il server pubblico che i tuoi clieti devono contattare ed il tuo server di sviluppo.
Il comando da lanciare sarà il seguente:

ssh -N -R 8080:os9.server.lan:80 user@server.company.com

che tradotto significa: “Di a server.company.com di effettuare il forward della porta 8080 a me, dando il traffico a os9.server.lan sulla porta 80.
I paramentri del comando ssh sono:

  • -N: di a ssh di creare il tunnel senza creare una shell sull’host
  • -R: specifica il tipo di tunneling (remoto)
  • 8080: porta locale da usare
  • os9.server.lan: è l’host della tua lan
  • 80: è la porta da raggiungere su os9.server.lan
  • user: utente per la connessione a ssh
  • firewall.company.com: server publico che i tuoi clienti contatteranno

Ora devi dire ai tuoi clienti di digitare nel proprio browser: http://server.company.com:8080/

Risponderà così la porta 80 di OS9, dove è la tua web application. Ti vorrei ricordare che puoi ridirigere qualsiasi tipo di porta, non solo la 80.

Buon tunneling! :)

Fonte: http://projects.tynsoe.org/en/stm/doc.php

, ,

Comments

HOWTO: Wake On Lan (WOL)

Il Wake On Lan (WOL) è un protocollo standard multipiattaforma e indipendente dal sistema operativo. E’ una di quelle cose che senti sempre nominare, che ne senti parlare ma che mai hai utilizzato.

A me si è rivelato molto utile; ti racconto la mia piccola avventura. Per un esame universitario devo fare un’applicazione in OpenCL su architettura NVIDIA. La NVIDIA ha però rilasciato i driver OpenCL solo per linux. Guarda caso ho una macchina con una 8600GT supportata da OpenCL. Tenerla a casa sempre accesa sarebbe stato un grande spreco di corrente, anche perchè è una macchina con molte ventole (dunque anche il rumore sarebbe stato assordante). Ho così posizionato la mia macchina in una cantina e portato un cavo di rete fino a dentro casa a cui ho connesso un router WRT-54GL con DD-WRT. Fatto ciò ho reso pubblica la mia macchina all’esterno in modo da connetermi in ssh. La macchina anche se in cantina, non può stare sempre accesa a non fare niente. Dunque mi è venuto in mente questo protocollo: il WOL. Il Wake On Lan non fa altro che accedere un computer connesso ad una rete. Gli unici prerequisiti sono i seguenti:

  • la scheda di rete deve supportare il wake on lan
  • il computer che deve accendere deve essere sulla stessa rete del computer da accendere (anche wifi)
  • conoscere il mac address (indirizzo fisico della scheda di rete) del computer da accendere

Lo schema della mia rete è il seguente (scusa la poca chiarezza dello schema):

mac book pro|-)  wifi  (-|router WRT-54GL|----------|macchina da accendere
|
|
INTERNET

Il MBP è connesso in wifi al router WRT che a sua volta è connesso ad internet ed alla macchina da accendere. Per accendere il computer da dentro la rete ho usato un comodissimo client per OSX scaricabile da questo link. L’utilizzo è molto semplice: aggiungere il mac address della macchina e premere il tasto wake! :) Dopo appena 30 secondi ho la macchina up!

Il problema era accendere il computer da remoto. Semplice! DD-WRT ha al suo interno il client WOL: dunque basta connettersi al router ed accendere la macchina direttamente dalla pagina web del router. Ovviamente appena accesa accedo in ssh alla macchina per lavorarci sopra ed alla fine spegnerla! :)

Se hai domande o suggerimenti sul WOL, contattami! :)

, ,

Comments