L'autore di questo capitolo (Ottenere i sorgenti con CVS) è Reinoud Koornstra
Il CVS (Concurrent Versions System) è un sistema di controllo versione che può essere utilizzato per mantenere aggiornato l'albero dei sorgenti del sistema presente in locale con le modifiche apportate ai sorgenti "ufficiali" di NetBSD. Vi sono tre alberi (o, più precisamente, tre rami di uno stesso albero) che possono essere usati come riferimento per mantenere aggiornati i sorgenti locali: il ramo current, con il quale si può seguire la linea di sviluppo corrente (cioè quella più avanzata ma potenzialmente meno stabile), il ramo relativo alla release 1.5, al quale vengono applicate le correzioni relative alla release 1.5 per sistemare errori e problemi di sicurezza e il ramo della release 1.4, al quale vengono apportate le correzioni relative alla versione 1.4.
Nota: i tre rami appena descritti sono quelli esistenti al momento della scrittura di questo capitolo. In futuro i numeri di versione delle release cambieranno.
Nota: con il termine "userland" si intende l'insieme di programmi che fanno parte del sistema operativo NetBSD ma che non fanno parte del "kernel" vero e proprio.
Il sistema di controllo versione CVS non è compreso nelle versioni 1.4.x e 1.5.x di NetBSD (ma lo sarà per quanto riguarda la 1.6) e pertanto, se non lo avete già fatto, è necessario installarlo:
% pkg_add ftp://ftp.netbsd.org/pub/NetBSD/packages/<OS Ver>/<arch>/All/cvs-1.11nb2.tgz
I parametri <OS Ver>, e <arch> si ottengono con il seguente comando:
% sysctl kern.osrelease hw.machine_arch
Per scaricare i sorgenti partendo da zero, cioè senza avere niente in /usr/src:
% setenv CVSROOT :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot % cd /usr % cvs login password: anoncvs % cvs checkout -rnetbsd-1-5 -PA src
È possibile anche utilizzare ssh, trasferendo i dati crittografati:
% setenv CVS_RSH ssh % setenv CVSROOT anoncvs@anoncvs.netbsd.org:/cvsroot % cd /usr % cvs checkout -rnetbsd-1-5 -PA src
I precedenti comandi recuperano i sorgenti del ramo relativo alla release 1.5. Per scaricare i sorgenti correnti basta omettere il parametro "-rnetbsd-1-5" dall'ultimo comando. Per scaricare i sorgenti del ramo relativo alla release 1.4, utilizzare il parametro "-rnetbsd-1-4" nell'ultima riga.
Per aggiornare un albero di sorgenti già esistente, per esempio per la release 1.5, dare i seguenti comandi:
% setenv CVSROOT :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot % cd /usr % cvs login password: anoncvs % cvs -d $CVSROOT update -rnetbsd-1-5 -PAd src
o, con ssh:
% setenv CVS_RSH ssh % setenv CVSROOT anoncvs@anoncvs.netbsd.org:/cvsroot % cd /usr % cvs -d $CVSROOT update -rnetbsd-1-5 -PAd src
Per aggiornare un albero dei sorgenti con la versione corrente bisogna omettere il parametro "-rnetbsd-1-5" Per aggiornare un albero dei sorgenti con la release 1.4, utilizzare il seguente parametro: "-rnetbsd-1-4"
Per effettuare l'aggiornamento di un albero dei sorgenti non "pulito" (perché è stato fatto un "build" di una parte o di tutti i sorgenti oppure del kernel stesso) sul quale non è stato effettuato un make cleandir, è necessario effettuare un make obj in /usr/src:
% makedir /usr/obj % make obj
Nota: le directory object sono necessarie per effettuare un'operazione di update di un albero non pulito. Quando viene effettuata un'operazione di "build" su un albero o su una sua parte senza farla seguire da un "make clean" o da un "make cleandir", si dice che l'albero rimane non pulito. In questo caso CVS potrebbe cercare di creare delle directory che hanno lo stesso nome di alcuni file binari già esistenti (per esempio dove c'era la directory "groff" viene ora costruito un binario che si chiama "groff", ma CVS deve creare tutte le directory vuote prima di eliminarle).
Ora è possibile effettuare l'aggiornamento con "cvs update". Oppure si può dare un make cleandir in /usr/src prima di usare il CVS. Questo metodo è più semplice e più veloce rispetto al make delle objectdir quando si deve aggiornare un albero non pulito.
L'esecuzione è notevolmente più veloce rispetto a sup e gli aggiornamenti sono più frequenti.
Non è possibile definire con esattezza il tempo necessario per lo scaricamento di tutti i sorgenti. A titolo di esempio, su una linea T1 l'operazione richiede poco più di un'ora, a seconda della qualità della connessione. Per utilizzare un modem conviene sfruttare la compressione dei dati. Per esempio:
% cvs -z5 checkout ...
oppure
% cvs -z5 -d $CVSROOT update ...
Negli esempi precedenti, il numero 5 indica il livello di compressione desiderato; si può specificare un numero compreso tra 1 e 9, dove 1 rappresenta la compressione più veloce e 9 quella più efficace ma più lenta. Si tenga presente che la compressione aumenta il carico di lavoro del server.
Nota: è necessario portarsi in /usr/src/sys/arch/$arch/compile/$kernel_conf_name, dare il comando make clean e rimuovere la directory $kernel_conf_name, prima di effettuare un "cvs update", perché anche quella directory potrebbe non essere "pulita". In questo modo si garantisce che l'aggiornamento della parte relativa al kernel andrà a buon fine.
Pkgsrc (i sorgenti del sistema dei package) comprendono un insieme di utility e di file di configurazione che consentono di compilare e di utilizzare con NetBSD un nutrito gruppo di applicazioni, rendendo semplice l'installazione e la disinstallazione di software sul sistema.
Per scaricare tutto pkgsrc partendo da zero:
% setenv CVSROOT :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot % cd /usr % cvs login (the password is: "anoncvs") % cvs checkout -PA pkgsrc
o, con ssh:
% setenv CVS_RSH ssh % setenv CVSROOT anoncvs@anoncvs.netbsd.org:/cvsroot % cd /usr % cvs checkout -PA pkgsrc
I precedenti comandi creano la directory pkgsrc in /usr e memorizzano i sorgenti dell'intero sistema dei package in /usr/pkgsrc
Per aggiornare pkgsrc dare i seguenti comandi:
% setenv CVSROOT :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot % cd /usr % cvs login (the password is: "anoncvs") % cvs -d $CVSROOT update -PAd pkgsrc
o, con ssh:
% setenv CVS_RSH ssh % setenv CVSROOT anoncvs@anoncvs.netbsd.org:/cvsroot % cd /usr % cvs -d $CVSROOT update -PAd pkgsrc
Prima di effettuare l'aggiornamento è bene assicurarsi che la directory pkgsrc sia "pulita". Se non si è sicuri, dare il comando make clean in /usr/pkgsrc.