FreeBSD

Atualização do Sistema Operacional


Uma das formas mais práticas de atualizar o sistema é utilizar-se do CVSup, que é na verdade um pacote de software utilizado para distribuir e atualizar coleções de arquivos através da rede, de forma muito rápida. Através do CVSup, baixamos e atualizamos todos os fontes do sistema. Após isso, devem ser compilados e instalados, assim como o kernel. Após um reboot o sistema estará atualizado.

Para instalar o CVSup através do ports, vá até /usr/ports/net/cvsup-without-gui e digite

# make install

O pacote do CVSup será baixado e instalado no seu sistema, assim como alguns outros pacotes dos quais ele depende. Após isso, precisamos configurar o CVSup, para que saiba como e o que deve ser baixado para a atualização do FreeBSD.

Copie o arquivo /usr/share/examples/cvsup/stable-supfile para /etc/supfile. Agora edite este arquivo (/etc/supfile) e faça as seguintes modificações:

Mudar a linha

*default host=CHANGE_THIS.FreeBSD.org

para

*default host=cvsup2.FreeBSD.org

Adicionar a linha

ports-all tag=.

no final do arquivo. Atenção ao ponto no final da linha.

Caso queira usar outro mirror, não há problema algum, confira os disponíveis em http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvsup.html. Leia com atenção os comentários do arquivo supfile, para entender os parâmetros. O arquivo que criamos irá baixar os fontes do último estável da série 4 (4-STABLE).

Agora basta executar o CVSup, fazemos isso através do seguinte comando:

# cvsup -g -L 2 /etc/supfile

Se for necessário deixar o comando rodando em background e/ou executar logoff da sua sessão, execute a seguinte linha:

# nohup cvsup -g -L 2 /etc/supfile &

Dessa forma, pode ser executado logoff da sessão e o processo irá continuar rodando. Confira o arquivo nohup.out para saber a situação do CVSup. Quando tiver terminado com sucesso, será indicado pela última linha, que apresenta a seguinte mensagem:

Finished successfully

Após finalizado o CVSup, vamos para a compilação dos fontes baixados. Esse processo pode ser feito com a máquina em produção. Vá até o diretório /usr/src e execute o seguinte comando:

# make buildworld

Se preferir executar através do nohup, pelos motivos indicados anteriormente, deve ser feito da seguinte forma:

# nohup make buildworld > /root/buildworld.log 2> /root/buildworld.err &

Essa linha irá fazer o make buildworld rodar através do nohup, mas jogando a saída padrão para o arquivo /root/buildworld.log e a saída de erro para o arquivo /root/buildworld.err. Confira estes arquivos para saber a situação do procedimento.

Em seguida deve-se compilar o kernel. Caso o mesmo ainda não tenha sido personalizado, está sendo utilizado o padrão (generic), então fazemos esta compilação através da seguinte linha de comando:

# make buildkernel KERNCONF=GENERIC

Caso o kernel tenha outro nome (personalizado) deverá ser especificado no lugar de GENERIC. Esta compilação (como qualquer outro comando) também pode ser feita através do nohup, na mesma sintaxe mostrada anteriormente, apenas mudando os arquivos destino das saídas padrão e de erro.


Após o término da compilação, devemos instalar todos os arquivos nos seus devidos lugares. Primeiramente, caso o seu sistema esteja rodando em um securelevel maior que 0, edite o arquivo /etc/rc.conf e altere a configuração para

kern_securelevel=-1

Reinicie então a máquina, que estará rodando agora com o securelevel no nível "-1". O próximo passo é entrar no modo single, ou seja, monousuário, sem ninguém mais usando a máquina. Isso irá tirar a máquina de produção, ela não irá responder requisições de serviços de rede, então deve-se escolher um horário em que a máquina não necessita "estar no ar". É importante ressaltar que devemos estar operando no console, e não via rede. Para entrar no modo single usamos o seguinte comando:

# shutdown now

Com a máquina no modo single, vamos até o diretório /usr/src e digitamos os seguintes comandos:

# make installworld

# make installkernel KERNCONF=GENERIC

Novamente, caso o kernel tenha outro nome deverá ser especificado no lugar de GENERIC. Com isso, teremos instalado o sistema atualizado. Falta apenas um passo, o "mergemaster", que serve para atualizar alguns arquivos de configuração. Deve-se ter muita atenção neste procedimento, pois pode-se acidentalmente sobrescrever arquivos importantes. É recomendável que se faça um backup de todo o diretório /etc previamente. Uma forma bem simples de se obter isso é através da seguinte linha de comando:

# cp -Rpv /etc /etc.bak

Será feita uma cópia do /etc em /etc.bak. O parâmetro "-R" indica recursividade, ou seja copiar todos os diretórios. O "p", ou "-p", indica que quer-se manter as permissões e propriedade do arquivo. O "v", ou "-v", indica verbose, que irá mostrar na tela os nomes dos arquivos na medida em que vão sendo copiados.

Após isso, vamos ao mergemaster, para isso execute, a partir do diretório /usr/src, o comando

# mergemaster

O programa copiar os arquivos novos (atualizados) em uma pasta temporária, em /usr/src/etc. Então irá exibir as diferenças (diff) entre cada arquivo que pretende atualizar e o respectivo arquivo antigo, e pedirá o que deve ser feito. As opções são:

d -> Deletar o temporário (deixar como está)
i -> Instalar o temporário (atualizar)
m -> Fazer um "merge", ou seja, uma união dos dois arquivos (antigo e novo)
v -> Visualizar novamente o "diff"

Deve-se ter atenção em cada arquivo, pois dependendo do que temos rodando no servidor irá mudar os arquivos importantes que devem ser mantidos. Por exemplo, a seqüência do mergemaster poderá será a seguinte:

/etc/defaults/rc.conf -> i
/etc/defaults/make.conf -> i
/etc/gnats/freefall -> i
/etc/mail/freebsd.cf -> i
/etc/mail/freebsd.submit.mc -> i
/etc/mail/freebsd.submit.cf -> i
/etc/mail/sendmail.cf -> i
/etc/mail/submit.cf -> i
/etc/mtree/BSD.local.dist -> i
/etc/mtree/BSD.usr.dist -> i
/etc/hosts -> i
/etc/motd -> i
/etc/rc.network -> i
/etc/rc.sendmail -> i
/etc/services -> i
/etc/ttys -> i
/etc/manpath.config -> i

Como pode ser visto, atualizamos todos os arquivos oferecidos pelo mergemaster neste momento. Não foi mexido em arquivos como /etc/master.passwd, /etc/group e outros, porque eles já estavam na última versão, ou seja, não há neste momento atualização para eles. Não será necessário nenhum comando adicional porque não atualizamos arquivos como aliases ou similares.
Feito isso, podemos voltar a configuração do securelevel para o nível anterior (caso seja utilizado) e dar um reboot. A máquina será inicializada com o sistema atualizado. Ao dar o comando "uname -a" podemos ver a versão 4.9-STABLE.

 

Atualizado em 03/02/04.

Heini Thomas Geib.
http://www2.unijui.edu.br/~heini

Voltar