Basi Dati - A.A. 2014-2015

Istruzioni fondamentalmente invariate dall'A.A. 2010-2011 e server fondamentalmente configurato come nell'anno accademico 2009-2010.

Caveat

  • queste note non sono sostitutive della pagina ufficiale del docente: per l'A.A. 2014-2015 il prof. Mauro Conti
  • alcune informazioni dell'ultima ora potrebbero trovarsi solo sulla home page del server (il server non è raggiungibile direttamente da casa: vedere le istruzioni per il tunnel).
  • non è compito di queste note parlare dei server ssh dei laboratori: vedi
  • non è compito di queste note mostare un esempio completo di consegna: vedi - Se non altrimenti specificato dal docente, le consegne possono essere date o esclusivamente in Torre o esclusivamente al Paolotti
  • non è compito di queste note spiegare i concetti che sottostanno all'uso dei tunnel ssh: vedi
  • non è compito di queste note mostare un esempio completo per ogni combinazione di client e sistema operativo
  • non è compito di queste note mostare un esempio completo di tunnel ssh fatto con programmi che hanno una interfacia grafica (GUI): vedi - Esempio di collegamento da MS Windows Vista mediante PuTTY e Filezilla

In breve

Queste istruzioni sono brevi per scelta: sostituite nomeutente con la vostra login ma copiate tutto il resto: ad esempio, http dove è scritto http ed https dove è scritto https; se qualcosa non funziona, non funziona e leggete con attenzione quanto scritto nelle sezioni maggiormente dettagliate.
  1. terminale #A (comando per il tunnel ssh)
    ssh -L23306:basidati:3306 -L20443:basidati:443 -L20080:basidati:80 -L20022:basidati:22 nomeutente@ssh.studenti.math.unipd.it
    
  2. da browser (per controllare che tutto funzioni)
    URL notevoli
      dai laboratori via tunnel
    Home del server http://basidati.studenti.math.unipd.it http://localhost:20080/
    Home page personale http://basidati.studenti.math.unipd.it/basidati/~nomeutente/ http://localhost:20080/basidati/~nomeutente/
    Accesso a phpMyAdmin https://basidati.studenti.math.unipd.it/phpmyadmin/ https://localhost:20443/phpmyadmin/
  3. terminale #B (comandi per la copia dei file sul server)
    scp -p -r -P 20022 xBasiDati/public_html nomeutente@localhost:basidati 
    scp -p -r -P    22 xBasiDati             nomeutente@ssh.studenti.math.unipd.it:
    
  4. terminale #C (collegamento ssh al laboratorio ed accesso a MySQL)
    ssh -p 20022 nomeutente@localhost
    ./bd2015.sh
    
  5. terminale #D (comandi per la consegna del progetto)
    ssh nomeutente@ssh.studenti.math.unipd.it
    cd xBasiDati
    consegna basidati2015
    

In maggior dettaglio

Password ed iscrizione al corso

È il genere di informazioni per cui fare strettamente riferimento al docente del corso; i tecnici dei laboratori, una volta ottenuta la lista di utenti dal docente, potrebbero:
  • dare accesso ssh al server basidati.studenti.math.unipd.it con la stessa password di ssh.studenti.math.unipd.it
  • dare accesso mysql al server basidati.studenti.math.unipd.it con una password a parte, ad esempio da cercare nella propria home nel file bd2015.passwd
Normalmente gli account vengono cancellati ogni anno accedemico: anche coloro che avevano un account debbono fare nuovamente domanda secondo le istruzioni del docente.

Tunnel e layout dei file

  • Il server da usare per
    • collegarsi al database (la password è diversa dalle altre; dopo essersi iscritti alla lista del corso, normalmente viene distribuita dai tecnici in un file della propria home)
    • collegarsi per una shell comandi
    • collegarsi per trasferire i file che devono apparire nel proprio spazio web (per quanto la password sia la stessa, la home è differente da quella dei laboratori)
    è basidati.studenti.math.unipd.it
  • Dentro tale server, la cartella da usare per tenere le pagine html, i file css ed i file php è:
    ~/basidati/public_html/
  • Di conseguenza dalle macchine dell'aula (scelto di tenere i file del sito nella cartella xBasiDati) va dato un comando per il traferimento dei file come:
    scp -p -r xBasiDati/public_html basidati.studenti.math.unipd.it:basidati
  • equivalentemente, agendo via tunnel, bisognerà indicare la porta, nell'esempio con -P 20022, e mettere nomeutente@localhost:basidati invece di basidati.studenti.math.unipd.it:basidati ovvero:
    scp -p -r -P 20022 xBasiDati/public_html nomeutente@localhost:basidati
  • Proprio come nel 2009-2010, il sito personale sarà raggiungibile dall'indirizzo:
    http://basidati.studenti.math.unipd.it/basidati/~nomeutente/ (notare sia basidati senza trattini sia il protocollo HTTP)
  • di conseguenza dal browser di casa gli eventuali tunnel (scelta la porta 20080) obbligheranno a scrivere indirizzi come:
    http://localhost:20080/basidati/~nomeutente/ (notare sia basidati senza trattini sia il protocollo HTTP)
  • oltre che nel proprio spazio web e nel database, potrebbe essere necessario fare una consegna col comando consegna; ciò normalmente non avviene nel server del corso ma in una macchina che abbia la home dei laboratori scelti dal docente. Per la consegna dell'A.A. solo stati scelti quelli del Paolotti e quindi biosogna fare ssh a ssh.studenti.math.unipd.it

Permessi

Per quanto rozzo (il permesso di esecuzione serve solo alle cartelle ed è inutile anche per i file php) i permessi posso essere settati in modo tale da far vedere le pagine statiche ed eseguire gli script server side con il comando:
chmod -R 750 ~/basidati/public_html

Come detto nelle note 2008-2009, l'opzione -p di scp è utile a preservare i permessi (è conveniente settarli una volta per tutte sul pc di partenza piuttosto che tutte le volte sul server di arrivo).

Nella cartella degli script cgi (o degli script di appoggio) potrebbe inoltre essere il caso di dare il comando fromdos *; ad esempio:
ssh basidati fromdos ~/basidati/cgi-bin/* La riga di comando sopra viene eseguita in ssh visto che in casi simili è probabile il comando debba essere ripetuto (e solo sul server) ad ogni upload.

PhpMyAdmin

Istruzioni passo-passo

Prego dare la precedenza al sito del corso e al docente, in particolare per le domande che non riguardano l'attuale configurazione del server.

Preliminari importanti

Attenzione: anche collegandosi dall'aula a https://basidati.studenti.math.unipd.it/phpmyadmin/ potreste avere problemi col certificato del sito: seguire le istruzioni sui certificati (per l'uso di ssh le istruzioni sulle chiavi). Le chiavi dei vari server possono essere scaricate anche dall'apposita pagina di questo sito; meglio visitarla in https cosÌ da poter controllare che non siate incappati in un sito contraffatto phishing.

Esempio di collegamento mediante OpenSSH dal terminale di una macchina Linux o MacOS X o Cygwin al server del corso basidati

  1. nel punto successivo diremo al comando ssh di impostare dei tunnel fra le porte del server del corso (22, 80, 443, 3306) ed alcune porte locali (una qualsiasi quadrupla di porte come 20022, 20080, 20443, 23306); prima di tutto bisogna essere sicuri che tali porte locali siano libere; ecco quindi dei comandi da dare in un terminale locale ovvero un terminale che abbia il prompt della vostra macchina (nel seguito potremmo chiamarlo primo terminale). Per trovare una porta locale libera, ad esempio 20080 e 20022, tali porte non debbono apparire in elenco. Per controllare che non siano in uso va dato almeno uno dei comandi seguenti.
    netstat -tan | grep LISTEN | grep -v tcp6
    fuser -4 20022/tcp
    fuser -4 20080/tcp
    lsof -i :20022
    lsof -i :20080
    
    Nessuno di questi comandi è invero necessario ma sono utili per indagare eventuali problemi di connessione (le porte locali debbono essere libere perché ssh possa usarle). Lasciare da parte questo terminale ed usarne uno nuovo per il comando seguente.
  2. (comando per il tunnel ssh) Aprire un nuovo terminale locale (il prompt deve essere quello della vostra macchina, dopo il collegamento lo chiameremo terminale remoto e magari secondo terminale) e connettersi ad una macchina raggiungibile da casa impostando contemporaneamente i tunnel necessari (aggiungendo anche l'opzione -f ssh va in backgroud dopo aver chiesto la password così da avere solo i tunnel ma nessun prompt dei comandi su ssh.studenti.math.unipd.it o sshtorre.math.unipd.it); ad esempio:
    • opzione consigliata (usare il server ssh del Paolotti):
      ssh -L23306:basidati:3306 -L20443:basidati:443 -L20080:basidati:80 -L20022:basidati:22 nomeutente@ssh.studenti.math.unipd.it
      
      solo al Paolotti funziona (almeno per l'A.A. 2014-2015) il comando consegna
    • opzione per quando il server del Paolotti non funziona (usare il server ssh della Torre Archimede):
      ssh -L23306:basidati.studenti.math.unipd.it:3306 -L20443:basidati.studenti.math.unipd.it:443 -L20080:basidati.studenti.math.unipd.it:80 -L20022:basidati.studenti.math.unipd.it:22 nomeutente@sshtorre.math.unipd.it
      
      notare che qui vanno usati i FQDN in quanto la Torre e il Paolotti hanno sottodomini differenti
    Attenzione: le shell di questo punto, anche se in foreground, danno al più
    • la possibilità di collegarsi (solo dalle shell remote, non dal computer di casa) ai server interni come se si fosse in aula (in aula i tunnel non servono, vedi nota)
    • la possibilità di copiare i file in due passaggi, il primo da casa al server raggiungibile da casa ed il secondo da questo al server del corso (in questa manera i file possono essere trasferiti, anche da casa, senza tunnel)
    e con questo intendiamo che i comandi ssh, scp, rsync, sftp (anche grafici) non vanno lanciati dentro il terminale remoto appena aperto.
    Sarebbe altrettanto un errore aprire i tunnel dal prompt di dipXXX (o tXX); in questo caso sarà al più l'indirizzo 'http://dipXXX:20080' quello da digitare per sfruttare i tunnel: non è affatto detto che abbia senso usare tare url a casa.
  3. nel punto precedente abbiamo detto al comando ssh di impostare dei tunnel fra le porte del server del corso (22, 80, 443, 3306) ed alcune porte locali (una qualsiasi quadrupla di porte come 20022, 20080, 20443, 23306); ora che abbiamo dato al comando ssh l'opzione per aprire i tunnel può essere utile verificare se l'ha fatto: va dato almeno un comando dei comandi seguenti; se ad esempio le porte 20080 e 20022 erano libere e non apparivano in elenco, ora al contrario tali porte debbono apparire:
    netstat -tan | grep LISTEN | grep -v tcp6
    fuser -4 20022/tcp
    fuser -4 20080/tcp
    lsof -i :20022
    lsof -i :20080
    
    Nessuno di questi comandi è invero necessario ma sono utili per indagare eventuali problemi di connessione (le porte locali debbono essere in ascolto perché i vostri comandi possano usarle). Attenzione a dare questi comandi in una shell locale e non nei server ssh.studenti.math.unipd.it o sshtorre.math.unipd.it o basidati.studenti.math.unipd.it: che ci siano o meno porte 20080 e 20443 in ascolto su tali macchine sarà per voi pressoché indifferente visto che tali porte sono comunque bloccate dai firewall dei laboratori. Se come consigliato è stato usato un secondo terminale per creare il tunnel ssh, si può riutilizzare il primo terminale usato per il primo netstat anche per questo ulteriore netstat.
  4. Si può vedere la home page del server del corso (anche da Firefox):
    lynx http://localhost:20080/
    Attenzione a non chiudere il secondo terminale (quello remoto) o si chiuderenno anche i tunnel.

    La home page del server può essere vista sia in HTTP che in HTTPS.

  5. Si possono ora controllare le modifiche dal browser (anche da Firefox):
    lynx http://localhost:20080/basidati/~nomeutente/
    Attenzione a non chiudere il secondo terminale (quello remoto) o si chiuderenno anche i tunnel.

    La pagina personale può essere vista solo in HTTP (a meno di tunnel solo dalla porta 80, nell'esempio dalla porta locale 20080).

  6. phpMyAdmin è ora raggiungibile (anche da Firefox):
    lynx https://localhost:20443/phpmyadmin/
    Attenzione a non chiudere il secondo terminale (quello remoto) o si chiuderenno anche i tunnel.

    phpMyAdmin può essere visto solo in HTTPS (a meno di tunnel solo dalla porta 443, nell'esempio dalla porta locale 20443).

  7. (comandi per la copia dei file sul server) se si vuole fare direttamente l'upload sul server basidati.studenti.math.unipd.it dei file di una cartella locale (-r serve appunto per un copia ricorsiva), ad esempio xBasiDati, in terminale inizialmente locale (che potremmo chiamare terzo teminale), va lanciato un ulteriore processo scp (-P MAIUSCOLA per la porta, -p minuscola preserva i permessi come lettura, scrittura, esecuzione) oppure un ulteriore processo rsync (-p minuscola per la porta di ssh, -P MAIUSCOLA per --partial --progress):
    scp   -p -r   -P 20022         xBasiDati/public_html nomeutente@localhost:basidati
    rsync -e "ssh -p 20022 " -avrP xBasiDati/public_html nomeutente@localhost:basidati
    
    Attenzione a non chiudere il secondo terminale (quello remoto) o si chiuderenno anche i tunnel. I comandi di questo punto vanno dati in un terminale locale (ad esempio, dal terminale del pc di casa), non da una shell già aperta dentro l'aula; se i tunnel sono stati correttamente impostati a partire da un terminale locale (che diverrà remoto) non sarà nella macchina di destinazione che le porte scelte arbitrariamente (ad esempio 20022) saranno disponibili.
  8. (collegamento ssh al laboratorio) Se si vogliono dare comandi dentro il server basidati è necessario aprire un'altra shell lanciando, magari in un quarto terminale (inizialmente locale), verso il server del corso un secondo comando ssh (-p minuscola):
    ssh -p 20022 nomeutente@localhost
    Attenzione a non chiudere il secondo terminale (quello remoto) o si chiuderenno anche i tunnel. I comandi di questo punto vanno dati in un terminale locale (ad esempio, dal terminale del pc di casa), non da una shell già aperta dentro l'aula; se i tunnel sono stati correttamente impostati a partire da un terminale locale (che diverrà remoto) non sarà nella macchina di destinazione che le porte scelte arbitrariamente (ad esempio 20022) saranno disponibili. Del resto da una shell ssh già aperta nel server ssh dell'aula (come il secondo terminale, se le istuzioni sono stase seguite alla lettera) basta un collegamento diretto (di nuovo vedi nota)
  9. trasferendo i file da casa, può capitare che i file non abbiano i permessi giusti: in caso di errore e in mancanza del tempo per seguire le istruzioni sulla configurazione del server, provare il comando (invero un po' sciatto, le normali pagine html non hanno affatto bisogno di essere eseguibili):
    chmod -R 750 ~/basidati/public_html
    In caso di problemi con i permessi speciali si può invece dare il comando:
    chmod -R 0750 ~/basidati/public_html
    (le directory invero potrebbero tenere il bit S che così viene tolto, per limitarsi a togliere i permessi alle sole directory, vedi altrove).
    NB: se usato dopo il trasferimento dei file, il comando va dato in una shell del server web (non nel server ssh usato per i tunnel o nel computer di casa dove avrebbe senso solo prima del trasferimento e a patto di preservare i permessi).
  10. a volte capita che i file caricati attraverso form e script php (ad esempio le immagini) non risultino leggibili dal server web; ci sono varie soluzioni:
    • la meno elegante e meno portabile potrebbe essere usare la funzione exec come qui:
      exec("chmod -R 750 /path/alla/propria/home/basidati/public_html")
      
    • meglio cambiare i permessi di ogni singolo file dopo averlo caricato tramite chmod
    • move_uploaded_file($file_temp, $file_finale);
      chmod ( $file_finale , 0650 );
      
    • forse ancor più comodo impostare la giusta umask per tutti i file creati dallo script mettendo all'inizio dello stesso il comando umask
      umask(0127)
      
  11. (accesso a MySQL via tunnel) Anche la shell di MySQL può essere usata via tunnel; notare che il client mysql va allora installato sul computer locale e che mysql -h localhost tenterebbe di aprire una connessione coi socket (locali) e non attraverso il tunnel per cui va usato 127.0.0.1 come sotto (al solito la porta 23306 viene dalla scelta dei tunnel fatta nella seconda shell ma è solo un esempio); dare magari il comando sotto in un quinto terminale (inizialmente locale, poi parzialmente remoto):
    mysql -h 127.0.0.1 -P 23306 -u nomeutente -D nomeutente-ES --password=PASSWORD_DB_NOMEUTENTE
    Attenzione a non chiudere il secondo terminale (quello remoto) o si chiuderenno anche i tunnel.
  12. (accesso a MySQL direttamente in ssh) Nel caso non si voglia installare (o lanciare) il client mysql sul computer di casa, la shell di mysql può anche essere usata dentro il server ssh dei laboratori o dentro basidati stesso ovvero in una finestra remota (rispettivamente la seconda finestra di questi punti o la quarta); questo senza usare la porta aperta grazie al tunnel ma quella standard del server MySQL;
    mysql -h basidati.studenti.math.unipd.it -P 3306 -u nomeutente -D nomeutente-ES --password=PASSWORD_DB_NOMEUTENTE Andrebbe altrettanto bene aprire una quarta finestra o un quarto terminale, fare ssh ai server ssh dei laboratori senza attivare contestualmente nessun tunnel (se lo porte locali fossero in uso, si otterrebbe anzi un messaggio di errore) e da lì dare il comando sopra (del resto il client mysql è un programma a caratteri).
  13. come dice la man page del comando mysql potrebbe essere necessaria l'opzione --local-infile=1 perché possiate caricare dati da file dentro le vostre tabelle:
    Enable or disable LOCAL capability for LOAD DATA INFILE. With no value, the option enables LOCAL. The option may be given as --local-infile=0 or --local-infile=1 to explicitly disable or enable LOCAL. Enabling LOCAL has no effect if the server does not also support it.
  14. (comandi per la consegna del progetto) nel caso il docente preveda una consegna con il comando consegna tenere conto che la consegna potrebbe funzionare solo al Paolotti o solo in Torre Archimede; per l'A.A. 2014-2015 si possono usare solo i computer del Paolotti (incluso il server ssh) ed il nome della consegna è basidati2015

Esempi di collegamento mediante interfacce grafiche

Vedere la sezione apposita ma in caso di discrepanze scegliere le cartelle indicate sopra ed altrettanto per gli url.