Configurazione di un ambiente CVS Windows-Linux sicuro tramite SSH

Postato da psegno il 29-08-2007 in: cvs, linux, ssh, windows

Questo how-to spiega come configurare una macchina Windows per accedere tramite un canale sicuro SSH ad una repository CVS ospitata da un server Linux. Spiega inoltre come configurare una repository CVS personale o condivisa e come fare in modo che i commit siano notificati via mail.

Requisiti

Il server linux dovrà avere l'applicativo cvs installato (per maggiori informazioni consultare il tutorial di DevGuy), ma non è necessario che sia configurato come server, difatti sarà utilizzato come client remoto. Dovrà inoltre essere installato e configurato il server SSH.

Nel client windows andranno installati i seguenti software:

Non strettamente necessari ma consigliati:

  • il client FTP/SFTP FileZilla
  • il tool di risoluzione conflitti WinMerge, che lavora in stretta collaborazione con TortoiseCVS

Configurazione del client

Il client sarà configurato in modo che ogni comando cvs sia eseguito da TortoiseCVS in una shell remota SSH: la comunicazione avviene tramite il tool plink, la chiave privata è gestita dal tool pageant.

  1. per prima cosa è necessario generare le chiavi pubbliche e private e copiare quella pubblica sul server (vedi il tutorial)
  2. va quindi avviato il tool pageant e aggiunta al suo catalogo la chiave privata generata (verrà richiesta la passphrase con cui è stata cifrata la chiave privata); da questo momento in poi tutte le applicazioni compatibili (Putty, PLink, FileZila) potranno avviare delle sessioni SSH con il server; è possibile specificare il nome della chiave come parametro di riga di comando tramite un link o uno script, ad esempio:
    c:\programmi\putty\pageant.exe c:\document and settings\user\.ssh\id.ppk
  3. bisogna infine specificare nella schermata di prelievo moduli di TortoiseCVS (mouse dx, CVS Preleva...) l'uso del protocollo ext (external tool); ecco come apparirà la CVSROOT nell'ipotesi di un utente user, di un server host e di un repository path /var/cvsroot:
    :ext:user@host:/var/cvsroot

    TortoiseCVS include una versione di PLink (TortoisePlink), ma si consiglia di utilizzare la versione più recente disponibile nella suite di Putty; è possibile modificare il tool esterno utilizzato nella sezione Strumenti delle preferenze di TortoiseCVS

A questo punto TortoiseCVS dovrebbe essere in grado di eseguire comandi sul server tramite un canale SSH; una verifica potrà essere effettuata non appena configurata la repository sul server.

Configurazione della repository sul server

Alcune delle operazioni descritte in seguito potrebbero essere eseguite remotamente sul server da riga di comando, ma verrà privilegiato l'utilizzo di TortoiseCVS, perché più in linea con lo scopo di questo tutorial (leggi: più comodo) e perché così si potrà verificare la corretta configurazione del client.

  1. come primo passo bisogna aprire una shell remota SSH tramite putty, utilizzando la chiave appena generata; continuiamo nell'ipotesi che l'utente identificato dalla chiave privata abbia login user; una volta effettuato il login (se pageant è già stato avviato non sarà necessario specificare la chiave privata da utilizzare) si avrà a disposizione una console remota per configurare la repository:
    • nel caso si desideri configurare una repository personale non sarà necessario prendere particolari accorgimenti per quanto riguarda i permessi delle directory, al limite bloccare l'accesso agli altri utenti del server:
      user@host:~$ cvs -d /home/user/cvsroot init
      user@host:~$ chmod 700 cvsroot
    • normalmente però le repository sono condivise, quindi andrà creato un gruppo che riunisca tutti gli utenti cvs, diciamo cvsusers, impostato come gruppo principale per ogni utente che voglia scrivere nella repository, altrimenti nessun altro sarà in grado di modificare i file creati da lui:
      user@host: su
      Password:
      host:/home/user# cvs -d /var/cvsroot init
      host:/home/user# chmod 775 cvsroot
      host:/home/user# usermod -g cvsusers user
      host:/home/user# exit
      user@host: touch yo
      user@host: ls -l yo
      -rw-r--r-- 1 user cvsusers 0 Aug 23 19:10 yo

      le ultime due istruzioni mostrano come da questo momento tutti i nuovi file creati dall'utente appartengano al gruppo cvsusers; sarebbe possibile utilizzare una ACL (Access Control List) per specificare un controllo su file e directory più fine, ma la soluzione proposta fornisce un buon grado di sicurezza e “impone” l'utilizzo di utenti specifici per il CVS, il che è considerata una buona prassi

  2. a questo punto è necessario impostare i cvswrappers ovvero un file che spieghi come trattare i file inseriti nella repository in base al loro nome (in genere in base all'estensione): a grandi linee tramite questo file si specifica se considerare un file binario o testuale, abilitando in questo caso il merging dei conflitti e l'editing concorrente:
    1. creare la sandbox, una cartella che ospiterà i contenuti locali del cvs, ad esempio:
      c:\document and settings\user>md desktop\sandbox
    2. posizionarsi nella sandbox e prelevare il modulo CVSROOT specificando gli altri parametri richiesti come descritto sopra
    3. aprire il file cvswrappers e configurarlo secondo le proprie necessità, qui è disponibile un esempio
    4. depositare (mouse dx, CVS Deposita...) le modifiche; se non si desidera inserire nella repository dei contenuti preesistenti, saltare il punto successivo
  3. importare ora eventuali moduli preesistenti
  4. dopo aver terminato l'importazione dei moduli è possibile configurare la repository perché i commit vengano notificati via mail ad un particolare indirizzo:
    1. scompattare l'archivio contenente il tool cvs-commit
    2. copiare i file .py, loginfo e commitinfo nel modulo c:\document and settings\user\desktop\sandbox\CVSROOT
    3. modificare il file loginfo inserendo i destinatari delle mail di notifica:
      DEFAULT	$CVSROOT/CVSROOT/CVSCommitNotification.py cvs@host,user@host %{sv}
    4. modificare il file CVSCommitConfiguration.py specificando il dominio da appendere al nome dell'utente che effettua il commit per ottenere l'indirizzo del mittente
    5. aggiungere gli script python al modulo (mouse dx, CVS Aggiungi Contenuto...) e depositare le modifiche
    6. aprire una shell remota SSH con putty e rendere eseguibili gli script:
      user@host: chmod 755 /var/cvsroot/CVSROOT/*.py
    7. cancellare il modulo CVSROOT dalla sandbox

A questo punto dovrebbe essere possibile utilizzare normalmente TortoiseCVS ed ottenere una mail di notifica all'indirizzo specificato per ogni commit.