Archivio della categoria 'Tips & tricks'

Directory public_html con uno script bash

Apache, Open Source, Shell, Sistema, Tips & tricks Nessun commento »

Mi è capitato spesso di dover mettere mano a server UNIX/Linux con una gestione dei VirtualHost di Apache compromessa da anni di utilizzo incontrollato del server da parte di amministratori di sistema non proprio ordinati. Il risultato di solito è un grande numero di utenti con home directory strutturate in maniera differente l’una dall’altra.

In particolare, in un caso recente mi sono ritrovato un centinaio di utenti dei quali una certa parte aveva la DocumentRoot nella propria home directory, altri invece ce l’avevano sotto /var/www/users/, cosa che io raccomando in quanto evita di avere problemi con SUEXEC nelle versioni di Apache precompilate.

Per sistemare una situazione così caotica ho deciso di mettere tutto correttamente sotto /var/www/users/ e mi si è presentata la necessità di creare automaticamente le directory mancanti e i relativi link simbolici alle varie home directory. L’ho fatto con un semplicissimo script in bash, che pubblico qui nel caso possa essere utile anche a qualcun altro. Ci ho messo anche un po’ di output per rendere il codice chiaro anche a chi è alle prima armi con la bash.

Attenzione! Alla riga 18 viene fatta la copia di un fast-cgi presente nella directory /var/www/users/ivan/. Ovvio che dovete sostituire ivan con il nome di un utente presente sul vostro server.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
 
echo "Inizializzazione script..."
 
for i in $( ls /home/ ); do
  echo "  Sto processando '$i'"
  if [ -L /home/$i/public_html ]; then
    echo "    Il link simbolico /home/$i/public_html esiste gia' ... salto!"
  else
    echo "    Il link simbolico /home/$i/public_html non esiste: provo a crearlo ... "
    if [ -d /var/www/users/$i ]; then
      echo "La directory /var/www/users/$i esiste, non mi resta che linkarla ... "
      /bin/ln -s /var/www/users/$i /home/$i/public_html
    else
      echo "    La directory /var/www/users/$i NON esiste, ora la creo ... "
      /bin/mkdir /var/www/users/$i
      echo "    Copio il FAST-CGI ... "
      /bin/cp /var/www/users/ivan/fast-cgi /var/www/users/$i/
      echo "    Sistemo i permessi per la directory creata ... "
      /bin/chown -R $i:$i /var/www/users/$i
      /bin/chmod 700 /var/www/users/$i
      echo "    Creo il link simbolico ... "
      /bin/ln -s /var/www/users/$i /home/$i/public_html
    fi
  fi
done
Condividi:
  • del.icio.us
  • Google
  • Digg
  • Sphinn
  • Facebook
  • Technorati
  • YahooMyWeb

Convertire FAT32 in NTFS con Windows XP

Tips & tricks, Windows Nessun commento »

Fino a qualche anno fa, installando Windows XP era pratica diffusa scegliere  di formattare la partizione principale con il filesystem di tipo FAT32. Questo principalmente per motivi di accessibilità dei dati anche da sistemi operativi obsoleti (Windows 98) o “alternativi” (per Linux l’accesso in lettura e scrittura alle partizioni NTFS è stato introdotto con un certo ritardo, per ovvie ragioni).

Capita ancora oggi di trovare vecchie workstation con filesystem FAT32. Decaduta ogni ragionevole motivazione per conservare questo tipo di scelta, in questi casi io consiglio di effettuare la conversione da FAT32 a NTFS, dal momento che si tratta di un’operazione sicura, collaudata e che porta benefici indubbi sul piano operativo, primo fra tutti la possibilità di gestire volumi di dimensioni superiori ai 32GB (limite massimo per FAT32).

L’operazione di conversione è estremamente semplice. È sufficiente aprire una finestra di DOS e impartire il seguente comando:

Convert X: /FS:NTFS /V /NoSecurity

  • X: corrisponde all’unità per cui vogliamo effettuare la conversione (ad esempio: C:)
  • /V indica di visualizzare i dettagli di ogni operazione (verbose mode)
  • /NoSecurity permette di non limitare l’accesso ai file convertiti in NTFS

Verrà richiesto il nome del volume per cui effettuare la conversione. Se il volume non ha nome, date invio senza inserire nulla. Il resto avviene in maniera pressoché automatica. Ecco un esempio dei semplici step attraverso cui passare:

Conversione Partizione Win XP (C)
Il file system è di tipo FAT32.
Inserire l'etichetta di volume corrente per l'unità C:: Win XP
Impossibile eseguire la conversione. Il volume è utilizzato
da un altro processo. Smontare il volume per eseguire
la conversione. TUTTI GLI HANDLE APERTI NEL VOLUME
CESSERANNO IN QUESTO MODO DI ESSERE VALIDI.
Forzare lo smontaggio su questo volume? (Sì/No)

Rispondere Sì (S) a quest’ultima domanda. Il sistema vi avviserà del fatto che è smontare il volume perché in uso e chiederà se si vuole programmare l’operazione al successivo riavvio. Anche in questo caso, rispondere affermativamente e riavviare la macchina.

Come dicevo, l’operazione è estremamente sicura e collaudata, ma - come si dice oltre oceano - “shit happens”, quindi consiglio di effettuare un backup preliminare nel caso in cui, ad esempio, vi tagliassero la luce proprio mentre state effettuando la conversione del filesystem.

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Sphinn
  • Facebook
  • Technorati
  • YahooMyWeb

Installazione di Debian Etch su RAID + LVM

Debian, Open Source, Sistema, Tips & tricks Nessun commento »

In questo post descrivo con la massima sinteticità e senza alcuna pretesa di completezza come si possa realizzare un RAID 1 (software) durante l’installazione di Debian Etch e come si configuri correttamente il LVM.

Su una delle mie workstation ho due hard disk identici da 320GB. Ho deciso di installarci l’ennesima Debian Etch e di mettere i due dischi in RAID. Ho avviato l’installazione e in un paio di minuti sono arrivato allo step in cui vanno effettuati i settaggi per il partizionamento dei dischi. Trattandosi di dischi S-ATA, il debian-installer me li ha riconosciuti come segue:

  • SCSI1 (0,0,0) (sda)
  • SCSI2 (0,0,0) (sdb)

Lo stesso discorso vale comunque anche per dischi IDE, in quel caso il debian-installer li vederebbe così:

  • IDE1 (hda)
  • IDE2 (hdc)

A questo punto ho creato una prima partizione di booting, di dimensioni minime (solo 512MB):

  1. selezionare il primo disco SCSI1
  2. scegliere come metodo di partizionamento “Manuale”
  3. selezionare la voce “SPAZIO LIBERO” sotto SCSI1
  4. scegliere “Crea una nuova partizione”
  5. selezionare “Inizio” come posizione della nuova partizione
  6. selezionare “Primaria” come tipo della nuova partizione
  7. inserire 512M come dimensione della nuova partizione
  8. scegliere “Volume fisico per il RAID” come modo d’uso della nuova partizione
  9. scegliere “Preparazione di questa partizione completata”

Poi ho creato la partizione destinata a contenere il filesystem vero e proprio:

  1. selezionare il primo disco SCSI1
  2. scegliere come metodo di partizionamento “Manuale”
  3. selezionare la voce “SPAZIO LIBERO” sotto SCSI1
  4. scegliere “Crea una nuova partizione”
  5. selezionare “Inizio” come posizione della nuova partizione
  6. selezionare “Primaria” come tipo della nuova partizione
  7. inserire 95% come dimensione della nuova partizione
  8. scegliere “Volume fisico per il RAID” come modo d’uso della nuova partizione
  9. scegliere “Preparazione di questa partizione completata”

Perché al punto 7 ho scelto di utilizzare solo il 95% del disco? Semplicemente perché, nel caso io debba sostituire uno dei due dischi, non avrò mai la certezza assoluta che il nuovo disco abbia esattamente lo stesso numero di cilindri etc. rispetto al disco originale, nemmeno se lo compero della stessa marca e dello stesso taglio. Ho bisogno quindi di un gap di tolleranza per mettermi al sicuro da possibili perdite di dati o inconsistenze durante la ricostruzione dei volumi. Certo, si spreca dello spazio che non verrà mai utilizzato, ma con dischi di queste dimensioni ce lo possiamo pure permettere.

Ora è necessario ripetere le operazioni appena descritte anche per il secondo disco (SCSI2) assicurandoci di avere effettuato esattamente le stesse scelte fatte per il primo.

Fatto questo, possiamo configurare il RAID 1 software. Per prima cosa creiamo il device multidisk destinato a contenere la partizione di boot:

  1. scegliere “Configurare il RAID software”
  2. confermare “Scrivere i cambiamenti sui dispositivi…”
  3. scegliere “Creare un device multidisk (MD)”
  4. selezionare “RAID1″ come tipo di device multidisk
  5. confermare “2″ come numero di device attivi per l’array RAID1
  6. confermare “0″ come numero di device “spare”
  7. abilitare solo /dev/sda1 e /dev/sdb1 come device attivi
  8. scegliere “Terminare”

Poi creiamo il device multidisk destinato a contenere il filesystem vero e proprio:

  1. scegliere “Configurare il RAID software”
  2. confermare “Scrivere i cambiamenti sui dispositivi…”
  3. scegliere “Creare un device multidisk (MD)”
  4. selezionare “RAID1″ come tipo di device multidisk
  5. confermare “2″ come numero di device attivi per l’array RAID1
  6. confermare “0″ come numero di device “spare”
  7. abilitare solo /dev/sda2 e /dev/sdb2 come device attivi
  8. scegliere “Terminare”

Ora possiamo passare alla creazione dei volumi logici. Per prima cosa creo il volume destinato a fare da swap del sistema:

  1. scegliere “Configurare il Logical Volume Manager”
  2. confermare “Scrivere le modifiche sui dischi e …”
  3. scegliere “Creare i gruppi di volumi”
  4. scrivere “VG00″ come nome del gruppo di volumi
  5. abilitare solo /dev/md/1 come device per il nuovo gruppo di volumi
  6. scegliere “Creare un volume logico”
  7. selezionare il gruppo di volumi “VG00″
  8. scrivere “swap” come nome del volume logico
  9. scrivere “4GB” come dimensione del volume logico (almeno il doppio della RAM)

Poi creo il volume destinato al filesystem vero e proprio:

  1. scegliere “Creare un volume logico”
  2. selezionare il gruppo di volumi “VG00″
  3. scrivere “filesys” come nome del volume logico
  4. confermare il valore massimo disponibile proposto come dimensione del volume logico
  5. scegliere “Terminare”

A questo punto posso creare le partizioni:

  1. selezionare il n° 1 sotto “LVM VG VG00 LV filesys”
  2. creare la partizione normalmente (scegliendo “Ext3″ come modo d’uso e “/” come mount point)
  3. scegliere “Terminare”
  4. selezionare il n° 1 sotto “LVM VG VG00 LV swap”
  5. creare la partizione di swap normalmente (scegliendo “swap area” come modo d’uso)
  6. confermare “Scrivere le modifiche sui dischi e …”

Fatto questo, è sufficiente procedere con l’installazione di Debian come di consueto.

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Sphinn
  • Facebook
  • Technorati
  • YahooMyWeb

Montare una partizione NTFS in scrittura con OpenSUSE

Open Source, Sistema, Tips & tricks Nessun commento »

Dopo avere installato OpenSUSE 11.0 su una delle mie workstation portatili mi sono accorto che l’accesso alle due partizioni NTFS riservate a Windows è possibile in scrittura solo per l’utente root. Rapida occhiata al file /etc/fstab per scoprire che si tratta di una scelta di default dell’installer di OpenSUSE, scelta che senz’altro è dettata da motivi di sicurezza ma che è altrettanto facilmente aggirabile. È sufficiente infatti modificare come segue i valori fmask e dmask nello stesso file /etc/fstab:

# /dev/disk/by-id/scsi-SATA_FUJITSU_MHV2100_NS91T5B26UKA-part2 /windows/D           ntfs-3g    users,gid=users,fmask=133,dmask=022,locale=it_IT.UTF-8 0 0
/dev/disk/by-id/scsi-SATA_FUJITSU_MHV2100_NS91T5B26UKA-part2 /windows/D           ntfs-3g    users,gid=users,fmask=113,dmask=002,locale=it_IT.UTF-8 0 0

Nell’esempio ho commentato la riga originale (fatelo sempre anche voi: non si sa mai…) ed ho cambiato il valore di fmask da 133 a 113 e quello di dmask da 022 a 002. In questo modo l’accesso in scrittura viene concesso non solo all’owner del filesystem ma anche a tutti gli utenti del gruppo users.

Fatto questo, ricordate di smontare e rimontare il filesystem perché le modifiche abbiano effetto immediato:

# umount /windows/D
# mount /windows/D

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Sphinn
  • Facebook
  • Technorati
  • YahooMyWeb

Sun xVM VirtualBox su Debian Etch

Debian, Open Source Nessun commento »

Non ci sono mezzi termini: la mia esperienza con VirtualBox di Sun Microsystems è stata semplicemente entusiasmante! Ora posso utilizzare i software che girano meglio sotto Windows XP senza dovere ogni volta riavviare la mia Linux box. Indispensabile, provare per credere! Inutile perdermi in spiegazioni su come effettuare l’installazione perché è di una semplicità imbarazzante: è sufficiente installare il pacchetto con dpkg. In questo modo anche chi - come me - utilizza un kernel compilato ad hoc verrà assistito nella compilazione (completamente automatica) dei moduli necessari alla virtualizzazione. Ecco gli step:

  1. visitare la pagina http://www.virtualbox.org/wiki/Downloads e clicca su Binaries (all platforms)
  2. accettare le condizioni d’uso e scaricare il file corretto (nel mio caso: virtualbox_1.6.4-33808_Debian_etch_i386.deb)
  3. installare con dpkg:
    #dpkg -i virtualbox_1.6.4-33808_Debian_etch_i386.deb

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Sphinn
  • Facebook
  • Technorati
  • YahooMyWeb

Piccola guida ai principali comandi Linux

Debian, Open Source, Segnalazioni, Shell, Sistema, Tips & tricks Nessun commento »

Riproduco in questo post la tabella realizzata da Pádraig Brady e pubblicata sul suo sito Internet ufficiale (http://www.pixelbeat.org). La tabella mostra alcuni fra i principali comandi per amministrare un server Linux, con una breve spiegazione e - in alcuni casi - link a pagine di approfondimento.

This is a linux command line reference for common operations. Examples marked with • are valid/safe to paste without modification into a terminal, so you may want to keep a terminal window open while reading this so you can cut & paste. All these commands have been tested both on Fedora and Ubuntu.

Leggi il resto »

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Sphinn
  • Facebook
  • Technorati
  • YahooMyWeb

Tabelle riassuntive di entity e caratteri speciali HTML

HTML, Localizzazione, Tips & tricks Nessun commento »

Come sapete le entity sono una particolare forma di codifica usata in HTML per individuare alcuni caratteri speciali in maniera indipendente dalla tastiera e dal sistema operativo che si sta utilizzando. Le prime definizioni delle entity sono state introdotte nella versione HTML 2.0, le successive nella 3.2. Per questo e per tanti altri motivi che non è il caso di discutere qui, non tutti i browser supportano tutte le entity.

Quelle che riporto nella prossima pagina sono tabelle riassuntive delle principali entity e di altri caratteri speciali che possono rivelarsi utilissimi durante lo sviluppo di applicazioni per il web, specie quando si ha a che fare con versioni multilingue di interfacce HTML. Le tabelle provengono da un sito Internet inglese di cui ho perso qualsiasi riferimento, se qualcuno avesse modo di rintracciarne la fonte sarei lieto di poterla citare.

Leggi il resto »

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Sphinn
  • Facebook
  • Technorati
  • YahooMyWeb

Installare Interchange su Debian Etch

Debian, Open Source, Tips & tricks Nessun commento »

Come si legge sul sito Internet ufficiale del progetto, Interchange è una suite composta da un’applicazione server e un framework di componenti extra dedicati alla erogazione di servizi di commercio elettronico a livello professionale. Si tratta di uno dei più longevi e meglio supportati progetti Open Source mai realizzato.

Per esperienza diretta (io lo uso dal 1999) posso dire che Interchange sia davvero la migliore applicazione ecommerce oggi disponibile. Certo, necessita di una approfondita competenza sia dal punto di vista sistemistico che di sviluppo: sin dal principio la scelta di Interchange Development Group (il team di sviluppo di Interchange) è stata quella di realizzare una perfetta integrazione tra l’ambiente UNIX/Linux e l’interfaccia web. Per questo motivo mettere mano a questo programma non è mai cosa semplice, ma permette sempre di ottenere risultati straordinari. Chi decida di provarlo sappia che il prerequisito fondamentale è un’ottima conoscenza di PERL, MySQL e Apache.

Detto questo, ecco come si installano i pacchetti di Interchange su un server Debian GNU/Linux 4.0 (Etch):

  1. Aggiornare il file /etc/apt/sources.list aggiungendo i repositori ufficiali messi a disposizione da Interchange Development Group:
    deb http://ftp.icdevgroup.org/interchange/debian interchange main
    deb-src http://ftp.icdevgroup.org/interchange/debian interchange main
  2. Aggiornare le sorgenti di apt-get:
    # apt-get update
  3. Procedere con l’installazione via apt-get del software e delle relative dipendenze:
    # apt-get install interchange interchange-cat-standard interchange-ui

Questo è quanto. Ora che Interchange è installato sul nostro server non resta che creare il nostro primo negozio online con il comando:

# makecat

Rispondendo alle domande dell’input di comando realizzeremo il nostro primo catalogo di prodotti. Per la gestione completa del programma e per la customizzazione del codice e dei template grafici, si veda la documentazione ufficiale di Interchange. Provatelo: ne vale la pena!

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Sphinn
  • Facebook
  • Technorati
  • YahooMyWeb

FreeBSD: come effettuare l’aggiornamento dei ports

FreeBSD, Open Source, Tips & tricks Nessun commento »

Prima di tuffarmi a capofitto nel mondo di Debian GNU/Linux ho lavorato alcuni anni quasi esclusivamente con FreeBSD, che continuo ad utilizzare su alcuni server che ospitano applicazioni critiche.

Come (quasi) tutti sanno, FreeBSD mette a disposizione due meccanismi distinti per l’installazione delle applicazioni: il sistema dei Packages per l’installazione di pacchetti precompilati e l’albero dei Ports per l’installazione autocompilante. Il primo metodo di gestione dei pacchetti somiglia in tutto e per tutto a quelli adottati dalle principali distro Linux. Per chi lavora abitualmente con Slackware le analogie sono particolarmente evidenti, come dimostra la screenshot di una pagina di `sysinstall` che riproduco di seguito.

Diverso invece il caso dei ports, che in un certo senso sono il “vero” strumento di gestione del software sotto FreeBSD. La gestione dei ports permette di scaricare localmente il tree, ovvero l’alberatura completa delle istruzioni di compilazione e installazione, suddivisa per categorie di software. In ogni singolo port scaricato nel tree locale è riportata la descrizione delle dipendenze e lo scheletro del codice. Attraverso una serie di semplici comandi è possibile installare, disinstallare, reinstallare, cancellare, aggiornare ogni programma installato sul server, compresi i servizi core del sistema operativo.

Per una corretta manutenzione dell’alberatura dei ports è bene predisporre un meccanismo di aggiornamento dei tree. Per prima cosa, assicuriamoci che i ports siano installati sul server, in caso contrario pensiamoci noi:

# pkg_add -r cvsup-without-gui
# mkdir /usr/ports

Il primo comando installa CVSup, il software con cui sotto FreeBSD si gestisce il versioning dei port.

Procediamo ora al popolamento dell’alberatura aggiornata dei ports:

# cvsup -L 2 -h cvsup9.FreeBSD.org /usr/share/examples/cvsup/ports-supfile

Capita spesso che, dopo molti secondi di inattività, il comando restituisca un errore di connessione. Non vi preoccupate, in questo caso attendete qualche secondo oppure provate a cambiare repository scalando da 9 - teoricamente il meno utilizzato - a scendere:

# cvsup -L 2 -h cvsup8.FreeBSD.org /usr/share/examples/cvsup/ports-supfile
# cvsup -L 2 -h cvsup7.FreeBSD.org /usr/share/examples/cvsup/ports-supfile
# cvsup -L 2 -h cvsup6.FreeBSD.org /usr/share/examples/cvsup/ports-supfile
# cvsup -L 2 -h cvsup5.FreeBSD.org /usr/share/examples/cvsup/ports-supfile
# cvsup -L 2 -h cvsup4.FreeBSD.org /usr/share/examples/cvsup/ports-supfile
[...]

Ripetendo questa semplice operazione ogni volta che vorremo effettuare un aggiornamento completo dei ports avremo sempre a disposizione software aggiornato anche per il nostro server FreeBSD. Se vogliamo, ad esempio, installare l’ultima versione di `mutt`, il celebre programma di gestione della posta elettronica da linea di comando, procediamo come segue:

# cd /usr/ports
# make search name=Mutt
# cd mail/mutt
# make install clean

Fatto… :-)

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Sphinn
  • Facebook
  • Technorati
  • YahooMyWeb

Comando `explain` per ottimizzare le query con MySQL

MySQL, Open Source, Tips & tricks Nessun commento »

Quando un’applicazione raggiunge un livello di complessità elevato si rischia di perdere di vista alcuni dettagli - apparentemente minori - che spesso si rivelano fondamentali per una esecuzione armoniosa e ottimizzata dell’intera applicazione.

Dovendo gestire database molto articolati con MySQL, ad esempio, si incorre facilmente in piccoli errori di valutazione circa l’effettivo consumo di risorse che può generare una istruzione SQL. Può essere utile in questi casi ricorrere ad un semplice strumento che ci rinfreschi le idee circa la struttura della table che andremo ad interrogare: il comando `explain`.

Grazie al comando `explain` è possibile analizzare quali indici chiama in causa una query e ottimizzare di conseguenza le dichiarazioni INSERT, specie quando si ricorre a quelle multiple per memorizzare più righe con una sola istruzione SQL. Il comando `explain` vi mostra quali indici vengono utilizzati da ogni query, oltre ad altre importanti informazioni.

Per rendere più efficienti le query dovremo fare in modo che tutte le tabelle interessate vengano lette attraverso gli indici, senza subire uno scorrimento completo (table scan). In questo senso le informazioni ricavate mediante `explain` possono rivelarsi fondamentali.

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Sphinn
  • Facebook
  • Technorati
  • YahooMyWeb