INSTALLAZIONE DI BASE DI LINUX GENTOO

gentoo-transparent

Questa guida l’ho dedicata a tutti coloro che vogliono installare questo splendido e arduo sistema operativo ovvero: Gentoo Linux. Questo sistema ha un gestore di pacchetti molto potente totalmente scritto in Python e che lavora su script bash detti Ebuild. Questo gestore dei pacchetti su Gentoo Linux è chiamato “portage”, la sua caratteristica principale è l’installazione dei software a partire infatti dalla compilazione dei loro sorgenti. Ma vedremo questi dettagli una volta installato il sistema operativo di base. Suppongo che chi legga questo tutorial sia già abbastanza esperto di sistemi GNU/Linux, altrimenti lasci perdere la lettura. La .iso di gentoo è possibile scaricarla da www.gentoo.org sceglietevi la ISO più adatta e scrivetela su un CD/DVD.

 

  • AVVIO DEL CD E INSTALLAZIONE

 

Il CD una volta avviato vi chiede di inserire la boot image! È pur ovvio anche su BackTrack 5 lo chiede, qui noi inseriremo semplicemente gentoo, una volta fatto ciò vi chiederà che configurazione di tastiera possedete: ovvero se è statunitense o italiana o cirillica (tastiere per la russia ma se siete nel mio blog ovviamente siete italiani). Una volta che avete scelto l’opzione 21 avrete la shell della livecd con il cursore che lampeggia: livecd~#. Ok, una volta che siete in questa modalità cosa dobbiamo fare? Iniziamo a partizionare il disco rigido, io qui farò una configurazione standard che potrete trovare anche nell’handbook di Gentoo:

 

 

 

 

Partizione

Filesystem

Grandezza

Utilizzo

/dev/sda1

ext2

+32MB

boot

/dev/sda2

swap

+512MB

swap

/dev/sda3

ext3

[resto spazio su disco]

root

 

Perciò una volta compreso come partizionare il nostro buono e caro disco rigido, per poterlo formattare usiamo fdisk. Da qui infatti digitiamo fdisk /dev/sda senza alcun valore numerico. L’output di fdisk sarà:

 

Command (m for help):

 

Per vedere se abbiamo altre partizioni presenti sul disco digitiamo p, se troviamo partizioni possiamo eliminarle direttamente con d {delete}. Rimosse tutte le partizioni iniziamo a creare quelle che ci interessano, vediamo come:

 

Command (m for help): n
Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3876, default 1): (Premere Enter o invio)
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-3876, default 3876): +32M
Questa sarà la partizione di boot, proseguiamo con quella di swap:

Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (1-3876, default 1): (Premere Enter o invio)
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-3876, default 3876): +512M
Creata la partizione swap che sarebbe quella per la memoria virtuale, bisogna creare l'ultima che è quella di root “forse la più importante” perché inseriamo al suo interno il vero e proprio sistema operativo. 

Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (1-3876, default 1): (Premere Enter o invio)
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-3876, default 3876): (Premere Enter o invio)

Perfetto, una volta partizionato il disco digitare w, per apportare le nostre modifiche! 
Finita la preparazione del disco ora dobbiamo dire a Gentoo che estensioni sono questi /dev/sdaN(n sta per numero). Perciò digitiamo nell'ordine...

mkfs.ext2 /dev/sda1
mkfs.ext3 /dev/sda3
mkswap /dev/sda2 && swapon /dev/sda2

Tranquilli :-P niente paura, ora per i meno guru di GNU/Linux vi spiego esattamente cosa sono questi comandi :-). Il comando mkfs significa MakeFileSystem e per /dev/sda1 e /dev/sda3 ho scelto il filesystem ext3 e ext2, ext in Linux vuol dire Extended file system, questo tipo di file system è il primissimo filesystem che ebbe Linux. Fu sviluppato da Rémy Card un noto sviluppatore di software che contribuì con l'evoluzione del kernel, la scelta per cui Card creò l'ext fu proprio per rimediare a dei limiti al filesystem MINIX. L'ext2 è il vero e proprio filesystem di Linux ma non possiede il supporto per il metadata journaling, infatti questa estensione è un po' più lenta dell'ext3 che sarebbe la versione journaled del filesystem ext2, fornisce il metadata journaling per un veloce recupero dei dati in aggiunta ad altre caratteristiche di journaling avanzate come full data e ordered data journaling. Ritornando quindi al mkfs(makefilesystem) mkfs.ext2 /dev/sda2 e mkfs.ext3 /dev/sda3 diciamo al kernel linux che /dev/sda2 e /dev/sda3 avranno come filesystem l'ext3 per /dev/sda3 e ext2 per /dev/sda2. L'mkswap invece significa semplicemente make swap partition, ovvero la memoria virtuale. 
Questo comando unito al comando swap(on) da notare le parentesi, dirà al kernel Linux che /dev/sda2 sarà una partizione dedicata alla memoria virtuale e swapON attiverà questa partizione. La swap è una RAM aggiuntiva infatti usata molto spesso da Linux per via del multitasking e multiusers. Ok! Una volta fatto ciò il disco l'abbiamo partizionato e abbiamo compreso “abbastanza bene” il significato dei due filesystem, per chi necessita di una maggiore spiegazione mi contattasse sull'email personale :-). Come detto ora che le partizioni e la swap sono state settate e di conseguenza hanno un filesystem proprio, è il momento di montarle! Yeah! Vediamo tramite il comando mount come fare quest'operazione, monteremo {come mostrato qui di seguito} la partizione di /root e successivamente quella di /boot:
mount /dev/sda3 /mnt/gentoo /* vi ricordo che qui montiamo nella partizione /dev/sda3 tutto ciò che conterrà la directory gentoo in /mnt */
mkdir /mnt/gentoo/boot /* creiamo una directory dedicata al boot */
mount /dev/sda1 /mnt/gentoo/boot /* montiamo nella partizione /dev/sda1 la directory boot! */
È anche necessario montare il filesystem proc, ma voi vi domanderete cos'è questo filesystem? E io innanzitutto vi correggo...Il filesystem vero viene definito come procfs e non proc e significa process file system. Questo filesystem è uno pseudo-filesystem e accede alle informazioni legate ai processi forniti dal kernel Linux e procfs non occupa spazio sul disco rigido e il nome che spesso gli si da {ergo /proc filesystem} è legato alla directory in cui esso “solitamente” è contenuto! Bien, una volta fatto tutto ciò è giunto il momento di installare gli stage e il gestore di pacchetti. Dirigiamoci con il comando cd nella directory /mnt/gentoo. Da qui scarichiamo il pacchetto .tar.bz2 dello stage dal sito MIRROR.SWITCH.CH che per me sarà questo: STAGE-i686
Quest'operazione la potete fare con links che è una specie di browser web a riga di comando. Una volta scaricato il pacchetto estraiamolo con il comando tar jxvf stage*.tar.bz2, finita l'estrazione di tutti i file, dobbiamo scaricare la versione di portage sempre dal sito mirror.switch.ch e portage lo troveremo in questa directory del server PORTAGE. Scaricato il pacchetto bisogna estrarlo in /mnt/gentoo/usr perciò miglior cosa è andare in quella directory e scaricarlo in quella directory, poi sempre con il comando tar jxvf portage*.tar.bz2 e estrarlo. Fatta l'estrazione di portage, si passa alla fase successiva il chroot! Il chroot è l'abbreviazione di change root, infatti indica una operazione che consiste nel cambiare la directory di riferimento dei processi che sono in esecuzione corrente e per i processi generati da questi ultimi. Iniziamo però a selezionare i mirror per i codici sorgenti futuri, vi consiglio un mirror rapido e non uno che assomiglia a una tartaruga zoppa. La scelta dei mirror sarà possibile effettuarla con lo strumento mirrorselect che fornisce anche un'interfaccia grafica per selezionare i vari mirror, il comando quindi da usare è:
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
E successivamente per selezionare la variabile SYNC di make.conf che contiene il server rsync che si utilizza all'aggiornamento di Portage, ovverosia gli ebuild e i vari script bash. Per selezionare i mirror rsync, lo strumento è sempre mirrorselect e la istruzione da dare in pasto al prompt di Gentoo sarà molto simile alla precedente:
mirrorselect -i -r -o >> /mnt/gentoo/etc/portage/make.conf
Una volta fatte queste due operazioni...bisogna copiare le informazioni del DNS, in /etc/resolv.conf. Questa azione da parte nostra fa si che la rete funzioni ancora dopo essere entrati nel nuovo ambiente con CHROOT...infatti /etc/resolv.conf contiene i nameserver per la rete LAN, per fare questo, scriviamo:
cp -L /etc/resolv.conf /mnt/gentoo/etc/
L'opzione “-L” ci assicura che non copierà un link simbolico nella directory di destinazione. ALT!Ancora un'ultima cosa prima di entrare nel nuovo ambiente [ve la sto facendo sudare 3:D mwhahaha, lol] bisogna montare il filesystem procfs e tramite bind i filesystem /dev e /sys. Per fare questo basta scrivere:
mount -t proc none /mnt/gentoo/proc
mount –rbind /sys /mnt/gentoo/sys
mount –rbind /dev /mnt/gentoo/dev
E fatto ciò se non vi vengono fuori strani errori dovuti forse dal digitare in fretta e furia, siamo finalmente pronti per eseguire il famosissimo CHROOT! Questo “processo” chiamiamolo così è diviso in tre parti nel sistema operativo Gentoo Linux...
  1. Si cambia root, da / (sul supporto di installazione) a /mnt/gentoo (creata precedentemente) usando proprio chroot.
  2. Si crea un nuovo ambiente usando env-update, il quale inizializza le variabili del nuovo ambiente.
  3. Si caricano le variabili precedentemente create nella memoria con source.
I comandi che dovrete scrivere sono i seguenti:
chroot /mnt/gentoo /bin/bash

env-update

>> Regenerating /etc/ld.so.cache...

source /etc/profile

export PS1="(chroot) $PS1"
E il risultato deve essere all'incirca questo: (chroot)livecd~#. Benissimo! Da adesso si è dentro Gentoo Linux! Siete soddisfatti? Se si continuate a leggere che non è finita :-D altrimenti uscite dal mio blog {super-lol}. Bene, ora che siamo entrati nel nuovo ambiente...ehm, cosa bisogna fare? ...Ah si, giusto! Aggiornare portage. Allora, per aggiornare portage vi dico che il tool con cui portage comunica per l'installazione/rimozione/aggiornamento dei software e pacchetti vari è emerge. Anche questo come detto all'incipit della lezione è scritto in Python [se non ricordo male] è piuttosto complesso e presenta molte opzioni! U.U Quindi tramite emerge diamo il comando: emerge --sync(se siete dietro un terminale lento date emerge --sync --quiet, l'opzione --quiet è studiata proprio per omettere l'output) invece se siete dietro un firewall non c'è problema emerge-webrsyn e vi scarica un'immagine di portage completa. Ormai emerge è anche incluso nelle livecd che stanno allegate a Linux Pro o Linux Magazine... Dopo l'aggiornamento di portage e di tutti i fronzoli che usa, dobbiamo scegliere un profilo adatto. Il profilo? Si, il profilo in Gentoo è una parte molto importante, non solo perché specifica i valori predefiniti delle CFLAGS e della variabile USE ma anche perché posiziona il sistema all'interno di un certo intervallo di versioni di pacchetti. Tale profilo viene aggiornato sempre da sviluppatori Gentoo. Tanto tempo fa questo non poteva essere configurato da parte dell'utente e quindi era “protetto”. Ora è possibile cambiare e visualizzare che profili offre il nostro sistema Gentoo Linux tramite il comando eselect profile list. Da qui una volta scelto il profilo più adatto scrivete eselect profile set{numero_del_profilo}. Per configurare la flag USE possiamo vedere le flag disponibile tramite il comando: less /usr/portage/profiles/use.desc (per uscire basta premere 'q' e per muoversi ci sono le freccette). Per configurare invece subito le flag USE, dobbiamo editare tramite l'editor nano il file posto in /etc/portage/make.conf con il comando: nano -w /etc/portage/make.conf, se volete configurare un sistema basato su Gnome o Fluxbox con supporto DVD, ALSA e masterizzatore CD e DVD bisogna scrivereUSE=”x11-wm/fluxbox -gnome -kde truetype vim-syntax dvd alsa cdr dvdr” oppure USE="-qt3 -qt4 -arts -kde X dbus gtk gnome hal alsa dvd dvdr cdr ".  Bene! B-) ora non sarà il caso di configurare il caro e buon kernel? Ma certo! :-D iniziamo ad abilitare le informazioni sul fuso orario di Roma, Torino o quello che è tramite i comandi:
ls /usr/share/zoneinfo

cp /usr/share/zoneinfo/Europe/[vostra_città] /etc/localtime

echo "Europe/[vostra_città]" > /etc/timezone
Ed ora siamo pronti per l'installazione del kernel Linux! Il kernel come ben si sa gestisce le risorse hardware (CPU, memoria e periferiche) e dal multitasking in poi, il kernel ha potuto sfruttare le risorse dell'hardware in modo tale da poter gestire la memoria e la modalità protetta. In parole povere il Kernel Linux è capace di disattivare temporaneamente alcune istruzioni e l'accesso ad alcune locazioni di memoria fisica! Ma qui farò in caso una lezione a parte. Comunque! Dicevamo che dobbiamo installare il kernel, iniziamo a digitare tramite tastiera il comando: emerge gentoo-sources, infatti finita l'installazione del kernel se digitiamo un ls -l alla directory /usr/src/linux Gentoo darà come risultato il seguente output:
ls -l /usr/src/linux
lrwxrwxrwx    1 root     root           5 Feb 13 15:51 /usr/src/linux -> linux-[versione_kernel]
Da qui, decidete...compiliamo il kernel o usiamo genkernel? Ma che importaaaaaaaaaaaa io vi dò tutte e due le soluzioni! :-D
  • CASO 1: CONFIGURAZIONE MANUALE
La configurazione manuale del kernel è la parte più difficile che un utente GNU/Linux incontra, però tramite il software pciutils diventa molto meno complessa ;-). Entriamo nella directory dov'è situato il kernel e apriamo il menuconfig come? Semplice:
cd /usr/src/linux
make menuconfig
Vengono visualizzate delle scelte di configurazione fate la vostra configurazione e una volta terminata facciamo Exit e salva sullo stesso file. 
  • COMPILAZIONE E INSTALLAZIONE
Ora che abbiamo configurato il nostro kernel, dobbiamo compilare il tutto con il comando make && make modules_install. A compilazione terminata è necessario copiare l'immagine del kernel nella directory /boot altrimenti...il bootloader chi fa avviare? Per copiare l'immagine diamo un bel:
cp arch/x86/boot/bzImage /boot/kernel[TAB]
Per l'autocompletamento e dire che versione del kernel abbiamo! :-)
  • CASO 2: CONFIGURAZIONE TRAMITE GENKERNEL
L'altro modo per installare il kernel in modo da non poterci “sbagliare” è molto retorica questa considerazione... Diamo la compilazione del kernel in pasto al software genkernel, ma prima installiamolo con il comando: emerge genkernel. Installazione completata? Ok! Compilare il sorgente del kernel con il comando: genkernel all. È importante sapere che se non si usano ext2 o ext3 come filesystem potrebbe essere necessario configurare manualmente il kernel usando genkernel --menuconfig all e aggiungere il supporto per il filesystem scelto nel kernel (cioè non come modulo) {ergo la compilazione tramite genkernel è inutile come uno scolapasta senza fori d'uscita U.U}. Comunque...una volta che abbiamo compilato questo kernel con genkernel viene creato un kernel completo di moduli e ram disk iniziale (initramfs) segnandoci la versione del kernel e l'initramfs diamo un bel: ls /boot/kernel* /boot/initramfs*. Terminato anche il caso 2 di configurazione del kernel riprendiamo l'installazione di Gentoo con il successivo passo la configurazione del sistema! [sembra un film dell'orrore ma non lo è lol]. 
CONFIGURAZIONE DEL SISTEMA
Vi vedo in un bagno di sudore Fantozziano e affaticati a digitare così tanti comandi :-) ma non preoccupatevi abbiamo quasi finito, ci manca questo e la configurazione del bootloader :P e di inserire la password di root :-) ma quello ve lo dico ora basta che digitate un passwd e siete a posto. Comunque riprendendo la configurazione di Gentoo Linux, vogliamo appunto iniziare a capire cos'è il file che tanto sentiamo nominare dagli esperti utenti di GNU/Linux e che quando chiediamo cos'è ci dicono qualcosa che non capiamo, almeno ad alcuni è successo. 
  • COS'È FSTAB?
Eccoci finalmente pronti a comprendere che cos'è questo fstab! Fstab è l'acronimo di FileSystem Table, questo file è un file di configurazione che si trova all'interno della cartella /etc e l'utente che lo può configurare è solamente l'amministratore (ovvero il root). Questo file si presenta come un semplice file di puro testo e questo indica al sistema operativo i dispositivi che devono o possono essere montati indicandone anche le rispettive opzioni. La struttura di FSTAB è composta da 6 campi:
  1. DEVICE: Ovvero il dispositivo che dovrà essere montato e che contiene un file system. 
  2. DIRECTORY: Anche chiamata punto di mount, dato che da qui si può accedere alla gestione interna dei singoli device.
  3. TYPE: Il tipo di filesystem che il device ha impostato.
  4. OPTIONS: Queste opzioni regolano l'accesso al dispositivo.
  5. (OBSOLETA): Questa opzione non ha nome o titolo ma comunque questa ha il compito di comunicare, se il dispositivo deve essere usato dal comando dump per farne dei backup, output: valori booleani 1 = attivo, 0 = disattivo.
  6. Questa opzione non ha nome o titolo però comunica se il dispositivo deve essere controllato dal comando fsck.
I file system già montati si trovano invece nel file /etc/mtab. 
  • CONFIGURAZIONE FSTAB IN GENTOO
Adesso che abbiamo compreso a fondo il funzionamento di fstab, modifichiamo il nostro fstab. Editiamo ovviamente sempre tramite il nostro editor nano il file contenuto in /etc/fstab con il comando: nano -w /etc/fstab. Quando lo apriamo il file sarà configurato in questo modo 
/dev/BOOT   /boot        ext2    defaults,noatime     1 2
/dev/SWAP   none         swap    sw                   0 0
/dev/ROOT   /            ext3    noatime              0 1

Non in modo uguale ma simile, perciò la cosa da fare è inserire al posto di BOOT, SWAP e ROOT le voci sda1, sda2, sda3 e poi aggiungere queste due linee:

proc        /proc        proc    defaults             0 0
shm         /dev/shm     tmpfs   nodev,nosuid,noexec  0 0
Queste linee sono per comunicare a Gentoo che abbiamo attivato anche I filesystem proc e la memoria temporanea. Però un secondo auto e notime cosa sono? Auto fa si che il comando mount rilevi automaticamente il filesystem, mentre, l'opzione noatime come opzione di mount, con cui si ottiene un sistema più veloce perchè evita la registrazione degli accessi (ma si può anche omettere). Se vogliamo che gli utenti senza permessi di amministratore montano il CD digitiamo dentro al file /etc/fstab, la riga:
/dev/cdrom  /mnt/cdrom   auto    noauto,user          0 0
Ottimo, una volta terminata la configurazione del file /etc/fstab siamo pronti per configurare le ultime cose come: rete, keymaps, DNS, domini e altre informazioni utili... Iniziamo dall'hostname presente nella directory /etc/conf.d/hostname aprendo con nano il file di configurazione cambiamo da localhost a nomeutente o quello che sia la variabile hostname="tux". Sempre nella stessa directory troviamo il file net che serve per configurare il dns_domain ovvero il nome del proprio dominio. Mentre ora desideriamo tanto configurare l'IP... Per fare questa operazione andare nella directory solita /etc/config/ ed editare indovinate quale file? Si, proprio lui il file net e aggiungere o modificare la voce config_eth0="dhcp(nel mio caso è un DHCP)" se avete IP manuali impostate uguale a questo esempio: 
config_eth0="192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255"
routes_eth0="default via 192.168.0.1"
Una volta effettuate queste modifiche terminiamo, le ultime modiche come: cambiare da us a it la configurazione della tastiera nel file e con il comando: nano -w /etc/conf.d/keymaps e verifichiamo se nel file /etc/conf.d/hwclock sia impostato a UTC la voce clock=”UTC”, se si uscite altrimenti modificatela e uscite. Per avere un accesso remoto con SSH bisogna digitare questo comando: rc-update add sshd default. 
  • INSTALLAZIONE E CONFIGURAZIONE DEL BOOTLOADER
Siamo giunti alla fine e finalmente alla configurazione del bootloader GRUB, questo passo necessiterà quindi di una installazione di GRUB ergo digitiamo:
emerge grub
Si è vero, abbiamo installato GRUB ma non è stato configurato e posizionato all'interno del MasterBootRecord, quindi:
nano -w /boot/grub/grub.conf
default 0
# Quanti secondi attenedere prima di avviare l'opzione predefinita.
timeout 30
# Un'immagine gradevole da commentare se non si dispone di scheda grafica
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title Gentoo Linux [versione_kernel]
# La partizione dove si trova l'immagine del kernel (o il sistema operativo)
root (hd0,0)
kernel /boot/kernel-versione-kernel-gentoo root=/dev/sda3

title Gentoo Linux 3.3.8 (rescue)
# Partizione dove si trova l'immagine del kernel o il sistema operativo
root (hd0,0)
kernel /boot/kernel-versione-kernel-gentoo root=/dev/sda3 init=/bin/bb
Questa configurazione è una configurazione standard, se necessitate di configurare qualcosa di aggiuntivo non esitate a farlo. Ok, una volta fatta la configurazione un'altra scelta per voi volete installarlo manualmente o con il tool grub-install? E io qui dico un'altra volta ma chi se ne frega e vi faccio tutte le due le scelte ;-) per i guru e per i newbies!
  • CONFIGURAZIONE MANUALE GRUB
Per chi sta leggendo questo piccola guida di installazione manuale al bootloader GRUB è un pazzo lol, no scherzo. Comunque per installare manualmente GRUB, bisognerà scrivere questo comando per entrare nel menu di GRUB, nel nostro caso o nel mio come volete cari lettori, il bootloader sarà posizionato nel device /dev/sda1 così che la prima cosa che si vede il computer all'avvio è il prompt di GRUB che dice “ehi ho Gentoo e me ne vanto!”. Quindi per avviare la shell di GRUB si digiterà 
grub --no-floppy
e succesivamente digitiamo queste istruzioni:
grub> root (hd0,0)          (Specifica dove è la partizione /boot)
grub> setup (hd0)           (Installa GRUB nel MBR)
grub> quit                  (Esce dalla shell di GRUB)
  • CONFIGURAZIONE CON GRUB-INSTALL:
Una volta che abbiamo installato grub-install con il comando emerge grub-install, aggiorniamo il file /etc/mtab con l'istruzione:
grep -v rootfs /proc/mounts > /etc/mtab
copiando /proc/mounts in /etc/mtab ed escludendo rootfs se non è stata creata una partizione di boot separata. Fatto sta che il comando è valido in ogni caso. Una volta aggiornato questo file digitiamo:
grub-install --no-floppy /dev/sda
Per installare il bootloader nel disco rigido. Per ulteriori domande esiste questo sito http://www.gnu.org/software/grub/grub-faq.html o chiedete tramite commenti o mandate un email {come volete}. ALT! Non abbiamo finito, fatto questa installazione del bootloader GRUB uscite dall'ambiente chroot e smontate TUTTE le partizioni. Ed eseguire poi l'ultimo comando ovvero: reboot. Come? 
(chroot)livecd~# exit
livecd~# cd
livecd~# umount -l /mnt/gentoo/dev{/shm,/pts,}
livecd~# umount -l /mnt/gentoo{/boot,/proc,}
livecd~# reboot

Non dimenticare di rimuovere il CD altrimenti verrà avviato il CD al posto del sistema appena installato.

  • TERMINARE L’INSTALLAZIONE

Una volta che siete arrivati a questo punto senza inceppamenti siete pronti per avviare il vostro Gentoo Linux! Con:

Login: root
Password: (inserite la password di root)

useradd ghiro -m -G users,wheel,audio -s /bin/bash
passwd ghiro
Password: (Digitate la password per ghiro)
Re-enter password: (Ridigitate la password per verificare l'account ghiro)

Ora che l’installazione di Gentoo è terminata ed è tutto completato, possiamo eliminare il file stage*.tar.bz2, con il comando rm /stage*.tar.bz2…Se avete fatto tutto ciò che ho scritto senza errori… beh… Congratulazioni! Avete un computer con un ottimo e sano Gentoo Linux tutto da modificare ulteriormente. Per avere informazioni in più rispetto questo sistema chiedetemi tutto ciò che volete! Sono a vostra completa disposizione! Grazie ancora della vostra gentilezza e tolleranza nell’installare questo splendido sistema operativo e buon lavoro!

Saluti Gh1r0

[FONTI: http://www.gentoo.org/ per prendere la ISO]

P.S: Ora si, che potete ricoverarvi alla neuro! 😉

Strutture di controllo in PHP

Scusandomi il tardare della lezione ecco a voi la nuova lezione sulle strutture di controllo in PHP. Nella precedente lezione, abbiamo studiato le variabili: come dichiararle, come usarle e come PHP le utilizza, etc… Questa lezione invece è dedicata alle strutture di controllo come: IF-ELSE, WHILE e i cicli come: FOR e SWITCH. Ovviamente inizieremo senza ombra di dubbio dall’istruzione di condizione if per poi analizzare l’if-else. L’istruzione if è la prima istruzione che si può incontrare quando si parla di codici sorgenti con dei “salti condizionati” o per far prendere delle decisioni al programma. Decisioni ovviamente scelte da noi. Il PHP per l’istruzione if ha una sintassi di base come questa quasi equivalente al C:

if(<condizione>) {

<codice>

}

Infatti la <condizione> è ciò che rende il codice tra parentesi vero oppure falso. Se è vero in questo caso esegue, il codice contenuto tra parentesi graffe, mentre se è falso esegue il codice successivo alla condizione. Per comprendere meglio questo concetto vediamo un esempio… Poniamo come condizione che se uno studente ha una media scolastica pari a 60 viene ammesso all’esame altrimenti viene bocciato (che ometteremo nel sorgente):

<?php

// code

if($grade >= 60){

echo “Promosso”; // spero per voi che siate in questo ramo 😉
}

// Codice non appartenente all’if

?>

Bene, questo codice è molto chiaro perché fa capire che se la variabile $grade è maggiore o uguale al voto stabilito (quindi 60) il codice che verrà mostrato in output, sarà la stringa “Promosso”, ma se un docente di una scuola o di università ci chiede di stampare anche la stringa “Bocciato”? È qui che entra in gioco l’istruzione else e se ci sentiamo in grado di inserirla c’è anche l’istruzione else if con una condizione in più. Come si usano queste istruzioni? Semplicemente aggiungendo all’if anche la condizione else, mi spiego meglio con un esempio:

<?php

$if($grade >= 60){

echo “Promosso”;

}

else{

echo “Bocciato”;

}

?>

Questo è un tipico esempio di condizione if-else. Quindi che SE l’istruzione è maggiore o uguale a 60 stampa “Promosso” mentre se è minore di 60 stampa “Bocciato”. L’istruzione else if invece dicevo che viene inserita una condizione in più per un motivo ben preciso:

<?php

if($name_1 == ‘Ghiro’) // Prima condizione

{

echo “Ciao $name_1, ti ha cercato $name_2”;

}

elseif ($name_2 == ‘Carlo’){ // Seconda condizione

echo “Ciao $name_2, $name_1 non c’è”;

}

else{

echo “Exit.”// Esci se l’utente non è $name_1 o $name_2

}

?>

Questo esempio è molto simile a un login di un forum o di un qualsiasi software richieda un login. Quando l’utente $name_2 si collega dice che utente $name_1 è momentaneamente assente se entra $name_1 dice che l’ha cercato $name_2, con ciò ne deduciamo che SE si collega X il programma stampa una cosa ALTRIMENTI SE si collega Y stampa che X non è in linea ALTRIMENTI esci dal software. Come potete vedere il codice sorgente di questo esempio è stato semplificato apposta per il livello di conoscenza del PHP. Ora che abbiamo incontrato sia l’istruzione if che la else iniziamo a conoscere l’istruzione while.

IL COMANDO DI ITERAZIONE WHILE:

While è un’istruzione che serve a iterare una porzione di codice per n volte fino a che alcune condizioni rimarranno vere. Infatti solitamente nella vita quotidiana quante volte ci è capitato di dire la frase “Nella mia lista della spesa ci sono ancora altre pietanze compra queste pietanze e poi dirigiti verso la cassa”? Tantissime 🙂 e così è la programmazione finché un certo numero di condizioni non saranno terminate continua a iterare! Ecco un rapido esempio di come si itera per 10 volte un numero:

<?php

$val = 1;

while ($val <= 10)

{

$val++;

echo $val;

}

?>

Output:

1

2

3

4

5

6

7

8

9

10

11

IL COMANDO FOR:

Sia il comando while che il comando for sono due iterazioni… Ma cos’è che li distingue tra loro? Il comando for è più versatile anche più sfruttato nel PHP, infatti in C con il comando while ci possiamo scrivere un software che prenda in input un valore flag (o sentinella) per iterare n volte finchè non inserisci tale valore infatti while (x != y) mentre in PHP con l’istruzione for abbiamo la seguente sintassi:

<?php

    for (espressione_iniziale; test; espressione_finale)    {

              codice;

    }

?>

La sintassi qui sopra riportata è solo uno schema base dell’istruzione for, infatti espressione iniziale viene prima di tutte le altre, per poi procedere con l’espressione test…questa espressione valuta in forma booleana, quindi se da come output un valore logico TRUE allora viene eseguita il codice nelle parentesi! Se invece come output viene fuori FALSE ritorna l’espressione_iniziale. Un esempio di script in PHP del ciclo for è:

<?php
for ($i = 1; $i <=$a; $i++)
{
print $i;
}
?>

IL COMANDO SWITCH:

Il comando switch viene chiamato ‘comando di selezione multipla’ infatti questa istruzione ha diversi casi con istruzione break per terminare l’esecuzione alla fine di ogni caso. Quando infatti bisogna strutturare un programma come un ATM bancomat bisogna prendere in considerazione anche la scelta dell’istruzione switch! Lo switch prende decisioni sulla base di valori presi da un’espressione e notiamo che appunto nella condizione dell’esempio che sto per mostrarvi c’è la variabile $pippo all’interno dello switch!

<?php
$toons = 3;
switch($toons)
{
case 1:
$disney = “pippo, pluto, paperino”;
break;
case 2:
$warner_bros = “daffy duck, gatto silvestro, titti, w. coyote”;
break;
case 3:
$pixar = “toy story, nemo, etc..”
break;
default:
$other = “altri cartoni”;
}
print “Che cartone animato ho scelto?”
?>

L’interprete di PHP studia innanzitutto l’espressione nello switch in questo caso la variabile $toons, quindi controlla quella variabile e se c’è un case uguale a tale valore. Se non trova il valore che sta cercando, opta per l’ultimo caso ovvero il DEFAULT. Nel nostro caso l’output sarà case3 quindi la pixar. Fate molta attenzione ai break nei casi, queste dichiarazioni terminano ogni caso, l’inserimento di questi break non sono obbligatori ma in loro assenza quando esiste un caso corretto verrebbero eseguiti comunque gli altri casi! Il caso default neanche è obbligatorio perché se viene omesso lo script esce dall’esecuzione.

Lezione aggiuntiva: OPERATORE TERNARIO IN PHP

L’operatore ternario è molto simile all’if-else ma con un “vantaggio” in più che può essere inserito su una linea, quindi risparmiare spazio e linee di codice! L’operatore ternario valuta le sue espressioni tramite valori booleani. La sua sintassi è: condizione ? test_vero : test_falso dove test_vero e test_falso mostrano un output come valori FALSE e TRUE. Un esempio banale è riportato qui sotto:

<?php
$a = 3;
$b = 4;
$a <= b ? print “Ciao” : print “Addio.”
?>

CONNESSIONE CRIPTATA SSL CON IRC {Software in uso: xchat}

Salve a tutti,

in questo tutorial vi spiegherò come criptare in SSL la chat IRC per il famoso programma Xchat. SSL è un protocollo sviluppato dalla Netscape, questo permette di trasmettere dati e informazioni in connessioni a chiave pubblica… Tale sistema di crittografia utilizza come ben sappiamo due chiavi: una pubblica e una privata, per lo scambio di chiavi il protocollo SSL utilizza gli algoritmi RSA, Diffie-Hellman, ECDH, SRP, PSK mentre per l’autenticazione usa: RSA, DSA, ECDSA. Le fasi di questo protocollo possono essere suddivise in:

  • Negoziazione fra le parti dell’algoritmo da usare
  • Scambio delle chiavi e autenticazione
  • Cifratura simmetrica e autenticazione dei messaggi.

Nella prima fase il client negozia il protocollo di cifratura con il server che sarà usato per la connessione criptata [quindi sicura] il protocollo per lo scambio delle chiavi e l’algoritmo di autenticazione sono normalmente a chiave pubblica o come nel caso di TLS-PSK fanno uso di chiavi precondivise {in inglese pre-shared key}. L’integrità dei messaggi inviati è garantita dall’algoritmo HASH che usa un costrutto HMAC {poi lo vedremo questo algoritmo in un articolo a parte}.

Installare OpenSSL
:

Nel caso in cui il vostro GNU/Linux non sia provvisto dei pacchetti SSL dovete installare il pacchetto openssl. Per chi ha Arch Linux digitate: yaourt -sS openssl e dopo yaourt -S openssl. Per chi ha invece sistemi con gestore di pacchetto sudo digitate semplicemente: sudo apt-get install openssl. Una volta che avete SSL installato e xchat installato aprite il software IRC {Xchat per capirci} e digitate da riga di comando /server -e crypto.azzurra.org 9999 per capire meglio vi dò una spiegazione dei singoli comandi: /server indica al client che deve collegarsi a un server tramite l’opzione -e che comunica al server remoto di azzurra che la connessione è criptata con SSL crypto.azzurra.org è ovviamente il server di azzurra che utilizza SSL e 9999 è la porta usata in remoto per l’SSL. Per sapere se siamo sotto cifratura SSL basta digitare /whois nome_utente ovvero il vostro ;-), il risultato sarà * [Gh1r0] is using a secure connection (SSL). Questo è tutto ciò che bisogna conoscere.

Ciauz a tutti,

by Gh1r0

COME OTTENERE I PERMESSI DI ROOT SUL SISTEMA ANDROID GINGERBREAD(KERNEL 2.3.x)

Gentili lettori,

questo tutorial è stato messo per coloro che non sopportando più sul loro cellulare i fastidiosi aggiornamenti delle applicazioni come 187AT, Virgilio, TIMSTORE, 119 Self hanno deciso come me di far diventare /root il loro smartphone(per l’esempio io avrò un Samsung Galaxy Gio GT-S5660) così da rimuovere le app. La procedura è semplice ma MOLTO rischiosa per il danneggiamento del sistema operativo: NON MI RITENGO QUINDI RESPONSABILE DEL DANNEGGIAMENTO DEL VOSTRO SMARTPHONE!!! Bene procediamo per l’ottenere questo permesso come administrator del galaxy gio. Vi farò un elenco dei passi che dovrete compiere:

1) Scaricare il file .zip da questo LINK o QUESTO

2) Copiate il file .zip nella directory /sdcard NON in altre subdirectory, perché il processo altrimenti non sa dove poter prendere i rispettivi package.

3) Riavviate il sistema operativo e questa volta in modalità recovery mode (se non sapete come si fa basta che premete il tasto d’accensione{a destra del telefono} e insieme il tasto centrale.)

In recovery mode il menu avrà la scelta e lo spostamento del cursore con il tasto centrale e i tasti del volume.

4) Una volta entrati nel menu recovery dirigetevi alla voce ‘Apply update from sdcard’

5) Riavviate il sistema.

Avrete nella vostra /home l’applicativo ‘SUPERUSER’ e ciò significa che avete ottenuto i permessi di root.

Saluti Gh1r0.

Le variabili in PHP

Una variabile è come un grande contenitore, la sua funzione è appunto quella di memorizzare valori alfanumerici con: un tipo, un nome e un ambito. Tutte le variabili sono dichiarate e assegnate con questa sintassi: $nome_variabile = valore;. Come sempre notiamo che l’istruzione ha bisogno del punto e virgola perché altrimenti non accetterà istruzioni future. Le variabili nel PHP sono case-sensitive ovvero che A1 e a1 sono due variabili distinte. Il tipo di una variabile sta a significare che i valori che possono essere assegnati a tale variabile sono: interi, con virgola mobile, char(caratteri). Ma la bellezza del PHP sta proprio in questo, una variabile non ha bisogno di avere una dichiarazione di che tipo è, visto che PHP associa le variabili in un singolo contenitore codificandole tutte di un solo tipo. Vediamo un esempio di dichiarazione di variabile in C e in PHP:

In C:

#include<stdio.h>
int main()
{
int x = 32; /* comunica al compilatore che la x è intera */
printf(“%d”, x); /* stampa il valore contenuto nella variabile x */
return 0;
}

Come vediamo in C la variabile x è stata prima definita come intera e poi le è stato assegnato il valore 32! In PHP viceversa, usiamo questa metodica:

In PHP:

<?php
$var1 = 124; // numero intero
$var2 = 34,23; // variabile con virgola mobile
$result = $var1 + $var2; // somma la variabile a alla variabile b
echo $result;
?>

Come ben notiamo invece, nel PHP usiamo solamente il nome della variabile e il numero che le assegnamo, però in PHP possiamo anche assegnare un carattere o una stringa di lettere oltre ai numeri, come? Beh semplicemente inserendo delle virgolette, vediamo nell’esempio qui sotto:

<?php
$var_1 = 12; // variabile intera
$var_2 = 12,3; // variabile a virgola mobile
$txt = “Sono ghiro”; // variabile stringa
?>

Come vediamo le differenze di dichiarazione variabile sono minime, a eccezione della variabile $txt che inserisce le virgolette. Voglio però far presente che variabili con valore numerico posso essere utilizzate nelle comuni operazioni matematiche, mentre le variabili stringa hanno solamente un operatore, ovvero quello di concatenamento(.), come nell’esempio qui riportato:

<?php
$txt_1 = “Ciao ”;
$txt_2 = “Ghiro”;
echo $txt_1.$txt_2;
?>

Vediamo appunto che il risultato che si otterrà da questa operazione sarà: Ciao Ghiro. Inoltre una opzione del PHP molto comoda è la gestione degli errori (come dicevo nell’introduzione al PHP, questa opzione risiede nel file php.ini). Infatti se nel file php.ini si abilita la voce error_reporting e si modifica da ciò che troviamo attualmente a E_ALL si avrà il responso di tutti gli errori che avvengono nei nostri script e inoltre se si abilita anche la voce display _errors mediante la riga display_errors = OFF (naturalmente dobbiamo settarla a ON) per visualizzare sullo schermo l’output per gli errori. Questi due parametri sono molto importanti nello sviluppo in PHP perché ci presentano gli errori che avvengono di nascosto, naturalmente una volta finito il lavoro rimettiamo tutto ad OFF poiché un possibile web hacker, potrebbe usare queste informazioni come vulnerabilità per l’attacco al nostro sito. Ma la gestione degli errori la vedremo più approfonditamente nei capitoli di debug e gestione degli errori! Ritornando sul concetto delle variabili una funzione che il PHP possiede è IsSet e l’istruzione unset. La funzione IsSet determina se la variabile $var1 è impostata con un proprio valore numerico oppure se non le è stato mai assegnato alcun valore. IsSet comunica tramite valore logico TRUE(1) che la variabile ha già ricevuto precedentemente un’assegnazione mentre con valore logico FALSE(0) che non è mai stata usata. Mentre l’istruzione unset ha il compito di riportare la variabile ad uno stato NON assegnato. Vediamo adesso un suo utilizzo:

<?php
$var1 = 10;
$var2 = 23;
$result = $var1 + $var2;
echo $result;
/* Ora utilizziamo l'istruzione IsSet per verificare se la variabile $result è settata */
echo “La variabile result è settata?<br />” /* Se l'output sarà 1 allora il valore è true */
echo IsSet($result);
?>

OUTPUT:

33
1

Come vediamo la somma di 10+23 da come risultato 33 mentre l’uno che vediamo in output è il risultato della nostra richiesta alla funzione IsSet. Se ora usiamo l’istruzione unset per azzerare la variabile $result, IsSet con una variabile vuota come si comporterà? Presto detto, scriviamo qui sotto un codice d’esempio e mostriamone l’output:

<?php
$var_1 = 12;
$var_2 = 25;
$result = $var_1 * $var_2;
unset($result);
echo “La variabile result è settata?<br />”;
echo IsSet($result);
?>

OUTPUT:

300
La variabile result è settata?

Come ben vediamo non abbiamo avuto alcuna risposta, ciò perché è stata settata a 0 con l’istruzione unset! E IsSet quando riceve un valore FALSE(0) non mostra alcun risultato!

Introduzione al PHP

Come tutti sapete il linguaggio in questione è un linguaggio lato server, ciò significa che il browser chiede la pagina(nel nostro caso index.php) al server e il server gli rimanda la pagina chiesta, contenente solo codice HTML. Ma come fa l’interprete PHP a comprendere quale codice deve compilare per l’esecuzione di codice HTML per il browser(ovvero l’utente)? Beh innanzitutto, sappiamo che il PHP è un linguaggio di scripting, giusto? E allora tutti I linguaggi di scripting non hanno bisogno di essere compilati ma interpretati(come python, perl, etc…). Ma chi è che interpreta questi script allora? Semplice è il server su cui risiede l’interprete PHP. Il codice PHP agisce sul server, che come pocanzi detto rimanda l’output al browser per vedere meglio il risultato chiediamo al browser di domandare al server 192.168.1.130 di richiedere la pagina hello.php contenente questo codice:


<?php

echo “Ciao mondo!”;

?>

Quando il server riceverà la richiesta del browser, dirà: il broswer Firefox mi ha domandato se ho la pagina hello.php[ovviamente cel’ha], carico la pagina hello.php, leggo qual’è il linguaggio nello script, genero HTML e restituisco la pagina da lui richiesta. La frase “Leggo che tipo di linguaggio è” come viene eseguita dal server? Semplice, grazie ai due tag <?php e ?> il server comprende che è PHP il linguaggio, perché se I tag erano <% %> era ASP e così via per ogni script di linguaggio differente. Il PHP offre una vasta gamma di voci per la modifica e personalizzazione di come configurare il proprio server PHP attraverso un piccolo ma potente file! Il php.ini. Questo file molto spesso sui server condivisi (come Altervista) non viene creato. Perciò se vogliamo avere una configurazione del nostro server con l’opzione error_reporting = E_ALL come facciamo? Basta creare uno script, chiamato pippo.php (un nome casuale) con al suo interno questo codice:

/* questo codice mostra una pagina con tutte le informazioni della configurazione del nostro server */

<?php // apre il tag e questo è un commento a riga singola

phpinfo(); # anche questo è un commento a riga singola e l'istruzione visualizza le info di PHP

?> # Chiudo tag

Iniziamo però con l’analizzare più approfonditamente il codice di questi script. Qui vi sono molte informazioni elementari ma utili del PHP, incominciamo dal primo: /* commento */, questo commento lo incontriamo anche in C e Java! Linguaggi da cui PHP ha preso spunto per i commenti, mentre // commento è un commento a riga singola usato in C++ come vediamo in Python invece questo è proprio un # commento in Python. I commenti non vengono interpretati da PHP ma sono utilissimi per ricordare qual’è lo scopo di un’istruzione. Il comando phpinfo(); è innanzitutto una istruzione e come in C e in altri linguaggi ogni istruzione necessita di un ‘;’ per terminare e successivamente iniziarne una nuova. Per il resto phpinfo() visualizza che versione del PHP utilizza il server, quale opzioni sono attive e quali no e altre… Se vediamo il codice sorgente di questa pagina pippo.php è solamente codice HTML, ciò perché l’interprete PHP converte il linguaggio in HTML. Vediamo in oltre che nel precedente script hello.php il risultato ottenuto è solamente Ciao mondo, come mai? Perché l’istruzione echo serve per stampare a video stringhe di codice o variabili o altro.Come tutti sapete il linguaggio in questione è un linguaggio lato server, ciò significa che il browser chiede la pagina(nel nostro caso index.php) al server e il server gli rimanda la pagina chiesta, contenente solo codice HTML. Ma come fa l’interprete PHP a comprendere quale codice deve compilare per l’esecuzione di codice HTML per il browser(ovvero l’utente)? Beh innanzitutto, sappiamo che il PHP è un linguaggio di scripting, giusto? E allora tutti I linguaggi di scripting non hanno bisogno di essere compilati ma interpretati(come python, perl, etc…). Ma chi è che interpreta questi script allora? Semplice è il server su cui risiede l’interprete PHP. Il codice PHP agisce sul server, che come pocanzi detto rimanda l’output al browser per vedere meglio il risultato chiediamo al browser di domandare al server 192.168.1.130 di richiedere la pagina hello.php contenente questo codice:


<?php

echo “Ciao mondo!”;

?>

Quando il server riceverà la richiesta del browser, dirà: il broswer Firefox mi ha domandato se ho la pagina hello.php[ovviamente cel’ha], carico la pagina hello.php, leggo qual’è il linguaggio nello script, genero HTML e restituisco la pagina da lui richiesta. La frase “Leggo che tipo di linguaggio è” come viene eseguita dal server? Semplice, grazie ai due tag <?php e ?> il server comprende che è PHP il linguaggio, perché se I tag erano <% %> era ASP e così via per ogni script di linguaggio differente. Il PHP offre una vasta gamma di voci per la modifica e personalizzazione di come configurare il proprio server PHP attraverso un piccolo ma potente file! Il php.ini. Questo file molto spesso sui server condivisi (come Altervista) non viene creato. Perciò se vogliamo avere una configurazione del nostro server con l’opzione error_reporting = E_ALL come facciamo? Basta creare uno script, chiamato pippo.php (un nome casuale) con al suo interno questo codice:

/* questo codice mostra una pagina con tutte le informazioni della configurazione del nostro server */

<?php // apre il tag e questo è un commento a riga singola

phpinfo(); # anche questo è un commento a riga singola e l'istruzione visualizza le info di PHP

?> # Chiudo tag

Iniziamo però con l’analizzare più approfonditamente il codice di questi script. Qui vi sono molte informazioni elementari ma utili del PHP, incominciamo dal primo: /* commento */, questo commento lo incontriamo anche in C e Java! Linguaggi da cui PHP ha preso spunto per i commenti, mentre // commento è un commento a riga singola usato in C++ come vediamo in Python invece questo è proprio un # commento in Python. I commenti non vengono interpretati da PHP ma sono utilissimi per ricordare qual’è lo scopo di un’istruzione. Il comando phpinfo(); è innanzitutto una istruzione e come in C e in altri linguaggi ogni istruzione necessita di un ‘;’ per terminare e successivamente iniziarne una nuova. Per il resto phpinfo() visualizza che versione del PHP utilizza il server, quale opzioni sono attive e quali no e altre… Se vediamo il codice sorgente di questa pagina pippo.php è solamente codice HTML, ciò perché l’interprete PHP converte il linguaggio in HTML. Vediamo in oltre che nel precedente script hello.php il risultato ottenuto è solamente Ciao mondo, come mai? Perché l’istruzione echo serve per stampare a video stringhe di codice o variabili o altro.

{TUTORIAL ITA}: Attivare la voce Esegui nel menu di avvio da regedit

Ciauz a tutti,

eccoci giunti nuovamente nella sezione Microsoft Windows, questa volta vi voglio far presente che come avranno già notato i più smanettoni, la voce ‘Esegui nel menu dei nuovi sistemi Microsoft, non è più “attiva” e non più visibile. Per riattivarla useremo il buon vecchio REGEDIT! Questa volta naturalmente apriremo l’Esplora Risorse e andremo nella directory C:/>WINDOWS e trovare l’eseguibile regedit.exe. Da qui dirigersi in HKEY_CURRENT_USER > Software > Microsoft > Windows > CurrentVersion, da qui selezionare la directory Explorer entrare nella directory Advanced e creare un nuovo valore di tipo DWORD naturalmente a 32 bit e non 64 bit(viceversa per chi possiede processori a 64 bit allora DWORD – 64 bit!) Il nome da dare è a scelta io darò StartRun aprite la solita finestra che vi darà la label ‘Dati Valori’ e comunicargli il valore 1, riavviate il sistema e troverete il buon vecchio Esegui!

Grazie dell’attenzione,

Cordiali saluti,

Gh1r0

{TUTORIAL ITA}: Evitare manomissione di Internet Explorer

Ciauz a tutti,

siete urtati dalle manomissioni del vostro browser internet? Siete stufi di non poter fare nulla per modificare quanto accade? Entrate nel registro e seguite passo passo la voce della chiave che cambieremo in questo tutorial! Bene una volta aperto il regedit, troverete nelle seguenti chiavi e sottochiavi, ciò che vi serve:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerToolbar
HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerExtensions
HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMenuExt

Ciò di cui avete bisogno è semplice, perché lo troverete nella parte sinistra del software “Regedit” e da li andate a disattivare ciò che vi serve. Se avete problemi postate qui sotto e vi risponderò, il prima possibile.

Saluti Gh1r0

Introduzione al Python

Il python è un linguaggio di scripting e di programmazione ad alto livello, usato molto spesso nell’ambito della computazione numerica e system testing. Esso viene normalmente paragonato a linguaggi come Tcl, Perl, Java, JavaScript, Visual Basic o Scheme. Questo linguaggio è volto alla programmazione ad oggetti è un linguaggio multi-paradigma, che fa della dinamicità, semplicità e flessibilità i suoi principali obiettivi, Python ha una vasta libreria standard, il che lo rende adatto a molti impieghi. Iniziamo però anche a dire che Python è un linguaggio interpretato.

COME LAVORA L’INTERPRETE PYTHON?

Come lavora l’interprete Python per interpretare i codici scritti da noi programmatori? Allora, iniziamo con il dire che Python non è esattamente un linguaggio interpretato ma è un linguaggio pseudo-compilato, perché dico questo? Perché l’interprete Python (ovvero la PVM – Python Virtual Machine) internamente e nascosto al programmatore, prima di eseguire il codice, compila il sorgente in byte code (come in Java). Il byte code cos’è? Semplicemente una rappresentazione a basso livello indipendente dalla piattaforma su cui eseguite il vostro codice .py. Una volta tradotto in byte code tutte le istruzioni all’interno del file python, la PVM esegue il file tradotto (ergo il file con estensione .pyc) in byte code e lo mostra al programmatore. Naturalmente se modichiamo il sorgente, il file .pyc verrà aggiornato, però dopo fatto l’aggiornamento l’interprete Python salterà la fase di compilazione. La compilazione in bytecode è automatica e la PVM non è altro una parte di sistema del Python, infatti i programmatori Python scrivono il codice sorgente e lo mandano in esecuzione senza effettuare tecniche di compilazione. Lo schema è piùttosto semplice perché è suddiviso in SORGENTE → BYTE CODE → ESECUZIONE. Un software scritto Python è possibile trasformarlo in un eseguibile vero e proprio tramite il software Py2exe e PyInstaller (utility sotto Unix e Linux) e in fine c’è freeze (software originale degli editori di Python). Solamente che quando si compila tutto, i dettagli come la PVM e il byte code vengono fusi tutti in un unico file binario congelato (gergo tecnico di un eseguibile python), ciò purtroppo renderà il file eseguibile pesante di dimensioni e la velocità d’esecuzione non cambia, quindi è poco utile fare questo passo.

INIZIARE A LAVORARE DA INTERPRETE INTERATTIVO

Benissimo, ora siamo pronti per iniziare a parlare un po’ del codice di Python e ad iniziare a programmare ma tutto ciò lo faremo da interprete interattivo. Come mai questa scelta? Perché è il modo forse più semplice di imparare a programmare con questo linguaggio. Oltre all’interprete tramite shell (DOS o Linux che sia) esistono anche vari software come IDLE, Command Line(Python), etc… Tutti presenti per utenti Windows nel pacchetto scaricato dal sito web: http://www.python.org/. Il prompt interattivo si lancerà (per utenti Windows da DOS e per utenti Linux da terminale) digitando la parola: python come riportato qui sotto:

    gh1r0@gh1r0:~# python

    Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56)

    [GCC 4.4.3] on linux2

    Type “help”, “copyright”, “credits” or “license” for more information.

    >>>

Il risultato mostrato è che python sta aspettando i vostri comandi, come potete saperlo? Semplice, vedete i tre maggiori (>>>) questo è il modo in cui il prompt di python dichiara di essere pronto per ricevere comandi! Se infatti digitiamo un semplice print ‘ciao’ python riporterà sotto ciao e ritornerà con i tre simboli di maggiore. Ma sicuramente vi domandate che cosa offre il prompt interattivo di diverso da un sorgente scritto su un file di testo! Il prompt interattivo viene usato per testare i comandi per la sua capacità di eseguire ed riportare l’output del codice mano a mano che vengono inserite nuove istruzioni. Per il prompt interattivo il comando print è inutile dato che se si digita la variabile l’interprete stampa il risultato, come in questo esempio per i numeri:

     >>> var_1 = 32

     >>> var_1

     32

E in quest’altro per le stringhe alfanumeriche:

     >>> saluto = ‘ciao’

     >>> saluto

     ‘ciao’

Come vedete il risultato è immediato, per questo il prompt interattivo è il posto perfetto per il testing delle testing delle istruzioni e dei programmi, perché se ad esempio c’è una funzione che non conoscete aprite l’interprete interattivo e ne vedete il risultato. Per i nuovi utenti del python, se per caso doveste incorrere in un risultato del genere:

     >>> for x in ‘spam’:

    

Non dovete preoccuparvi! I tre puntini ‘…’ stanno a significare una funzione composta ovvero per comprendere meglio, questa è una istruzione a multi-riga. Ovvero in questo caso (come avete visto per i linguaggi trattati nel sito) è un blocco del codice e Python inserisce la così detta indentazione, ma questo concetto lo approfondiremo più avanti. Vi voglio comunque dire che per terminare un’istruzione multi-riga dovete solamente premere due volte enter (o invio)! Quando avete un risultato in uscita come questo invece, significa che Python ha riscontrato un errore:

     >>> Ghiro

     Traceback (most recent call last):

        File “<stdin>”, line 1, in <module>

     NameError: name ‘Ghiro’ is not defined

Qui infatti l’interprete Python mi sta dicendo che la variabile con il nome Ghiro non è presente nel “programma” o per meglio dire io non ho definito alcuna variabile con il nome Ghiro ;-). Bene ora andiamo a vedere come usare l’interprete con alcuni esempi di script. Prima di introdurre questo concetto voglio dirvi un contro del prompt di Python. Una volta inserite alcune istruzioni se incontriamo un errore bisogna riscrivere tutto ciò che abbiamo scritto precedentemente, poiché l’interprete Python una volta eseguita l’istruzione dimentica tale istruzione! Infatti il codice che scrivete nell’interprete non viene salvato da nessuna parte poiché non c’è un file d’appoggio. Le operazioni come copiare da un file il codice e incollarlo nell’interprete possono essere di poco aiuto, dato il fatto che Python riscontra errori anche sull’indentazione.

Salutiamo Python e facciamoci individuare:

Bene! Siamo finalmente giunti dopo un lungo e interminato tempo di sola teoria (che però fa sempre bene) all’atto di scrivere del codice con le nostre mani! Potete decidere se inserirlo nel prompt Python da shell o in un file di testo, io comunque metterò tutti e due i casi sia file che prompt. Lo script che andremo a vedere lo chiameremo script0x.py, perfetto una volta creato il file inseriremo al suo interno questo codice:

     #!/usr/bin/python

     # Created by Author (nei miei casi Gh1r0)

     import sys # libreria di sistema

     print ‘ciao python’ # stampa ciao python

     print(sys.platform) # stampa la piattaforma su cui gira il prompt

Ecco a voi il primissimo script di Python, però non sappiamo realmente cosa faccia! Beh ora calmiamoci di essere entusiasti di aver scritto codice Python e iniziamo a comprenderne gli scopi! Iniziamo da #!/usr/bin/env python per gli utenti Linux sarà la directory dove risiede Python! Così da far capire all’interprete che Python è posto in quella determinata directory (ovvero /usr/bin). Mentre il # Created by è un commento! Come detto tantissime volte i commenti sono la parte fondamentale di ogni programma perché permette di rendere leggibile un codice e di ricordare i suoi scopi. Import, questa istruzione caricherà uno dei moduli della libreria sys per usare la funzione sys.platform [vedremo pure nel corso dei nostri studi anche come creare i moduli]. L’istruzione print stampa quello che c’è tra virgolette o ciò che digitiamo infatti un altro esempio di print è print 12 che stamperà il valore 12 oppure print nome_var che stamperà il numero contenuto nella variabile nome_var. Passando all’ultima istruzione di questo script, print stamperà una stringa che identifica la piattaforma sotto cui gira Python. Il nome platform è contenuto nel modulo sys e che ogni volta va a catturarlo dentro tale modulo importato nella riga 3. Per eseguire lo script da prompt interattivo è semplice ma per eseguirlo da file salvato su disco? Semplicemente da shell bisogna digitare: python script0x.py

     gh1r0@gh1r0:~/Desktop# python script0x.py

        ciao python

        linux2

        123

Trovate il numero 123 per il seguente motivo:

     #!/usr/bin/env python

     # Created by Gh1r0

     import sys

     nome_var = 123

     print ‘ciao python’

     print(sys.platform)

     print nome_var

Diversamente da altri linguaggi Python non ha bisogno di terminatori d’istruzioni. Per oggi questo è tutto, altrimenti troppa carne al fuoco vi confonde ;-).

Introduzione all’HTML

HTML acronimo di Hyper Text Markup Language non è effettivamente un linguaggio di programmazione ma è un insieme di regole che descrivono i meccanismi di rappresentazione di un testo che, utilizzando convenzioni standardizzate, sono utilizzabili su più supporti. La tecnica di composizione di un testo con l’uso di marcatoririchiede quindi una serie di convenzioni, ovvero appunto di un linguaggio a marcatori di documenti. Questi marcatori sono comunemente detti TAG infatti da web developer si sente molto spesso la parola tag HTML. Il tag in HTML viene definito con questa sintassi:

 

    <TAG attributi>contenuto</TAG>

 

<TAG attributi> è l’apertura del tag e la chiusura del tag spesso viene fatta appunto con il carattere speciale slash. Il contenuto di un tag spesso è quello che il browser mostra all’output della pagina web. Alcuni tag infatti non hanno chiusura e vengono detti “empty tag” o “tag vuoti”. Solitamente i tag vuoti sono quelli delle immagini, quanto riportato qui sotto sono due esempi di tag vuoti e non:

 

TAG VUOTO:

 

    <img widht=”20″ height=”20″ src=”myimg.jpg” alt=”alt”>

o

    <img src=”img.jpg”>

TAG NORMALE:

 

    <p align=”left”>testo da inserire</p>

 

Come abbiamo visto i tag vuoti sono privi di chiusura ma solitamente viene inserito uno slash a fine tag quindi <img widht=”20″ height=”20″ src=”myimg.jpg” alt=”alt” /> così da far comprendere al browser che il tag <img> è terminato ed inizia un nuovo tag.

 

INDENTAZIONE E ANNIDAMENTO DI TAG

Come abbiamo la sintassi del tag è <TAG attributo=”valore”>contenuto</TAG> i tag vengono spesso annidati e per compiere questa azione bisogna indentare il codice, anche per una questione di leggibilità di esso. Un esempio di indentazione e annidamento è quando troviamo un codice simile a questo:

 

    <div align=”right”>

        Ciao

    <p align=”left”>Ghiro</p>

    </div>

 

Come ben vediamo dal codice riportato sopra, il tag div ha annidato al suo interno il tag p che allineerà a sinistra e il testo (che sarebbe il contenuto) del tag div che allineerà. Questi due tag allineeranno Ciao e Ghiro, rispettivamente a destra e a sinistra del nostro browser!

 

I COMMENTI IN HTML

 

I commenti sono una delle nozioni principali e fondamentali per un programmatore, infatti molto spesso i sorgenti dei programmi o delle pagine web sono pieni di commenti che descrivono gli scopi del software o delle singole istruzioni per ricordare ad un programmatore lo scopo di tale software! E solitamente anche da chi è stato sviluppato e che versione è. In HTML i commenti non vengono eseguiti dal browser come del resto anche in tutti gli altri linguaggi (COME GIÀ SPECIFICATO PRECEDENTEMENTE HTML NON È REALMENTE UN LINGUAGGIO DI PROGRAMMAZIONE MA È UN EDITOR DI PAGINE E DOCUMENTI). Anche se non vengono eseguiti e letti dal browser sono comunque di fondamentale importanza nell’ambito della progettazione e del web-devolpment. La sintassi di un commento è la seguente:

 

    <!– commento –>

 

Prendete come buona abitudine inserire sempre dei commenti dove pensa sia necessario. Ma troppi commenti posso recare confusione al programmatore (e di conseguenza a voi stessi).