Atualização de sistemas FreeBSD

julho 13, 2011 6 comentários

Introdução

FreeBSD é um projeto que está sempre em constante desenvolvimento e torna-se necessário atualizar o seu sistema para garantir. Aqui vou mostrar como atualizar um sistema inicialmente com a versão 8.1 – RELEASE para um versão 8.2 – RELEASE, que no momento, é a mais nova. Existem outros métodos de instalação, mas o que será abordado aqui é usando o CVS, ou seja, vamos baixar o código fonte do sistema.

É muito importante saber que embora você pode atualizar os sources certas partes do sistema é aconselhável atualizar a árvore inteira juntamente com os sources do kernel para não gerar inconsistências no sistema, como um kernel panic, por exemplo. Então devemos sempre atualizar a userland e o kernel. Essa é uma das coisas mais bacanas do FreeBSD, o sistema é bem organizado e dividido na userland e kernel, entenda a userland como os programas que geralmente estamos executando: ls, cp, rm e por ai vai.

Vamos baixar os sources do sistema utilizando CVS, que um sistema muito utilizado em projetos de software livre para que os desenvolvedores espalhados pelo globo possam trabalhar em conjunto de uma maneira bastante organizada.

Utilizando o CVSup

O CVSup é controlado pelo arquivo de configuração chamado supfile que você pode encontrar em /usr/share/examples/cvsup, esse é um arquivo muito bem documentado e você deveria pelo menos dar uma lida nesse arquivo para entender melhor o seu funcionamento. Nesse arquivo podemos definir quais arquivos queremos baixar, quais versões, onde buscar esses arquivos(mirrors), para onde esses arquivos vão no seu sistema, etc etc.

[root@capeta ~]# cd /usr/share/examples/cvsup/

[root@capeta /usr/share/examples/cvsup]# cp stable-supfile /root/supfile [root@capeta /usr/share/examples/cvsup]# vi stable-supfile /root/supfile

Vamos ver o conteúdo desse arquivo sem os comentários para não ficar muito grande:

*default host=CHANGE_THIS.FreeBSD.org *default base=/var/db *default prefix=/usr *default release=cvs tag=RELENG_8 *default delete use-rel-suffix *default compress src-all

Explicando cada parâmetro

Aqui dizemos onde buscar o source, você pode ver os mirrors em http://www.freebsd.org/doc/handbook/cvsup.html#CVSUP-MIRRORS

*default host=CHANGE_THIS.FreeBSD.org 

Aqui dizemos o local onde as informações dos sources serão baixados

*default base=/var/db

Local para onde os sources serão baixados

*default prefix=/usr

Aqui dizemos qual versão do sources do sistema estamos querendo baixar. Veja em http://www.freebsd.org/doc/handbook/cvs-tags.html para ver as tags que você pode usar.

*default release=cvs tag=RELENG_8 *default delete use-rel-suffix

Caso seu processador não aguente a compressão de dados, você pode comentar essa linha, mas em geral não é necessário comentar.

*default compress

Aqui baixamos todos os sources

src-all

Segue abaixo como o nosso arquivo de configuração vai ficar:

*default host=cvsup.br.FreeBSD.org *default base=/var/db *default prefix=/usr *default release=cvs tag=RELENG_8_2 #Essa é a tag para a versao 8.2-STABLE *default delete use-rel-suffix *default compress src-all

Baixando os arquivos

No próprio arquivo de configuração do supfile vem dizendo como fazer o download usando o cvsup, caso você não tenha instalado o cvsup, faça o seguinte comando:

[root@capeta ~]# pkg_add -r cvsup-without-gui

e agora podemos fazer o download

[root@capeta ~]# cvsup -g -L 2 stable-supfile

Com esse comando, o CVS vai fazer o checkout de todos os sources, agora é só esperar porque o processo pode ser demorado, tudo vai depender da sua conexão. No final do download vai aparecer uma mensagem assim:

Shutting down connection to server Finished successfully

Construindo a base do sistema

Uma vez que você sincronizou a árvore do sistema com o CVS, vamos usar essas fontes para construir a base do nosso sistema, atente-se pelo fato que construir não significa instalar, vamos apenas compilar o código fonte baixado do CVS. É importante ver o arquivo /usr/src/UPDATING, lá consta possíveis problemas que você pode ter ao atualizar o seu sistema e como resolver o possível erro que possa ocorrer, mas no geral quase não tem nada pra fazer, é apenas uma boa prática você olhar esse arquivo. Pois bem, vamos construir nosso sistema executando o seguinte comando dentro do /usr/src:

[root@capeta ~]# cd /usr/src/ [root@capeta /usr/src]# make buildworld

Esse também é um procedimento que vai levar um bom tempo compilando os sources que baixamos através do CVS, novamente, tudo vai depender do hardware que vocês está usando. Mas o que faz o buildworld? O buildworld primeiro vai compilar o novo compilador e algumas outras ferramentas necessárias para fazer a compilação. De posse desse novo compilador, este será utilizado para compilar o restante dos sources, guardando o resultado em /usr/obj. Após tanto aguardar o “mundo” ser compilado, você vai receber uma resposta como essa:

————————————————————–

>>> World build completed on Tue Jul 12 22:55:20 UTC 2011

————————————————————–

[root@capeta /usr/src]#

O que significa que tudo ocorreu bem durante a compilação.

Construindo e compilando o kernel

Como vamos fazer a atualização inteira do sistema, precisamos também recompilar o kernel, isso torna-se necessário para evitar inconsistências no seu sistema, como o buildworld compila um novo compilador, precisamos utilizar esse novo compilador para construir e instalar o kernel. Essa é uma das partes mais delicadas envolvendo todo o processo que estamos fazendo, já pensou o que poderia acontecer se você instalasse o source que acabamos de compilar e reiniciássemos o sistema e ver que os sources instalados dependem de alguma instrução que precisava estar no kernel? Nada agradável.

 Vamos construir o kernel agora, se você já tem alguma experiência nessa parte, não utilize o método antigo de compilação usando config e make, pois desse jeito você estará utilizando o compilador antigo, o que não queremos, utilize a nova forma de compilação, pois esta utiliza o compilador novo, que reside em /usr/obj. Como não estamos compilando o kernel devido a alguma customização em particular, não vamos nos ater a cerca das opções possíveis e impossíveis, isso é assunto para um outro artigo. Vamos utilizar o kernel GENERIC, que já é o kernel padrão do FreeBSD, mas antes disso faça um backup com o comando:

[root@capeta ~]# cd /boot/ [root@capeta /boot]# mkdir backup [root@capeta /boot]# cp -rpv kernel/ backup/

Isso é para o casa de algo errado acontecer durante o boot do novo kernel e você ficar sem outro kernel que funciona na sua máquina, vamos ver mais adiante como recuperar o kernel em caso de falha. Finalmente vamos compilar o kernel GENERIC.

[root@capeta ~]# cd /usr/src/ [root@capeta /usr/src]# make buildkernel KERNCONF=GENERIC

Com isso, temos o seguinte resultado:

————————————————————– >>> Kernel build for GENERIC completed on Tue Jul 12 23:48:05 UTC 2011 ————————————————————– 

Agora só falta instalar o kernel com o seguinte comando:

[root@capeta /usr/src]# make installkernel KERNCONF=GENERIC

Atualização do /etc

Esse diretório contém muitas configurações importantes para inicialização do sistema, os famosos scripts de inicialização e alguns outros arquivos importantes. Vamos utilizar um script chamado mergemaster, que faz uma varredura no seu /etc e mostra a diferença do /etc que foi baixado pelo CVS em um formato do comando diff. Nesse formato será mostrado um sinal de ‘+’ sinalizando o que vai ser adicionado ao arquivo e um sinal de ‘-‘ sinalizando o que vai ser removido do arquivo, geralmente muda pouca coisa, apenas o cabeçalho do arquivo indicando uma nova data. Ao mostrar essa saída, o mergemaster pergunta o que queremos fazer com arquivo, veja o destaque em vermelho.

[root@capeta /usr/src]# mergemaster -p   *** Creating the temporary root environment in /var/tmp/temproot *** /var/tmp/temproot ready for use *** Creating and populating directory structure in /var/tmp/temproot   *** Beginning comparison   ======================================================================   *** Displaying differences between ./etc/group and installed version:   — /etc/group 2011-07-09 18:36:19.000000000 +0000 +++ ./etc/group 2010-12-21 17:09:25.000000000 +0000 @@ -1,6 +1,6 @@ -# $FreeBSD: src/etc/group,v 1.35.10.1.4.1 2010/06/14 02:09:06 kensmith Exp $ +# $FreeBSD: src/etc/group,v 1.35.10.1.6.1 2010/12/21 17:09:25 kensmith Exp $ # -wheel:*:0:root,airton +wheel:*:0:root daemon:*:1: kmem:*:2: sys:*:3: @@ -29,5 +29,3 @@ www:*:80: nogroup:*:65533: nobody:*:65534: -airton:*:1001: -squid:*:100:   Use ‘d’ to delete the temporary ./etc/group Mantém o arquivo antigo Use ‘i’ to install the temporary ./etc/group Instala o novo arquivo Use ‘m’ to merge the temporary and installed versions junta o antigo com o novo Use ‘v’ to view the diff results again deixar pra visualizar depois   Default is to leave the temporary file to deal with by hand   How should I deal with this? [Leave it for later]d aqui eu resolvi manter esse arquivo, porque ele iria retirar o meu usuario squid e airton, o que não seria interessante pra mim, visto que esse servidor é um proxy cache e provavelmente eu teria problemas no futuro com a exclusão desses usuários.

Vão ter outras perguntas, apenas mostrei aqui um exemplo de como acontece o funcionamento . No final de todo o processo  vai aparecer a seguinte mensagem.

Vamos discutir um pouco sobre outra característica bacana do FreeBSD, digamos que você tenha um servidor em produção, Squid, que obviamente tem seus arquivos de configurações, e você poderia pensar que ao usar o mergemaster algum arquivo de configuração poderia ser alterado, mas é então que entra a parte interessante, visto que toda aplicação instalada por você coloca seus arquivos de configuração dentro do path /usr/local/etc, ou seja, a organização do sistema faz com que isso aconteça e você não tenha que se preocupar quando utilizar o mergemaster, a não ser que você tenha alterado algum serviço que já vem por padrão no sistema, como o SSH, que aí sim os arquivos de configuração do SSH vão residir em /etc, mas no geral são poucos arquivos de configuração que já vem por padrão no sistema que você deve se preocupar. 

Agora estamos prontos para fazer um reboot e entrar no sistema como single-user, faça o seguinte comando para reiniciar:

[root@capeta /usr/src]# shutdown -r now

Instalação do “mundo” em modo single-user

Durante a inicialização do sistema vai aparecer o boot-menu com várias opções, escolha a opção 4 para entrar no modo single-user. Então ele vai fazer uma inicialização básica e vai perguntar o path do shell que você quer utilizar, apenas tecle ENTER para usar o shell padrão fornecido por ele, que é o /bin/sh, e faça os seguintes comandos:

Montando todos os FileSystems listados em /etc/fstab

# mount -a

Entrando em /usr/src

# cd /usr/src

Instalando os sources

# make installworld

Reiniciando a máquina

# reboot

Limpando o seu sistema após a atualização

Nesse momento o seu sistema já estará atualizado, agora vamos fazer a limpeza que foi gerada pelo processo de compilação dos sources, faça os seguintes comandos:

# cd /usr/obj

# chflags -R noschg *

# rm -rf *

Restaurando um kernel em caso de problemas

Conforme fizemos anteriormente, vamos ver como restaurar o kernel original do sistema. Faça um reboot da sua máquina e entre na opção 6(Escape to loader prompt) do boot-menu, então você vai entrar em um prompt com a seguinte linha:

Ok

É só isso, o prompt é um OK e tem algums opções úteis que podemos ver com o comando help ou uma interrogação(?), para dar o boot com o kernel antigo que está em /boot/backup/kernel faça o seguinte comando:

Okboot /boot/backup/kernel

e então o seu kernel original será utilizado.


Anúncios
Categorias:Uncategorized

Gerenciamento de pacotes RPM

Com o RPM, RedHat Package Manager, como o próprio nome já diz, server para fazermos o gerenciamento dos pacotes RPMs. Com isso, podemos fazer coisas do tipo: instalação, upgrades, verificação. Vamos começar com o modo de instalação, para instalar um pacote rpm fazemos um simples comando:

Instalação/Atualização de pacotes

#rpm -i <pacote.rpm>

mas só com esse comando não temos idéia do que esteja acontecendo, vamos conhecer mais algumas opções:

-v  ativa o modo verbose, ou seja, vai mostrar tudo o que está acontecendo no momento da instalação do pacote RPM.

-h vai mostrar um conjunto de hash’s(#) indicando o progresso de sua instalação.

Logo, podemos usar essas opções combinadas assim:

#rpm -ivh <pacote.rpm>

Isso vai fazer com que o nosso pacote seja instalado e ao mesmo tempo mostra o que está acontencendo enquanto você está instalando o pacote juntamente com uma barra de progresso formado pelo caratere #.

Uma outra opção legal é o -U, que significa Upgrade, fazendo com que um pacote que já esteja instalado seja atualizado para uma versão mais recente. O -U pode funcionar como o -i, esse é o caso em que o pacote não exista no seu sistema. As demais opções funcionam exatamente como as opções descritas anteriormente, no caso o -v e o -h, ficando assim:

# rpm -Uvh <pacote.rpm>

Caso você não esteja seguro de que o pacote não vai ser instalado com sucesso, pode-se usar ainda a opção –test. Essa opção vai fazer uma falsa instalação no seu sistema, ou seja, não vai sobrescrever nenhum arquivo. Ao usar essa opção, as outras opções como -v e -h não poderão ser passadas junto com o –test.

Outra opção, mesmo que ainda não seja de muito utilidade por parte dos administradores, é a opção -F, que também serve como atualização de pacotes RPM, mas com a desvantagem de que se o pacote mais novo exigir uma nova dependência, o -F não vai tratar.

Desinstalação de pacotes

Por padrão, um pacote só poder ser desinstalado caso não seja dependência para nenhum outro programa, muito embora podemos usar a opção –force, o que não é aconselhável, visto que vai fazer com que seu banco de dependências fique inconsistente. Para verificar se um pacote vai ser realmente desinstalado, use a opção –test, que vai fazer todos os passos de exclusão do pacote sem realmente excluí-lo. Veja a sintaxe:

#rpm -e <pacote.rpm>

Consultando pacotes

Ao se fazer uma consulta de pacotes RPM, sempre use a opção -q, de query, como em rpm -q[outras opções]. Sempre é útil fazermos consultas de pacotes, com isso podemos responder a algumas perguntas interessantes:

  • A partir de qual pacote veio esse arquivo de configuração? Um exemplo prático seria descobrir de qual pacote veio o arquivo de configuração localizado em /etc/ssh/sshd_config , veja:

[root@akira ssh]# rpm -qf sshd_config
openssh-server-5.4p1-3.fc13.x86_64
[root@akira ssh]#

Com isso podemos verificar que o arquivo de configuração /etc/ssh/sshd_config veio do pacote openssh-server-5.4p1-3.fc13.x86_64

  • Quais arquivos de configuração foram criados quando eu instalei o pacote openssh-server-5.4p1-3.fc13.x86_64 ?

[root@akira ssh]# rpm -qc openssh-server-5.4p1-3.fc13.x86_64
/etc/pam.d/sshd
/etc/ssh/sshd_config
[root@akira ssh]#

  • Quais arquivos de documentação foram criados quando eu instalei o pacote openssh-server-5.4p1-3.fc13.x86_64 ?

[root@akira ssh]# rpm -qd openssh-server-5.4p1-3.fc13.x86_64
/usr/share/man/man5/moduli.5.gz
/usr/share/man/man5/sshd_config.5.gz
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz
[root@akira ssh]#

  • Como vou saber que um pacote X está instalado?

[root@akira ~]# rpm -qv ssh
package ssh is not installed

Nesse caso, temos que passar o nome do pacote completo

[root@akira ~]# rpm -qv openssh-server
openssh-server-5.4p1-3.fc13.x86_64
[root@akira ~]#

Algo mais simples é fazer um

[root@akira ~]# rpm -qa | grep ssh
libssh2-1.2.4-1.fc13.i686
openssh-askpass-5.4p1-3.fc13.x86_64
libssh2-1.2.4-1.fc13.x86_64
openssh-server-5.4p1-3.fc13.x86_64
openssh-clients-5.4p1-3.fc13.x86_64
openssh-5.4p1-3.fc13.x86_64
[root@akira ~]#

Pois nem sempre sabemos o nome completo do pacote.

  • Quais são todos os arquivos de um pacote RPM ?

Nesse caso, temos que saber o nome completo do pacote, use a opção descrita anteriormente para obter o nome completo

[root@akira ~]# rpm -ql openssh-server-5.4p1-3.fc13.x86_64
/etc/pam.d/sshd
/etc/rc.d/init.d/sshd
/etc/ssh/sshd_config
/usr/libexec/openssh/sftp-server
/usr/sbin/.sshd.hmac
/usr/sbin/sshd
/usr/share/man/man5/moduli.5.gz
/usr/share/man/man5/sshd_config.5.gz
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz
/var/empty/sshd
[root@akira ~]#

Categorias:Uncategorized

Ubuntu 10.04, Java e Banco do Brasil

Olá,

Para ativar o suporte para os navegadores do Ubuntu  ao Banco do Brasil, e outros bancos, basta fazer as seguintes configurações.

vim /etc/apt/sources.list

dentro do sources.list, descomente as seguintes linhas:

Atualize os índices de pacotes:

apt-get update

e depois disso, pesquise usando o apt pelos pacotes contendo as referências do java

apt-cache search sun | grep java

vai sair uma lista parecida com essa abaixo:

sun-java6-source – Sun Java(TM) Development Kit (JDK) 6 source files
sun-java6-plugin – The Java(TM) Plug-in, Java SE 6
sun-java6-jre – Sun Java(TM) Runtime Environment (JRE) 6 (architecture independent files)
sun-java6-jdk – Sun Java(TM) Development Kit (JDK) 6
sun-java6-javadb – Java(TM) DB, Sun Microsystems’ distribution of Apache Derby
sun-java6-fonts – Lucida TrueType fonts (from the Sun JRE)
sun-java6-demo – Sun Java(TM) Development Kit (JDK) 6 demos and examples
sun-java6-bin – Sun Java(TM) Runtime Environment (JRE) 6 (architecture dependent files)

O que nos interessa aqui é o sun-java6-plugin e o sun-java6-bin, então vamos instala-lo

apt-get install sun-java6-plugin sun-java6-bin

Durante a instalação irá aparecer algumas telas de confirmação, você pode dar ok em todas as telas.

Após isso, reinicie seu browser e faça um teste no BB.

[]’s

Categorias:Dicas

Ports FreeBSD

Existem muitos métodos de instalação de aplicativos em sistemas UNIX-like, uma delas é compilando a aplicação desejada, mas isso revela-se um trabalho um tanto quanto minucioso, como:

  • Resolver dependências de compilação, um processo que pode ser muito demorado.
  • Adequar o sistema de compilação ao seu sistema, outro processo que poder muito trabalhoso.

Você pode instalar suas aplicações no FreeBSD compilando um source de algum programa ou utilizar o sistema de gerenciamento de pacotes nativo do FreeBSD, conhecido como Ports. A idéia é fornecer um ambiente de instalação simples e automatizada, junto com um nível de segurança adequado. A respeito desse nível de segurança, a comunidade FreeBSD dispõe de um comitê encarregado de verificar e manter a biblioteca do Ports, analisando os Ports em busca de algumas vulnerabilidades. Toda a estrutura do Ports é criada no path

/usr/ports

como você pode ver, o ports é dividio em categorias. Se quisermos instalar mais um ambiente shell, por xemplo o bash, é muito provável que este programa esteja na categoria SHELLS, mas caso você não saiba onde procurar o seguinte comando vai fazer com que você pesquise o programa desejado:

# make search name=<nome do program> | less

o | less server para você poder utilizar as setas do teclado para poder navegar na lista retornada pelo comando, pois muitas vezes a resposta ocupa mais de uma tela. Para sair dessa tela, pressione a tecla “q”;

Quando encontrar o pacote, como no exemplo anterior, que citamos o bash, vamos instalar esse pacote. Basta apenas navegar até a categoria SHELLS e digitar o comando:

# make && make install

Pronto, o ports vai baixar o source do arquivo e compilar para você o bash.

Perceba que existe uma categoria chamada distfiles, é nessa pasta que os arquivos compactados são baixados pelo ports para depois serem extraídos e compilados. Caso ocorra algum erro na hora do download do source, ao tentar fazer novamente a operação e apresentar algum erro, temos que deletar manualmente o arquivo compactado para tudo voltar ao normal.

Ao fazer a instalação do SO, você pode optar se quer o ports ou não, caso você não aceite instalar o ports na hora da instalação e posteriormente quiser ter o ports disponível, podemos instalar o ports pelos métodos:

sysinstall

Digite o comando systinstall, navegue até configure/Distribution e marque a opção ports.

portsnap

Esse caso server apenas se tivermos acesso a internet, digite o comando para ter sua árvore de ports mais atualizada possível:

#portsnap fetch extract update

obs: o fetch vai produzir um arquivo no path /var/db/portsnap

cdrom

Entre no diretório cujo o cdrom está montado

mount /cdrom

cd cdrom/<versao do freebsd>/ports

./install

portaudit

Esse recurso permite fazer a verificação de vulnerabilidade nos pacotes instalados de acordo com uma lista cadastrada pelo comitê do FreeBSD. Para se beneficiar dessa característica, instale o portaudit do mesmo jeito que fazemos para instalar qualquer port:

# cd /usr/ports/ports-mgmt/portaudit

# make

Perceba a linha vermelha, essa linha indica que não temos o arquivo na base de dados do portaudit, localizado em /var/db/portaudit. Agora faça o próximo comando:

#make install

Depois de instalado, verificamos que precisamos dar alguns comandos para o portaudit fazer o trabalho de verificação de vulnerabilidades. De acordo com o destaque vermelho do texto esse comando vai fazer o download da base de dados de vulnerabilidade e imprimir a data da criação(parâmetro Fd) e procurar por vulnerabilidades nos ports instalados(parâmetro a). Em resumo

# portaudit -Fd -> faz o download da base de dados de vulnerabilidade e imprimir a data da criação

#portaudit -a -> procura por vulnerabilidades nos ports instalados

#portaudit -f /usr/ports/INDEX-6 -> Mostra todas as vulnerabilidades dos pacotes instalados ou não.

Isso é o suficiente para podermos administrar programas utilizando ports. Vamos agora conhecer os Packages.

O que são Packages?

Diferentemente do ports, os packages são pacotes pré-compilados de um programa, ou seja, não existirá a etapa de compilação, nos garantindo um menor tempo para a instalação de um programa. Boa parte dos programas do ports podem ser instalados via packages pelos seguintes caminhos:

  • O pacote está em uma mídia removível: CD-ROM, PenDrive, etc
  • O pacote está em um computador remoto

Na primeira opção podemos fazer uso dos seguintes comandos

pkd_add <nome do pacote>    Adiciona um pacote

pkg_remove <nome COMPLETO do pacote>   Remove um pacote

pkg_info | grep <nome do pacote>   Lista a informação dos pacotes instalados

Na segunda opção temos o comando

pkg_add -r <nomedopacote>

Outros utilitários do Ports: portupgrade  e portmanager

Com o portupgrade podemos gerenciar tanto os ports quanto os packages

Categorias:FreeBSD Tags: