Strumenti per la programmazione C++ in Linux



Documenti analoghi
Lezione 10: Librerie e compilazione separata

ATOLLO BACKUP GUIDA INSTALLAZIONE E CONFIGURAZIONE

Box Backup. Backup criptato incrementale. Francesco Versaci. 15 novembre 2007 Montebelluna. Montebelluna Linux User Group

Introduzione a Dev-C++

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito)

Mac Application Manager 1.3 (SOLO PER TIGER)

Il calendario di Windows Vista

INDICE. IL CENTRO ATTIVITÀ... 3 I MODULI... 6 IL MY CLOUD ANASTASIS... 8 Il menu IMPORTA... 8 I COMANDI DEL DOCUMENTO...

NOZIONI BASE PER ESERCITAZIONI

PORTALE CLIENTI Manuale utente

MANUALE PARCELLA FACILE PLUS INDICE

filrbox Guida all uso dell interfaccia WEB Pag. 1 di 44

Codifica: dal diagramma a blocchi al linguaggio C++

Guida all utilizzo del compilatore lcc-win32 per creare una applicazione console

FASE DEBUGGING: Compiler Linker. controllando che la voce Genera le informazioni per il debug cioè. "Generate debugging information"

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

FOXWave Gestione gare ARDF IZ1FAL Secco Marco Sezione ARI BIELLA

Joomla: Come installarlo e come usarlo. A cura di

Punto Print Il programma per stampare. Documentazione Tecnica

FtpZone Guida all uso

1 Copyright ChateXpert

Transparent Firewall

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione

Programmare in Java. Olga Scotti

COMPILAZIONE DI UN APPLICAZIONE. 1) Compilare il file (o i file se più d uno) che contengono il testo del programma. compilatore

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

GRUPPO CAMBIELLI. Posta elettronica (Webmail) Consigli di utilizzo

SOSEBI PAPERMAP2 MODULO WEB MANUALE DELL UTENTE

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress

Fate doppio click sul file con nome postgresql-8.0.msi e impostate le varie voci come riportato nelle immagini seguenti:

Manuale LiveBox APPLICAZIONE WINDOWS PHONE V (465)

Guida alla configurazione della posta elettronica dell Ateneo di Ferrara sui più comuni programmi di posta

4.1 FAX Sollecito consegne via (Nuova funzione)

1.0 GUIDA PER L UTENTE

1) GESTIONE DELLE POSTAZIONI REMOTE

Funzioni in C. Violetta Lonati

Fabio Zanasi. 12 maggio 2010

BackupPC Backup di rete con de-duplicazione

Gestione Risorse Umane Web

Iniziamo la panoramica sul funzionamento dell'svn sulla suite S.A.

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

FPf per Windows 3.1. Guida all uso

Server Galileo.

MODEM USB MDC525UP Guida Rapida LINUX

IBM SPSS Statistics per Linux - Istruzioni di installazione (Licenza per sito)

Installazione di Moodle. Preparato per: Gruppo A, Piattaforma di E - Learning Preparato da: Cinzia Compagnone, Vittorio Saettone

FtpZone Guida all uso Versione 2.1

MySidel application portal

Strumenti per lo sviluppo software in comunità

ARCHIVIA PLUS VERSIONE SQL SERVER

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (utente singolo)

Manuale d Uso di Mailchimp:

Servizi Remoti. Servizi Remoti. TeamPortal Servizi Remoti

DINAMIC: gestione assistenza tecnica

CONTENT MANAGEMENT SY STEM

per immagini guida avanzata Uso delle tabelle e dei grafici Pivot Geometra Luigi Amato Guida Avanzata per immagini excel

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

Inizializzazione, Assegnamento e Distruzione di Classi

Servizio di backup dei dati mediante sincronizzazione

Guida Joomla. di: Alessandro Rossi, Flavio Copes

Dispensa di database Access

Introduzione. Macro macro istruzione. Sequenza di comandi memorizzati programma

Guida all utilizzo. Rif. File: Pag. 1 / 14

Veneto Lavoro via Ca' Marcello 67/b, Venezia-Mestre tel.: 041/

MANUALE D USO DELLA PIATTAFORMA ITCMS

Progetto di Ingegneria del Software 2. SWIMv2

IBM SPSS Statistics - Essentials for R - Istruzioni diinstallazione per Mac OS

IBM SPSS Statistics - Essentials for R- Istruzioni di installazione per Mac OS

MANUALE EDICOLA 04.05

PROGRAMMA GESTIONE TURNI MANUALE UTENTE. Programma Gestione Turni Manuale Utente versione 1.1

NOZIONI BASE SHELL E SCRIPT LINUX

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

Installazione LINUX 10.0

MANUALE PER L UTILIZZO DELLA FUNZIONE EVENTI Rel.1.2 del 29 gennaio 2004

Manuale servizio Webmail. Introduzione alle Webmail...2 Webmail classica (SquirrelMail)...3 Webmail nuova (RoundCube)...8

Linguaggio C. Fondamenti. Struttura di un programma.

GERARCHIE RICORSIVE - SQL SERVER 2008

ISSA EUROPE PTSOFTWARE 2.0

BMSO1001. Orchestrator. Istruzioni d uso 02/10-01 PC

Installazione e caratteristiche generali 1

ISTRUZIONI PER L INSTALLAZIONE DI MINGW

INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014)

IL SISTEMA INFORMATIVO DEL POLICLINICO A. GEMELLI E DELL UNIVERSITA CATTOLICA DEL SACRO CUORE SEDE DI ROMA

WG-TRANSLATE Manuale Utente WG TRANSLATE. Pagina 1 di 15

Servizio di Posta elettronica Certificata (PEC)

Utilizzo della APP IrriframeVoice. Versione 1.0 maggio 2015

Joomla! 2.5:Utenti e permessi - Il wiki di Joomla.it

Configuration Managment Configurare EC2 su AWS. Tutorial. Configuration Managment. Configurare il servizio EC2 su AWS. Pagina 1

01/05/2013 Istruzioni per l installazione

Scuola Digitale. Manuale utente. Copyright 2014, Axios Italia

La VPN con il FRITZ!Box Parte I. La VPN con il FRITZ!Box Parte I

MANUALE UTENTE. In questo manuale verranno descritte tutte le sue funzioni. Il sistema OTRS è raggiungibile al seguente link:

Transcript:

g++, make,, Francesco Versaci webmonster --apud-- apf.it MontelLUG Montebelluna Linux User Group

Licenza d utilizzo Copyright c 2005, Francesco Versaci. Questo documento viene rilasciato secondo i termini della licenza Creative Commons (http://creativecommons.org). L utente è libero di: distribuire, comunicare al pubblico, rappresentare o esporre in pubblico la presente opera alle seguenti condizioni: Attribuzione Deve riconoscere la paternità dell opera all autore originario. Non commerciale Non può utilizzare quest opera per scopi commerciali. No opere derivate Non può alterare, trasformare o sviluppare quest opera. In occasione di ogni atto di riutilizzazione o distribuzione, deve chiarire agli altri i termini della licenza di quest opera. Se ottiene il permesso dal titolare del diritto d autore, è possibile rinunciare a ciascuna di queste condizioni. Le utilizzazioni libere e gli altri diritti non sono in nessun modo limitati da quanto sopra. Questo è un riassunto in lingua corrente dei concetti chiave della licenza completa (codice legale), reperibile sul sito Internet http://creativecommons.org/licenses/by-nc-nd/2.0/legalcode

Cosa vedremo? Strumenti per la compilazione g++ Il compilatore C++ della GNU make Per automatizzare la compilazione (e altro) Per automatizzare la documentazione dei sorgenti Per gestire e condividere gli archivi di sorgenti

g++ Panoramica g++ make Passi per la creazione dell eseguibile preprocessing Vengono espanse le macro (fra cui le direttive #include) compilation Il sorgente viene convertito in linguaggio assembly assembling Dall assembly al linguaggio macchina linking Si uniscono i vari pezzi per formare l eseguibile finale runtime Vengono caricate in memoria le eventuali librerie condivise

g++ Opzioni globali g++ make Estensioni riconosciute Le estensioni riconosciute dal compilatore come file C++ sono le seguenti: header.h codice.cc.c.cpp.cxx.cp Opzioni per l output g++ [-c] [-o output] nome.cc -c Compila senza collegare, non crea l eseguibile -o nomeoutput Chiama il file di uscita nomeoutput

g++ make g++ Esempio di compilazione base 1/2 saluti.cc saluti.h # i f n def SALUTI H # define SALUTI H # include<iostream> using namespace std ; void ciao ( ) ; #endif #include s a l u t i. h void ciao ( ) { cout << ciao! \ n ; } test.cc #include s a l u t i. h i n t main ( ) { ciao ( ) ; return 0; }

g++ make g++ Esempio di compilazione base 2/2 g++ -c saluti.cc g++ -c test.cc g++ -o runme saluti.o test.o./runme ciao! Spiegazione I primi due comandi compilano i file sorgenti creando i file oggetto.o. Il terzo li collega creando l eseguibile runme, lanciato alla quarta riga. Le prime tre righe si sarebbero potute sostituire con questa: g++ -o runme saluti.cc test.cc

g++ Opzione di avviso g++ make Queste opzioni segnalano in fase di compilazione delle probabile sviste del programmatore che non danno errori in compilazione. È consigliabile usarle sempre. Warnings -Wall Abilita molti avvisi utili (variabili usate senza inizializzazione, classi polimorfe senza distruttore virtuale, ecc.) -pedantic Avvisa se si devia dallo standard ISO -W (-Wextra) Abilita altri avvisi (confronto di unsigned con 0, funzioni che possono o meno restituire un valore, ecc.)

g++ Opzioni di debug g++ make Le seguenti opzioni generano dati aggiuntivi per facilitare il lavoro a debugger e analizzatori vari. Debug -g Crea informazioni per debug per vari programmi -ggdb Crea informazioni per debug con gdb -pg Crea informazioni per gprof -fprofile-arcs Registra le svolte prese nei salti condizionali, usato da gcov -ftest-coverage Altre informazioni usate da gcov

g++ make g++ Opzioni di ottimizzazione Il g++ può utilizzare diverse tecniche per ottimizzare l eseguibile prodotto. Opzioni per l ottimizzazione -01 Ottimizza salti condizionali e cicli, prova a eliminare alcuni if, srotola i cicli,... -02 Ottimizza l uso di sottoespressioni, riordina il codice minimizzando i salti,... -03 Rende inline le funzioni piccole,...

g++ Scelta dell architettura g++ make Il compilatore permette inoltre di scegliere il codice assembly da produrre per specifici processori. Quelli disponibili per i pc di casa sono i seguenti: Architetture x86 disponibili -march=cpu-type dove cpu-type è scelto frai seguenti: i386, i486, i586, i686, pentium, pentium-mmx, pentiumpro, pentium2, pentium3 pentium4, prescott, nocona, k6, k6-2, k6-3, athlon, athlon-tbird, athlon-4, athlon-xp, athlon-mp, winchip-c6, winchip2 e c3

g++ make g++ Opzioni di preprocessing Le seguenti opzioni riguardano l uso degli header. Architetture x86 disponibili -Idir Aggiunge la directory dir al percorso di ricerca degli header -MM Produce in output le dipendenze dei file da inserire nel Makefile Per esempio: g++ -MM *.cc saluti.o: saluti.cc saluti.h test.o: test.cc saluti.h

g++ Il collegamento g++ make Opzioni di linking -lnome Usa la libreria esterna nome -Ldir Cerca le librerie nelle directory dir -shared Crea un file oggetto condiviso, da usare come libreria dinamica -static Collega tutte le librerie in modo statico (anche le condivise) -s Togli la tavola dei simboli dall eseguibile Il comando ldconfig Il linker guarda di default nelle directory di sistema (/lib, /usr/lib). Se si vogliono aggiungere altre directory senza specificarle ogni volta col parametro -L è necessario aggiungerle nel file /etc/ld.so.conf e lanciare il comando ldconfig

g++ make g++ Compilazione con libreria esterna test.cc # include <gmpxx. h> # include <iostream> using namespace std ; i n t main ( ) { mpq class a ( 2/5 ) ; } cout << a a << endl ; return 0; Compilazione g++ -o runme test.cc -lgmp -lgmpxx./runme 4/25 Per usare una libreria esterna è necessario installare il pacchetto con gli header (libqualcosa-dev), includere l header e dichiarare al linker in quali librerie recuperare gli oggetti (si veda il manuale della libreria usata).

make Panoramica g++ make Per automatizzare la compilazione dei sorgenti lo strumento standard è il make. Noi analizzeremo la versione GNU di questo programma. Il Makefile In ogni directory che contiene sorgenti è necessario creare un file di testo, chiamato Makefile, che contiene le istruzioni per la compilazione. Come avviare la compilazione Una volta creato il Makefile è sufficiente lanciare il comando make (o make obiettivo) per avviare la compilazione.

make Regole Strumenti per la compilazione g++ make Sintassi delle regole obiettivo: prerequisiti comando1 comando2... Spiegazione obiettivo Il file da creare prerequisiti I file che servono per crearlo comando I comandi (si noti il tab obbligatorio) per creare l obiettivo Cosa fa il make? Controlla se qualcuno frai prerequisiti è stato modificato piú recentemente dell obiettivo. In caso affermativo esegue i comandi.

make Un esempio banale g++ make Makefile grosso.txt: piccolo1.txt piccolo2.txt cat piccolo1.txt piccolo2.txt > grosso.txt Il comando make grosso.txt controlla che il file grosso.txt non esista oppure sia piú vecchio dei file piccolo1.txt e piccolo2.txt. Quindi esegue il comando cat che crea il file grosso.txt. Nel caso l obiettivo sia già aggiornato make notifica la cosa con la seguente stringa: make: grosso.txt is up to date.

make Phony targets g++ make Spesso è comodo poter creare dei comandi svincolati da particolari file. Si usano allora degli obiettivi phony. Makefile.PHONY: clean clean: rm *.o Spiegazione Eseguire il comando make clean è equivalente ad eseguire rm *.o

make Variabili Strumenti per la compilazione g++ make Nei Makefile è possibile utilizzare delle variabili per evitare di riscrivere piú volte gli stessi comandi. Makefile CXXFLAGS = -Wall -W -pedantic test.o : test.cc g++ $(CXXFLAGS) -c test.cc saluti.o : test.cc g++ $(CXXFLAGS) -c saluti.cc

g++ make make Regole implicite e variabili automatiche Spesso si deve eseguire lo stesso comando su piú file. Makefile CXXFLAGS = -Wall -W -pedantic %.o : %.cc g++ $(CXXFLAGS) -c -o $@ $< Regole implicite La seconda riga fornisce una regola per trasformare qualunque file.cc in un file.o Variabili automatiche $@ Bersaglio $< Primo prerequisito $ Tutti i prerequisiti

make Inclusione di altri file g++ make È possibile includere altri file nel Makefile, cosa molto utile per includere file generati automaticamente. Makefile dep.mk: *.cc *.h g++ -MM *.cc > dep.mk include dep.mk Spiegazione Il file dep.mk viene rigenerato ogni volta che si modifica un file sorgente. Viene incluso ad ogni make per fornire le dipendenze dei file.

g++ make make Un esempio completo CXXFLAGS = -Wall -W -pedantic %.o : %.cc g++ $(CXXFLAGS) -o $@ -c $< runme : test.o saluti.o g++ $(CXXFLAGS) -o $@ $ˆ dep.mk : *.cc *.h g++ -MM *.cc > dep.mk include dep.mk

make Un esempio ricorsivo g++ make # elenco directory in cui eseguire il make DIRS = dir1 dir2 dir3 \ dir4 dir5 dir6 # esegui make in tutte le directory.phony: all $(DIRS) all: $(DIRS) @echo Fatto! $(DIRS): $(MAKE) -C $@

Panoramica È uno strumento di documentazione per codice C/C++ e simili. Come funziona? Si crea un file di configurazione Si commenta direttamente il codice (con una semplicissima sintassi) Si esegue il comando Documentazione prodotta La documentazione si può generare nei formati html, L A T E X, pdf, ps e rtf.

Configurazione Doxyfile Il file di configurazione, chiamato tipicamente Doxyfile, regola le diverse impostazioni (linguaggio, lingua, formati di documentazioni da produrre con le diverse opzioni,... ). Per creare un file di esempio, da modificare poi con un editor, basta digitare il comando -g. doxywizard Per i pigri esiste anche un frontend grafico che permette di configurare tutto da simpatici menu. Creare la documentazione Una volta creato il file di configurazione e commentati i sorgenti basta lanciare il comando perché si crei una directory docs contenente la documentazione.

Commenti alle classi mucca.h / / / Una mucca / Simpatica mammifera e r b i v o r a p r o d u t t r i c e d i l a t t e / class Mucca{ private : i n t q u a n t i t a l a t t e ; / / /< scorte d i s p o n i b i l i public : / / / mungi un po d i l a t t e void mungi ( i n t l i t r i l a t t e ) ; / / / mangia un po d erba void mangia ( i n t kg erba ) ; } ;

Documentare una funzione membro C è una sintassi particolare per commentare i parametri delle funzioni: Esempio / / / Si informa s u i g u s t i d e l l a mucca / \param nome erba I l nome d e l l erba \ r e t u r n Si o no? / bool t i p i a c e ( s t r i n g nome erba ) ;

Documentazione fuori dalle classi head.h / \ f i l e head. h \ b r i e f Qualche d e f i n i z i o n e / / \ var typedef vector<i n t > v i n t ; \ b r i e f Vettore d i i n t e r i / typedef vector<int > v i n t ; / \ fn void s a l u t a ( s t r i n g nome ) ; \ b r i e f Saluta i conoscenti \param nome I l nome d e l l amico / void s a l u t a ( s t r i n g nome ) ; Spiegazione Per commentare cose fuori dalle classi è necessario innanzitutto aggiungere un commento al file header. Poi si possono aggiungere i commenti per le singole funzioni, variabili, ecc.

Cosa produce il? Interfacce Viene creata una pagina per ogni classe, con le descrizioni dei relativi membri. Diagrammi ereditarietà Il genera anche dei diagrammi che illustrano le relazioni di ereditarietà. Indici Il documento prodotto contiene indici di classi, funzioni, header, esempi, ecc. Link Nel caso il formato d output lo consenta vengono creati link alle definizioni ogni volta che sia possibile.

Panoramica Il è uno strumento per gestire archivi di sorgenti Concorrenza È studiato per affrontare i problemi di concorrenza che possono derivare da modifiche contemporanee di diversi sviluppatori Accessibilità Si può installare come server su una porta tcp ed essere accessibile in internet Versioni e ramificazioni Gestisce ramificazioni e fusioni di diverse versioni dei sorgenti. Mantiene in archivio tutte le modifiche fatte, per poterle rivedere ed eventualmente correggere.

Creazione del repository init Per creare un archivio è necessario scegliere una directory (per es. /var/lib/) scrivibile dall amministratore del e dare il comando: $ -d /var/lib/ init che creerà la cartella /var/lib//cvsroot contenente i file di configurazione, che andranno modificati (quasi tutti) usando il stesso. Debian In Debian l inizializzazione dell archivio è di solito fatta automaticamente (dietro richiesta) in fase di installazione.

Creazione di un progetto import Per inserire un nuovo progetto è sufficiente entrare nella directory contenente i sorgenti (o vuota se il progetto è nuovo) e lanciare il comando: -d /var/lib/ import dir_repository nome_autore tag_versione Per es. -d /var/lib/ import gnu/gcc gnu start creerà una directory /var/lib//gnu/gcc contenente il progetto gcc e associerà il tag start a tutti i file importati, in modo da poterli identificare con un nome.

Richiesta dei sorgenti checkout Per scaricare una copia locale di un progetto si usa il comando: -d /var/lib/ co progetto che crea una directory progetto contenente l ultima versione dei sorgenti. Lo sviluppatore modificherà la copia locale e quando avrà apportato le modifiche le propagherà nel repository centrale. CVSROOT Impostando la variabile d ambiente CVSROOT non c è bisogno di specificare ogni volta il parametro -d /var/lib/: export CVSROOT=/var/lib/

Aggiunta e rimozione di file add Per aggiungere un file al repository è necessario innanzitutto creare il file localmente e poi dare il seguente comando: add files... Il file non viene aggiunto subito al repository remoto, ma viene solo schedulato. rm Per rimuovere un file si procede in modo simile: prima si cancella localmente, poi si schedula la rimozione: rm [files] Si possono anche fare le due cose con un solo comando: rm -f files...

Modifica dei sorgenti update Dopo aver lavorato sulla copia locale si può vedere quali file si siano modificati e quali siano stati creati (andranno aggiunti esplicitamente all archivio). Il comando da dare è: up [files] Il comando update serve anche a rigenerare i file che sono stati cancellati. Esempio add Makefile rm -f test.cc vim access.cc up update: Updating. M access.cc A Makefile R test.cc

Propagazione delle modifiche commit Quando si è convinti delle modifiche che si sono fatte e che sono state rilevate dall update si può concludere la sessione aggiornando l archivio centrale nel seguente modo: ci [files] In seguito al lancio del comando si apre un editor in cui scrivere una nota su ciò che si è modificato. Alternativamente si può specificare con il parametro -m nota cambiamento.

Risoluzione dei conflitti Gestione dei conflitti Può succedere che qualcun altro abbia modificato il file su cui stiamo lavorando e propagato le modifiche prima di noi. In questo caso al momento dell update le modifiche, se riguardano righe diverse del file, vengono fuse tranquillamente nella copia locale. Se invece ci sono dei conflitti vengono scritte nella copia locale entrambe le versioni, lasciando allo sviluppatore la scelta su quale tenere (cancellando l altra). Cervisia Possono essere molto comodi per la risoluzione dei conflitti dei tools grafici, quali ad esempio il cervisia o il g.

Esempio di conflitto Versione 1 # include <iostream> using namespace std ; i n t main ( ) { cout << Buongiorno\n ; return 0; } Versione 2 # include <iostream> using namespace std ; i n t main ( ) { cout << Buonasera\n ; return 0; } Versione fusa # include <iostream> using namespace std ; i n t main ( ) { <<<<<<< main. cc cout << Buongiorno\n ; ======= cout << Buonasera\n ; >>>>>>> 1.4 return 0; }

Gestione delle versioni tag Per assegnare un nome ad una versione si usa il comando tag: tag nome-release Uso dei nomi simbolici Il nome assegnato si può usare per distinguere le diverse versioni di un programma: co -r nome-release nome-progetto up -r nome-release

Ramificazione È spesso utile ramificare i sorgenti, per es. per continuare a mantenere una vecchia versione stabile di un programma mentre si continua a sviluppare quella instabile. Creare una ramificazione Il comando per creare una nuova ramificazione è: tag -b nome-branch

Fusione fra versioni Se si mantiene una versione sperimentale dei sorgenti può essere utile fondere le modifiche nella versione stabile. Fusione Se la ramificazione sperimentale si chiama test-branch-1, per propagare le modifiche nella versione a cui si lavora è sufficiente dare il seguente comando: up -j test-branch-1 Lo sviluppatore viene avvisato delle fusioni fatte e degli eventuali conflitti.

Visione dei sorgenti export Per visualizzare i sorgenti senza volerli modificare si usa il comando export: export -r nome-release oppure export -D data dove data può essere anche now.

Confronto fra diverse versioni diff Per visualizzare le differenze fra diverse versioni di un file si usa il comando: diff -r nome-release nome-file Anche in questo caso può essere molto comodo usare un tool grafico come cervisia, g o mgdiff.

Repository remoti con account di sistema RSH Per collegarsi ad un repository remoto ospitato in un server su cui si possiede un account si può usare l rsh, nel seguente modo: -d :ext:utente@server:/var/lib/ co progetto SSH Per specificare una diversa shell remota si può impostare la variabile d ambiente CVS RSH: export CVS_RSH=/usr/bin/ssh

Repository senza account di sistema 1/2 PSERVER Per non dare un account di sistema ad ogni sviluppatore il fornisce un sistema di autenticazione autonomo: il pserver. Configurazione /etc/services Si aggiungono le seguenti righe: pserver 2401/tcp pserver 2401/udp /etc/inetd.conf Si aggiunge la riga: pserver stream tcp nowait root /usr/sbin/tcpd -f --allow-root=/var/lib/ pserver Debian La configurazione viene fatta automaticamente

Repository senza account di sistema 2/2 CVSROOT/config Per disabilitare l autenticazione di sistema aggiungere SystemAuth=no. In Debian è necessario disabilitare anche l autenticazione PAM: PamAuth=no CVSROOT/passwd Contiene gli utenti che hanno accesso al repository, l hash delle loro password e l utente di sistema che useranno per accedere all archivio. anonymous::user melissa:tgx1fs8sun6ry:user CVSROOT/writers Contiene la lista degli utenti che hanno permesso di scrittura sull archivio makepasswd Per generare l hash delle password si può usare il pacchetto makepasswd

Permessi di accesso ai progetti Per poter accedere ad un progetto l utente di sistema che rappresenta l utente deve avere permessi di scrittura nella directory del repository del progetto. È quindi in generale buona cosa restringere l accesso alla directory CVSROOT.

Sessione di esempio pserver export CVSROOT=:pserver:utente@server:/var/lib/ login co progetto... up ci logout

pserver su tunnel SSL 1/3 Il brutto del pserver è che passa le password in chiaro. Stunnel4 su Debian Server 1/2 apt-get install stunnel4 Eseguire tutte le procedure descritte in /usr/share/doc/stunnel4/readme.debian Aggiungere al file /etc/services la riga: pservers 22401/tcp update-inetd --add pservers stream tcp nowait root /usr/sbin/stunnel4 stunnel4 /etc/stunnel/stunnel-

pserver su tunnel SSL 2/3 Stunnel4 su Debian Server 2/2 Rinominare /etc/stunnel/stunnel.conf in stunnel- Impostare in stunnel- le variabili cert e key col certificato creato prima Impostare client=no Togliere tutti i servizi e aggiungere le righe: exec=/usr/sbin/tcpd execargs=/usr/sbin/-pserver

pserver su tunnel SSL 3/3 Stunnel4 su Debian Client Editare /etc/default/stunnel4 impostando ENABLE=1 Editare il file /etc/stunnel/stunnel.conf e aggiungere il servizio: [pservers] accept = 2401 connect = server-remoto:22401 /etc/init.d/stunnel4 restart A questo punto si può usare il come se fosse installato localmente: export CVSROOT=:pserver:utente@localhost:/var/lib/ login...

Tools aggiuntivi utils Permettono di effettuare alcune operazioni senza accedere alla repository remoto. u Simula l update in locale chroot Permette di cambiare al volo il repository purge Elimina i file non nel repository (risultati della compilazione,... ) do Simula i comandi in locale

Letture consigliate per approfondire... R. Stallmann, Comunità sviluppatori GCC Using the Gnu Compiler Collection info gcc Autori vari Manuale make info make Dimitri van Heesch Manuale /usr/share/doc//html/index.html Roland Pesch e altri Manuale info