---------------------------------------------------------------------------- Scuola di Specializzazione in Fisica Sanitaria dell'Universita' di Bologna Marcello Galli, Anno 2005-2006 Lezioni di Informatica http://www.helldragon.eu/marcello/galli_lezioni/ ---------------------------------------------------------------------------- ------------- Esercitazione ------------- Reperire, compilare, installare e far funzionare su un sistema Unix un software complesso, operante in rete. ----------------------------------------------------------------------------- In queste istruzioni si suppone che il gruppo che lavora abbia username: studenti0 e che sia alla consolle della macchinadi nome: PC1 Il server apache dovra' essere istallato sulla macchina di nome pcprof3, non si sta lavorando alla consolle di questa macchina, per cui tutto va fatto in remoto, via ssh. Il software e' gia' stato reperito e posto in rete, accessibile via web, nella sua directory ~/public_html, dell'utente: studente, sulla macchina di nome:pcprof. La versione di Apache che si vuole installare e' la 2.2.2. Si procedera' secondo i seguenti passi: 1 - dalla macchina locale (PC1) si guarda la documentazione ed i files di interesse in : http://pcprof/~studente Si usa un browser web qualunque; 2 - dalla macchina PC1 ci si collega alla macchina pcprof3 via telnet, o meglio ssh Il resto delle operazioni viene effettuato in remoto, su pcprof3 ; 3 - si scarica il software che si trova in http://pcprof/~studente in una propria directory; 4 - si controlla l'integrita' dei file reperiti ed eventualmente la loro firma digitale; 5 - si decomprime il software reperito e si guarda la struttura delle directory di apache per vedere come e' strutturato; si leggono le istruzioni di istallazione fornite con il software ; 6 - si crea il file Makefile, usando la procedura fornita col server apache ; 7 - si compila il programma con l'utility make; 8 - sempre utilizzando make, si istallano le componenti in un sottodirettorio della propria home ; 9 - si cerca una porta TCP disponibile ; 10 - si modifica il file di configurazione di apache in modo che utilizzi questa porta ; 11 - si fa partire il server apache e, dalla macchina PC1, si controlla di avere il processo corrispondente al server installato in stato LISTEN sulla porta scelta; si prova ad accedere ai documenti forniti dal server; si osserva come ci sia ora una connessione TCP fra server su pcprof3 ed il client su PC1; 12 - si crea un file HTML con un documento da rendere disponibile col server e lo si mette nella directory giusta per renderlo accessibile ; si controlla, dalla macchina PC1, che il documento sia accessibile; 13 - si controllano li accessi effettuati nei files di log di apache ; 14 - infine si ferma il server apache. ---------------------------------------------------------------------------- Dettagli del procedimento: 1) Uso di un browser per guardare la documentazione ed i files di interesse: il browser va indirizzato a: http://pcprof/~studente/Apache-server notare l'uso del segno ~ per indicare le directory personali degli utenti resi accessibili da un web server di sitema . la URL punta a: /home/studente/public_html/Apache-server sulla macchina pcprof; questa directory contiene : httpd-2.2.2.tar.gz : il programma apache,come archiviocompresso httpd-docs-2.2.0.en.pdf : la documentazione, in formato pdf httpd-2.2.2.tar.gz.md5 : un checksum del file httpd-2.2.2.tar.gz httpd-2.2.2.tar.gz.asc : una firma digitale del file httpd-2.2.2.tar.gz keys : le chiavi pubbliche degli sviluppatori di apache istruzioni_esercizio_installare_apache.txt : queste istruzioni 2) collegamento a macchina remota: telnet pcprof3 username: studenti0 password: .... e' meglio usare ssh, che cripta il collegamento. Il resto, salvo quando specificato, viene effettuato sulla macchina pcprof3, operando da un terminale remoto, alla consolle della macchina PC1. 2-a) mkdir Apache Si crea un sottodirettorio, e si lavora in questo cd Apache e' bene organizzare ordinatamente la propria struttura di directory in modo da avere attivita' o lavori diversi in direttori diversi. 3) Si scarica il software nella directory creata. Si puo' utilizzare un browser; dopo aver settato la variabile DISPLAY in modo che punti allo schermo di PC1: export DISPLAY=PC1:0.0 ; mozilla & Quindi usare il tasto destro del mouse e l'opzione: "save as" per copiare i files da pcprof a pcprof3, stando sulla consolle di PC1. Oppure usare un programma che scarica dal web in modo non grafico; ad esempio wget: wget http://pcprof/~studente/Apache-server/httpd-2.2.2.tar.gz wget http://pcprof/~studente/Apache-server/httpd-2.2.2.tar.gz.asc wget http://pcprof/~studente/Apache-server/httpd-2.2.2.tar.gz.md5 wget http://pcprof/~studente/Apache-server/httpd-docs-2.2.0.en.pdf wget http://pcprof/~studente/Apache-server/KEYS 4 ) Controllo dell'integrita' dei files: Il comando md5sums calcola un hash di un file, confrontando questo hash con quello in: httpd-2.2.2.tar.gz.md5 ; in questo modo si puo' verificare che il file sia stato trasferito in modo corretto; si fa: md5sums httpd-2.2.2.tar.gz e si controlla che il risultato sia eguale all'hash in: httpd-2.2.2.tar.gz.md5 Questo si puo' fare anche in modo sintetico con il comando: md5sums -c httpd-2.2.2.tar.gz.md5 4-bis ) controllo della firma digitale. La firma ( un hash di httpd-2.2.2.tar.gz, crittografato con la chiave privata) si trova in: httpd-2.2.2.tar.gz.asc Le chiavi pubbliche usate per la firma sono nel file KEYS. Ovviamente non ha senso scaricare dallo stesso sito firma, chiavi e files: se uno e' falso lo sono anche gli altri; ma questo e' solo un esercizio... Useremo gpg, un tool della gnu per le firme digitali. Il comando: gpg --list-keys vi mostra che chiavi avete nel vostro database di chiavi pubbliche. Il database si trova nella directry ~/.gnupg gpg --import KEYS aggiunge le chiavi nel file KEYS al vostro database di chiavi pubbliche; se ora infatti fate: gpg --list-keys vedete che avete molte chiavi nel vostro database. Per verificare la firma si fa: gpg --verify httpd-2.2.2.tar.gz.asc httpd-2.2.2.tar.gz 5) Si decomprime il file, notare l'uso della pipe, zcat decomprime il file e passa il suo output in input al programma tar, che estrae i filel dall'archivio, l'argomento "f -" nel tar indica che l'archivio viene letto dallo standard input. zcat httpd-2.2.2.tar.gz | tar -xvf - Il compressore utilizzato e' il gzip della gnu, si poteva anche procedere in 2 passi: gunzip httpd-2.2.2.tar.gz che decomprimeva e creava un file senza il suffisso .gz tar -xvf httpd-2.2.2.tar Tar crea archivi di files, in un unico file, il flag x indica di decomprimere, v sta per "verbose", f precede il nome del file da trattare. oppure fare tutto in una volta sola; tar accede a files compressi da gzip con: tar -xvzf httpd-2.2.2.tar.gz Il comando crea una gerarchia di directory, contenente il software apache. 5-bis) Esaminare la struttura delle directory e vedere come viene in genere organizzato un grosso programma C in ambiente Unix. Il nome del direttorio principale (httpd-2.2.2) indica di che software si tratta e la versione dello stesso. I sources C sono in una serie di subdirectories, componenti diverse del software si trovano in directories diverse. Nel direttorio principale ci sono istruzioni ed indicazioni generali ( file README, INSTALL , LICENSE etc. etc. ) vediamo qui anche i files per compilare e configurare il software. Quando si installa del software bisogna sempre leggere i files README e dare un'occhiata alla documentazione. Al contrario di Windows l'istallazione del software non e' una procedura automatica, da fare in modo inconsapevole. 6) creazione del Makefile Se si e' data un'occhiata alla documentazione si sa che assieme a questo software e' distribuita una procedura di shell ( configure) che crea un Makefile, in base ad opzioni dell'utente ed alle caratteristiche del sistema su cui si lavora. Apache e' utilizzabile su molte piattaforme unix, la procedura esamina la vostra macchina e crea il Makefile giusto per voi, se ci riesce. In caso contrario occorre rivedere il Makefile generato e correggerlo per adattarlo alla vostra situazione. Prefix indica dove verra' istallato il software, in genere si istalla su /usr/local o /local, ma siccome state lavorando a livello utente e non come amministratori di sistema, indicherete un sottodirettorio della vostra home. Date un'occhiata alla procedura configure prima di eseguirla, poi fate: cd httpd-2.2.2 ./configure --prefix=/home/studenti0/mioserver Date un'occhiata al Makefile che la procedura crea 7) make Utilizza il Makefile per compilare e linkare il tutto. Notate come la procedura percorra l'albero delle directory in cui c'e' il codice, esegua le compilazioni delle singole parti e poi faccia il link del tutto. Il file eseguibile, il vostro server, si chiama httpd. 8) make install I files eseguibili e tutto quanto necessario all'apache viene spostato in /home/studenti0/mioserver , come avete indicato. portatevi in /home/studenti0/mioserver ed osservate come e' strutturato il server apache. Anche qui vediamo una serie di directory, ognuna con una sua specifica funzione: man : gli help in linea manual : i manuali in vari formati logs: ove vanno i log files lib: le librerie etc etc. Se avete guardato la documentazione saprete che dovrete operare nei seguenti direttori: - conf , che contiene i files di configurazione - htdocs , che contienei documenti web che veranno resi disponibili. - bin , ove sono gli eseguibili che fanno partire il server apache. Quando si istalla apache a livello di sistema non si ha in genere una gerarchia di direttori propria di apache, ma i vari sottodirettori sono integrati nel software di sistema, e avrete ad esempio : man in /usr/man, bin in usr/bin i files di configurazioni in /etc , i documenti possono essere in /var etc etc. Ovviamente tutta la configurazione puo' essere cambiata da chi gestisce il sistema. Un server apache e' compreso in quasi tutte le distribuzioni di Linux. 9) Ora cerchiamo una porta libera per il nostro server web personale. Guardiamo che porte sono gia' occupate: more /etc/services questo files contiene un elenco di porte utilizzate dalle principali applicazioni. Ovviamente queste NON potete usarle. Dovete usare una porta con un numero alto, accessibili agli utenti e non usata dal sistema netstat -natup Vi mostra lo stato delle applicazioni di rete e che porte sono usate. Il flag t indica porte tcp, il flag u porte udp, il flag a indica sia porte in stato LISTEn che le altre, il flag u indica di aggiungere il campo con il pid (identificatore) del processo, ma se non siete root vi mostra solo i processi che vi appartengono. Il flag l limita la lista a porte in stato LISTEN. Il flag n mostra numeri, invece di nomi di porte ed hosts. Sulla porta 80 c'e' gia' un server apache, non potete usare la porta 80, e questo server non c'entra col vostro, voi state mettendo su un vostro server personale indipendente, che lavora come un vostro processo di rete e non come una applicazione di sistema. Sulla macchina alla fine si troveranno parecchi server apache, ognuno indipendente, che ascolta da una diversa porta TCP. 10) cd ~/mioserver/conf In questo direttorio si trova il file di configurazione httpd.conf che dovete cambiare. Questo file viene letto da apache alla partenza e determina il comportamento del server. Il file httpd.conf, con apposite direttive, include altri files, che sono in conf/extra, e contengono opzioni ausliarie. Se in httpd.conf togliete il simbolo # avanti al comando include corrispondente ad uno di questi files fate si' che il file venga incluso in httpd.conf quando viene letto da apache alla partenza. Ad esempio ssl.conf contiene opzioni per le connessioni criptate, userdir.conf opzioni per permettere agli utenti di rendere disponibili i files in ~/public_html e cosi' via. Questa organizzazione dei files di configurazione non e' standardizzata e cambia a seconda delle versioni di apache e distribuzioni linux. export DISPLAY=PC1:0.0 kwrite httpd.conf & Siccome non volete usare vi, ma un editor piu' comodo, come kwrite, dirigete il display sol computer alla cui consolle siete collegati. Usate & per lasciare il terminale libero. Ovviamente sulla macchina locale avete abilitato l'accesso grafico X11 a pcprof3, con: xhost +pcprof3 Come vedete httpd.conf contiene molte opzioni, tutte spiegate nella documentazione di apache. Vi interessano qui poche cose: ServerRoot: /home/studenti0/mioserver: dove avete messo il vostro server web; Listen : la porta tcp da cui ascoltare; DocumentRoot : dove sono i documenti per il web; Qualche parola su altre opzioni che andrebbero controllate: StartServers, MinspareServers,: questi parametri vanno abbassati, Maxclients etc. etc pilotano il numero di processi che il server usa in contemporanea. Siccome il vostro server privato non avra' molti visitatori mettete numeri piccoli, per non intasare la macchina con processi inutili. Tenete conto che apache e' fatto soprattutto per grossi server industriali, che subiscono migliaia di hits al secondo. Timeout, Keepalive, etc. anche andrebbero regolati in base al carico Listen 80 : Qui dovete mettere il numero della porta che utilizzerete, ad esempio: Listen 8001 , se la 8001 e' disponibile. ServerAdmin e' il vostro E-mail DocumentRoot : dove sono i documenti web Indicano opzioni che si applicano solo a certe directory ... FollowSymlink: permette al visitatore di seguire links, da usare con cautela, per evitare di rendere accessibili parti del sistema operativo o cose che non siano i vostri documenti web AllowOverride : se state configurando un server vero, con questa opzione permettete agli utenti di decidere loro le opzioni di accesso per i loro direttori, oppure li obbligate a seguire le prescrizioni fissate dal file di configurazione. Order allow,deny Queste opzioni decidono che host Allow from all hanno accesso al vostro server e quali no Deny from host host UserDir public_html : gli utenti del vostro sistema rendono pubblici i loro documenti mettendoli nel direttorio public_html nella loro home Qui non avete utenti. 11) cd ../bin ./apachectl start Questa e' una procedura di shell che fa partire apache. ps aux | grep httpd vi mostra il vostro server fra i processi attivi nel sistema. Vedete piu' copie del server web, in server genera vari processi "figli" per essere pronto a rispondere a molte richieste. Oltre al vostro server vedete quello di sistema ed eventualmente i server dei colleghi. netstat -nltp vi fa vedere da che porta ascolta il vostro server Utilizzando il browser sulla macchina locale PC1, alla cui console siete collegati, accedete al vostro server con la URL: http://pcprof3:8001/ Con: http://pcprof3:8002/ http://pcprof3:8003/ etc. accedete ai server dei colleghi. http://pcprof3:80 oppure http://pcprof3 : accede al server di sistema, gia' presente sulla macchina netstat -natp vi fa vedere la connessione TCP stabilita 12) Ovviamente la pagina contiene solo una frase, e' una pagina inclusa nel kit di installazione. Mettete al suo posto una pagina personalizzata. cd ~/mioserver/htdocs ls ; more index.html vedete quale e' il file che il server vi mostra kwrite index.html Quindi modificate la pagina. Con apache e' distribuita una pagina iniziale, di nome index.html, che non contiene praticamente nulla. Diverse distribuzioni linux inseriscono una loro pagina iniziale. Per modificare la pagina potete usare un editor a scelta, ovviamente non un editor tipo word, che inserisce elementi per la formattazione del testo oltre che i semplici caratteri ascii. Ci sono molti editor specifici per l'html, che vi aiutano nella formattazione delle pagine. Alcuni permettono di scrivere pagine senza sapere quasi nulla di html. (ce ne sono tanti di questo tipo sotto windows ) Una volta cambiata la pagina controllate che sia accessibile, procedendo come al punto 11 13) in: ~/mioserver/logs : trovate i files ove vengono registrati gli accessi al vostro server; il file access.log contiene gli accessi; il file error.log messaggi di errore. Dovreste trovarvi traccia degli accessi che avete effettuato. 14) ~/mioserverbin/apachectl stop questo ferma il server, la vostra pagine non e' piu' accessibile. Non c'e' piu' il vostro server in ascolto su una porta TCP -----------------------------------------------------------------------------