O autor deste capítulo (Obtendo o código-fonte com CVS) é Reinoud Koornstra
CVS (Concurrent Versions System) é um sistema de controle de versões que pode ser usado para manter atualizada a árvore das fontes do sistema presente em locais com modificações realizadas nas fontes "oficiais" do NetBSD. Há três árvores (ou mais precisamente, três ramos de uma mesma árvore) que podem ser usadas como referência para se manter atualizadas as fontes locais: o ramo current, com o qual se pode seguir a linha de desenvolvimento corrente (isto é, aquela mais avançada mas potencialmente menos estável), o ramo relativo à release 1.5, ao qual são aplicadas as correções relativas à versão 1.5 para eliminar erros e resolver problemas de segurança, e o ramo da release 1.4, ao qual são acrescentadas as correções relativas à versão 1.4. Essa última árvore não terá nenhum desenvolvimento ulterior.
Nota: os três ramos recém descritos são os que existem no momento da elaboração desse capítulo. No futuro os números de versão das releases mudarão.
Nota: pelo termo "userland" entende-se o conjunto de programas que fazem parte do sistema operacional NetBSD mas que não fazem parte do "kernel" propriamente dito.
O sistema de controle de versões CVS não integra as versões 1.4.x e 1.5.x do NetBSD (mas vai fazer parte da versão 1.6) e, portanto, se você ainda não o fez, é necessário instalá-lo.
% pkg_add ftp://ftp.netbsd.org/pub/NetBSD/packages/<OS Ver>/<arch>/All/cvs-1.11nb2.tgz
Os parâmetros <OS Ver> e <arch> são obtidos com o seguinte comando:
% sysctl kern.osrelease hw.machine_arch
Para fazer o download das fontes partindo do zero, isto é, sem ter nada no diretório /usr/src:
% setenv CVSROOT :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot % cd /usr % cvs login password: anoncvs % cvs checkout -rnetbsd-1-5 -PA src
Também é possível utilizar ssh, transferindo os dados criptografados:
% setenv CVS_RSH ssh % setenv CVSROOT anoncvs@anoncvs.netbsd.org:/cvsroot % cd /usr % cvs checkout -rnetbsd-1-5 -PA src
Os comandos precedentes buscam as fontes no ramo relativo à release 1.5. Para fazer o download das fontes correntes basta omitir o parâmetro "-rnetbsd-1-5" do último comando. Para fazer o download do ramo relativo à release 1.4, utiliza-se o parâmetro "-rnetbsd-1-4" na última linha.
Para atualizar uma árvore de fontes já existente, por exemplo para a release 1.5, executar os seguintes comandos:
% setenv CVSROOT :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot % cd /usr % cvs login password: anoncvs % cvs -d $CVSROOT update -rnetbsd-1-5 -PAd src
ou, com ssh:
% setenv CVS_RSH ssh % setenv CVSROOT anoncvs@anoncvs.netbsd.org:/cvsroot % cd /usr % cvs -d $CVSROOT update -rnetbsd-1-5 -PAd src
Para atualizar uma árvore das fontes com a versão corrente é necessário omitir o parâmetro "-rnetbsd-1-5". Para atualizar uma árvore das fontes com a release 1.4, utilizar o seguinte parâmetro: "-rnetbsd-1-4".
Para fazer a atualização de uma árvore de fontes que não esteja "limpa" (porque foi feito um "build" de uma parte ou de todas as fontes, ou do próprio kernel) e na qual não foi executado o make cleandir, é necessário executar um make obj no diretório /usr/src:
% makedir /usr/obj % make obj
Nota: os diretórios object são necessários para efetuar uma operação de atualização de uma árvore que não esteja limpa. Quando é realizada uma operação de construção ("build") em uma árvore, ou em uma parte dela, sem acompanhá-la de um "make clean" ou de um "make cleandir", dizemos que a árvore permanece suja. Nesse caso o CVS poderia tentar criar diretórios que têm o mesmo nome de alguns arquivos binários já existentes e falhar (por exemplo, onde havia o diretório "groff" agora está construído um binário que se chama "groff", mas o CVS deve criar todos os diretórios vazios antes de eliminá-lo).
Agora é possível realizar a atualização com o "cvs update". Ou então pode-se dar um make cleandir no /usr/src antes de usar o CVS. Este método é mais simples e mais veloz quanto ao make dos objectdir quando se deve atualizar uma árvore suja.
A execução é notavelmente mais veloz em comparação com o sup e as atualizações são mais freqüentes.
Não é possível definir com exatidão o tempo necessário para o download de todas as fontes. A título de exemplo, em uma linha T1 a operação exige um pouco mais de uma hora, de acordo com a qualidade da conexão. Para utilizar um modem convém aproveitar-se da compressão dos dados. Por exemplo:
% cvs -z5 checkout ...
ou
% cvs -z5 -d $CVSROOT update ...
Nos exemplos precedentes o número 5 indica o nível de compressão desejado. Pode-se especificar um número compreendido entre 1 e 9, onde 1 representa a compressão mais veloz e 9 a mais eficaz, embora mais lenta. Tenha-se presente que a compressão aumenta a carga de trabalho do servidor.
Nota: é necessário deslocar-se para o diretório /usr/src/sys/arch/$arch/compile/$kernel_conf_name, executar o comando make clean e remover o diretório $kernel_conf_name, porque ele também poderia não estar "limpo". Desse modo garante-se que a atualização da parte relativa ao kernel chegará a bom termo.
Pkgsrc (as fontes do conjunto dos pacotes) compreende um conjunto de utilitários e de arquivos de configuração que permitem compilar e utilizar no NetBSD um alentado grupo de aplicativos, tornando simples a instalação e a desinstalação de softwares no sistema.
Para fazer o download de todo o pkgsrc partindo do zero:
% setenv CVSROOT :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot % cd /usr % cvs login (the password is: "anoncvs") % cvs checkout -PA pkgsrc
ou, com ssh:
% setenv CVS_RSH ssh % setenv CVSROOT anoncvs@anoncvs.netbsd.org:/cvsroot % cd /usr % cvs checkout -PA pkgsrc
Os comandos anteriores criam o diretório pkgsrc no /usr e gravam as fontes do sistema de pacotes inteiro no /usr/pkgsrc
Para atualizar o pkgsrc executar os seguintes comandos:
% setenv CVSROOT :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot % cd /usr % cvs login (the password is: "anoncvs") % cvs -d $CVSROOT update -PAd pkgsrc
ou, com ssh:
% setenv CVS_RSH ssh % setenv CVSROOT anoncvs@anoncvs.netbsd.org:/cvsroot % cd /usr % cvs -d $CVSROOT update -PAd pkgsrc
Antes de efetuar a atualização é bom assegurar-se de que o diretório pkgsrc esteja "limpo". Não é seguro dar o comando make clean no /usr/pkgsrc.