Sumário - Unicamp

146
3 Sumário 1 introdução...................................................................................................................... 7 1.1 Uma Breve História do FreeBSD e do UNIX........................................................... 7 1.2 BSD ........................................................................................................................ 8 1.3 FreeBSD ................................................................................................................. 8 1.4 Algumas características principais do FreeBSD ..................................................... 9 1.4.1 Portabilidade .................................................................................................... 9 1.4.2 Capacidade de Trabalho .................................................................................. 9 1.4.3 Gerenciamento de software simplificado.......................................................... 9 1.4.4 Sofisticado sistema de arquivos ....................................................................... 9 1.4.5 Código fonte aberto .......................................................................................... 9 1.4.6 Ampla documentação....................................................................................... 9 1.5 O mascote do FreeBSD ........................................................................................ 10 2. Instalação do FreeBSD .............................................................................................. 11 2.1 Conhecimentos preliminares ................................................................................ 11 2.2 Iniciando a instalação ........................................................................................... 12 2.3 O utilitário sysinstall .............................................................................................. 16 2.4 Passo a passo do processo de instalação ............................................................ 18 3. Unix Básico ................................................................................................................ 31 3.1 Introdução ............................................................................................................. 31 3.2 Efetuando o login no sistema................................................................................ 31 3.3 O interpretador de comandos - shell ........................................................................ 32 3.4 Arquivos de configuração da Shell ....................................................................... 32 3.5 Permissão de arquivos/diretórios ............................................................................. 34 3.5.1 Alterando permissões ........................................................................................ 35 3.5.2 Alterando a propriedade .................................................................................... 35 3.6 Estrutura de Diretórios.............................................................................................. 36 3.7 Comandos diversos .................................................................................................. 38 3.8 Os arquivo /etc/passwd e /etc/master.passwd ......................................................... 39 3.9 O arquivo /etc/group ................................................................................................. 40 3.10 Comandos para manipulação de contas de usuários ............................................. 40 3.10.1 Criando usuários com adduser ........................................................................ 40 3.10.2 Removendo usuários com rmuser ................................................................... 41 3.10.3 Consultando informações com o comando finger ............................................ 42

Transcript of Sumário - Unicamp

3

Sumário 1 introdução ...................................................................................................................... 7

1.1 Uma Breve História do FreeBSD e do UNIX ........................................................... 7

1.2 BSD ........................................................................................................................ 8

1.3 FreeBSD ................................................................................................................. 8

1.4 Algumas características principais do FreeBSD ..................................................... 9

1.4.1 Portabilidade .................................................................................................... 9

1.4.2 Capacidade de Trabalho .................................................................................. 9

1.4.3 Gerenciamento de software simplificado .......................................................... 9

1.4.4 Sofisticado sistema de arquivos ....................................................................... 9

1.4.5 Código fonte aberto .......................................................................................... 9

1.4.6 Ampla documentação ....................................................................................... 9

1.5 O mascote do FreeBSD ........................................................................................ 10

2. Instalação do FreeBSD .............................................................................................. 11

2.1 Conhecimentos preliminares ................................................................................ 11

2.2 Iniciando a instalação ........................................................................................... 12

2.3 O utilitário sysinstall .............................................................................................. 16

2.4 Passo a passo do processo de instalação ............................................................ 18

3. Unix Básico ................................................................................................................ 31

3.1 Introdução ............................................................................................................. 31

3.2 Efetuando o login no sistema ................................................................................ 31

3.3 O interpretador de comandos - shell ........................................................................ 32

3.4 Arquivos de configuração da Shell ....................................................................... 32

3.5 Permissão de arquivos/diretórios ............................................................................. 34

3.5.1 Alterando permissões ........................................................................................ 35

3.5.2 Alterando a propriedade .................................................................................... 35

3.6 Estrutura de Diretórios.............................................................................................. 36

3.7 Comandos diversos .................................................................................................. 38

3.8 Os arquivo /etc/passwd e /etc/master.passwd ......................................................... 39

3.9 O arquivo /etc/group ................................................................................................. 40

3.10 Comandos para manipulação de contas de usuários ............................................. 40

3.10.1 Criando usuários com adduser ........................................................................ 40

3.10.2 Removendo usuários com rmuser ................................................................... 41

3.10.3 Consultando informações com o comando finger ............................................ 42

4

3.10.4 Alterando informações de conta com o comando chpass ................................ 42

3.10.5 Alterando a senha com passwd ....................................................................... 42

3.10.6 Bloqueando usuários ....................................................................................... 43

3.10.7 Utilizando vipw ................................................................................................. 43

3.11 Os arquivos /etc/rc.conf e /etc/defaults/rc.conf ....................................................... 44

3.12 Montando e desmontando sistemas de arquivos ................................................... 45

3.12.1 O arquivo fstab.............................................................................................. 46

3.12.2 O comando mount........................................................................................... 46

3.12.3 O comando umount ........................................................................................ 48

3.13 Manipulação de Processos .................................................................................... 48

3.14 Daemons, sinais e controle de processos .............................................................. 51

3.14.1 Sinais ............................................................................................................... 52

3.14.2 Enviando sinais a processos ........................................................................... 52

3.15 Documentação do sistema ..................................................................................... 53

3.15.1 Páginas de Manuais ........................................................................................ 54

3.15.2 GNU Info .......................................................................................................... 55

3.15.3 FAQ FreeBSD .................................................................................................. 55

4. Instalação de aplicativos ............................................................................................ 57

4.1 O sistema de Ports e Packages ............................................................................... 58

4.1.1 Conteúdo da árvore do ports .......................................................................... 60

4.2 Encontrando o software............................................................................................ 63

4.2.1 Whereis .......................................................................................................... 64

4.2.2 Make search ................................................................................................... 64

4.3 Usando packages ................................................................................................. 65

4.3.1 Adicionando aplicativos .................................................................................. 65

4.3.2 Obtendo informações ..................................................................................... 66

4.3.3 Removendo aplicativos .................................................................................. 67

4.4 Usando Ports ........................................................................................................ 68

4.4.1 Customizações integradas ............................................................................. 70

4.4.2 Inicializando o port instalado no boot do sistema. .......................................... 72

4.4.3 Desinstalando e reinstalando ......................................................................... 72

4.4.4 Mantendo a árvore limpa ................................................................................ 72

5 Kernel .......................................................................................................................... 75

5.1 O que é o kernel? ................................................................................................. 75

5.2 Sysctl .................................................................................................................... 75

5

5.2.1 Sysctl MIBs .................................................................................................... 75

5.2.2 Manipulando Sysctls ...................................................................................... 76

5.3 Módulos de kernel ................................................................................................ 77

5.3.1 Visualizando os módulos carregados ............................................................. 77

5.3.2 Carregando e descarregando módulos .......................................................... 77

5.4 Construindo seu próprio Kernel ............................................................................ 78

5.4.1 Arquivo de configuração ................................................................................. 79

6. Atualização do FreeBSD ............................................................................................ 93

6.1 Versoes do FreeBSD ............................................................................................ 93

6.1.1 Releases ........................................................................................................ 93

6.1.2 Errata Branches ............................................................................................. 93

6.1.3 FreeBSD-current ............................................................................................ 93

6.1.4 FreeBSD-stable .............................................................................................. 93

6.2 Métodos de atualização. ....................................................................................... 94

6.3 Atualização Binária ............................................................................................... 94

6.3.1 Utilizando o freebsd-update ........................................................................... 94

6.4 Atualização por código fonte ................................................................................. 95

6.4.1 Stable-supfile ................................................................................................. 96

6.4.2 Construção do FreeBSD a partir do fonte. ..................................................... 99

6.4.3 Compilando e instalando um novo kernel .................................................... 100

6.4.4 Preparação para a instalação do mundo ...................................................... 100

6.5 Instalação do mundo........................................................................................... 102

7. Atualizando a árvore do ports ................................................................................... 105

7.1 Portsnap ............................................................................................................. 105

7.1.2 Configurando o portsnap .............................................................................. 105

7.1.3 Utilizando o portsnap .................................................................................... 106

7.2 Atualizando os ports instalados .......................................................................... 106

7.2.1 Identificando softwares desnecessários ....................................................... 109

7.2.2 Identificando e atualizando softwares .......................................................... 109

7.2.3 Reconstruindo programas dependentes. ..................................................... 110

7.2.4 Ignorando Ports ............................................................................................ 111

7.2.5 Reduzindo o tamanho da árvore do ports. ................................................... 111

8. Apache, PHP e MySQL ............................................................................................ 113

8.1 Introdução ........................................................................................................... 113

8.2 Instalação do apache .......................................................................................... 113

8.3 Configuração do Apache .................................................................................... 122

6

8.4 Instalação PHP ................................................................................................... 131

8.5 Integrando Apache e PHP .................................................................................. 133

8.6 Instalação do MySQL.......................................................................................... 134

9. DNS Bind .................................................................................................................. 137

9.1 Introdução .............................................................................................................. 137

9.2 O BIND – Berkeley Internet Name Domain ......................................................... 137

9.2.1 named.root ................................................................................................... 138

9.2.2 named.conf .................................................................................................. 138

9.3 Arquivos de configuração de zona ...................................................................... 138

9.4 Resource Records (RRs) .................................................................................... 138

9.5 Configurando o named ....................................................................................... 139

9.6 Configurando DNS server secundário (SLAVE) ................................................. 143

9.7 Testando nosso servidor dns .............................................................................. 145

7

1 introdução

1.1 Uma Breve História do FreeBSD e do UNIX O Sistema Operacional UNIX foi desenvolvido a partir de um consórcio formado por um conglomerado de companhias que pretendia implementar um sistema em que um computador de grande porte disponibilizasse recursos para diferentes usuários remotos acessando o sistema simultaneamente. Esse sistema foi denominado MULTICS que, apesar de apresentar inovações e criado a base para o que hoje se conhece como plataforma operacional multiusuário, não atingiu impacto comercial considerável e o projeto foi deixado de lado pelas grandes companhias. O projeto foi continuado por Ken Thompson e Dennis Ritchie que buscaram escrever um novo sistema operacional menos arrojado que o projeto anterior.

Dennis Ritchie, Ken Thompson

Retirado de http://penguin.dcs.bbk.ac.uk/academic/unix/linux/slides/dennis-ken2.jpg

8

Kenneth Thompson e Dennis Ritche

Retirado de http://iarmar.com/blog/wp-content/uploads/2009/09/unix.jpg

Eles objetivavam desenvolver um sistema a ser executado em minicomputador em vez de caríssimos computadores de grande porte. O novo sistema foi chamado de UNIX (originalmente Unics, é uma brincadeira com o Multics feita por Brian Kernighan), escrito em uma nova linguagem de programação desenvolvida também por Thompson e Richie chamada C. O UNIX e o C são considerados como os dois marcos da história do computador, uma vez que o C, por ser portável, permitia que aplicações fossem migradas com o mínimo de esforço para outros tipos de plataforma de computadores. Sendo escrito em sua maior parte em C, a portabilidade da linguagem foi garantida ao UNIX, executado com facilidade em diversas arquiteturas de computadores. Essa característica sem precedentes fez com que o UNIX, em muito pouco tempo, se tornasse um sistema operacional popular e fortaleceu a indústria de desenvolvimento de software.

1.2 BSD BSD tem suas origens a partir dos trabalhos do CSRG, sigla em inglês para o Computer Systems Research Group da Universidade da Califórnia em Berkeley, que adquiriu o código fonte do UNIX a partir dos laboratórios AT&T Bell. Dentre as várias contribuições deste grupo ao código do UNIX destacaram-se o sistema de arquivos UFS e a adição da camada de rede do protocolo TCP/IP. CSRG modificou o código do UNIX de uma tal maneira que o grupo resolveu lançar a sua própria versão do sistema operacional, conhecida como Berkeley Software Distribution (BSD).

1.3 FreeBSD O FreeBSD foi desenvolvido a partir de um de dois grupos dissidentes do projeto BSD original. O principal foco desse grupo foi tornar essa nova concepção do BSD, o FreeBSD, em um sistema fácil de ser usado por usuários não técnicos e direcionado principalmente para a arquitetura x86 da Intel. O segundo grupo foi responsável pelo desenvolvido do NetBSD que trabalhava no intuito de fazer com que o BSD fosse

9

compatível com qualquer arquitetura de hardware possível. Um terceiro grupo, dissociado do projeto NetBSD, dedicou-se em disponibilizar um sistema BSD seguro, denominado OpenBSD. Dentre os sistemas operacionais baseados nas variantes do sistema UNIX e no projeto BSD, o FreeBSD é seguramente o mais popular por ser, principalmente, um ambiente de múltiplas aplicabilidades nas tarefas cotidianas dos usuários. Atualmente, o FreeBSD é um sistema operacional largamente utilizado e adequado tanto para servidores que demandam alto desempenho e alto nível de segurança como para a aplicações de usuários que utilizam recursos gráficos intensos em máquinas desktop. A partir da versão 5.4 do FreeBSD em 2005, novamente o projeto FreeBSD foi dividido e dessa divisão originou o PC-BSD, especialmente desenvolvido para aplicações de computadores de mesa.

1.4 Algumas características principais do FreeBSD 1.4.1 Portabilidade O FreeBSD foi desenvolvido para ser suportado de forma estável e segura por arquiteturas de hardware populares. Essas arquiteturas são representadas atualmente pelos atuais processadores da Intel, AMD, assim como para arquiteturas desenvolvidas especialmente para servidores. 1.4.2 Capacidade de Trabalho Uma vez que o FreeBSD pode ser executado adequamente na plataforma 386, o seu desempenho em computadores modernos é altamente eficiente. O sistema está preparado para atender as necessidades dos usuários tanto nas aplicações que não requerem alto desempenho do sistema como as atividades que requerem um alto desempenho em suas atividades. 1.4.3 Gerenciamento de software simplificado O FreeBSD simplificou consideravelmente o gerenciamento dos softwares através da coleção do Ports. Através dele o processo de instalação, desinstalação, atualização de softwares passou a ser uma tarefa simples. 1.4.4 Sofisticado sistema de arquivos O FreeBSD, através do UFS, implementa um gerenciamento de sistema de arquivos otimizado. A resistência a falhas e seu desempenho na leitura e gravação das informações do disco são características importantes deste sistema de arquivos. 1.4.5 Código fonte aberto A disponibilização do código fonte garante transparência e controle absoluto dos processos do sistema operacional, permitindo inclusive a customização do sistema para se adequar as necessidades do usuário. 1.4.6 Ampla documentação Podemos encontrar milhares de documentos e páginas de manuais disponíveis no próprio sistema operacional. Além disso, contamos com diversas fontes de

10

documentação disponíveis na internet (FAQ, Handbook, listas de discussão especializadas, entre outros).

1.5 O mascote do FreeBSD O FreeBSD tem como mascote um diabinho vermelho chamado Daemon que significa demônio em grego, mas na realidade se refere a programas que rodam na memória autonomamente para servir requisições. Até 2005, o Beastie era o logotipo do FreeBSD. Devido a um desconforto de alguns usuários que consideram o logotipo uma afronta religiosa, foi aberta uma competição para escolher um novo símbolo para o projeto. Em 8 de outubro, ganhou o desenho feito por Anton K. Gural para ser o novo símbolo do FreeBSD.

Beastie – O mascote FreeBSD

Submissão de Anton K. Gural que ganhou a competição

11

2. Instalação do FreeBSD 2.1 Conhecimentos preliminares Antes de abordarmos os detalhes do processo de instalação do sistema existem alguns conceitos que são fundamentais. Diferentemente de outros sistemas operacionais, o FreeBSD possui uma forma peculiar de nomear seus dispositivos. Vejamos abaixo alguns exemplos:

/dev/fdX Drive de disco flexível

/dev/acdX Drive de CD/DVD IDE

/dev/adX Disco rígido IDE/SATA

/dev/daX Disco rígido SCSI

Nos exemplos acima, X é um número que, iniciado em zero, indica a ordem de

detecção do dispositivo (possui relação com a conexão física). Agora que sabemos como o FreeBSD nomeia seus discos, vamos conhecer sobre os slices. Um slice é uma área de disco reservada para instalação do sistema. Fisicamente o slice é que uma partição primária que abriga outras partições do tipo bsd em seu interior. Podemos ter diversos slices em um mesmo disco. Cada slice é identificado por um número iniciado em 1. Cada slice contém uma ou mais partições do sistema nomeadas com uma letra variando de a até h. Há uma conveção que atribui a cada letra um significado especial para o sistema.

a Partição raiz (root)

b Partição de swap

c Referencia o disco como um todo

d – h Partições definidas pelo usuário

Para entendermos melhor esse conceito, tomaremos como exemplo uma partição

/dev/ad1s1a. Desmembrando as nomenclaturas temos:

/dev/ Diretório onde estão os arquivos especiais utilizados para

acesso de dispositivos (devices).

ad1 Segundo disco IDE

s1 Slice 1 do disco

a Primeira partição do slice (possivelmente a partição raiz)

12

2.2 Iniciando a instalação A instalação do sistema operacional FreeBSD exige conhecimento prévio do hardware a ser instalado. Para evitarmos surpresas desagradáveis, é fundamental consultarmos o hardware notes, disponível em http://www.freebsd.org/releases/8.0R/hardware.html (para a versão 8.0), e verificarmos se o hardware é compatível com o sistema. Para nossa felicidade, o FreeBSD mantém uma grande compatibilidade com diversas marcas de equipamentos disponíveis no mercado. Para iniciarmos o processo de instalação, devemos decidir por qual método realizaremos a instalação. Neste curso abordaremos o método de instalação mais comum no qual utilizaremos uma mídia ótica (CD). O FreeBSD pode ser instalado utilizando uma mídia ótica, entretanto, outros métodos estão disponíveis como FTP, HTTP, NFS, CDROM, DVD. Podemos obter a imagem do CD em ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/8.0/ (versão 8.0 e plataforma i386). Tendo o CD em mãos, basta inicializar a máquina pelo CDROM e o processo de instalação começará. Veremos abaixo as informações da inicialização do bootloader pelo CD.

Booting from CD-Rom...

CD Loader 1.2

Building the boot loader arguments

Looking up /BOOT/LOADER... Found

Relocating the loader and the BTX

Starting the BTX loader

BTX loader 1.00 BTX version is 1.01

Console: internal video/keyboard

BIOS CD is cd0

BIOS drive C: is disk0

BIOS drive D: is disk1

BIOS 639kB/261120kB available memory

FreeBSD/i386 bootstrap loader, Revision 1.1

Loading /boot/defaults/loader.conf

/boot/kernel/kernel text=0x64daa0 data=0xa4e80+0xa9e40

syms=[0x4+0x6cac0+0x4+0x88e9d]

A primeira tela que veremos é a do gerenciador de boot. Podemos aguardar alguns segundos ou pressionar qualquer tecla para o iniciar o processo de instalação. Segue breve descrição das opções do menu bootloader Boot FreeBSD [default] Inicia o FreeBSD normalmente sem qualquer tipo de alteração no seu processo de inicialização. Na maioria dos casos essa opção funciona corretamente. Boot FreeBSD with ACPI disable Inicia o FreeBSD desabilitando suporte ACPI. Caso tenha problemas na inicialização normal essa opção é recomendada.

13

Boot FreeBSD in Safe Mode Inicia o FreeBSD em modo seguro para acesso a hardware, isto é, desabilita algumas funções no acesso ao hardware que podem trazer problemas de inicialização. Boot FreeBSD in single user mode Inicia o sistema em modo monousuário. Esta opção é semelhante ao modo de segurança do Windows que inicia o sistema com configurações básicas para efetuar alguma manutenção emergencial no sistema. Boot FreeBSD with verbose logging Inicia o sistema exibindo detalhamento de informações principalmente sobre o hardware. É uma boa opção caso algum dispositivo tenha falhado ou não iniciado corretamente.

Escape to loader prompt Permite a manipulação direta de variáveis que são utilizadas pelo loader, através de um terminal de comandos. Podemos também iniciar em modo monousuário manualmente (boot –s), carregar módulos do kernel, inicializar versões anteriores do kernel, dentre outros recursos. Reboot Reinicia o sistema. Veremos como é feita a detecção dos dispositivos físicos presentes pelo kernel. Podemos verificar como o kernel detectou o hardware encontrado no equipamento através das informações exibidas.

real memory = 134152192 (127 MB)

14

avail memory = 116432896 (111 MB)

kbd1 at kbdmux0

...

ata0: <ATA channel 0> on atapci0

ata0: [ITHREAD]

ata1: <ATA channel 1> on atapci0

ata1: [ITHREAD]

vgapci0: <VGA-compatible display> mem 0xe0000000-0xe07fffff at device

2.0 on pci0

em0: <Intel(R) PRO/1000 Network Connection 6.9.14> port 0xd010-0xd017

mem 0xf0000000-0xf001ffff irq 11 at device 3.0 on pci0

em0: [FILTER]

em0: Ethernet address: 08:00:27:64:9f:74

...

fdc0: <floppy drive controller> port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on

acpi0

device_attach: fdc0 attach returned 6

psm0: <PS/2 Mouse> irq 12 on atkbdc0

psm0: [GIANT-LOCKED]

psm0: [ITHREAD]

psm0: model IntelliMouse Explorer, device ID 4

...

ad0: 11234MB <VBOX HARDDISK 1.0> at ata0-master UDMA33

ugen0.1: <Apple> at usbus0

uhub0: <Apple OHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus0

ugen1.1: <Intel> at usbus1

uhub1: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus1

acd0: DVDROM <VBOX CD-ROM/1.0> at ata1-master UDMA33

Root mount waiting for: usbus1 usbus0

uhub0: 8 ports with 8 removable, self powered

Root mount waiting for: usbus1

Root mount waiting for: usbus1

Root mount waiting for: usbus1

uhub1: 8 ports with 8 removable, self powered

Trying to mount root from ufs:/dev/ad0s1a

Concluído o processo de boot da instalação, a primeira do programa sysinstall nos é apresentada. O sysinstall é um utilitário oferecido pelo FreeBSD para nos auxiliar no processo de instalação do sistema. Na tela de seleção do país (Country Selection) selecionaremos a opção correspondente ao Brasil

15

Em seguida, podemos escolheremos o mapa correspondente ao teclado ABNT2 selecionando a opção “Brazil ISO (accent)”.

16

2.3 O utilitário sysinstall Ao finalizar o processo de boot, o aplicativo sysinstall entra em execução. O sysinstall auxilia o processo de instalação/administração de sistemas FreeBSD. Este utilitário apresenta interface simples, organizado através de menus de fácil utilização. A navegação é feita através do teclado com as seguintes teclas:

Tecla Ação

Espaço Seleciona ou alterna o item corrente

ENTER Finaliza o menu atual avançando para a próxima tela

Setas de movimentação Movimenta o cursor na direção desejada

TAB Movimenta o cursor para o próximo item

SHIFT + TAB Movimenta o cursor para o item anterior

PAGE UP Movimenta uma tela para cima

PAGE DOWN Movimenta uma tela para baixo

F1 Exibe informações de ajuda para o item associado

O sysinstall pode ser executado também em sistemas já instalados, bastando para isso executar /stand/sysinstall. Pela sua simplicidade e poucos recursos disponíveis, é pouco frequente seu uso como ferramenta de administração do sistema por usuários mais experientes.

Trataremos brevemente a seguir as diversas opções do menu principal (Main Menu) para melhor familiaridade com o sysinstall. Usage – Quick Start – How to use this menu system Oferece um guia detalhado sobre a utilização do sysinstall, explanando sobre a paginação das telas, movimentação das opções do menu e apresenta breves introduções sobre cada uma das opções disponíveis. Sua leitura é recomendada aos usuários em seu primeiro contato com o sistema. Standard – Begin a standard installation (recommended)

17

O modo de instalação padrão é recomendado devido à clareza com que conduz o usuário no processo de instalação, exibindo diversas informações para cada opção disponível em uma ordem de fácil compreensão. Com exceção das informações exibidas e da ordenação automática entre as etapas, todos os modos de instalação são semelhantes ao Standard. Express – Begin a Quick Installation (for experts) Semelhante à opção standard, esta opção faz uso da ordenação automática das etapas indispensáveis à instalação do sistema, porém não exibindo as dicas das etapas de instalação presentes no modo stardard. As configurações opcionais ficam por conta do usuário através da navegação das opções do menu. É importante observar que, diferentemente das versões anteriores do FreeBSD, o modo de instalação Express não significa uma instalação mínima Custom – Begin a custom installation (for experts) Este é o modo de instalação personalizado e é indicado aos usuários que já tenham experiência com o sistema. Nesse modo, as dicas de instalação foram suprimidas e as etapas de instalação não foram ordenadas, oferecendo flexibilidade ao usuário no processo de instalação. É exibido um menu com as etapas e essas opções podem ser acessadas e revisadas em qualquer ordem e momento da instalação. Configure – Do post-install configuration of FreeBSD Destinada à administração do sistema e pode ser acessada a qualquer momento após a instalação. Por meio desta opção pode-se: instalar novos aplicativos, mudar a senha do usuário root, criar/editar usuários no sistema, configurar recursos de rede, etc. Embora ofereça interface amigável para as diversas rotinas de configuração do sistema, suas operações são muito limitadas e, por essa razão, não é frequentemente utilizada como ferramenta de administração pelos usuários mais experientes. Doc – Installation instructions, README, etc. Concentra várias documentações altamente recomendadas a usuários iniciantes como: guia passo a passo de instalação, guia de compatibilidade de hardware, guia geral do FreeBSD, guia de novos adeptos, errata, notas de direitos autorais, menu de documentação HTML, etc. Keymap – Select keyboard type Necessária para ajustar o idioma de seu teclado na instalação do sistema. Na maioria dos casos, encontraremos teclados padrão ABNT, ABNT2 ou US Acentos. Options – View/Set various installation options O menu de opções permite alterar determinadas variáveis afim de se obter comportamentos diferentes do sysinstall. Através desta opção, podemos alterar a forma como o sysinstall utiliza NFS, o editor padrão, o programa para ver paginas HTML, usuário/senha para conexão FTP, etc. Fixit – Repair mode with CDROM/Floppy or start Shell

18

A opção Fixit é um modo de segurança utilizado para reparar sistemas com problema de inicialização. Através dela, podemos iniciar um disco de recuperação através de CD/floppy ou iniciar um shell independente de disco de recuperação. Upgrade a existing system Através dessa opção podemos atualizar um sistema previamente instalado. Apesar da opção de Upgrade do sistema ser um procedimento seguro, ela não é recomendada pois permite o acumulo de diversos arquivos desnecessários para a execução do novo sistema. O procedimento recomendado é uma nova instalação, se possível em outra máquina, e a restauração posterior dos arquivos de configuração. Load Config – Load default install configurations O sysinstall permite que seja executada uma instalação em lote, possibilitando mínima intervenção do usuário através da leitura de um arquivo de configuração contendo as definições desejadas para instalação. É uma opção muito útil quando necessitamos instalar o sistema da mesma forma em diversas máquinas. Index – Glossary of functions Índice descritivo das operações que podem ser realizadas pelo sysinstall. É uma ótima fonte de documentação para usuários que não possuem muita experiência com o FreeBSD

2.4 Passo a passo do processo de instalação Agora que já conhecemos com mais detalhes as opções do sysinstall, selecionaremos a opção de instalação padrão (Standard).

Como escolhemos anteriormente a instalação Standard, o sistema deverá nos informar constantemente sobre as operações a serem realizadas através de janelas de mensagens.

19

Caso a instalação tenha detectado mais de um disco rígido, o sistema vai pedir para selecionar o disco a ser particionado.

Neste momento, utilizaremos o editor de partições Fdisk para criação da partição primaria onde o sistema será instalado.

20

O Fdisk dispõe de diversos comandos para manipulação das partições ou slices. Veremos a seguir uma descrição de cada comando

Tecla Ação

Setas direcionais

Movem o cursor pela tabela de partições

A

Cria um único slice ocupando todo o disco. Caso exista outras partições o Fdisk irá sobrepor as partições existentes. Esta opção é muito utilizada quando estamos instalando o sistema em servidores

D Exclui a partição selecionada

T Altera o tipo de partição selecionada. O tipo de cada partição é definido por um número. A partição do tipo BSD é definida pelo número 165.

G Define as configurações da geometria do disco. É utilizada quando o kernel não detecta corretamente essas configurações.

Z Alterna a unidade de medida do tamanho do slice entre ST (Setores), KB (Kbytes), MB (Megabytes),GB (Gigabytes)

U Desfaz todas as ações efetuadas no disco

C Cria um slice no disco. É preciso informar o tipo de partição e o tamanho

S Define a partição selecionada como inicializavel

Q Sai do Fdisk e grava a tabela de partições

| (pipe) Entra no modo expert. Este modo possibilita a manipulação das partições por meio de comandos digitados diretamente no prompt da aplicação.

Como nosso objetivo é a instalação de um servidor, utilizaremos a opção A para criar apenas um slice englobando todo o espaço disponível no disco e depois Q para salvar

21

O processo de instalação apresenta 3 opções para o gerenciador de inicialização (bootloader). São elas: Standard – Instala o bootloader padrão na MBR (Master Boot Record) para a inicialização apenas do FreeBSD. Essa opção normalmente é utilizada nas instalações em que apenas o FreeBSD estará presente na máquina. BootMgr – Instala o bootloader com suporte para inicialização de outros sistemas operacionais. Essa opção é utilizada nas instalação do FreeBSD juntamente com outros sistemas operacionais (Windows, Linux, etc) None – Não instala o bootloader preservando o setor de inicialização em sua forma original Selecionaremos a opção Standard uma vez que o FreeBSD será o único sistema operacional presente nesta máquina.

Abaixo a mensagem explicando o processo de criação das partições bsd que deverão estar contidas dentro do slice criado anteriormente

22

Através da ferramenta Disklabel editor, deveremos criar as partições bsd. Semelhante ao fdsik, o disklabel possui uma gama de comandos para a manipulação das partições. Veremos abaixo descrição dos comandos

Tecla Ação

Setas direcionais

Movem o cursor pela tabela de partições

C

Cria uma partição no disco. Será solicitado o tamanho da nova partição, o tipo (partição de sistema de arquivo ou de swap) e o ponto de montagem. O tamanho da nova partição pode ser definido em diversas unidades (blocos, megabytes, gigabytes ou cilindros)

N Adiciona parâmetros ao comando newfs

T Alterna a flag newfs. Quando a flag está definida como Y a partição selecionada será apagada e reconstruída novamente

D Exclui a partição selecionada

Q Salva as alterações e sai do disklabel editor

U Desfaz todas as ações efetuadas no disco

M Define o ponto de montagem da partição selecionada

S Alterna a flag de SoftUpdate

A Define o esquema de particionamento automático

Z Pesquisar

R Pesquisar

23

Ao pressionarmos a tecla C para criarmos uma nova partição do tipo bsd, será exibida uma caixa de dialogo para informarmos o tamanho da nova partição.

Quando criamos uma nova partição, devemos escolher se ela será uma partição comum do sistema de arquivos ou será uma partição utilizada para swap.

Devemos também informar qual o ponto de montagem para a nova partição que estamos criando.

Abaixo veremos um exemplo de esquema de alocação automática das partições (obtido através da tecla A). Notem que o sistema reservou 512MB para a raiz (/) e alocou os outros diretórios em partições separadas. Por questões de segurança é altamente

24

recomendável que a raiz do sistema de arquivos fique separada do restante para evitar que danos nas partições possam impedir a execução do sistema. O particionamento é uma etapa muito importante e deve ser analisada com muito cuidado. Devemos escolher um esquema de particionamento que condiz com o trabalho que a máquina irá desenvolver, sendo assim, o esquema de particionamento utilizado varia bastante de acordo com as necessidades de cada servidor.

O FreeBSD disponibiliza várias mídas para executar a instalação. Existem opções locais (CD/DVD, partição DOS, drive USB, etc) e remotas (NFS, FTP, HTTP).

Selecionaremos a opção Install from a FreeBSD CD/DVD

25

Até o momento nenhuma alteração foi efetuada no disco. Todas as configurações estão armazenadas em memória e prontas para serem definitivamente efetivadas. Caso não esteja certo de alguma ação definida anteriormente, essa é a sua ultima chance de desistir.

A partir deste momento, o sistema base será instalado de acordo com as configurações previamente estabelecidas. Poremos ver o andamento do processo de instalação através das barras progressivas. Um recurso muito interessante é a exibição dos terminais durante a instalação. Combinando as teclas ALT + F2 veremos um log do processo de instalação. Pressionando ALT + F4, teremos um shell para a execução de comandos. Para voltarmos a tela de instalação do sysinstall basta que se pressione ALT + F1

A mensagem a seguir avisa que o sistema base foi instalado com sucesso. A partir desse momento, podemos instalar softwares adicionais à nossa instalação e configurar diversos itens no sistema instalado.

26

A caixa de diálogo abaixo questiona se o usuário deseja ou não configurar as interfaces de rede detectadas no processo de instalação.

Podemos ainda configurar as interfaces disponíveis com endereços IPv6. Caso não exista essa necessidade responda No.

A configuração da interface de rede pode ser dinâmica (obtendo configurações de rede através de um servidor DHCP) ou estática (com as configurações de rede definidas pelo usuário). Em nossa instalação definiremos estaticamente as configurações IP, sendo assim responderemos No a esse questionamento.

Chegamos agora ao momento de configuração da interface de rede. Devemos configurar o nome da maquina (host), o domínio (domain), o endereço de gateway, o endereço do servidor DNS, o endereço IP da máquina e a máscara de sub-rede.

27

Após as configurações necessárias para a interface de rede, o sistema pergunta se deseja iniciar a interface de rede com as configurações definidas anteriormente. Responderemos Yes para esse questionamento.

Podemos configurar a máquina para atuar como um gateway de rede. Respondendo Yes o sistema se encarregará de configurar a inicialização de programas para esse fim. Como nossa máquina não será um gateway responderemos No.

O sistema está preparado para iniciar vários tipos de serviços distintos. Alguns deles funcionam de modo standalone (o próprio programa gerencia suas conexões) e outros funcionam sob a tutela do inetd, que gerencia todas as conexões e as encaminha para o programa responsável pela conexão. Responderemos No, pois não pretendemos iniciar nenhum programa que funcione sob o inetd.

A maioria dos servidores são administrados remotamente através do SSH que permite login através da rede utilizando criptografia dos dados trafegados durante a sessão. No

28

caso de necessitar deste recurso de administração, remota responda Yes para que o sistema se encarregue de iniciar o serviço SSH.

Podemos configurar nossa máquina para ser um servidor FTP anônimo (não requer autenticação válida). Responderemos No, pois a maquina não será um servidor FTP.

Se desejarmos que a maquina atue como um servidor de arquivos NFS, basta responder Yes. Em nosso caso, responderemos No.

Semelhante ao questionamento anterior, só que desta vez para que a máquina utilize os serviços de um servidor NFS. Para nossa instalação, responderemos No.

O sistema, por padrão, é configurado com uma série de definições relativas ao console (fonte, mapa de teclado, screensaver, etc). Para alterar essas configurações, responda Yes. Para a nossa instalação responderemos No.

Definiremos a seguir as configurações de fuso horário para o sistema.

O sistema pode ser configurado para utilizar definições de horário local ou UTC (Tempo Universal Coordenado é também conhecido como Tempo Médio de Greenwich -- GMT). Selecionaremos No para utilizar as definições de horário local

Escolheremos a seguir nossa região para a configuração do horário local. Selecionaremos a opção “2 – America – North and South”

29

Podemos definir a configuração do mouse no console. O recurso do mouse nos ajuda a selecionar/copiar/colar partes de textos agilizando assim a digitação de comandos no console. Caso tenha um mouse instalado, basta responder Yes e configurar o seu funcionamento.

O sistema disponibiliza diversos aplicativos pré-compilados chamados pacotes (packages). Podemos selecionar a instalação de aplicativos através do menu dividido em categorias. Veremos adiante mais detalhes sobre esse tipo de instalação. Por ora, responderemos No.

Caso tenha respondido Yes ao questionamento anterior, o sistema irá exibir o menu de categorias para a escolha dos aplicativos a serem instalados no sistema.

30

Definiremos a seguir a senha para o administrador do sistema – root.

Podemos voltar ao menu principal para alterar as configurações efetuadas. Selecionaremos No para finalizar nossa instalação.

Ao final do processo de instalação, o sistema solicita a reinicialização do sistema que acabou de ser configurado.

Os itens configurados acima podem ser alterados manualmente a qualquer momento com o sistema em execução. Para isso, é de fundamental importância o conhecimento mais aprofundado do ambiente FreeBSD visando aprimorar e adequar a administração do sistema às suas necessidades.

31

3. Unix Básico

3.1 Introdução Agora que aprendemos como instalar o FreeBSD instalamos o sistema FreeBSD, veremos algumas rotinas básicas de administração do sistema.

3.2 Efetuando o login no sistema A primeira tela que nos é apresentada é a tela de login. Ela representa a porta de entrada para o poderoso mundo UNIX. Após fornecermos o nome do usuário e a senha (por questões de segurança, a digitação da senha não exibirá nada na tela) serão as informações: mensagem de direitos de cópia (copyright), versão do FreeBSD, nome do arquivo do kernel , número de compilações, data de instalação do sistema, etc.

login as: usuario

Password:

Last login: Wed Jan 6 13:43:01 2010 from 192.168.0.10

Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994

The Regents of the University of California. All rights reserved.

FreeBSD 8.0-STABLE (WWW) #1: Mon Dec 14 15:55:35 BRST 2009

Welcome to FreeBSD!

Before seeking technical support, please use the following resources:

o Security advisories and updated errata information for all releases

are at http://www.FreeBSD.org/releases/ - always consult the ERRATA

section for your release first as it's updated frequently.

o The Handbook and FAQ documents are at http://www.FreeBSD.org/ and,

along with the mailing lists, can be searched by going to

http://www.FreeBSD.org/search/. If the doc distribution has

been installed, they're also available formatted in /usr/share/doc.

If you still have a question or problem, please take the output of

`uname -a', along with any relevant error messages, and email it

as a question to the [email protected] mailing list. If you are

unfamiliar with FreeBSD's directory layout, please refer to the hier(7)

manual page. If you are not familiar with manual pages, type `man man'.

You may also use sysinstall(8) to re-enter the installation and

configuration utility. Edit /etc/motd to change this login

announcement.

$

32

3.3 O interpretador de comandos - shell

Uma parte significativa do trabalho de um administrador do sistema FreeBSD é executar diversos comandos através da interface de linha de comando, ou como é comumente conhecido, shell. O prompt do interpretador de comandos é exibido assim que a autenticação for efetuada com sucesso. O símbolo utilizado pelo prompt nos diz qual o privilégio que o usuário possui.

O prompt representado por “$” indica que se trata de um usuário comum, ou seja, sem

poderes de administrador, enquanto o “#” representa um usuário com poderes de administrador (root). O FreeBSD nos possibilita trabalhar com diversas opções de shells. Alguns exemplos de shell são: csh, sh, tcsh, bash, ksh, entre outros. Por padrão, o sistema define o shell do root como csh e para os demais usuários o sh, mas podemos alterar o shell com os comandos apropriados que veremos posteriormente.

3.4 Arquivos de configuração da Shell Através da edição de arquivos de configuração podemos personalizar as configurações da shell que utilizamos. As configurações podem ser globais ou para algum usuário específico. Cada ambiente Shell tem o seu arquivo de configuração, no nosso exemplo estamos tratando da shel sh.

Exemplo de um arquivo .shrc que define diversas configurações que são válidas

apenas para um usuário específico.

# $FreeBSD: src/share/skel/dot.shrc,v 1.3.36.1.2.1 2009/10/25

01:10:29 kensmith Exp $

#

# .shrc - bourne shell startup file

#

# This file will be used if the shell is invoked for interactive

use and

# the environment variable ENV is set to this file.

#

# see also sh(1), environ(7).

#

# file permissions: rwxr-xr-x

#

# umask 022

# Enable the builtin emacs(1) command line editor in sh(1),

# e.g. C-a -> beginning-of-line.

set -o emacs

33

# Uncomment this and comment the above to enable the builtin

vi(1) command

# line editor in sh(1), e.g. ESC to go into visual mode.

# set -o vi

# some useful aliases

alias h='fc -l'

alias j=jobs

alias m=$PAGER

alias ll='ls -laFo'

alias l='ls -l'

alias g='egrep -i'

# # be paranoid

# alias cp='cp -ip'

# alias mv='mv -i'

# alias rm='rm -i'

# # set prompt: ``username@hostname$ ''

PS1="`whoami`@`hostname | sed 's/\..*//'`"

case `id -u` in

0) PS1="${PS1}# ";;

*) PS1="${PS1}$ ";;

esac

# search path for cd(1)

# CDPATH=.:$HOME

As configurações globais estão concentradas no arquivo /etc/profile enquanto as

configurações que são especificas para algum usuário estão no arquivo .shrc localizado no home do usuário em questão.

Por exemplo, se desejarmos criar um alias para o comando tail –f /var/log/messages

com o nome de tlm, podemos inserir a linha abaixo em um dos 2 arquivos de configuração. alias tlm='tail –f /var/log/messages'

Se nos editarmos o arquivo global, todos os usuários do sistema poderão digitar o

comando tlm e o sistema executará o comando tail –f /var/log/messages. Por outro lado, caso desejamos que esse comando esteja disponível apenas para o

usuário chamado admin, devemos editar o arquivo /home/admin/.shrc (supondo que o

diretório home do usuário admin seja /home/admin).

34

3.5 Permissão de arquivos/diretórios O FreeBSD é um sistema operacional multiusuário, ou seja, ele está preparado para gerenciar vários usuários trabalhando simultaneamente em diferentes tarefas. Para que esse sistema de gerenciamento funcione adequadamente é fundamental definir um conjunto de permissões que especifica quem pode ler (r - read), escrever (w - write), e executar (x - execute) recursos. Estas permissões são organizadas em 3 grupos: um para o dono do arquivo, um para o grupo à que o arquivo pertence, e um para todos os outros usuários. Sua representação numérica funciona assim:

Valor Permissão Representação

0 Nenhuma permissão ---

1 Apenas permissão de execução --x

2 Apenas permissão de escrita -w-

3 Permissão de escrita e execução -wx

4 Apenas permissão de leitura r--

5 Permissão de leitura e execução r-x

6 Permissão de leitura e escrita rw-

7 Todas as permissões (leitura, escrita e

execução)

rwx

Utilizando o comando ls –l podemos visualiza o conjunto de permissões de

determinado arquivo ou diretório. Por exemplo, a saída do comando ls -l em um diretório qualquer, exibirá:

% ls –l

-rw-r--r-- 1 root wheel 59 Jan 13 20:11 arq1.txt

lrwxr-xr-x 1 root wheel 8 Jan 13 20:14 arq2.txt -> arq1.txt

drwxr-xr-x 2 root wheel 512 Jan 13 20:13 dir1

...

Para entendermos melhor as permissões, analisaremos a permissão do arquivo

arq1.txt: -rw-r--r--

35

O primeiro caractere (o mais à esquerda) indica o tipo do arquivo. Podemos encontrar os seguintes tipos representados:

Caractere Representação

- Arquivo regular

d Diretório

l Link simbólico

c Dispositivo orientado a caractere

b Dispositivo orientado a bloco

s Socket

Os próximos três caracteres, rw- neste exemplo, indicam as permissões de acesso para o dono do arquivo.

Os próximos três caracteres, r--, indicam as permissões para o grupo ao qual o arquivo pertence.

Os três caracteres finais, r--, indicam as permissões para todos os outros usuários. Um hífen indica que a permissão está desligada.

Analisando novamente a permissão fornecida como exemplo (-rw-r--r--), o dono pode ler e escrever neste arquivo, o grupo pode ler o arquivo e os outros usuários podem também apenas ler o arquivo. A permissão numérica para o arquivo é 644, onde cada dígito representa as três partes das permissões do arquivo. Quando a permissão de execução de um diretório está ativada significa que usuários podem entrar nele utilizando o comando cd. A permissão de leitura significa usuários

podem listar o conteúdo do diretório com o comando ls. Já a permissão de escrita estabelece que usuários podem apagar arquivos dentro do diretório.

3.5.1 Alterando permissões Para alterar as permissões de algum arquivo ou diretório utilizaremos o comando

chmod (change file mode). O comando pode ser utilizado pelo usuário root ou pelo

usuário ao qual o arquivo pertence. Para exemplificar o comando, considere a listagem do arquivo abaixo:

-rw-r--r-- 1 root wheel 59 Jan 13 20:11 arq1.txt

Se desejarmos alterar as permissões do arquivo arq1.txt de forma que apenas o usuário proprietário (root) possa ler e gravar, devemos utilizar o comando abaixo:

# chmod 600 arq1.txt

# ls –l

-rw------- 1 root wheel 59 Jan 13 20:11 arq1.txt

3.5.2 Alterando a propriedade Podemos também alterar a propriedade (dono e grupo) do arquivo ou diretório. Para

essa tarefa utilizaremos o comando chown (change owner). Essa alteração exige privilérios de root por razões de segurança.

36

Para exemplificar o comando, considere a listagem do arquivo anteriormente utilizado. -rw-r--r-- 1 root wheel 59 Jan 13 20:11 arq1.txt

Se desejarmos alterar o dono do arquivo e/ou o grupo ao qual ele pertence, devemos utilizar o comando abaixo:

# chown afpu arq1.txt

# ls –l

-rw-r--r-- 1 afpu wheel 59 Jan 13 20:11 arq1.txt

# chown :nobody arq1.txt

# ls -l

-rw-r--r-- 1 afpu nobody 59 Jan 13 20:11 arq1.txt

# chown root:wheel

-rw-r--r-- 1 root wheel 59 Jan 13 20:11 arq1.txt

3.6 Estrutura de Diretórios Conhecer a hierarquia de diretórios do FreeBSD é fundamental para se obter entendimento total do sistema. O conceito mais importante para se assimilar é o conceito do diretório raíz, o /. Esse diretório é montado inicialmente no momento em que o sistema é carregado, e ele contém o sistema base necessário para preparar a entrada em modo de operação multiusuário do sistema operacional. O diretório raiz contém ainda pontos de montagem para cada outro sistema de arquivos que você queira montar. Um ponto de montagem é um diretório onde sistemas de arquivos adicionais podem ser

acoplados ao sistema de arquivos raíz. Pontos de montagem padrão incluem /usr,

/var, /mnt, e /cdrom. Esses diretórios normalmente são encontrados como entradas

dispostas no arquivo /etc/fstab. O /etc/fstab é uma tabela com vários sistemas de arquivos e pontos de montagem que o sistema usa como referência. A maioria dos

sistemas de arquivos no /etc/fstab são montados automaticamente no momento da inicialização, à partir do script rc (Resource Configuration) a não ser que eles

contenham a opção noauto definida. Uma descrição completa da hierarquia do sistema de arquivos está disponível na

página de manual hier (man 7 hier). Por hora, uma breve descrição dos diretórios mais comuns será abordada:

Diretório Descrição

/ Diretório raíz do sistema de arquivo

/bin Utilitários do usuário, fundamentais para os ambientes de multiusuário e monousuário

/boot Arquivos que são usados durante o processo de inicialização do sistema operacional

/dev Arquivos de controle de dispositivos

/etc Arquivos e scripts de configuração do sistema

/etc/defaults Arquivos de configuração padrão do sistema

/etc/mail Arquivos de configuração para os agentes de transferência de correio, como sendmail

37

Diretório Descrição

/etc/namedb Arquivos de configuração do servidor DNS named

/etc/periodic Scripts que são executados periodicamente (diariamente, semanalmente e mensalmente) através cron

/mnt Diretório utilizado como ponto de montagem

/proc Sistema de arquivos de processos

/root Diretório home do usuário root

/sbin Utilitários de programas e administração, fundamentais para os ambientes de multiusuário e monousuário.

/stand Programas usados no ambiente independente.

/tmp Arquivos temporários. Não é garantido a preservação do conteúdo após a reinicialização do sistema.

/usr A maioria dos utilitários e aplicações de usuários.

/usr/bin Utilitários comuns, ferramentas de programação e aplicações.

/usr/include Arquivos C padrão de inclusão.

/usr/lib/ Bibliotecas.

/usr/libdata/ Arquivos de dados de utilitários variados.

/usr/libexec/ Daemons & utilitários do sistema (executados por outros programas).

/usr/local/

Executáveis locais, bibliotecas, etc. Também utilizado como

destino padrão para o sistema de Ports. Dentro de /usr/local,

a disposição hierárquica geral é definida como /usr. Exceto o diretório de páginas de manuais que são diretamente dispostas

sob /usr/local ao invés de serem sobre /usr/local/share, e a documentação das aplicações de terceiros, que ficam sob

share/doc/port.

/usr/obj/ Arquivo de destino dos objetos binários específicos para cada

arquitetura, constribuídos à partir da árvore /usr/src.

/usr/ports A Coleção de Ports do FreeBSD (opcional).

/usr/sbin/ Daemons & utilitários do sistema (executados por usuários).

/usr/share/ Arquivos independentes de arquitetura.

/usr/src/ Arquivos de fontes locais e/ou BSD.

/usr/X11R6/ Executáveis da distribuição do X11R6, bibliotecas, etc (opcional).

/var/ Arquivos de log de múltiplos propósitos, arquivos temporários, de transição, e arquivos de bobina (spool).

/var/log/ Arquivos de logs variados do sistema.

/var/mail/ Arquivos de caixa de correio dos usuários.

/var/spool/ Diretórios de spool de impressão e de correio.

/var/tmp/ Arquivos temporários que são mantidos entre reinicializações do sistema.

/var/yp Mapas NIS.

38

3.7 Comandos diversos Diversas tarefas do dia a dia de um administrador do sistema são realizadas utilizando uma grande variedade de comandos. Para criar uma familiaridade com esses comandos, segue abaixo uma coletânea dos principais comandos. ls Lista o conteúdo dos diretórios

especificados

ls /tmp

ls –la /

cd Muda para o diretório especificado cd /

cd ..

cp Copia arquivos ou diretórios da origem para o destino

cp –R /etc /tmp

cp arq1.txt arq1.bkp

rm Apaga arquivos e diretórios. Funciona de forma recursiva se utilizado com o parâmetro -r

rm –r dir1

mv Move arquivos ou diretórios da origem para o destino. Pode ser utilizado para alterar o nome de um arquivo ou diretório

mv arq1.txt /tmp

mv arq1.txt arq2.txt

cat Exibe o conteúdo de um arquivo cat teste.txt

mkdir Cria o diretório especificado mkdir dir1 dir2

mkdir –p dir1/dir2

ln Cria uma ligação (link) com o arquivo especificado. Essa ligação pode ser um soft link ou um hardlink dependendo dos argumentos especificados

ln –s /usr/home /home

ln a1.txt mesmo_a1.txt

head Exibe as linhas iniciais do arquivo especificado

head arq1.txt

head -25 arq2.txt

tail Exibe as linhas finais do arquivo especificado

tail –f /var/log/messages

tail -30 arq1.txt

clear Limpa a tela clear

uname Exibe informações (hostname, versão, data de compilação, plataforma, entre outras) sobre o sistema

uname –na

shutdown Desliga ou reinicia o computador imediatamente ou após determinado tempo programado.

shutdown –r now

shutdown –p +3

dmesg Exibe o conteúdo do buffer de mensagens do kernel. Normalmente são exibidas as mensagens presentes na inicialização do sistema

dmesg –a

Cada um dos comandos abordados acima possui um conjunto de opções que alteram o comportamento do programa. Consulte a página de manual referente ao comando para maiores informações.

39

3.8 Os arquivo /etc/passwd e /etc/master.passwd A base de dados contendo os usuários do sistema são mantidas através de dois

arquivos, o /etc/passwd e o /etc/master.passwd. Esses arquivos representam um banco de dados de texto simples, contendo uma linha para cada usuário, com campos delimitados por dois pontos (:).

A diferença primordial entre os dois arquivos é que o /etc/passwd armazena todas as informações do usuário exceto o campo correspondente a senha criptografada (hash

baseado no algoritmo md5), enquanto o /etc/master.passwd armazena todas as informações (inclusive a senha criptografada).

Eles se diferem também quanto a permissão. O /etc/passwd possui permissão 644

enquanto o /etc/master.passwd possui permissão 600 (obviamente devido ao fato desse arquivo possuir o hash de senha). Ambos os arquivos pertencem ao usuário root e ao grupo wheel. Vejamos uma listagem dos arquivos:

-rw------- 1 root wheel 1565 Jan 7 22:40 /etc/master.passwd

-rw-r--r-- 1 root wheel 1389 Jan 7 22:40 /etc/passwd

Para entendermos melhor o que cada campo representa, segue um exemplo de

entrada no arquivo /etc/master.passwd: fulano:$1$jNJ0/dba$Z9jWxmLUPhoMkOSo9BP.S/:1002:1002::0:0:Fulano de

Tal:/home/fulano:/bin/sh

Os campos representam respectivamente:

Login do usuário (fulano);

A senha criptografada ($1$jNJ0/dba$Z9jWxmLUPhoMkOSo9BP.S/);

O numero identificador do usuário (1002);

O grupo primário ao qual o usuário pertence (1002);

A classe de login do usuário (nulo);

O tempo em segundos UTC para que a senha seja alterada (0);

O tempo em segundos UTC de expiração da conta (0);

O campo de informações gerais (gecos) sobre o usuário (Fulano de Tal);

O diretório home do usuário (/home/fulano);

O interpretador de comandos (shell) do usuário (/bin/sh) .

Esses dois arquivos simples são razoavelmente bons para um pequeno número de usuários, mas como a base de usuários tende a crescer, existe a necessidade de um banco de dados que tenha mais desempenho nas consultas. É por isso que o FreeBSD

também tem o /etc/pwd.db e /etc/spwd.db .

Esses arquivos são tabelas hash em formato db (gerados pelo programa pwd_mkdb)

correspondente ao /etc/passwd e ao /etc/master.passwd, respectivamente. Eles fornecem um mecanismo de pesquisa rápida para grandes bases de dados do usuário. Essa organização dos arquivos de base de dados de usuários é um ponto favorável, pois facilita a migração de contas de um sistema a outro.

40

Vamos supor que necessitamos migrar todas as contas de um servidor para o outro. O

primeiro passo é copiar o arquivo /etc/master.passwd para o servidor que irá receber

as contas e executar o comando pwd_mkdb . Supondo que o arquivo foi copiado com o

nome de master.passwd.new no diretório /etc, o comando seria: # pwd_mkdb –p /etc/master.passwd.new

3.9 O arquivo /etc/group Semelhante aos usuários, os grupos também são armazenados em um arquivo texto

chamado /etc/group. Um exemplo de entrada válida no arquivo de grupos seria: fulano:*:1002:siclano,beltrano

Note que há apenas quatro campos:

O nome do grupo (fulano);

A senha do grupo, que é um campo opcional, apresentado como um “*” quando

não é utilizado (*);

O número identificador do grupo (1002);

Os usuários que participam secundariamente do grupo (siclano,beltrano).

3.10 Comandos para manipulação de contas de usuários Agora que já conhecemos como o sistema armazena a base de dados dos usuários, podemos aprender os comandos necessários para a criação, remoção e alteração das contas de usuários. O sistema nos oferece alguns scripts que facilitam a tarefa de manutenção dos usuários.

3.10.1 Criando usuários com adduser O utilitário adduser é um script em shell que implementa os comandos pw necessários para a criação dos usuários utilizando os parâmetros fornecidos ao script. Ele pode ser

facilmente personalizado através do arquivo /etc/adduser.conf (caso o arquivo não exista, o script utilizará um padrão pré-determinados para a sugestão dos campos). Vejamos abaixo uma sessão de criação do usuário afpu

# adduser

Username: afpu

Full name: AFPU – Unicamp

Uid (Leave empty for default):

Login group [afpu]:

Login group is afpu. Invite afpu into other groups? []:

Login class [default]:

Shell (sh csh tcsh nologin) [sh]:

Home directory [/home/afpu]:

Home directory permissions (Leave empty for default):

Use password-based authentication? [yes]:

Use an empty password? (yes/no) [no]:

Use a random password? (yes/no) [no]:

Enter password:

Enter password again:

41

Lock out the account after creation? [no]:

Username : afpu

Password : *****

Full Name : AFPU – Unicamp

Uid : 1003

Class :

Groups : afpu

Home : /home/afpu

Home Mode :

Shell : /bin/sh

Locked : no

OK? (yes/no): yes

adduser: INFO: Successfully added (afpu) to the user database.

Add another user? (yes/no): no

Goodbye!

Após a confirmação dos dados digitados, o script irá criar o registro do usuário nos

arquivos /etc/passwd e /etc/master.passwd, criar o grupo no /etc/group, criar o diretório home com os arquivos de configuração padrão (dot files) do usuário.

Listagem do diretório home que foi criado. # ls –l ~afpu

drwxr-xr-x 2 apfu apfu 512 Jan 15 11:15 .

drwxr-xr-x 5 root wheel 512 Jan 15 11:15 ..

-rw-r--r-- 1 apfu apfu 759 Jan 15 11:15 .cshrc

-rw-r--r-- 1 apfu apfu 257 Jan 15 11:15 .login

-rw-r--r-- 1 apfu apfu 167 Jan 15 11:15 .login_conf

-rw------- 1 apfu apfu 379 Jan 15 11:15 .mail_aliases

-rw-r--r-- 1 apfu apfu 339 Jan 15 11:15 .mailrc

-rw-r--r-- 1 apfu apfu 785 Jan 15 11:15 .profile

-rw------- 1 apfu apfu 284 Jan 15 11:15 .rhosts

-rw-r--r-- 1 apfu apfu 980 Jan 15 11:15 .shrc

3.10.2 Removendo usuários com rmuser O rmuser exclui uma ou mais contas de usuários fornecidos na linha de comando. A remoção do usuário envolve:

1. Remove tarefas agendadas pelo crontab.

2. Remove tarefas agendadas pelo at.

3. Finaliza todos os processos do usuário que está em execução.

4. Remove a entrada do usuário da base de dados local de contas.

5. Remove o diretório home do usuário.

6. Remove mailbox do usuário presente em /var/mail.

7. Remove todos os arquivos pertencentes ao usuário do diretório /tmp, /var/tmp e

/var/tmp/vi.recover.

8. Remove o usuário de todos os grupos ao qual ele pertence.

9. Remove mensagens da filas de mensagens que pertençam ao usuário.

Como vimos, há uma série de tarefas a serem executadas ao excluir usuários do sistema.

Vejamos abaixo um exemplo da execução do rmuser.

42

# rmuser afpu

Matching password entry:

afpu:*:1004:1004::0:0:AFPU - UNICAMP:/home/afpu:/bin/sh

Is this the entry you wish to remove? Yes

Remove user's home directory (/home/afpu)? Yes

Removing user (afpu): mailspool home passwd.

3.10.3 Consultando informações com o comando finger O finger é um utilitário utilizado para exibir informações sobre os usuários do sistema. Através dele podemos facilmente consultar diversas informações sobre o usuário fornecendo um argumento como critério de pesquisa. Todos os registros que coincidem com o critério de pesquisa fornecido será exibido.

Vejamos abaixo um exemplo de utilização do finger. Notem que foi utilizada a palavra afpu como argumento de pesquisa e os resultado obtidos foram afpu1 e afpu2.

Login: afpu1 Name: Usuario 1 – AFPU

Directory: /home/afpu1 Shell: /bin/sh

Last login Fri Jan 15 14:38 (BRST) on pts/1 from 143.106.115.118

No Mail.

No Plan.

Login: afpu2 Name: Usuario 2 – AFPU

Directory: /home/afpu2 Shell: /bin/sh

Never logged in.

No Mail.

No Plan.

3.10.4 Alterando informações de conta com o comando chpass O chpass permite a alteração das informações da conta de usuário fornecida como argumento, ou do usuário corrente caso não seja fornecido nenhum parâmetro.

Ao ser executado, o chpass abre um editor de texto (por padrão o vi) e possibilita a

alteração das informações. Ao salvar as informações e sair do editor o chpass atualiza as informações na base de dados.

Segue abaixo um exemplo de utilização do chpass. # chpass afpu1

#Changing user information for afpu1.

Login: afpu1

Password: $1$g/Y02lhr$/LP5znLbWtOx3LU/IS3jl1

Uid [#]: 1004

Gid [# or name]: 1004

Change [month day year]:

Expire [month day year]: 01 30 2011

Class:

Home directory: /home/afpu1

Shell: /bin/sh

Full Name: AFPU – UNICAMP

Office Location:

Office Phone:

Home Phone:

Other information:

chpass: user information updated

3.10.5 Alterando a senha com passwd

43

O passwd permite que o usuário altere sua senha local. Caso o usuário não tenha poderes administrativos (root) o aplicativo solicitará a senha atual antes da alteração. Apenas o root pode alterar a senha de outras contas. Veja abaixo dois exemplos (um de root e outro de usuário normal) de alteração de

senha com passwd. #passwd afpu1

Changing local password for afpu1

New Password:

Retype New Password:

$ passwd

Changing local password for afpu1

Old Password:

New Password:

Retype New Password:

3.10.6 Bloqueando usuários Agora que já sabemos criar, excluir e alterar informações da base de dados de usuário é o momento de aprendermos a bloquear um usuário. Para tal ação utilizaremos o

poderoso aplicativo pw, que possibilita a completa manutenção dos usuários da base

local. O pw é muito utilizado nos scripts que nos auxiliam na manutenção dos usuários. O argumentos que nos possibilitam bloquear e desbloquear um usuário são lock e unlock respectivamente. Sendo assim, para bloquearmos um usuário o usuário afpu, devemos utilizar o seguinte comando:

# pw lock afpu

Para entendermos melhor como é feito o bloqueio, consultaremos como ficou o registro

do usuário afpu no arquivo /etc/master.passwd.

# cat /etc/master.passwd | grep afpu

afpu:*LOCKED*$1$fv4GS9.r$Wh2KewOKZ1fxXB.L1TinZ1:1004:1004::0:0:AFPU -

UNICAMP:/home/afpu1:/bin/sh

Notem que o campo destinado a senha criptografada agora inicia com *LOCKED* e o

usuário estará impossibilitado de autenticar na máquina. Para desbloquear a conta do usuário afpu basta utilizarmos o comando abaixo.

# pw unlock afpu

3.10.7 Utilizando vipw Uma ferramenta muito utilizada por usuários experientes em FreeBSD para alteração

de contas é o vipw. Ao ser executado, ele inicia o seu editor de textos favorito (normalmente o vi) e possibilita a alteração direta das informações do

/etc/master.passwd. Após a alteração do arquivo a base de dados é atualizada automaticamente. Exemplo de utilização:

# vipw

44

3.11 Os arquivos /etc/rc.conf e /etc/defaults/rc.conf A inicialização e configuração de vários serviços são feitos no momento do boot, através dos scripts rc. Dois arquivos são muito importantes nesse processo: o

/etc/rc.conf e o /etc/defaults/rc.conf.

O /etc/defaults/rc.conf mantém especificações padrão para todas as opções disponíveis. Não é recomendada qualquer alteração nesse arquivo.

O arquivo /etc/rc.conf contém diversas configurações locais do computador como: nome do host, configurações de rede, serviços a serem iniciados no boot, etc. As

opções declaradas aqui sobrescrevem as do /etc/defaults/rc.conf e qualquer configuração diferente da padrão deverá ser feita nesse arquivo.

Vejamos um exemplo do /etc/rc.conf. # -- sysinstall generated deltas -- # Thu Dec 10 08:19:36 2009

# Created: Thu Dec 10 08:19:36 2009

# Enable network daemons for user convenience.

# Please make all changes to this file, not to

/etc/defaults/rc.conf.

# This file now contains just the overrides from

/etc/defaults/rc.conf.

defaultrouter="192.168.0.1"

hostname="free.iqm.unicamp.br"

ifconfig_em0="inet 192.168.0.10 netmask 255.255.255.0"

keymap="br275.iso.acc"

sshd_enable="YES"

ntpd_enable="YES"

apache22_enable="YES"

Algumas diretivas são utilizadas para a configuração da máquina (defaultrouter,

hostname, keymap, ifconfig_em0) enquanto outras são utilizadas para a inicialização

de serviços (sshd_enable, ntpd_enable e apache22_enable). As diretivas utilizadas para a inicialização de serviços seguem um padrão de nomeação definido pelo nome

do daemon seguido de _enable e podem contem o valor “YES” (para serem iniciados no

boot) ou “NO” para não serem iniciados no boot.

Uma vez que o daemon esteja registrado no rc.conf, podemos utilizar os scripts do diretório rc.d para manipular a execução dos daemons. Quando utilizamos o nome do script sem nenhum parâmetro adicional é exibida uma mensagem de utilização.

# /etc/rc.d/ntpd

Usage: /etc/rc.d/ntpd

[fast|force|one](start|stop|restart|rcvar|status|poll)

Para verificar se o ntpd está em funcionamento, podemos utilizar o parâmetro status.

# /etc/rc.d/ntpd status

45

ntpd is running as pid 627.

Para finalizar o ntpd, utilizaremos o parâmetro stop.

# /etc/rc.d/ntpd stop

Stopping ntpd.

# /etc/rc.d/ntpd status

ntpd is not running.

Para inicializar o ntpd, utilizaremos o parâmetro start.

# /etc/rc.d/ntpd start

Starting ntpd.

# /etc/rc.d/ntpd status

ntpd is running as pid 48782.

Para se certificar que o ntpd está devidamente cadastrado no rc.conf, basta verificar o

valor da variável de ambiente rc através do parâmetro rcvar

# /etc/rc.d/ntpd rcvar

# ntpd

ntpd_enable=YES

3.12 Montando e desmontando sistemas de arquivos Para facilitar o entendimento do sistema de arquivos do FreeBSD utilizaremos uma comparação análoga a uma arvore. Podemos considerar o inicio (/) como a raiz. Os outros diretórios são ramos da arvores, que podem ainda ter seus próprios ramos, como

/usr/sbin ou /usr/local/bin.

Figura retirada de http://www.rwc.uc.edu/thomas/Intro_Unix_Text/Images/Unix_file_system.png

46

É fortemente recomendado que alguns diretórios fiquem em sistemas de arquivos diferentes. A divisão de alguns diretórios em partições separadas impede que o sistema venha a falhar caso a única partição apresente algum problema, seja falta de espaço ou corrupção dos dados.

3.12.1 O arquivo fstab O arquivo /etc/fstab contém as informações sobre os sistemas de arquivos

utilizados. Ele é lido durante o processo de boot e o seu conteúdo é montado ou não, dependendo da configuração. Segue abaixo um exemplo: #Device Mountpoint FStype Options Dump Pass#

/dev/da0s1b none swap sw 0 0

/dev/da0s1a / ufs rw 1 1

/dev/da0s1d /tmp ufs rw 2 2

/dev/da0s1e /usr ufs rw 2 2

/dev/da0s1f /var ufs rw 2 2

/dev/da0s1g /work ufs rw 2 2

/dev/acd0 /cdrom cd9660 ro,noauto 0 0

server:/dados /home nfs rw,userquota 0 0

O arquivo /etc/fstab é um arquivo texto comum composto com as seguintes linhas:

Dispositivo: Nome do dispositivo a ser utilizado. Ex: /dev/da0s1d

Ponto de montagem: Diretório onde o dispositivo será montado. Ex: /tmp

Tipo: Indica o tipo de sistemas de arquivos utilizado. Ex: ufs

Opções: Descreve quais opções de montagem serão utilizadas. Seguem abaixo

alguns exemplos de opções de montagem.

o noauto: Estabelece que esse sistema de arquivo não será iniciado

automaticamente.

o noexec: Não permite execução de no sistema de arquivos.

o nosuid: Não permite arquivos com o suid bit ativado.

o ro: Monta o sistema de arquivo apenas para leitura (read only)

o userquota: Utiliza quota de usuário

o groupquota: Utiliza quota de grupo

Dump: Indica quais sistemas de arquivos o aplicativo de backup dump deverá

efetuar backup

Pass: Esse campo determina a ordem que os sistemas deverão ser verificados

pelo aplicativo fsck. O valor 0 desabilita a checagem.

3.12.2 O comando mount O comando mount é a ferramenta usada para montar sistemas de arquivos.

Se for utilizada sem nenhum argumento, exibe uma lista dos sistemas de arquivos montados atualmente.

/dev/da0s1a on / (ufs, local)

devfs on /dev (devfs, local)

/dev/da0s1d on /tmp (ufs, local, soft-updates)

47

/dev/da0s1e on /usr (ufs, local, soft-updates)

/dev/da0s1f on /var (ufs, local, soft-updates)

/dev/da0s1g on /work (ufs, local, soft-updates)

server:/work4/pcv on /home (nfs)

A utilização do comando mount pode ser feita da seguinte forma: # mount <opções> <dispositivo> <ponto de montagem>

O comando pode ser utilizado com diversas opções que podem ser estudadas em detalhes através da consulta da página de manual. Veremos algumas opções mais comuns:

-a Monta todos os sistemas de arquivos listados no /etc/fstab. Exceto

aqueles assinalados com a opção noauto.

-f Força a montagem de um sistema de arquivos que não foi considerado

limpo pelo fsck (problemas de integridade). Essa opção não é segura, sendo

assim, seu uso não é recomendado.

-r Monta o sistema de arquivos como somente leitura.

-t <tipofs> Monta o sistema de arquivos com o tipo especificado. Ufs é o tipo

padrão de sistema de arquivos FreeBSD. Vejamos abaixo outros tipos:

o msdosfs Padrão MSDOS

o ntfs Padrão de sistemas de arquivos utilizado no Windows NT em

diante

o cd9660 Padrão ISO9660 utilizado em CD

o nfs Padrão de sistema de arquivos de rede (Network File

System)

-v Habita o modo detalhado.

-w Monta o sistema de arquivos como leitura e escrita.

-o Define as opções de montagem do sistema de arquivos. Pode ser

utilizada com nodev, noexec, nosuid, async, entre outras.

Exemplos de utilização:

Montar uma partição NTFS:

# mount –t ntfs /dev/ad0s1 /mnt

Montar uma mídia de CDROM

# mount –t cd9660 /dev/acd0 /cdrom

Montar o diretório /tmp com opção noexec,nosuid

# mount /dev/da0s1d /tmp –o noexec,nosuid

Montar todos os sistemas de arquivos definidos no /etc/fstab que possuem o

tipo nfs

# mount –at nfs

48

3.12.3 O comando umount

O comando umount é utilizado para desmontar o sistema de arquivo especificado.

Pode receber como parâmetro o ponto de montagem, o dispositivo, e algumas opções. Dentre as possíveis opções destacam-se:

-t <tipofs> Desmonta o sistema de arquivos com o tipo especificado.

-f Força a desmontagem de um sistema de arquivos.

-a Desmonta todos os sistemas de arquivos listados no /etc/fstab.

-v Habita o modo detalhado.

Exemplos de utilização:

Desmontar todas as partições tipo NTFS:

# mount –at ntfs

Desmontar um sistema de arquivos previamente montado em /mnt

# mount /mnt

3.13 Manipulação de Processos A definição de um processo nada mais é que um programa em execução. Sendo assim, qualquer comando executado iniciará ao menos um processo. Alguns processos encontram-se constantemente em execução mantendo vários recursos do sistema em funcionamento. Cada processo em execução possui características peculiares que veremos abaixo:

PID Process ID, ou seja, identificação do processo. É um numero único

atribuído sequencialmente no intervalo de 1 a 99999 (reiniciam quando

ultrapassam o valor máximo)

PPID Um processo pode iniciar outro processo mantendo uma relação entre

eles de pai (processo criador) e filho. O PID do processo criador corresponde ao

PPID. O processo init tem ID 1 e é o único que não possui nenhum processo

pai.

UID É a identificação do usuário que criou o processo. A execução do

processo tem as mesmas permissões do usuário.

GID É a identificação do grupo do processo e também estabelece relações de

permissão para o grupo.

Existem duas ferramentas essenciais que nos auxiliam no monitoramento de processos,

o ps e o top.

O comando ps (process status) permite verificar o status dos processos em execução no sistema apresentando uma listagem estática. Se utilizado sem nenhum argumento será exibido apenas os processos que pertencem ao usuário.

$ ps

PID TT STAT TIME COMMAND

49

8120 p0 R+ 0:00.00 ps

22493 p0 Ss 0:00.01 -sh (sh)

Para obtermos uma listagem mais detalhada dos processos e incluir os todos os processos em execução, utilizaremos o comando com os argumentos aux.

$ ps -aux USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND

root 11 200.0 0.0 0 32 ?? RL 14Dec09 108558:47.62 [idle]

root 0 0.0 0.0 0 112 ?? DLs 14Dec09 0:59.84 [kernel]

root 1 0.0 0.0 3204 568 ?? ILs 14Dec09 0:00.79 /sbin/init --

root 2 0.0 0.0 0 16 ?? DL 14Dec09 1:19.94 [g_event]

root 3 0.0 0.0 0 16 ?? DL 14Dec09 0:20.70 [g_up]

root 4 0.0 0.0 0 16 ?? DL 14Dec09 0:15.04 [g_down]

root 5 0.0 0.0 0 16 ?? DL 14Dec09 0:00.00 [xpt_thrd]

root 6 0.0 0.0 0 16 ?? DL 14Dec09 0:08.22 [fdc0]

root 7 0.0 0.0 0 16 ?? DL 14Dec09 0:02.17 [pagedaemon]

root 8 0.0 0.0 0 16 ?? DL 14Dec09 0:00.00 [vmdaemon]

root 9 0.0 0.0 0 16 ?? DL 14Dec09 0:00.04 [pagezero]

root 10 0.0 0.0 0 16 ?? DL 14Dec09 0:00.00 [audit]

root 12 0.0 0.0 0 288 ?? WL 14Dec09 28:23.47 [intr]

root 13 0.0 0.0 0 16 ?? DL 14Dec09 1:18.54 [yarrow]

root 14 0.0 0.0 0 192 ?? DL 14Dec09 0:21.87 [usb]

root 15 0.0 0.0 0 16 ?? DL 14Dec09 0:10.00 [bufdaemon]

root 16 0.0 0.0 0 16 ?? DL 14Dec09 92:37.86 [syncer]

root 17 0.0 0.0 0 16 ?? DL 14Dec09 0:09.59 [vnlru]

root 18 0.0 0.0 0 16 ?? DL 14Dec09 0:16.82 [softdepflush]

root 19 0.0 0.0 0 16 ?? DL 14Dec09 0:03.12 [flowcleaner]

root 130 0.0 0.1 2740 1064 ?? Is 14Dec09 0:00.00 adjkerntz -i

root 333 0.0 0.0 3204 656 ?? Is 14Dec09 0:00.00 /sbin/devd

root 425 0.0 0.1 7020 1560 ?? Ss 14Dec09 0:05.62 /usr/sbin/syslogd -s

root 627 0.0 0.1 11852 2568 ?? Ss 14Dec09 1:14.85 /usr/sbin/ntpd -c

/etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift

root 664 0.0 0.2 26136 4480 ?? Is 14Dec09 0:00.01 /usr/sbin/sshd

root 671 0.0 0.2 12072 4032 ?? Ss 14Dec09 0:36.89 sendmail: accepting

connections (sendmail)

smmsp 675 0.0 0.2 12072 3864 ?? Is 14Dec09 0:01.07 sendmail: Queue

runner@00:30:00 for /var/spool/clientmqueue (sendmail)

root 681 0.0 0.1 7948 1612 ?? Is 14Dec09 0:10.53 /usr/sbin/cron -s

root 4357 0.0 0.2 38068 5144 ?? Is 8Jan10 0:00.04 sshd: rensousa [priv]

(sshd)

rensousa 4360 0.0 0.2 38068 5208 ?? S 8Jan10 0:00.55 sshd: rensousa@pts/0

(sshd)

root 731 0.0 0.1 6888 1284 v0 Is+ 14Dec09 0:00.00 /usr/libexec/getty Pc

ttyv0

root 732 0.0 0.1 6888 1284 v1 Is+ 14Dec09 0:00.00 /usr/libexec/getty Pc

ttyv1

root 733 0.0 0.1 6888 1284 v2 Is+ 14Dec09 0:00.00 /usr/libexec/getty Pc

ttyv2

root 734 0.0 0.1 6888 1284 v3 Is+ 14Dec09 0:00.00 /usr/libexec/getty Pc

ttyv3

root 735 0.0 0.1 6888 1284 v4 Is+ 14Dec09 0:00.00 /usr/libexec/getty Pc

ttyv4

root 736 0.0 0.1 6888 1284 v5 Is+ 14Dec09 0:00.00 /usr/libexec/getty Pc

ttyv5

root 737 0.0 0.1 6888 1284 v6 Is+ 14Dec09 0:00.00 /usr/libexec/getty Pc

ttyv6

root 738 0.0 0.1 6888 1284 v7 Is+ 14Dec09 0:00.00 /usr/libexec/getty Pc

ttyv7

rensousa 4361 0.0 0.1 8260 1880 0 Ss 8Jan10 0:00.01 -sh (sh)

rensousa 23233 0.0 0.1 8004 1400 0 R+ 11:02AM 0:00.00 ps -aux

50

Como podemos analisar, a listagem exibe vários campos organizados em colunas conforme tabela abaixo.

Campo Descrição USER Usuário proprietário PID ID do processo %CPU Percentual de uso da CPU por este processo %MEM Percentual de uso da memória por este processo VSZ Tamanho (kbytes) virtual do processo RSS Tamanho configurado residente em paginas de 1k na memória TT Abreviação do nome do terminal STAT Estado atual do processo STARTED Data ou horário que o processo foi iniciado TIME Tempo acumulado de uso de CPU COMMAND Comando executado e seus argumentos

Podemos ainda personalizar a saída do comando ps com utilizando o argumento -o, conforme abaixo:

$ ps -ax -o pid,user,%cpu,command

PID USER %CPU COMMAND

0 root 0.0 [kernel]

1 root 0.0 /sbin/init --

2 root 0.0 [g_event]

3 root 0.0 [g_up]

4 root 0.0 [g_down]

5 root 0.0 [xpt_thrd]

6 root 0.0 [fdc0]

7 root 0.0 [pagedaemon]

8 root 0.0 [vmdaemon]

9 root 0.0 [pagezero]

10 root 0.0 [audit]

11 root 200.0 [idle]

12 root 0.0 [intr]

13 root 0.0 [yarrow]

14 root 0.0 [usb]

15 root 0.0 [bufdaemon]

16 root 0.0 [syncer]

17 root 0.0 [vnlru]

18 root 0.0 [softdepflush]

19 root 0.0 [flowcleaner]

130 root 0.0 adjkerntz -i

333 root 0.0 /sbin/devd

425 root 0.0 /usr/sbin/syslogd -s

627 root 0.0 /usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid

-f /var/db/ntpd.drift

664 root 0.0 /usr/sbin/sshd

671 root 0.0 sendmail: accepting connections (sendmail)

51

675 smmsp 0.0 sendmail: Queue runner@00:30:00 for

/var/spool/clientmqueue (sendmail)

681 root 0.0 /usr/sbin/cron -s

4357 root 0.0 sshd: rensousa [priv] (sshd)

4360 rensousa 0.0 sshd: rensousa@pts/0 (sshd)

731 root 0.0 /usr/libexec/getty Pc ttyv0

732 root 0.0 /usr/libexec/getty Pc ttyv1

733 root 0.0 /usr/libexec/getty Pc ttyv2

734 root 0.0 /usr/libexec/getty Pc ttyv3

735 root 0.0 /usr/libexec/getty Pc ttyv4

736 root 0.0 /usr/libexec/getty Pc ttyv5

737 root 0.0 /usr/libexec/getty Pc ttyv6

738 root 0.0 /usr/libexec/getty Pc ttyv7

4361 rensousa 0.0 -sh (sh)

23372 rensousa 0.0 ps -ax -o pid,user,%cpu,command

Outro importante aplicativo para o monitoramento de processos do sistema é o top.

Semelhante ao ps, também exibe uma listagem contendo diversas informações sobre

os processos em execução. A principal diferença entre eles é que no top as informações são atualizadas periodicamente, nos fornecendo um cenário bem próximo à realidade.

Outra diferença é que o top exibe outras informações gerais sobre o sistema (média de carga, uptime, uso de memória, uso de swap, entre outras).

Essas características fazem do top uma ferramenta indispensável ao administrador do sistema.

Abaixo temos um exemplo da saída do comando top. $ top

last pid: 24650; load averages: 0.00, 0.00, 0.00 up 38+07:48:29

00:20:32

23 processes: 1 running, 22 sleeping

Mem: 14M Active, 757M Inact, 317M Wired, 213M Buf, 885M Free

Swap: 4060M Total, 4060M Free

PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND

627 root 1 44 0 11852K 2568K select 0 1:16 0.00% ntpd

671 root 1 44 0 12072K 4032K select 0 0:37 0.00% sendmail

681 root 1 44 0 7948K 1612K nanslp 0 0:11 0.00% cron

425 root 1 44 0 7020K 1560K select 0 0:06 0.00% syslogd

675 smmsp 1 44 0 12072K 3864K pause 0 0:01 0.00% sendmail

4360 rensousa 1 44 0 38068K 5208K select 1 0:01 0.00% sshd

24605 rensousa 1 44 0 38068K 5208K select 1 0:00 0.00% sshd

4357 root 1 46 0 38068K 5144K sbwait 0 0:00 0.00% sshd

24602 root 1 46 0 38068K 5144K sbwait 0 0:00 0.00% sshd

4361 rensousa 1 44 0 8260K 1884K ttyin 0 0:00 0.00% sh

664 root 1 44 0 26136K 4480K select 0 0:00 0.00% sshd

24606 rensousa 1 44 0 8260K 1876K wait 1 0:00 0.00% sh

731 root 1 44 0 6888K 1284K ttyin 0 0:00 0.00% getty

733 root 1 76 0 6888K 1284K ttyin 0 0:00 0.00% getty

732 root 1 76 0 6888K 1284K ttyin 0 0:00 0.00% getty

735 root 1 76 0 6888K 1284K ttyin 1 0:00 0.00% getty

738 root 1 76 0 6888K 1284K ttyin 1 0:00 0.00% getty

736 root 1 76 0 6888K 1284K ttyin 0 0:00 0.00% getty

3.14 Daemons, sinais e controle de processos

52

Os programas podem ser caracterizados pela sua ligação com o terminal. Existem programas que são diretamente ligados com o terminal e o usuário interage diretamente com ele, obtendo assim maior controle sob sua execução. Um exemplo desse tipo de programa seria um usuário utilizando um editor de textos ou algum cliente de email. Quando o usuário decidir que o programa deve terminar basta fechar o programa e ele terminará sua execução. Existem alguns programas que funcionam em background oferecendo diversas funcionalidades ao sistema. Esses programas não estão ligados a nenhum terminal e sua execução não interage com diretamente com usuário. Essa classe de programas recebe o nome de daemons. Por convenção, a maioria dos daemons são batizados com a terminação “d” em seu nome. Exemplos de alguns daemons do sistema são: syslogd (controla mensagens de log), sshd (servidor de autenticação remota ssh), ntpd (servidor de sincronia de tempo), entre outros.

3.14.1 Sinais Um sinal é uma mensagem de comunicação que pode ser enviada a um processo em execução. Os sinais podem ser iniciados por programas, usuários, ou administradores. Usuários podem enviar sinais apenas para os processos que estão executando com o seu UID. Só o root pode enviar sinais a qualquer processo em execução. Existe uma lista de tipos específicos de sinais, da qual veremos os mais frequentemente utilizados

Numero Nome Descrição

1 SIGHUP Reinicialização do processo. Na maioria dos daemons causa a releitura dos arquivos de configuração

2 SIGINT A maioria dos programas utiliza esse sinal para indicar uma interrupção do programa.

3 SIGQUIT Fechamento

6 SIGABRT Abortar

9 SIGKILL Finalização forçada pelo kernel

15 SIGTERM Finalização normal

Para obter a lista completa dos sinais disponíveis utilize o comando man 3 signal.

3.14.2 Enviando sinais a processos Quando temos um processo diretamente ligado ao terminal podemos enviar sinais através da combinação de teclas especificas. Um exemplo seria se pressionarmos

CTRL + C na exibição de uma pagina de manual com o comando man. Isso causaria a

interrupção do comando com o sinal 2 (SIGINT). Para os processos que não são controlados por um terminal, devemos utilizar o

programa kill para a comunicação. O kill envia por padrão um sinal do tipo SIGTERM para o processo identificado pelo PID.

Para utilizar o kill devemos conhecer o PID do processo. Utilizaremos o ps para descobrir.

# ps aux | grep ntpd

53

root 627 0.0 0.1 11852 2568 ?? Ss 14Dec09 1:22.88

/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f

/var/db/ntpd.drift

Agora que já temos o PID, devemos utilizar o kill para fechar o aplicativo em questão. # kill 627

No exemplo exibido acima, o kill enviará um sinal tipo SIGTERM para o processo do

ntpd (PID 627). O sinal SIGTERM é uma maneira formal de parar a execução de um processo. Ao receber esse sinal o processo fecha quaisquer arquivos de logs que ele tenha aberto, e geralmente termina a tarefa que ele está realizando no momento, antes de parar a execução.

Outra sinal para interromper um processo é o SIGKILL. Esse tipo de sinal não pode ser ignorado pelo aplicativo e sua interrupção é imediata, não levando em conta a importância do aplicativo para o sistema. Seu uso só é recomendado quando o processo encontra-se travado e outras tentativas com SIGTERM não surtiram efeito. Para utilizarmos o SIGKILL no exemplo acima basta informar o numero do sinal, conforme exemplo abaixo.

# kill -9 627

Podemos também utilizar o nome do sinal.

# kill –s KILL 627

Outro sinal muito utilizado é o SIGHUP que envia uma mensagem para o processo reiniciar. Normalmente o aplicativo faz uma releitura dos seus arquivos de configuração. Esse sinal é muito utilizado quando mudamos os arquivos de configuração de algum aplicativo e desejamos aplicar as novas configurações.

Para o exemplo anterior, caso desejamos que o servidor ntpd releia os arquivos de configuração, basta enviar o sinal SIGHUP conforme abaixo.

# kill –s HUP 627

Ou ainda

# kill –1 627

Um comando alternativo ao kill é o killall, que seleciona os processos pelo nome e

não pelo PID como o kill.

Para terminarmos todos os processos com o nome vim (editor de textos), basta utilizar o comando conforme abaixo.

# killall vim

3.15 Documentação do sistema O FreeBSD nos oferece uma considerável variedade de fontes de documentação. Essa característica é muito importante e tem ajudado muitos usuários a solucionar os mais variados problemas.

54

Saber onde encontrar e como consultar as documentações do sistema não é uma boa prática e sim um dever de todo usuário FreeBSD.

3.15.1 Páginas de Manuais As páginas de manuais, mais conhecidas como man pages, são uma excelente fonte de documentação pois oferecem um acesso rápido a informação desejada. Quase todo programa no sistema é acompanhado com um breve manual que explica a operação básica e os vários argumentos do programa, oferecendo inclusive alguns exemplos de funcionamento.

Para visualizar os manuais utilizamos o comando man. Para exemplificar melhor o uso do man, suponhamos que desejamos saber informações sobre o módulo de kernel bce que controla adaptadores de rede Broadcom. Para obter as informações desejadas basta digitar o comando abaixo:

# man bce

BCE(4) FreeBSD Kernel Interfaces Manual

BCE(4)

NAME

bce -- Broadcom NetXtreme II (BCM5706/5708/5709/5716) PCI/PCIe

Gigabit Ethernet adapter driver

SYNOPSIS

To compile this driver into the kernel, place the following lines

in your kernel configuration file:

device miibus

device bce

Alternatively, to load the driver as a module at boot time, place

the following line in loader.conf(5):

if_bce_load="YES"

DESCRIPTION

The bce driver supports Broadcom's NetXtreme II product family,

including the BCM5706, BCM5708, BCM5709 and BCM5716 Ethernet

controllers.

The NetXtreme II product family is composed of various Converged

NIC (or CNIC) Ethernet controllers which support a TCP Offload Engine

(TOE, Remote DMA (RDMA), and iSCSI acceleration, in addition to standard

L2 Ethernet traffic, all on the same controller.

As páginas de manual são organizadas nas seguintes seções numeradas:

1. Comandos de usuário.

2. Chamadas de sistema e número de erros.

3. Funções de bibliotecas C.

4. Controladores de dispositivos.

5. Formato de arquivos.

6. Jogos e outras diversões.

7. Informações gerais.

8. Comandos de manutenção e operação do sistema.

9. Desenvolvedores do kernel.

55

Em alguns casos, o mesmo tópico pode aparecer em mais de uma seção do manual online. Nesses casos, devemos informar qual seção a consulta se refere.

Por exemplo, caso desejamos receber informações sobre o arquivo /etc/passwd,

intuitivamente digitaremos o comando man passwd. O resultado obtido será uma página

do comando passwd. Para obtermos a página correta, devemos informar que a consulta deverá ser efetuada na seção 5 do manual, conforme abaixo:

% man 5 passwd

É bem fácil utilizar essa ferramenta, quando você sabe o nome do comando sobre o qual quer obter mais informações, mas e se você não puder lembrar o nome do

comando? Pode usar o man para procurar por palavras chaves nas descrições do comando, usando opção -k:

% man -k mail

Com esse comando, uma lista de programas será apresentada, contendo em sua descrição a expressão ``mail''. Na verdade esse comando tem a mesma funcionalidade

de se utilizar o comando apropos.

3.15.2 GNU Info Como método complementar, podemos utilizar o comando info para exibir páginas de documentação. O GNU info é mantido pela Fundação do Software Livre (FSF).

Para visualizar a documentação do comando ls através do info, simplesmente digite:

% info ls

3.15.3 FAQ FreeBSD FAQ (Frequently Asked Questions) é um documento de perguntas e respostas frequentes sobre o FreeBSD. Podemos encontrar essa documentação em: http://www.freebsd.org/doc/en_US.ISO8859-1/books/faq/index.html

Podemos também encontrar um FAQ em nossa língua no diretório /usr/share/doc/pt_BR.ISO8859-1/books/faq

56

57

4. Instalação de aplicativos Diferente dos outros sistemas operacionais (Microsoft Windows e algumas distribuições Linux) uma instalação básica do FreeBSD contém apenas os aplicativos necessários para o funcionamento do SO. Qualquer outro aplicativo desejado que não faça parte da base do sistema deve ser instalado. Em sistemas Unix / Unix-Like a instalação de aplicativos pelo método tradicional é uma tarefa árdua, uma vez que se faz necessário a execução de vários procedimentos antes da instalação propriamente dita do aplicativo escolhido. Vamos elucidar abaixo todas as etapas da compilação de um aplicativo pelo código fonte:

1. Baixar o source do programa

2. Extrair o source do programa

3. Rodar o comando ./configure

a. O sistema irá informar se alguma dependência está faltando

b. Baixar as dependências requeridas

c. Instalar todas as dependências

4. Rodar o comando make para compilar o programa

5. Instalar o programa via make install

6. Configurar o programa

Para exemplificar, vamos tomar como exemplo a instalação do webserver Apache. Para uma instalação tradicional, seria necessário baixar e compilar as seguintes dependências:

autoconf-2.62

autoconf-wrapper-20071109

expat-2.0.1_1

libiconv-1.13.1

libtool-2.2.6b

m4-1.4.13,1

perl-5.8.9_3

pkg-config-0.23_1

Algumas das dependências acima, como o autoconf, possui outras dependências que devem ser previamente instaladas, tornando o processo de instalação demorado. Após a instalação de todas as dependências no sistema o apache pode ser compilado com os seguintes comandos:

#./configure

#make

#make install

Durante esse processo geralmente é necessário que o administrador do sistema passar o diretório onde o aplicativo deverá ser instalado. No exemplo do apache, a falta de qualquer informação fará com que o servidor seja instalado na pasta /usr/apache.

58

Se tudo correr bem o apache é compilado e instalado no equipamento. Algumas vezes o administrador de sistemas se depara com erros, onde se faz necessária a edição dos arquivos Makefile do aplicativo a ser instalado. Para facilitar o processo de instalação para seus usuários, o FreeBSD possui a coleção de Ports.

4.1 O sistema de Ports e Packages Ports são instruções para a compilação de softwares no FreeBSD, já os packages são ports pré compilados. A instalação de um software via packages é mais rápida e fácil, já pelo ports é um pouco mais demorada, mas pode ser customizada para o seu ambiente. A idéia básica da coleção de ports do FreeBSD é fornecer aos seus usuários uma maneira simples e rápida de instalar aplicativos portados para o FreeBSD, sejam eles pré-compilados ou em código fonte. Esse é um dos principais diferenciais do FreeBSD com relação aos demais sistemas. Atualmente a árvore do ports contém mais de 21.000 aplicativos portados para o FreeBSD. O crescimento da árvore do ports pode ser observado pelo gráfico na Figura 1

Figura 1 - crescimento do ports (retirado de www.freebsd.org/ports)

Toda a estrutura do ports está armazenada em /usr/ports. Caso não exista nada dentro dessa pasta significa que a coleção do ports não foi instalada junto com o sistema. A instalação pode ser feita pelo cdrom, utilizando o script install.sh encontrado dentro da pasta ports, para isso os seguintes comandos devem ser seguidos:

59

#mount /cdrom

#cd /cdrom/8.0-RELEASE/ports

#./install.sh

Este processo irá descompactar a árvore do ports gravada no cdrom de instalação do FreeBSD no diretório /usr/ports. Desaconselhamos a utilização deste processo, pois a árvore do ports instalada estará em uma versão desatualizada. A melhor forma de se realizar a instalação do ports é através do comando portsnap(8). O portsnap busca um mirror para arquivos portsnap, verifica através de uma conexão criptografada a integridade dos arquivos no servidor portsnap, faz o download do arquivo e novamente verifica a integridade do arquivo baixado. Todas essas operações são executadas pelo comando portansp fetch:

# portsnap fetch

Looking up portsnap.FreeBSD.org mirrors... 2 mirrors found.

Fetching snapshot tag from portsnap1.freebsd.org... done.

Fetching snapshot metadata... done.

Fetching snapshot generated at Wed Jan 6 22:54:14 BRST 2010:

79652bbf56abf77df0284104b71e502d93f4c63a77357b100% of 61 MB 298 kBps

00m00s

Extracting snapshot... done.

Verifying snapshot integrity... done.

Fetching snapshot tag from portsnap1.freebsd.org... done.

Fetching snapshot metadata... done.

Updating from Wed Jan 6 22:54:14 BRST 2010 to Thu Jan 7 08:44:57 BRST

2010.

Fetching 4 metadata patches... done.

Applying metadata patches... done.

Fetching 0 metadata files... done.

Fetching 29 patches.....10....20.... done.

Applying patches... done.

Fetching 4 new ports or files... done.

Como é possível observar, atualmente o arquivo compactado contendo a árvore do ports possui 61MB. O tempo de download vai variar conforme a conexão, mas aproximadamente esse passo irá levar de 7 a 15 minutos. Após o download é necessário extrair o arquivo, para isso basta executar o comando

# portsnap extract

/usr/ports/.cvsignore

/usr/ports/CHANGES

/usr/ports/COPYRIGHT

/usr/ports/GIDs

/usr/ports/KNOBS

/usr/ports/LEGAL

/usr/ports/MOVED

/usr/ports/Makefile

/usr/ports/Mk/bsd.apache.mk

/usr/ports/Mk/bsd.autotools.mk

/usr/ports/Mk/bsd.cmake.mk

/usr/ports/Mk/bsd.commands.mk

...

/usr/ports/x11/xzoom/

/usr/ports/x11/yakuake-kde4/

60

/usr/ports/x11/yakuake/

/usr/ports/x11/yalias/

/usr/ports/x11/yeahconsole/

/usr/ports/x11/yelp/

/usr/ports/x11/zenity/

Building new INDEX files... done.

Ao final dos dois comandos, você terá uma versão atual da árvore do ports.

NOTA Para ter uma melhor precisão do tempo na execução dos comandos citados, tente executar

desta forma:

#date > time_ports && portsnap fetch && portsnap extract && date >> time_ports

Este comando cria no diretório corrente o arquivo time_ports, coloca como primeira linha a data

corrente do sistema, executa as operações de fetch e extract e ao final, insere a segunda linha com a data corrente do sistema. Basta verificar a diferença entre elas para se ter o tempo decorrido.

Utilizaremos esse artifício para outras operações adiante.

4.1.1 Conteúdo da árvore do ports Com o ports atualizado, podemos agora explorar sua árvore de diretórios.

# ls /usr/ports

.cvsignore arabic emulators mbone shells

CHANGES archivers finance misc sysutils

COPYRIGHT astro french multimedia textproc

GIDs audio ftp net ukrainian

INDEX-8 benchmarks games net-im vietnamese

KNOBS biology german net-mgmt www

LEGAL cad graphics net-p2p x11

MOVED chinese hebrew news x11-clocks

Makefile comms hungarian palm x11-drivers

Mk converters irc polish x11-fm

README databases japanese ports-mgmt x11-fonts

Templates deskutils java portuguese x11-servers

Tools devel korean print x11-themes

UIDs distfiles lang russian x11-toolkits

UPDATING dns mail science x11-wm

Accessibility editors math security

A estrutura de arquivos da pasta /usr/ports é basicamente dividida entre arquivos e pastas de informações/configurações e as pastas separando os ports por categorias. Dentre as pastas e arquivos de informações/configurações, temos: CHANGES: Este arquivo contém as principais mudanças do ports e de sua infraestrutura. COPYRIGHT: Contém as informações de licença da coleção do ports como um todo. Enquanto cada software distribuído pelo ports possui sua própria forma de licenciamento, a coleção do ports é licenciada sobre a licença BSD. GIDs: Contém uma lista de todos os IDs de grupos utilizados pelos softwares na coleção do ports. Muitos softwares utilizam usuários desprivilegiados e a coleção do

61

ports necessita de GID para estes usuários. Este arquivo ajuda a evitar conflitos, já que cada port tem seu próprio GID atribuído. KNOBS: Contém uma lista de todos os atributos tunáveis encontrados na coleção do ports. Estes atributos podem ser setados manualmente no arquivo /etc/make.conf LEGAL: Este arquivo mostra quais ports possuem restrições de uso e direitos de cópia. MOVED: Contém uma lista dos ports que foram movidos de categorias ou removidos da árvore. Makefile: Contém instruções de auto nível para toda a coleção do ports. Mk: Neste subdiretório estão definidas todas as funções existentes no ports. É o diretório mais importante da coleção do ports. Caso queira se aprofundar mais na coleção do ports, este é um bom diretório para se olhar. README: o arquivo readme contém instruções de auto nível para a utilização do ports. Templates: Diretório de templates. Tools: Diretório que contém programas, scripts e ferramentas de automação. Muito utilizado pelos mantenedores do ports. UIDs: Assim como o arquivo GIDs este arquivo ajuda os desenvolvedores do ports a evitar conflitos de usuários desprivilegiados. UPDATING: De grande importância para qualquer usuário do FreeBSD, este arquivo documenta em ordem na ordem cronológica reversa, ou seja, começando pela data mais recente, todos os ports que necessitam de interação manual no momento de sua atualização. É recomendável adotar como prática a verificação deste arquivo no momento da atualização de qualquer port. Distfiles: Neste diretório são armazenados os códigos fontes originais de todos os softwares portados. Toda vez que o ports realiza o download de código fonte, é neste diretório que ele é armazenado. Os demais diretórios são para categorização dos ports:

Acessibility - Ports de ajuda a acessibilidade.

Arabic - Softwares portados para o mercado árabe.

Archivers - Utilitários para compactação e descompactação de dados.

Astro - Aplicações relacionadas a astronomia.

Audio - Utilitários de áudio - A maioria requer placa de som.

Benchmarks - Utilitários para mensurar desempenho do sistema.

Biologia - Softwares relacionados à biologia.

Cad - Utilitários de design de computador Aided.

Chinese - Softwares portados para o mercado chinês.

Comms - Utilitários de comunicação.

Converters - Utilitários de conversão de formatos.

Database - Software de banco de dados.

Deskutils - Utilitários desktop variados.

Devel - Utilitários de desenvolvimento de software bibliotecas.

Dns - Utilitários de DNS cliente e servidor.

Editors - Editores de texto comuns.

Emulators - Utilitários para emular outros tipos Sos.

Finance - Aplicações relacionadas a dinheiro, finanças, etc.

62

French - Softwares portados para Francês.

Ftp - Utilitários FTP cliente e servidor.

Games - Jogos variados.

German - Softwares portados para alemão.

Graphics - Bibliotecas e utilitários gráficos.

Hebrew - Softwares portados para a língua Hebréia.

Hungarian - Softwares portas para o mercado húngaro.

Irc - Softwares de bate papo.

Japanese - Softwares portados para o mercado japonês.

Java - Suporte a linguagem Java.

Korean - Softwares portados para o mercado Coreano.

Lang - Linguagem de computador (compiladores).

Mail - Utilitários de e pacotes de correio eletrônico.

Math - Software de matemática computacional.

Mbone - Aplicações e utilitários para o MBONE.

Misc - Utilitários variados.

Multimedia - Utilitários multimídia.

Net - Utilitários de rede.

Net-im - Software de mensagens instantaneas.

Net-mgmt - Utilitários para gerenciarnento de rede.

Net-p2p - Softwares peer to peer.

News - Software de News USENET.

Palm - Software para palmtops.

Polish - Softwares portados para o mercado polonês.

Ports-mgmt - Softwares para gerenciamento dos ports

Portuguese - Softwares portados para o mercado português.

print - Utilitários para trabalhar com impressão.

Russian - Softwares portados para o mercado Russo.

Scheme - Software relacionado para a linguagem de schemas.

Science - Software científico.

Security - Software de sistemas de segurança.

Shells - Várias shells (tcsh, bash, etc).

Sysutils - Vários utilitários de sistema.

Textproc - Utilitários de processamento/procura de textos.

Ukrainian - Softwares portados para o mercado Ucraniano.

Vietnamese - Softwares portados para o mercado Vietnamese.

www - Utilitários WEB (navegadores, servidores HTTP, etc).

X11 - Utilitários do sistema de janelas X.

X11-clocks - Relógios para o sistema de janelas X.

X11-drivers - drivers para o sistema de janelas X.

63

X11-fm - Gerenciadores de arquivo para o sistema de janelas X.

X11-fontes - Utilitários de fonte e fontes para o sistema de janelas X.

X11-Servers - Servidores do sistema de janelas X.

X11-Themes - Temas para o sistema de janelas X.

X11-toolkits - Toolkits de desenvolvimento do sistema de janelas X.

X11-wm - Gerenciadores de janelas para o sistema de janelas X.

4.2 Encontrando o software Muitas das categorias citadas contêm centenas de ports, veja alguns exemplos:

#ls devel/ | wc -l

3065

#ls www/ | wc -l

1895

#ls databases/ | wc -l

700

Como encontrar algum software nesta infinidade de pastas? Existem várias formas a começar pela Internet. Se você estiver em um micro com modo gráfico, basta acessar www.freebsd.org/ports e realizar sua busca. No ambiente do curso não estamos utilizando modo gráfico, portanto precisamos de outras formas para realizar tal operação. Primeiramente podemos utilizar o arquivo de índice, ele está localizado em /usr/ports/INDEX-8, ele contém a lista de todos os ports em ordem alfabética. Cada port é descrito em uma linha, com os campos separados pelo simbolo |. Enquanto esta divisão é conveniente para ferramentas do sistema, não é particularmente inteligível. Para melhorar esta exibição basta digitar o comando #make print-index no diretório /usr/ports. A saída deste comando é a exibição na tela, para criar um arquivo para consultas futuras, basta digitar:

#cd /usr/ports

#make print-index > indice_ports

Observe que o arquivo índice_ports foi criado. Ao ser examinado, várias linhas como esta serão encontradas:

Port: apache-2.0.63_3

Path: /usr/ports/www/apache20

Info: Version 2.0.x of Apache web server with prefork MPM.

Maint: [email protected]

Index: www ipv6

B-deps: autoconf-2.62 autoconf-wrapper-20071109 expat-2.0.1_1 libiconv-

1.13.1 li

btool-2.2.6b m4-1.4.13,1 perl-5.8.9_3

R-deps: expat-2.0.1_1 libiconv-1.13.1 perl-5.8.9_3

E-deps: perl-5.8.9_3

P-deps: perl-5.8.9_3

F-deps:

WWW: http://httpd.apache.org/

64

O índice é iniciado com a descrição do software seguido pelo seu caminho. Logo abaixo temos algumas informações sobre o software. O campo Maint lista o(s) mantenedor(es) do software, podendo este ser uma ou mais pessoas ou mesmo uma organização. O campo índex lista quais as categorias de que este software pode fazer parte. B-deps mostra todas as dependências que precisam ser instaladas antes do software. O campo R-deps informa as dependências que necessitam ser instaladas para o software rodar. O campo E-deps informa se o software necessita de um descompactador específico, já o campo P-deps informa se o software necessita de algum patch especial. Similarmente o campo F-deps informa se o software necessita de um software especial para realizar o seu download. Finalmente o campo WWW informa a home page do software. NOTA Repare que as dependências de compilação B-deps e de execução R-deps do apache são as

mesmas mostradas no início do capítulo.

4.2.1 Whereis Outra forma de pesquisa é pelo comando whereis, onde você deve fornecer um nome como parâmetro:

#whereis mysql50-server

mysql50-server: /usr/ports/databases/mysql50-server

4.2.2 Make search O comando make serch pode ser utilizado para realizar pesquisas dentro do diretório /usr/ports. Ele pode ser invocado com os seguintes argumentos de pesquisa:

key: procura pelo nome do port, comentário e dependências;

name: procura apenas pelo nome do port;

path: procura pelo caminho do port;

info: procura por informações do port;

maint: procura pelo mantenedor do port;

cat: procura pela categoria do port;

bdeps: procura por dependências em tempo de construção do port;

rdeps: procura por dependências em tempo de execução do port;

xname: faz exclusão de nome na procura de algum port;

xkey: faz exclusão de alguma palavra na procura de um port;

Alguns exemplos de utilização do comando make search: Procurando ports com o nome apache

#make search name=apache

Procurando ports com a descrição “multithread”

#make search info=multithread

Procurando ports dentro da pasta WWW com o nome apache

#make search name=apache path=WWW

NOTA O comando make search retorna as mesmas informações contidas no arquivo de índice. Para uma exibição mais limpa na tela poderá ser utilizado o comando make quicksearch que irá retornar apenas três campos: port, path e info

65

4.3 Usando packages A instalação de aplicativos pré-compilados (packages) será abordada primeiro, pois é uma maneira mais rápida e fácil de se instalar os aplicativos. Os packages nada mais são do que arquivos binários distribuídos pelo FreeBSD para suas diversas arquiteturas. Os aplicativos pré compilados podem ser encontrados dentro do diretório /packages do cdrom de instalação do FreeBSD ou diretamente pelo FTP do projeto: ftp://ftp.freebsd.org/pub/FreeBSD/ports/arquitetura/package-version, onde a arquitetura corresponde à arquitetura do seu sistema operacional, no nosso caso, i386 e package-version à versão do sistema operacional, no nosso caso 8.0-release. Neste caso o link para acessarmos os packages diretamente do servdidor FTP é: ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.0-release

4.3.1 Adicionando aplicativos Para exemplificar a utilização desta forma de instalação, vamos instalar o aplicativo gnuls, um substituto ao comando ls tradicional. A instalação será feita diretamente do FTP do projeto FreeBSD, portanto utilizaremos o seguinte comando:

#pkg_add -r gnuls

Após a execução do comando é feito um registro da instalação do aplicativo em /var/db/pkg. Confira se o aplicativo gnuls foi instalado corretamente:

#ls /var/db/pkg

gnuls-7.5

As principais opções do pkg_add são:

-R não faz o registro da instalação do aplicativo, portanto ele não poderá ser

desinstalado via pkg_delete;

-r Faz a instalação remota do aplicativo. Esta opção irá determinar qual é a

release mais apropriada, baixar e instalar o pacote.

-v habilita o verbose

-n não instala um package, apenas mostra os passos que seriam feitos se este

fosse instalado.

-f força a instalação sem alguma dependência necessária.

Por default, o comando pkg_add ao ser executado com o parâmetro -r realiza todos os downloads de ftp://ftp.freebsd.org. Este provavelmente não é o melhor FTP para ser acessado, já que o FTP principal do FreeBSD é muito utilizado e pode estar congestionado. Fazendo uma rápida busca no handbook ou no site http://mirrorlist.freebsd.org/FBSDsites.php podemos obter uma lista dos servidores FTP localizados no Brasil:

ftp.br.freebsd.org

66

ftp2.br.freebsd.org

ftp3.br.freebsd.org

ftp4.br.freebsd.org

ftp5.br.freebsd.org

ftp6.br.freebsd.org

ftp7.br.freebsd.org

Para utilizar um servidor desta lista, basta alterar a variável de ambiente PACKGEROOT com o seguinte comando:

#setenv PACKGEROOT ftp://ftp.br.freebsd.org

Com isso o pkg_add irá realizar os downloads a partir de um servidor mais próximo. 4.3.2 Obtendo informações É comum um administrador de sistemas necessitar de informações sobre os aplicativos instalados. Esta tarefa pode ser realizada de duas formas, a primeira é acessar o diretótio /var/db/pkg e a segunda é utilizar o comando pkg_info. Uma boa forma de se utilizar o pkg_info é:

#pkg_info -I -a | more

Que irá resultar em uma lista contendo apenas os nomes dos aplicativos instalados e uma breve descrição da sua função. Para obter maiores informações sobre determinado aplicativo, utilzar:

# pkg_info lynis-1.2.9

Information for lynis-1.2.9:

Comment:

Security and system auditing tool

Description:

Lynis is an auditing tool for Unix (specialists). It scans the

system and available software, to detect security issues. Beside

security related information it will also scan for general system

information, installed packages and configuration mistakes.

This software aims in assisting automated auditing, software patch

management, vulnerability and malware scanning of Unix based systems.

It can be run without prior installation, so inclusion on read only

storage is no problem (USB stick, cd/dvd).

WWW: http://www.rootkit.nl/projects/lynis.html

Author: Michael Boelen

Principais opções do pkg_info:

-a mostra todos os packages atualmente instalados;

-v habilita o verbose;

-p mostra o diretório onde foi instalado cada package;

67

-q habilita o modo silencioso, mostrando o mínimo de informação possível;

-c mostra apenas uma linha de comentário para cada package;

-d mostra um longo comentário para cada package;

-D mostra o arquivo install-message de cada package;

-f mostra a lista de instruções de empacotamento de cada package;

-g mostra os arquivos para os quais os arquivos de checksum gravados não

coincidem;

-i mostra o script de instalação, se existir, de cada package;

-I mostra apenas uma linha de índice para cada package;

-j mostra o script de requerimento, se existir, de cada package;

-k mostra o script de desinstalação, se existir, de cada package;

-r mostra a lista de todos os packages e suas respectivas dependências;

-R mostra a lista de packages instalados requeridos por cada package;

-s mostra o espaço total ocupado por cada package instalado;

-x pesquisa pelo nome do package como instrução regular.

Ao se utilizar o comando pkg_info –as para mostrar o tamanho de cada package instalado no sistema teremos o seguinte resultado:

#pkg_info -as

Information for apache-2.2.9:

Package Size:

13493 (1K-blocks)

Information for autoconf-2.61_2:

Package Size:

2256 (1K-blocks)

Information for autoconf-2.62:

Package Size:

2450 (1K-blocks)

A informação referente ao tamanho de blocos está em uma variável de ambiente chamada BLOCKSIZE. Para alterar esta exibição para megabytes, basta executar:

#setenv BLOCKSIZE M

4.3.3 Removendo aplicativos A remoção de aplicativos é muito fácil, basta digitar o comando pkg_delete seguido do nome e versão do aplicativo, seguindo o exemplo anterior:

#pkg_delete lynis-1.2.9

NOTA: A falta de atenção ao se utilizar o comando pkg_delete pode fazer com que aplicativos dependentes do aplicativo desinstalado parem de funcionar.

68

As principais opções do pkg_delete são:

-a remove incondicionalmente todos os packages instalados no sistema;

-i pede confirmação antes de remover cada package;

-v habilita o modo verbose;

-n não remove o package, apenas mostra os passos que seriam feitos caso a

desinstalação fosse concluída;

-p indica o diretório onde o package deve ser desinstalado.

-f força a remoção do package mesmo havendo dependências.

4.4 Usando Ports A árvore do ports contém todos os softwares portados para o FreeBSD, mas nenhum código fonte para compilação. Existem patches para serem aplicados no código fonte e scripts para rodarem no código fonte, mas nenhum código adicional. Quando um port é ativado, o FreeBSD automaticamente baixa o código fonte de um site confiável. O port checa então o código para prever erros de integridade, extrai o código para um diretório de trabalho temporário, aplica os patches (se existirem), constrói, instala tudo e grava a instalação no diretório /var/db/pkg. Caso o port tenha alguma dependência que não foi instalada, ele interrompe a construção do port atual e constrói as dependências através do código fonte. O gatilho para iniciar este processo é entrar no diretório do port desejado e digitar:

#make install

Se muitas letras começarem a rolar pela tela, a instalação iniciou. Com o tempo você perceberá que alguns ports dependem de uma interação especial. A árvore do ports permite que esse tipo de interação seja feita, mas para isso é necessário conhecer todas as etapas da instalação de um port.

1. make config – Configura as opções do port (caso exista) através de um menu em

dialog. Essas configurações serão salvas para uso futuro no ports.

2. make fetch – Uma vez configurado o port, o sistema procura uma lista pré-

configurada de sites da Internet para download do fonte. Geralmente o primeiro

site a ser vasculhado é o armazenado no Makefile do próprio port, caso não seja

encontrado, o sistema checa uma lista de backup provida pela árvore do ports.

Os downloads são armazenados em /usr/ports/distfile.

3. make checksum – Como uma medida de segurança o sistema confere se o

checksum criptográfico do código baixado confere com o checksum armazenado

no arquivo distinfo localizado na mesma pasta do port. Caso exista alguma

inconsistência nesta etapa a instalação do port é imediatamente interrompida.

Nota Ignorando o Checksum: Muito raramente algum autor descomprometido pode fazer uma alteração mínima em seu

software e não atualizar a versão dos hashes. Uma vez detectado essa inconsistência o FreeBSD irá interromper a instalação, mas se você tiver ABSOLUTA CERTEZA do que está

69

realizando, ou se conhecer o autor do software, pode utilizar o comando #make NO CHECKSUM=YES install

4. make extract – Nesta etapa o FreeBSD extrai o conteúdo baixado na pasta work

dentro da pasta do port em questão. Confira em algum port já instalado a

existência da pasta work como uma subpasta.

5. make patch – Os patches são aplicados no conteúdo extraído dentro da pasta

work.

6. make dependes – neste estágio são checadas se as dependências exigidas pelo

port estão instaladas, caso não, elas são baixadas e instaladas. Neste momento

o FreeBSD age recursivamente, buscando todas as dependências e executando

todos os passos citados.

7. make configure – Apesar de se assemelhar ao segundo passo, esta etapa roda,

caso exista, o script de configuração do próprio port. Algumas vezes a instalação

do port é interrompida neste momento esperando que alguma ação seja tomada

pelo administrador de sistemas, mas geralmente ela roda silenciosamente.

8. make build – Aqui ocorre a compilação do port.

9. make install – Finalmente o port é instalado e registrado em /var/db/pkg. Esta

opção, caso seja digitada chama todas as opções acima.

Existem outras opções que não são executadas no momento da instalação de um ports, mas não são menos importantes. Todos os comandos listados a seguir devem ser executados dentro da pasta de um port específico:

make showconfig: mostra as opções de configuração de um port;

make rmconfig: remove as opções configuradas para este port através do

parâmetro make config visto anteriormente;

make fetch-list: mostra a lista de todos os arquivos necessários que devem

ser puxados para a construção do port;

make clean: remove o código fonte que foi descompactado;

make distclean: remove o port distfile (arquivo .tgz que fica em

/usr/ports/distfiles) e depois executa a opção clean;

make reinstall: usado para restaurar um port depois de ter usado o

pkg_delete ou a opção deinstall;

make deinstall: remove o port instalado do sistema. Similar ao comando

pkg_delete.

make readmes: cria um README.html do port com várias informações sobre

o aplicativo e pode ser visualizado através de um navegador;

make package: esta opção cria um package binário do port em questão;

Outros comandos que devem ser executados na raiz do ports (/usr/ports):

make Index: cria o /usr/ports/INDEX com as informações que são utilizadas

para fazer pesquisas com o parâmetro search;

make fetchindex: puxa o INDEX do cluster do projeto FreeBSD;

Também o comando make search explicado anteriormente.

70

NOTA Existe uma grande diferença entre os comandos make index e make fetchindex. O comando make index irá criar o arquivo de índice pela árvore do ports instalada no sistema,

para isso terá que entrar dentro de cada pasta, recolhendo as informações necessárias para a montagem do arquivo. Este processo pode ser muito demorado dependendo do hardware utilizado.

O comando make fetchindex baixa do site do FreeBSD o arquivo de índice atual. Esta é a melhor opção para verificar se os ports estão atualizados com o comando pkg_info –vI.

4.4.1 Customizações integradas Customizar a instalação de aplicativos não é uma tarefa fácil, especialmente quando esta se dá através da compilação e instalação de um aplicativo pelo seu código fonte. A coleção de ports do FreeBSD tenta amenizar a dificuldade desta tarefa para seus usuários, oferecendo duas opções de customização para instalação de aplicativos. A mais nova é suportada pelo comando make config. Este comando ao ser executado mostra ao usuário uma tela chamada dialog box, semelhante a utilizada no processo de instalação do FreeBSD. Por esta tela é possível marcar e desmarcar opções utilizando as teclas de navegação do teclado e a barra de espaço. Como exemplo são mostradas as opções de configuração do PHP5, localizado em /usr/ports/Lang/php5.

Após a seleção das opções, basta utilizar a tecla TAB para navegar até o botão ok e pressionar enter. O sistema irá voltar para o terminal caso o comando digitado foi make config ou irá continuar a instalação caso o comando digitado tenha sido o make install. Todas as opções marcadas ou não são gravadas dentro de um arquivo de configuração localizado em /var/db/ports/<nome_do_port>/options, assim caso esse aplicativo tenha

71

que ser reinstalado, o sistema busca automaticamente essas configurações no momento da execução de um make install. Caso deseje reinstalar o aplicativo com configurações diferentes, basta rodar novamente o comando make config, apagar o arquivo options ou então utilizar o comando make rmconfig antes de utilizar o make install. Esta forma torna a instalação de aplicativos mais fácil, mas nem todo port dentro da árvore possui uma interface de configuração. Alguns mostram suas opções de configuração após a execução do make install. Tomando como base o servidor de banco de dados mysql, podemos exemplificar como isso acontece. Ao entrar em seu diretório, /usr/ports/databases/mysql50-server e executar o comando make config, nos deparamos com o seguinte resultado:

# make config

===> No options to configure

Mas ao se executar o comando make install, uma lista de opções irá aparecer antes do download do código fonte se iniciar. Neste momento é necessário pressionar crtl+c para abortar a operação e realizar alguma configuração adicional, caso necessário.

# make install

You may use the following build options:

WITH_CHARSET=charset Define the primary built-in charset (latin1).

WITH_XCHARSET=list Define other built-in charsets (may be 'all').

WITH_COLLATION=collate Define default collation (latin1_swedish_ci).

WITH_OPENSSL=yes Enable secure connections.

WITH_LINUXTHREADS=yes Use the linuxthreads pthread library.

WITH_PROC_SCOPE_PTH=yes Use process scope threads

(try it if you use libpthread).

BUILD_OPTIMIZED=yes Enable compiler optimizations

(use it if you need speed).

BUILD_STATIC=yes Build a static version of mysqld.

(use it if you need even more speed).

WITHOUT_THR_ALARM=yes Disable signals (this reduces kernel lock

contention on SMP, but has the side effect that you can't kill clients

that are sleeping).

WITHOUT_INNODB=yes Disable support for InnoDB table handler.

WITH_ARCHIVE=yes Enable support for Archive Storage Engine.

WITH_CSV=yes Enable support for CSV Storage Engine.

WITH_FEDERATED=yes Enable support for Federated Storage Engine.

WITH_NDB=yes Enable support for NDB Cluster.

=> mysql-5.0.86.tar.gz doesn't seem to exist in /usr/ports/distfiles/.

=> Attempting to fetch from

ftp://ftp.fi.muni.cz/pub/mysql/Downloads/MySQL-5.0/.

^C

Se desejar alterar alguma opção, deverá novamente rodar o comando make install com mais um argumento:

#make WITH_FEDERATED=no install

Para desabilitar o suporte de Engines de Storages Federados.

72

Caso deseje mais informações sobre cada opção que os aplicativos permitem que sejam configuradas, basta ler o Makefile contido em cada pasta de aplicativo e buscar por entradas do tipo “.if defined”. NOTA Os caminhos para a configuração dos aplicativos foram dados, agora para uma correta

configuração de cada aplicativo ou uma melhor configuração para o seu cenário em específico, será necessária uma boa leitura dos manuais de instalação e configuração do aplicativo em seu site de origem.

4.4.2 Inicializando o port instalado no boot do sistema. A partir da séria 5.X do FreeBSD foram incorporados os scripts de inicialização RC-NG (nova geração) e com isso uma série de modificações foram impostas. Uma dessas modificações foi o processo de inicialização de um aplicativo. Ao ser instalado é criado dentro de /usr/local/etc/rc.d um script de inicialização com o nome do aplicativo instalado e a extensão .sh. Isso bastava para que o aplicativo fosse inicializado. Depois das mudanças se fez necessário adicionar uma entrada no arquivo /etc/rc.conf com a seguinte sintaxe: nome_do_aplicativo_enable=”YES”. Sem essa entrada o aplicativo não é inicializado. Alguns aplicativos possuem flags especiais que podem ser configuradas no momento da execução, para isso é sempre bom verificar o script de inicialização deste aplicativo para encontrar essas flags que também são adicionadas no arquivo /etc/rc.conf. 4.4.3 Desinstalando e reinstalando Uma característica sobre a instalação de ports é que após sua instalação, o port é tratado pelo sistema como um package, dessa forma ele pode ser desinstalado pelo comando pkg_delete e informações sobre ele podem ser obtidas através do comando pkg_info e os arquivos instalados podem ser pesquisados dentro de /var/db/pkg. A coleção do ports também disponibiliza uma ferramenta para a remoção de seus ports instalados, para isso basta acessar, dentro da árvore do ports, a pasta do port em questão e utilizar o comando make deinstall. Após a desinstalação do port, o programa compilado e também seus códigos continuam dentro do subdiretório work no port. Rodando o comando make reinstall irá reinstalar o programa desinstalado do sistema. 4.4.4 Mantendo a árvore limpa Após a instalação de vários aplicativos a árvore do ports ocupará cada vez mais espaço, pois a cada aplicativo instalado são baixados para a árvore seu código fonte e criados no subdiretório work de cada port arquivos intermediários utilizados no processo de instalação e configuração. Para limpar esses arquivos basta acessar o diretório do port e executar make clean que irá apagar o subdiretório work do port em questão e de todas as suas dependências. Se preferir executar esta limpeza logo após a instalação do port, basta executar o comando make install clean. Também é possível limpar os arquivos compactados que são armazenados dentro de /usr/ports/distfiles utilizando o comando make distclean. Este comando remove este arquivo compactado e também o diretório work.

73

Agora se preferir fazer uma limpeza geral na árvore, basta digitar, dentro de /usr/ports/ o comando make clean –DNOCLEANDEPENDS. Esta ação irá levar algum tempo para ser executada.

74

75

5 Kernel

5.1 O que é o kernel? Sendo o principal componente de um sistema operacional Unix like, o kernel do FreeBSD tem como função principal ser uma interface entre hardware e software. O Kernel permite que o software escreva dados nos discos rígidos e também na rede. Quando um programa necessita de memória, é o kernel que realiza a manipulação de baixo nível para acessar a memória e alocar recursos para a tarefa. Também quando um programa requisita tempo de CPU, o kernel agenda um slot de tempo para esta tarefa. Dessa forma pode-se dizer que o kernel provê toda a interface de software que os programas necessitam para acessar os recursos de hardware. Enquanto que, de uma maneira simplista, o trabalho do kernel é fácil de ser definido, este, na verdade, é um trabalho árduo. Diferentes programas exigem do kernel diferentes interfaces para o hardware e diferentes tipos de hardware. Por exemplo, o FreeBSD suporta algumas dúzias de placas de rede, cada qual com suas especificações particulares para o kernel. Diferentes programas fazem diferentes requisições de memória para serem executados, obrigando o kernel a interpretar e realizar da melhor forma possível, garantindo sempre a integridade do sistema. O kernel e seus módulos ficam no diretório /boot/kernel. Os demais arquivos do sistema que não ficam no kernel são chamados de userland. Quando o sistema é instalado, este utiliza um kernel genérico, ou seja, padrão, possuindo suporte a uma grande variedade de dispositivos de hardware. Saber como customizar o kernel é uma das primeiras tarefas que um administrador de sistemas deve saber. Este processo é normalmente simples de ser executado e pode trazer um grande ganho ao sistema. A forma mais simples de alterar o kernel sem exigir sua recompilação é a utilização da interface sysctl.

5.2 Sysctl O programa Sysctl (8) faz uso da função sysctl para retornar ou setar valores para o kernel. Os valores retornados ou setados para o kernel são descritos através de uma variável especial, chamada de Management Information Base (MIB), descrita como conjuntos de strings separados por pontos. Sysctl é uma ferramenta muito poderosa, pois em muitas vezes permite que administradores de sistemas resolvam problemas de performance sem a necessidade de recompilar o kernel. Por outro lado, todo este poder permite ao administrador causar danos a programas que estão em memória. Para exibir todas as sysctl do sistema, basta utilizar o comando:

#sysctl –A

Caso queira uma descrição ao invés da exibição dos valores, utilize o comando:

#sysctl –d –A

5.2.1 Sysctl MIBs

76

Como foi dito anteriormente, a sysctl é organizada na forma de uma MIB, possuindo categorias distintas. A tabela x mostra as categorias raízes da MIB das sysctl.

Sysctl Função

Kern Funções e características do kernel

Vm Sistema de memória virtual

Vfs Sistema de arquivos

Net Rede

Debug Debug

Hw Hardware

machdep Dependências do micro

User Informações de interface da Userland

P1003_1b Comportamento POSIX

Security Atributos de segurança do kernel

Dev Informações de drivers Tabela 1 - sysctl MIBs

Cada uma das categorias mencionadas possui outras subdivisões. Para exibir todas as sysctl de uma única categoria, basta utilizar o comando #sysctl <categoria>, por exemplo:

#sysctl user

Ou pode-se passar o nome completo da sysctl, neste caso:

#sysctl kern.bootfile

kern.bootfile: /boot/kernel/kernel

5.2.2 Manipulando Sysctls Algumas sysctls são do tipo somente leitura, geralmente as relacionadas ao hardware, como por exemplo:

#sysctl hw.model

hw.model: Intel(R) Core(TM)2 Duo CPU T7100 @ 1.80GHz

Caso tente mudar alguma sysctl relacionada ao tipo de equipamento, vai se deparar com esta mensagem:

# sysctl hw.model=AMD

sysctl: oid 'hw.model' is read only

As que não são marcadas com o atributo de somente leitura podem ser alteradas através do comando sysctl seguida do nome completo da sysctl o sinal de igual e o valor desejado.

#sysctl kern.securelevel=1

Toda e qualquer modificação através do comando sysctl será mantida até o momento da reinicialização do sistema. Para manter a modificação permanente, é necessário adicionar a sysctl e seu valor no arquivo /etc/sysctl.conf Para maiores informações sobre sysctl, verifique sua manpage.

77

5.3 Módulos de kernel Tradicionalmente o FreeBSD teve o chamado kernel monolítico, o que significa que este kernel era um grande programa provedor de suporte a uma lista fixa de dispositivos. Caso surgisse a necessidade de alteração desta lista, sendo ela por inclusão ou exclusão de algum item, uma nova compilação do kernel deveria ser executada e o sistema reiniciado. Hoje em dia o FreeBSD está mudando rapidamente para um modelo onde muitas funcionalidades do kernel estão contidas em módulos, que podem ser dinamicamente carregados e descarregados. Esta nova característica permite que o kernel se adapte rapidamente a um novo hardware que passa a ser reconhecido instantaneamente, como por exemplo, um cartão PCMCIA em um laptop, ou que uma nova funcionalidade que não era necessária no momento da compilação seja trazida para dentro do kernel. Esta característica é conhecida como kernel modular. Assim como o kernel default fica no diretório /boot/kernel/kernel os módulos do kernel ficam em /boot/kernel. Cada módulo de kernel termina com a extensão .ko (no momento em que esta apostila foi escrita a pasta continha 608 módulos). 5.3.1 Visualizando os módulos carregados A visualização dos módulos de kernel carregados é feita através do comando kldstat (8)

#kldstat

Id Refs Address Size Name

1 4 0xc0400000 b6dfe0 kernel

Cada módulo carregado possui diversos submódulos, que podem ser exibidos através do comando kldstat –v. O kernel por si só carrega diversos submódulos, portanto utilizar o comando kldstat –v trará uma saída extensa. 5.3.2 Carregando e descarregando módulos As tarefas de carregar e descarregar um módulo de kernel podem ser executadas com os comandos kldload (8) e kldunload (8) Em sua versão 7.0 o FreeBSD não vinha por default com o módulo de criptografia wep habilitado, neste caso se você deseja-se utilizar esta opção teria que carregar dinamicamente o módulo de kernel responsável por esta funcionalidade, neste caso o wlan_wep.ko com o seguinte comando:

#kldload wlan_wep

O FreeBSD 8 já vem com esta opção carregada no kernel, portanto se tentar executar este comando, receberá o seguinte erro:

#kldload wlan_wep

kldload: can't load wlan_wep: File exists

Este erro ocorre porque o módulo referente ao WEP já está carregado no kernel, basta observar os submódulos carregados com a opção kdlstat –v.

78

Para descarregar um módulo já carregado, basta utilizar o comando kldunload e o nome do módulo. No caso do exemplo acima, se estivesse na versão 7 do FreeBSD, bastaria digitar:

#kldunload wlan_wep

Para descarregar o módulo referente ao WEP. Vale lembrar que módulos carregados via kldload só ficaram na memória até a próxima reinicialização do equipamento, caso deseje que um módulo seja carregado no momento do boot, deve adicioná-lo no arquivo /boot/loader.conf Uma lista completa de toas as opções e módulos que podem ser carregados via loader.conf estão em /boot/defaults/loader.conf A parte mais complicada ao se trabalhar com módulos de kernel é saber qual módulo a ser carregado. Geralmente este recurso será utilizado quando um novo dispositivo, como uma placa de rede, for instalada e esta não estiver com suporte habilitado no kernel. Nota Mesmo tendo o recurso de carregamento de módulos, sempre que for necessário carregar um

módulo que irá funcionar por um período de tempo razoavelmente longo, como a substituição de uma placa de rede queimada, é interessante recompilar o kernel para habilitar o suporte diretamente nele, isso pode melhorar a performance

5.4 Construindo seu próprio Kernel Eventualmente você verá que algumas otimizações não podem ser feitas somente via sysctl e módulos. Algumas vezes será necessário retirar o suporte para dispositivos que não estão presentes no seu equipamento, como por exemplo, o suporte para diversas controladoras SCSI em um equipamento que possui apenas interfaces IDE. Neste caso uma nova compilação do kernel precisará ser feita. O kernel entregue no processo de instalação é chamado GENERIC, o arquivo de configuração fica armazenado em /usr/src/sys/i386/conf/GENERIC. Este kernel é configurado para rodar em uma grande variedade de hardware, desde os micros mais velhos até os mais atuais. NOTA O hardware mais novo pode suportar otimizações não implementadas no kernel GENERIC,

para habilitar essas otimizações é necessário a sua inclusão e após, a compilação do novo kernel.

O processo de compilação de um novo kernel é extremamente simples, mas deve ser executado com muita atenção e cautela para que tudo funcione novamente após o boot. Antes de iniciarmos o processo de configuração de um kernel, é necessário saber algumas informações em relação ao hardware, como por exemplo:

Tipo/família do processador

Quantidade de memória RAM

Dispositivos instalados

Para isso o FreeBSD fornece algumas ferramentas, como o dmesg, sysctl, uname e pciconf.

79

5.4.1 Arquivo de configuração Todo arquivo de configuração do kernel possui cinco tipos de entradas: CPU, ident, makeoptions, options e devices. A presença ou ausência dessas entradas dita a forma com que o kernel irá suportar as funções associadas ou o hardware.

cpu: este label indica o tipo de CPU que o kernel suporta, que pode ser desde

os antigos 486 até os mais novos processadores.

ident: Todo kernel possui esta única linha de identificação, é no campo ident que

setamos o nome do kernel.

makeoptions: Esta opção dá instruções para o software que irá montar o kernel.

A opção mais usual é DEBUG=-g que compila um kernel com a função debug

habilitada. A função debug é muito utilizada por desenvolvedores para encontrar

problemas de software.

options: São opções que podem ser habilitadas no kernel sem a necessidade de

um hardware específico, como por exemplo o tipo do sistema de arquivos ou os

protocolos de rede suportados.

devices: Também conhecido como device drivers, esta opção provê ao kernel

instruções para a comunicação com os dispositivos instalados. Se desejar que o

kernel tenha suporte ao hardware instalado, por via de regra, o hardware deve

estar listado aqui. Alguns dispositivos chamados pseudodevices não estão

ligados a um hardware em particular, mas suportam uma categoria inteira de

hardware, como a interface de loopback.

NOTA Antes de prosseguirmos é necessário que tenha ficado clara a diferença entre options e pseudodevices. Ambos são independentes de hardware, mas a grande diferença entre eles é que o pseudodevice irá aparecer no sistema como um device, como por exemplo a interface de loopback da rede, que é apresentada como lo0.

Com o conhecimento de todas as opções de configuração de um arquivo de kernel, podemos explorar seu diretório, que fica em /sys/<arch>/conf onde arch indica a arquitetura utilizada, neste caso, /sys/i386/conf. Este diretório possui vários arquivos, mas os principais são DEFAULTS, GENERIC, GENERIC.hints, NOTES e PAE

DEFAULTS: É uma lista de opções e dispositivos que são habilitados para uma

determinada arquitetura. É um ponto de partida para um kernel realmente

mínimo.

GENERIC: É a configuração de um kernel padrão. Ele contém todas as

configurações para o reconhecimento do hardware de determinada arquitetura. É

o kernel distribuído pelo sistema.

GENERIC.hints: Possui informações de configuração de hardware mais antigo.

NOTES: Possui todas as opções de configuração de determinada plataforma.

80

PAE: Exemplo de arquivo de configuração do kernel para equipamentos com

mais de 4GB de memória RAM.

NOTA O arquivo NOTES deve ser utilizado apenas para encontrar configurações específicas da plataforma escolhida, não deve ser compilado, pois várias opções existentes são conflitantes entre sim.

Existe também um arquivo NOTES que independe da plataforma, este fica localizado em /usr/src/sys/conf/NOTES

Agora veremos todo o arquivo de configuração:

#

# GENERIC -- Generic kernel configuration file for FreeBSD/i386

#

# For more information on this file, please read the config(5)

manual page,

# and/or the handbook section on Kernel Configuration Files:

#

#http://www.FreeBSD.org/doc/en_US.ISO8859-

1/books/handbook/kernelconfig-config.html

#

# The handbook is also available locally in

/usr/share/doc/handbook

# if you've installed the doc distribution, otherwise always see

the

# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the

# latest information.

#

# An exhaustive list of options and more detailed explanations of

the

# device lines is also present in the ../../conf/NOTES and NOTES

files.

# If you are in doubt as to the purpose or necessity of a line,

check first

# in NOTES.

#

# $FreeBSD: src/sys/i386/conf/GENERIC,v 1.519.2.7 2010/01/12

06:00:56 brooks Exp $

cpu I486_CPU

cpu I586_CPU

cpu I686_CPU

As primeiras linhas são comentários sobre o kernel, onde encontrar mais informações e a versão do arquivo. Logo abaixo encontramos a identificação da CPU suportada pelo kernel. O interessante é manter somente a CPU referente ao equipamento, para isso, podemos utilizar o dmesg:

#dmesg | grep CPU

81

CPU: Intel(R) Pentium(R) 4 CPU 1.80GHz (1799.80-MHz 686-class CPU)

cpu0: <ACPI CPU> on acpi0

p4tcc0: <CPU Frequency Thermal Control> on cpu0

Repare que a saída do comando informa o tipo de CPU “686-class CPU”, dessa forma, podemos manter no arquivo de configuração, apenas a linha referente ao tipo 686. Logo abaixo da CPU, encontramos a linha que identifica o kernel: ident GENERIC

A palavra GENERIC precisa ser substituída pelo nome que está utilizando no seu kernel. Abaixo encontramos mais alguns comentários e também a linha referente ao debug makeoptions DEBUG=-g # Build kernel with gdb(1) debug

symbols

Logo abaixo encontramos todas as opções que são suportadas pelo kernel GENERIC. NOTA Todas as opções listadas vão depender da sua necessidade. Você durante o momento da

configuração do kernel pode retirar ou acrescentar opções, conforme sua necessidade.

options SCHED_ULE # ULE scheduler

options PREEMPTION # Enable kernel thread preemption

Estas opções controlam como o FreeBSD irá realizar seu escalonamento interno e qual será a forma de tratamento das threads. options INET # InterNETworking

options INET6 # IPv6 communications protocols

options SCTP # Stream Control Transmission Protocol

Informam os protocolos de rede suportados pelo kernel. INET habilita os protocolos da pilha TCP/IP em sua versão 4, INET6 habilita a versão 6 dos protocolos de comunicação, a linha referente ao SCTP dá ao kernel a capacidade de utilizar este novo protocolo definido pela RFC 2960 para fazer o transporte das mensagens ao invés de utilizar TPC ou UDP1. options FFS # Berkeley Fast Filesystem

options SOFTUPDATES # Enable FFS soft updates support

options UFS_ACL # Support for access control lists

options UFS_DIRHASH # Improve performance on big directories

options UFS_GJOURNAL # Enable gjournal-based UFS journaling

Estas linhas indicam os sistemas de arquivos e suas respectivas opções. O FFS é o sistema padrão do FreeBSD. O próximo bloco de opções indicam as funcionalidades que o kernel pode suportar

1 Mais informações sobre a utilização do SCTP e seus ganhos como um protocolo de transporte podem

ser obtidas através da RFC 3286.

82

options MD_ROOT # MD is a potential root device

options NFSCLIENT # Network Filesystem Client

options NFSSERVER # Network Filesystem Server

options NFSLOCKD # Network Lock Manager

options NFS_ROOT # NFS usable as /, requires NFSCLIENT

options MSDOSFS # MSDOS Filesystem

options CD9660 # ISO 9660 Filesystem

options PROCFS # Process filesystem (requires PSEUDOFS)

options PSEUDOFS # Pseudo-filesystem framework

options GEOM_PART_GPT # GUID Partition Tables.

options GEOM_LABEL # Provides labelization

options COMPAT_43TTY # BSD 4.3 TTY compat (sgtty)

options COMPAT_FREEBSD4 # Compatible with FreeBSD4

options COMPAT_FREEBSD5 # Compatible with FreeBSD5

options COMPAT_FREEBSD6 # Compatible with FreeBSD6

options COMPAT_FREEBSD7 # Compatible with FreeBSD7

options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI

options KTRACE # ktrace(1) support

options STACK # stack(9) support

options SYSVSHM # SYSV-style shared memory

options SYSVMSG # SYSV-style message queues

options SYSVSEM # SYSV-style semaphores

options P1003_1B_SEMAPHORES # POSIX-style semaphores

options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time

extensions

options PRINTF_BUFR_SIZE=128 # Prevent printf output being

interspersed.

options KBD_INSTALL_CDEV # install a CDEV entry in /dev

options HWPMC_HOOKS # Necessary kernel hooks for

hwpmc(4)

options AUDIT # Security event auditing

options MAC # TrustedBSD MAC Framework

options FLOWTABLE # per-cpu routing cache

#options KDTRACE_HOOKS # Kernel DTrace hooks

Abaixo temos as opções que habilitam o funcionamento do SMP no kernel # To make an SMP kernel, the next two lines are needed

options SMP # Symmetric MultiProcessor Kernel

device apic # I/O APIC

O FreeBSD oferece nativamente três sistemas de filtragem de pacotes, o ipfw, ipfilter e o PF. Ambos possuem suas vantagens e desvantagens. Para habilitar o ipfw basta adicionar as seguintes linhas: options IPFIREWALL #firewall

O parâmetro acima é suficiente para ativar o suporte ao uso do IPFW. Mas para seu bom funcionamento é necessário adicionar mais algumas linhas:

83

options IPFIREWALL_VERBOSE #habilita o log de eventos no

syslog

options IPFIREWALL_FORWARD #suporte a Proxy transparente

options IPFIREWALL_VERBOSE_LIMIT=100 #limita a verbosidade

O ipfw também fornece a possibilidade da realização de controle de banda para determinado serviço ou usuário, para habilitar esta opção o seguinte parâmetro deve ser adicionado options DUMMYNET

Se for necessário utilizar o servidor para a realizaçãod e NAT (Network Address Translation), é preciso habilitar o suporte ao ipdivert através da adição do parêmetro options IPDIVERT #divert sockets

Para habilitar suporte ao ipfilter, os parâmetros são um pouco diferentes. O suporte básico é adicionado através dos parâmetros options IPFILTER #ipfilter-suport

options IPFILTER_LOG #habilita o log

options IPFILTER_DEFAULT_BLOCK #block all packets by default

Diferente do ipfw, o ipfilter permite tudo por default, então é necessário acrescentar a última linha acima para não termos um firewall completamente aberto. Para habilitar o suporte ao PF (packet filter) basta adicionar as seguintes linhas: device pf #habilita o packet filter

device pflog #habilita logs do pf

Sempre que um servidor faz um forward de um pacote de dados, o TTL deste pacote é alterado. Se quisermos ocultar de um observador externo, um traceroute por exemplo, que temos um gateway ou um firewall alocado em determinado seguimento da rede, o FreeBSD possui uma função no kernel que faz com que ele não altere o TTL de pacotes dos quais ele tenha feito forward, para ativar este recurso, basta ativar o parâmetro: options IPSTEALTH

Se seu servidor for executar algum tipo de serviço web, o FreeBSD dispõe de alguns parâmetros com o objetivo de instruir o kernel a pré-processar as conexões entrantes em seu sistema, reduzindo assim em alguns milisegundos o tempo necessário para o estabelecimento de cada conexão. Estas opções funcionam muito bem em conjunto com o servidor Apache. options ACCEPT_FILTER_DATA

options ACCEPT_FILTER_HTTP

84

Se o servidor for utilizado como um gateway e possuir diversas interfaces de rede, pode-se fazer um ajuste simples no kernel fazendo com que o processador dedique a mesma atenção a cada uma delas, otimizando o tráfego em todas as interfaces e garantindo um floxo de dados mais uniforme. Este recurso pode ser habilitado através da opção: options DEVICE_POLLING

NOTA As opções de device polling são suportadas somente pelas seguintes interfaces de rede:

bge, dc, em, fwe, fwip, fxp, ixgb, nfe, nge, re, rl, sf, sis, ste, stge, vge, vr e xl

O FreeBSD possui um parâmetro que permite ajustar os ciclos de operação do seu sistema, este parâmetro é interessante para usuários de dummynet e device polling e é habilitado pela opção: options HZ=100

O valor padrão deste parêmatro é 100, o que representa uma granularidade de 10md (1s/Hz), valores próximos a 1000 ou 1ms vão significar um desempenho melhor do sistema, porém vão ocasionar algum overhead, de forma que deve-se ir ajustando o parâmetro e medindo as mudanças, para cada processador pode-se chegar a um valor diferente. O FreeBSD também possui condições de ser utilizado como uma bridge entre duas interfaces de rede, a principal característica de uma bridge é que ela mão pussui IP em suas interfaces, as vantagens de sua utilização, são por exemplo, na construção de firewalls, visto que pode-se configurar uma bridge para atuar como filtro de pacotes e alocá-la em qualquer ponto da rede sem que seja necessário nenhum tipo de configuração da mesma. Para habilitar este suporte basta habilitar o parâmetro: options BRIDGE

Após as opções, temos os devices, todos eles comentados no próprio arquivo de configuração. # CPU frequency control

device cpufreq

# Bus support.

device acpi

device eisa

device pci

# Floppy drives

device fdc

# ATA and ATAPI devices

device ata

device atadisk # ATA disk drives

85

device ataraid # ATA RAID drives

device atapicd # ATAPI CDROM drives

device atapifd # ATAPI floppy drives

device atapist # ATAPI tape drives

options ATA_STATIC_ID # Static device numbering

# SCSI Controllers

device ahb # EISA AHA1742 family

device ahc # AHA2940 and onboard AIC7xxx devices

options AHC_REG_PRETTY_PRINT # Print register bitfields in

debug

# output. Adds ~128k to driver.

device ahd # AHA39320/29320 and onboard AIC79xx

devices

options AHD_REG_PRETTY_PRINT # Print register bitfields in

debug

# output. Adds ~215k to driver.

device amd # AMD 53C974 (Tekram DC-390(T))

device hptiop # Highpoint RocketRaid 3xxx series

device isp # Qlogic family

#device ispfw # Firmware for QLogic HBAs- normally a

module

device mpt # LSI-Logic MPT-Fusion

#device ncr # NCR/Symbios Logic

device sym # NCR/Symbios Logic (newer chipsets +

those of `ncr')

device trm # Tekram DC395U/UW/F DC315U adapters

device adv # Advansys SCSI adapters

device adw # Advansys wide SCSI adapters

device aha # Adaptec 154x SCSI adapters

device aic # Adaptec 15[012]x SCSI adapters, AIC-

6[23]60.

device bt # Buslogic/Mylex MultiMaster SCSI

adapters

device ncv # NCR 53C500

device nsp # Workbit Ninja SCSI-3

device stg # TMC 18C30/18C50

# SCSI peripherals

device scbus # SCSI bus (required for SCSI)

device ch # SCSI media changers

device da # Direct Access (disks)

device sa # Sequential Access (tape etc)

device cd # CD

device pass # Passthrough device (direct SCSI

access)

86

device ses # SCSI Environmental Services (and SAF-

TE)

# RAID controllers interfaced to the SCSI subsystem

device amr # AMI MegaRAID

device arcmsr # Areca SATA II RAID

device asr # DPT SmartRAID V, VI and Adaptec SCSI

RAID

device ciss # Compaq Smart RAID 5*

device dpt # DPT Smartcache III, IV - See NOTES for

options

device hptmv # Highpoint RocketRAID 182x

device hptrr # Highpoint RocketRAID 17xx, 22xx, 23xx,

25xx

device iir # Intel Integrated RAID

device ips # IBM (Adaptec) ServeRAID

device mly # Mylex AcceleRAID/eXtremeRAID

device twa # 3ware 9000 series PATA/SATA RAID

# RAID controllers

device aac # Adaptec FSA RAID

device aacp # SCSI passthrough for aac (requires

CAM)

device ida # Compaq Smart RAID

device mfi # LSI MegaRAID SAS

device mlx # Mylex DAC960 family

device pst # Promise Supertrak SX6000

device twe # 3ware ATA RAID

# atkbdc0 controls both the keyboard and the PS/2 mouse

device atkbdc # AT keyboard controller

device atkbd # AT keyboard

device psm # PS/2 mouse

device kbdmux # keyboard multiplexer

device vga # VGA video card driver

device splash # Splash screen and screen saver support

# syscons is the default console driver, resembling an SCO

console

device sc

device agp # support several AGP chipsets

# Power management support (see NOTES for more options)

#device apm

# Add suspend/resume support for the i8254.

87

device pmtimer

# PCCARD (PCMCIA) support

# PCMCIA and cardbus bridge support

device cbb # cardbus (yenta) bridge

device pccard # PC Card (16-bit) bus

device cardbus # CardBus (32-bit) bus

# Serial (COM) ports

device uart # Generic UART driver

# Parallel port

device ppc

device ppbus # Parallel port bus (required)

device lpt # Printer

device plip # TCP/IP over parallel

device ppi # Parallel port interface device

#device vpo # Requires scbus and da

# If you've got a "dumb" serial or parallel PCI card that is

# supported by the puc(4) glue driver, uncomment the following

# line to enable it (connects to sio, uart and/or ppc drivers):

#device puc

# PCI Ethernet NICs.

device de # DEC/Intel DC21x4x (``Tulip'')

device em # Intel PRO/1000 Gigabit Ethernet Family

device igb # Intel PRO/1000 PCIE Server Gigabit

Family

device ixgb # Intel PRO/10GbE Ethernet Card

device le # AMD Am7900 LANCE and Am79C9xx PCnet

device ti # Alteon Networks Tigon I/II gigabit

Ethernet

device txp # 3Com 3cR990 (``Typhoon'')

device vx # 3Com 3c590, 3c595 (``Vortex'')

# PCI Ethernet NICs that use the common MII bus controller code.

# NOTE: Be sure to keep the 'device miibus' line in order to use

these NICs!

device miibus # MII bus support

device ae # Attansic/Atheros L2 FastEthernet

device age # Attansic/Atheros L1 Gigabit Ethernet

device alc # Atheros AR8131/AR8132 Ethernet

device ale # Atheros AR8121/AR8113/AR8114 Ethernet

device bce # Broadcom BCM5706/BCM5708 Gigabit

Ethernet

device bfe # Broadcom BCM440x 10/100 Ethernet

device bge # Broadcom BCM570xx Gigabit Ethernet

device dc # DEC/Intel 21143 and various workalikes

88

device et # Agere ET1310 10/100/Gigabit Ethernet

device fxp # Intel EtherExpress PRO/100B (82557,

82558)

device jme # JMicron JMC250 Gigabit/JMC260 Fast

Ethernet

device lge # Level 1 LXT1001 gigabit Ethernet

device msk # Marvell/SysKonnect Yukon II Gigabit

Ethernet

device nfe # nVidia nForce MCP on-board Ethernet

device nge # NatSemi DP83820 gigabit Ethernet

#device nve # nVidia nForce MCP on-board Ethernet

Networking

device pcn # AMD Am79C97x PCI 10/100 (precedence

over 'le')

device re # RealTek 8139C+/8169/8169S/8110S

device rl # RealTek 8129/8139

device sf # Adaptec AIC-6915 (``Starfire'')

device sis # Silicon Integrated Systems SiS 900/SiS

7016

device sk # SysKonnect SK-984x & SK-982x gigabit

Ethernet

device ste # Sundance ST201 (D-Link DFE-550TX)

device stge # Sundance/Tamarack TC9021 gigabit

Ethernet

device tl # Texas Instruments ThunderLAN

device tx # SMC EtherPower II (83c170 ``EPIC'')

device vge # VIA VT612x gigabit Ethernet

device vr # VIA Rhine, Rhine II

device wb # Winbond W89C840F

device xl # 3Com 3c90x (``Boomerang'',

``Cyclone'')

# ISA Ethernet NICs. pccard NICs included.

device cs # Crystal Semiconductor CS89x0 NIC

# 'device ed' requires 'device miibus'

device ed # NE[12]000, SMC Ultra, 3c503, DS8390

cards

device ex # Intel EtherExpress Pro/10 and Pro/10+

device ep # Etherlink III based cards

device fe # Fujitsu MB8696x based cards

device ie # EtherExpress 8/16, 3C507, StarLAN 10

etc.

device sn # SMC's 9000 series of Ethernet chips

device xe # Xircom pccard Ethernet

# Wireless NIC cards

device wlan # 802.11 support

options IEEE80211_DEBUG # enable debug msgs

options IEEE80211_AMPDU_AGE # age frames in AMPDU reorder q's

89

options IEEE80211_SUPPORT_MESH # enable 802.11s draft support

device wlan_wep # 802.11 WEP support

device wlan_ccmp # 802.11 CCMP support

device wlan_tkip # 802.11 TKIP support

device wlan_amrr # AMRR transmit rate control algorithm

device an # Aironet 4500/4800 802.11 wireless

NICs.

device ath # Atheros pci/cardbus NIC's

device ath_hal # pci/cardbus chip support

options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors

device ath_rate_sample # SampleRate tx rate control

for ath

device ral # Ralink Technology RT2500 wireless

NICs.

device wi # WaveLAN/Intersil/Symbol 802.11

wireless NICs.

#device wl # Older non 802.11 Wavelan wireless NIC.

# Pseudo devices.

device loop # Network loopback

device random # Entropy device

device ether # Ethernet support

device vlan # 802.1Q VLAN support

device tun # Packet tunnel.

device pty # BSD-style compatibility pseudo ttys

device md # Memory "disks"

device gif # IPv6 and IPv4 tunneling

device faith # IPv6-to-IPv4 relaying (translation)

device firmware # firmware assist module

# The `bpf' device enables the Berkeley Packet Filter.

# Be aware of the administrative consequences of enabling this!

# Note that 'bpf' is required for DHCP.

device bpf # Berkeley packet filter

# USB support

device uhci # UHCI PCI->USB interface

device ohci # OHCI PCI->USB interface

device ehci # EHCI PCI->USB interface (USB 2.0)

device usb # USB Bus (required)

#device udbp # USB Double Bulk Pipe devices

device uhid # "Human Interface Devices"

device ukbd # Keyboard

device ulpt # Printer

device umass # Disks/Mass storage - Requires

scbus and da

device ums # Mouse

device urio # Diamond Rio 500 MP3 player

90

# USB Serial devices

device u3g # USB-based 3G modems (Option, Huawei,

Sierra)

device uark # Technologies ARK3116 based serial

adapters

device ubsa # Belkin F5U103 and compatible serial

adapters

device uftdi # For FTDI usb serial adapters

device uipaq # Some WinCE based devices

device uplcom # Prolific PL-2303 serial adapters

device uslcom # SI Labs CP2101/CP2102 serial adapters

device uvisor # Visor and Palm devices

device uvscom # USB serial support for DDI pocket's

PHS

# USB Ethernet, requires miibus

device aue # ADMtek USB Ethernet

device axe # ASIX Electronics USB Ethernet

device cdce # Generic USB over Ethernet

device cue # CATC USB Ethernet

device kue # Kawasaki LSI USB Ethernet

device rue # RealTek RTL8150 USB Ethernet

device udav # Davicom DM9601E USB

# USB Wireless

device rum # Ralink Technology RT2501USB wireless

NICs

device uath # Atheros AR5523 wireless NICs

device ural # Ralink Technology RT2500USB wireless

NICs

device zyd # ZyDAS zb1211/zb1211b wireless NICs

# FireWire support

device firewire # FireWire bus code

#device sbp # SCSI over FireWire (Requires scbus and

da)

device fwe # Ethernet over FireWire (non-standard!)

device fwip # IP over FireWire (RFC 2734,3146)

device dcons # Dumb console driver

device dcons_crom # Configuration ROM for dcons

5.4.2 Construindo o kernel Após ver os exemplos de configuração você será capaz de customizar o seu próprio kernel. É altamente recomendado que antes de qualquer compilação de kernel, uma cópia de segurança do kernel atual deve ser feita. Para isso pode-se utilizar o comando:

#cp -Rp /boot/kernel /boot/kernel.generic

91

Após, copie o arquivo GENERIC para o nome do seu servidor e faça as alterações que forem necessárias

#cp GENERIC nome_do_kernel

E finalmente, dê início a compilação do novo kernel. Para isso você deve chamar o comando make, informando o nome do seu novo kernel, utilizando a seguinte sintaxe

#cd /usr/src

#make buildkernel KERNCONF=NOME_DO_KERNEL

Se tudo correr bem, uma mensagem será exibida na tela:

make buildkernel KERNCONF=GENERIC

--------------------------------------------------------------

>>> Kernel build for GENERIC started on Sun Feb 28 20:13:04 BRT 2010

--------------------------------------------------------------

===> GENERIC

mkdir -p /usr/obj/usr/src/sys

--------------------------------------------------------------

>>> stage 1: configuring the kernel

--------------------------------------------------------------

cd /usr/src/sys/i386/conf;

PATH=/usr/obj/usr/src/tmp/legacy/usr/sbin:/usr/obj/usr/src/tmp/legacy/us

r/bin:/usr/obj/usr/src/tmp/legacy/usr/games:/usr/obj/usr/src/tmp/usr/sbi

n:/usr/obj/usr/src/tmp/usr/bin:/usr/obj/usr/src/tmp/usr/games:/sbin:/bin

:/usr/sbin:/usr/bin config -d /usr/obj/usr/src/sys/GENERIC

/usr/src/sys/i386/conf/GENERIC

Kernel build directory is /usr/obj/usr/src/sys/GENERIC

Don't forget to do ``make cleandepend && make depend''

--------------------------------------------------------------

>>> stage 2.1: cleaning up the object tree

--------------------------------------------------------------

cd /usr/obj/usr/src/sys/GENERIC; MAKEOBJDIRPREFIX=/usr/obj

MACHINE_ARCH=i386 MACHINE=i386 CPUTYPE=

GROFF_BIN_PATH=/usr/obj/usr/src/tmp/legacy/usr/bin

GROFF_FONT_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/groff_font

GROFF_TMAC_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/tmac

_SHLIBDIRPREFIX=/usr/obj/usr/src/tmp VERSION="FreeBSD 8.0-RELEASE i386

800107" INSTALL="sh /usr/src/tools/install.sh"

PATH=/usr/obj/usr/src/tmp/legacy/usr/sbin:/usr/obj/usr/src/tmp/legacy/us

r/bin:/usr/obj/usr/src/tmp/legacy/usr/games:/usr/obj/usr/src/tmp/usr/sbi

n:/usr/obj/usr/src/tmp/usr/bin:/usr/obj/usr/src/tmp/usr/games:/sbin:/bin

:/usr/sbin:/usr/bin NO_CTF=1 make KERNEL=kernel cleandir

.

.

.

.

awk -f /usr/src/sys/conf/kmod_syms.awk zlib.kld export_syms | xargs -J%

objcopy % zlib.kld

ld -Bshareable -d -warn-common -o zlib.ko.debug zlib.kld

objcopy --only-keep-debug zlib.ko.debug zlib.ko.symbols

objcopy --strip-debug --add-gnu-debuglink=zlib.ko.symbols zlib.ko.debug

zlib.ko

92

--------------------------------------------------------------

>>> Kernel build for GENERIC completed on Sun Feb 28 20:53:57 BRT 2010

--------------------------------------------------------------

Caso ocorra algum erro de compilação, uma mensagem semelhante a esta será exibida:

make buildkernel KERNCONF=BSDAFPU

--------------------------------------------------------------

>>> Kernel build for BSDAFPU started on Mon Mar 1 12:04:02 BRT 2010

--------------------------------------------------------------

===> BSDAFPU

mkdir -p /usr/obj/usr/src/sys

--------------------------------------------------------------

>>> stage 1: configuring the kernel

--------------------------------------------------------------

cd /usr/src/sys/amd64/conf;

PATH=/usr/obj/usr/src/tmp/legacy/usr/sbin:/usr/obj/usr/src/tmp/legacy/us

r/bin:/usr/obj/usr/src/tmp/legacy/usr/games:/usr/obj/usr/src/tmp/usr/sbi

n:/usr/obj/usr/src/tmp/usr/bin:/usr/obj/usr/src/tmp/usr/games:/sbin:/bin

:/usr/sbin:/usr/bin config -d /usr/obj/usr/src/sys/BSDAFPU

/usr/src/sys/amd64/conf/BSDAFPU

/usr/src/sys/amd64/conf/BSDAFPU: unknown option "tetse123" *** Error code 1

Stop in /usr/src.

*** Error code 1

Stop in /usr/src.

Repare na mensagem unknow option “tetse123”, esta foi uma opção adicionada ao arquivo de configuração do kernel que não é suportada por ele. Basta remover a opção do arquivo de configuração e recompilar o kernel. Ao receber a mensagem de sucesso, podemos partir para a instalação do kernel, que é feita pelo comando:

#make installkernel KERNCONF=NOME_DO_KERNEL

Ao final da execução desses passos seu novo kernel está pronto para ser utilizado, basta reiniciar o servidor para que ele entre em execução.

93

6. Atualização do FreeBSD Vital para a manutenção da estabilidade e confiança do FreeBSD, sua atualização, por incrível que pareça, é uma tarefa comum e simples. Mas antes de começarmos a atualizar o sistema, é necessário conhecermos o funcionamento das versões do FreeBSD.

6.1 Versoes do FreeBSD O método de desenvolvimento do FreeBSD é a chave para sua atualização ser relativamente simples. O desenvolvimento do FreeBSD é dado de forma contíunua, isso significa que se você fizer o download da versão corrente do dia atual, ela será um pouco diferente da versão do dia anterior. Desenvolvedores ao redor do mundo realizão modificações e melhoramentos continuamente, fazendo com que a forma tradicional de numeração de releases de alguns softwares de código livre se tornem impraticáveis no projeto. Em um dado momento é possível obter diferentes versões do FreeBSD: releases, errata branches, -stable e -current. 6.1.1 Releases Uma release é simplesmente uma cópia da versão mais estável do FreeBSD em um momento particular do tempo. Possui um número convencional, como 5.5, 6.3, 7.0 entre outros. De três a quatro vezes no ano, o Release Engineering team solicita aos desenvolvedores focarem nos problemas de maior importância ao invés de realizarem outras mudanças. Durante este período várias Releases Candidates são liberadas para testes, tanto da comunidade quanto da equipe do FreeBSD. Quando a equipe do FreeBSD está satisfeita com seus próprios testes e da comunidade, dão um número para esta release e ela é liberada. Após a equipe de desenvolvimento volta aos trabalhos regulares do projeto. 6.1.2 Errata Branches Uma errata branch é uma release específica do FreeBSD contendo alguns patches de segurança e estabilidade para aquela release. 6.1.3 FreeBSD-current FreeBSD-current ou apenas -current é o nome da árvore de desenvolvimento do FreeBSD. Esta versão é recomendável apenas para desenvolvedores e usuários interessados em testar suas novas funcionalidades. É altamente recomendável não utilizar versões –current em servidores de produção. 6.1.4 FreeBSD-stable FreeBSD-stable ou apenas –stable é a versão mais estável do FreeBSD. Trata-se de uma versão –current que foi arduamente testada pelos seus desenvolvedores e vários usuários ao redor do mundo. Esta versão é a recomendada para a maioria dos servidores em produção.

94

6.2 Métodos de atualização. O FreeBSD dispõe de três métodos diferentes de atualização: sysinstall, atualização binária e atualização a partir do código fonte. Dentre essas três abordaremos apenas as atualizações binárias e pelo código fonte.

6.3 Atualização Binária A partir de sua versão 6.2 foi incorporado na base do FreeBSD um utilitário que possibilita a atualização binária do sistema, o freebsd-update. O freebsd-update permite que usuários atualizem o sistema para a mais nova errata branch. Ele não permite que uma atualização para –stable ou –current. Este utilitário só fornece atualizações para o kernel Generic, caso utilize um kernel customizado, será necessária a aplicação manual dos patches de correção logo após realizar a atualização do sistema. O arquivo de configuração do freebsd-update está localizado em /etc/freebsd-update.conf. O arquivo de configuração em sua forma padrão atende todas as necessidades para o processo de atualização, mas é interessante conhecermos as principais opções do seu arquivo de configuração: KeyPrint 8006.........

KeyPrint é uma assinatura criptográfica do servidor de atualização para garantir sua integridade.

ServerName update.FreeBSD.org

Esta linha indica ao freebsd-update onde buscar as atualizações.

Components src world kernel

Indica os componentes a serem atualizados. Neste caso a atualização será em todo o código fonte, na userland (world) e no kernel Generic.

UpdateIfUnmodified /etc/ /var/

O FreeBSD update irá atualizar os arquivos dentro de /etc. Caso esta opção esteja ativa no arquivo de configuração, o processo de atualização irá alterar apenas os arquivos que não foram modificados, garantindo dessa forma que não ocorra nenhuma surpresa desagradável após a atualização.

Mailto root

Se o processo de atualização foi agendado, como será descrito posteriormente, esta linha faz com que o utilitário freebsd-update envie uma mensagem de e-mail ao destinatário escolhido em caso de sucesso ou fracasso na atualização. KeepModifiedMetadata yes

Não deixa que o freebsd-update faça alterações nas permissões que porventura foram alteradas em alguns arquivos. 6.3.1 Utilizando o freebsd-update

95

O processo de atualização binária é dividido em duas etapas, download das atualizações e aplicação delas. Para a atualização da versão mais recente da errata branch, basta digitar:

#freebsd-update fetch

Será então o programa buscando uma fonte para os patches, comparando as chaves criptográficas e eventualmente, o download dos patches. Após será mostrado os patches que foram baixados. O freebsd-update armazena os patches em /var/db/freebsd-update. Para instalar os patches, basta digitar:

#freebsd-update install

Isto é tudo, basta reiniciar o sistema para ter a mais nova versão errata branch. Caso ocorra algum problema após a instalação das atualizações, basta utilizar:

#freebsd-update rollback

Esta opção irá desinstalar a ultima atualização realizada. Para automatizar o processo de atualização binária é necessário criar uma entrada em /etc/crontab com o comando freebsd-update cron, que aguarda aleatoriamente um intervalo de tempo entre 1 e 3600 segundos para realizar a atualização. Este comando é particularmente usual quando se possui alguns servidores na mesma rede e todos são programados para se atualizarem às 5 da manhã, por exemplo, assim utilizando o comando freebsd-update cron, o risco de dois ou mais servidores iniciarem o processo de atualização ao mesmo tempo é mínimo, evitando assim gargalos no link de comunicação. Após o download dos patches, um e-mail será enviado para o administrador daqueles servidores que poderá agendar um reboot em um horário mais conveniente.

6.4 Atualização por código fonte Outra forma de atualizar o sistema é construí-lo diretamente do código fonte, sendo assim a primeira tarefa a ser executada é baixar o código fonte. O projeto FreeBSD utiliza um servidor CVS totalmente reescrito, sendo mais rápido e consumindo uma menor quantidade de recursos que os servidores CVSs tradicionais. Estes servidores também são conhecidos como CVSup Server. Para realizar o download do código fonte é utilizada uma ferramenta chamada csup, que se conecta a algum mirror do servidor CVSup, compara o código fonte do sistema em questão com o código fonte armazenado no servidor e copia apenas os arquivos que foram alterados para o sistema, evitando assim a necessidade de baixar todo o código fonte do sistema a cada atualização. Para iniciar a atualização dos fontes, basta dizer ao csup o que atualizar, de onde atualizar e como realizar a atualização. Isto é feito pelo arquivo Supfile. Os arquivos de exemplos de configuração de um supfile ficam armazenados em /usr/share/examples/cvsup e podem ser utilizados para atualizar diferentes tipos de versões. Os arquivos encontrados neste diretório são:

96

cvs-supfile: Este supfile mantém todo o repositório de código fonte do FreeBSD,

mas é recomendado apenas para desenvolvedores.

doc-supfile: Este arquivo informa ao csup para atualizar a documentação local do

sistema (FAQ, Handbook e alguns artigos).

gnats-supfile: Irá criar uma cópia local dos relatórios de problemas (Problem

Report – PR).

ports-supfile: Este supfile atualiza a árvore do ports para a última versão.

stable-supfile: Atualiza o código fonte para a última versão estável.

standard-supfile: Este supfile irá atualizar os fontes do sistema para a última

versão do sistema instalado.

www-supfile: Faz o download da última versão do website do FreeBSD

Os vários componentes que podem ser atualizados via csup são chamados também de coleções, por exemplo, coleção do ports, coleção da documentação, coleção dos fontes. O objetivo deste capítulo é a atualização da coleção dos fontes. Para a maior parte dos servidores, o arquivo mais indicado é o stable-supfile, e é este arquivo que será explorado. 6.4.1 Stable-supfile Baseado no arquivo de exemplo, um arquivo supfile deve ser: *default host=cvsup.br.FreeBSD.org

*default base=/var/db

*default prefix=/usr

*default release=cvs tag=RELENG_8

*default delete use-rel-sulfix

*defaul compress

src-all

*default host=cvsup.br.FreeBSD.org

Essa linha indica o servidor do repositório onde o sistema será sincronizado. Dessa o servidor cvsup.br.FreeBSD.org será o servidor de onde todo o código fonte do sistema será atualizado. *default base=/var/db

Esta linha indica ao csup onde armazenar os arquivos de status, incluindo uma lista de arquivos baixados. Isto acelera as próximas atualizações. Todas as informações geradas pelo csup são armazenadas em /var/db/sup *default prefix=/usr

Esta entrada direciona o csup a colocar todos os arquivos de códigos fonte que ele atualiza no diretório indicado. Não é recomendado alterar este parâmetro, somente em casos específicos onde os fontes não estão armazenados em /usr/src.

97

*default release=cvs tag=RELENG_8

Esta entrada contém duas informações, a primeira indica que o csup deverá atualizar o código fonte para a versão estável no repositório (default release=cvs). Essa opção é que garante que após a atualização do sistema, este estará com as últimas e mais estáveis versões possíveis, portanto esta opção nunca deve ser alterada. A segunda informação (tag=RELENG_8) indica para qual versão do FreeBSD o csup deverá atualizar. Nesta opção a indicação feita ao csup é que este deve atualizar para a última versão estável disponível do FreeBSD 8, tornando o sistema STABLE. Para instalar uma errata branch da versão 8.0, a tag é: tag=RELENG_8_0 Caso queira atualizar o sistema para a versão –current, utilize a seguinte tag: *default release=cvs tag=.

*default delete use-rel-sulfix

A opção delete fornece plenas permissões para o csup deletar todos os arquivos que forem descenessários após durante a após a atualização do sistema. Já a opção use-rel-sulfix indica ao csup para utilizar o sufixo da releng que será utilizada na atualização. *defaul compress Esta opção faz com que o csup utilize um método de compresão para fazer o download dos fontes, economizando banda. src-all

Por fim, esta linha indica ao sistema que todos os fontes serão atualizados, sem nenhuma excessão. Caso exista a necessidade de atualizar algum módulo em específico, seja pela vontade do administrador ou mesmo por uma descoberta de vulnerabilidade, basta comentar a linha src-all e descomentar as opções que necessitar: #src-base

#src-bin

#src-contrib

#src-etc

#src-games

#src-gnu

#src-include

#src-kerberos5

#src-kerberosIV

#src-lib

#src-libexec

#src-release

#src-sbin

#src-share

#src-sys

#src-tools

#src-usrbin

#src-usrsbin

#src-crypto

#src-eBones

#src-secure

#src-sys-crypto

98

Estas são as opções necessárias para a atualização do sistema. Para criar o arquivo supfile, basta utilizar um editor de sua preferência e criar o arquivo /etc/supfile. Se quiser apenas escolher opções ao invés de criar um arquivo novo, basta utilizar o comando:

#cp /usr/share/examples/cvsup/stable-supfile /etc/supfile

Ao final desta etapa, a atualização do sistema pode ser iniciada. Para dar início a atualização do sistema, basta utilizar o comando:

#csup -g -L 2 /etc/supfile

Onde -g desabilita o modo gráfico e -L 2 indica ao csup para utilizar a verbosidade mais detalhada possível. A opção -L comporta 3 opções, de 0 a 2, onde 0 não exibe nada a não ser mensagens de erro e 2 é a opção mais detalhada. O csup permite que o endereço do servidor de repositório seja fornecido no momento da atualização com a opção -h seguida do nome do servidor. Com esta opção o host declarado no arquivo supfile é ignorado. Uma dica é no momento da atualização, utilizar um utilitário chamado fastest_cvsup, localizado em /usr/ports/sysutils/fastest_cvsup, que indica dentro de um determinado país, quais são os três servidores CVSup mais rápidos. Por exemplo, uma busca pelos servidores mais rápidos no Brasil:

#fastest_cvsup -c br

>> Querying servers in countries: br

--> Connecting to cvsup.br.freebsd.org [143.106.51.13]...

- server replied: OK 17 0 SNAP_16_1h CVSup server ready

- time taken: 4.91 ms

--> Connecting to cvsup2.br.freebsd.org [143.106.10.150]...

- server replied: OK 17 0 SNAP_16_1h CVSup server ready

- time taken: 1.19 ms

--> Connecting to cvsup3.br.freebsd.org [146.164.53.65]...

- server replied: OK 17 0 SNAP_16_1h CVSup server ready

- time taken: 11.61 ms

>> Speed Daemons:

- 1st: cvsup2.br.freebsd.org

- 2nd: cvsup.br.freebsd.org

- 3rd: cvsup3.br.freebsd.org

Pode-se notar que o servidor mais rápido é o cvsup2.br.freebsd.org, assim ele pode ser declarado no momento da execução do csup:

#csup -g –h cvsup2.br.freebsd.org -L 2 /etc/supfile

Para simplificar, o mesmo comando pode ser dado da seguinte forma:

#csup -g -h `fastest_cvsup -c br -Q` -L2 /etc/supfile

99

6.4.2 Construção do FreeBSD a partir do fonte. Após ter baixado a última versão do código fonte e antes de inicializar o processo de construção, é altamente recomendável a leitura do arquivo /usr/src/UPDATING, que contém em ordem cronológica inversa, qualquer aviso e informações importantes sobre alterações no sistema. Ler este arquivo com atenção irá evitar dores de cabeça no processo de atualização. Para dar inicio ao processo de compilação da base do sistema, a primeira coisa a ser feita é estar dentro do diretório /usr/src Para a construção do sistema, o comando utilizado é o make, que lê as instruções do arquivo /usr/src/Makefile e as executa na ordem que devem ser executadas. Dessa forma a execução deve ser:

#cd /usr/src

#make buildworld

O comando make buildworld funciona da seguinte forma:

1. Constrói a parte dos fontes as ferramentas necessárias para a construção do

compilador do sistema;

2. Constrói o compilador e as bibliotecas associadas;

3. Utiliza todas as ferramentas, compilador e bibliotecas para a construção do

sistema.

Toda a saída deste comando é armazenada dentro de /usr/obj, garantindo que o sistema em funcionamento não será afetado durante o processo de construção. Esta etapa pode levar algumas horas, dependendo da capacidade do hardware. Se tudo correr bem, será exibida uma tela como essa:

# make buildworld

--------------------------------------------------------------

>>> World build started on Sun Feb 28 14:52:49 BRT 2010

--------------------------------------------------------------

--------------------------------------------------------------

>>> Rebuilding the temporary build tree

--------------------------------------------------------------

rm -rf /usr/obj/usr/src/tmp

mkdir -p /usr/obj/usr/src/tmp/lib

mkdir -p /usr/obj/usr/src/tmp/usr

mkdir -p /usr/obj/usr/src/tmp/legacy/usr

mtree -deU -f /usr/src/etc/mtree/BSD.usr.dist -p

/usr/obj/usr/src/tmp/legacy/usr >/dev/null

mtree -deU -f /usr/src/etc/mtree/BSD.usr.dist -p

/usr/obj/usr/src/tmp/usr >/dev/null

mtree -deU -f /usr/src/etc/mtree/BSD.include.dist -p

/usr/obj/usr/src/tmp/usr/include >/dev/null

ln -sf /usr/src/sys /usr/obj/usr/src/tmp

--------------------------------------------------------------

>>> stage 1.1: legacy release compatibility shims

--------------------------------------------------------------

100

--------------------------------------------------------------

>>> stage 1.2: bootstrap tools

--------------------------------------------------------------

===> etc/sendmail (all)

rm -f freebsd.cf

m4 -D_CF_DIR_=/usr/src/etc/sendmail/../../contrib/sendmail/cf/

/usr/src/etc/sendmail/../../contrib/sendmail/cf/m4/cf.m4

/usr/src/etc/sendmail/freebsd.mc > freebsd.cf

chmod 444 freebsd.cf

rm -f freebsd.submit.cf

m4 -D_CF_DIR_=/usr/src/etc/sendmail/../../contrib/sendmail/cf/

/usr/src/etc/sendmail/../../contrib/sendmail/cf/m4/cf.m4

/usr/src/etc/sendmail/freebsd.submit.mc > freebsd.submit.cf

chmod 444 freebsd.submit.cf

.

.

.

--------------------------------------------------------------

>>> World build completed on Sun Feb 28 17:02:57 BRT 2010

--------------------------------------------------------------

6.4.3 Compilando e instalando um novo kernel Após uma nova construção do sistema, o mais recomendado a se fazer é compilar um kernel GENERIC para verificarmos se o processo de atualização ocorreu sem problemas. Caso tudo tenha dado certo, é hora de instalar o kernel customizado. Para isso:

#cd /usr/src

#make buildkernel KERNCONF=NOME_DO_KERNEL

#make installkernel KERNCONF=NOME_DO_KERNEL

Com estes passos realizados sem nenhum problema, é hora de prepararmos o ambiente para a instalação do mundo. 6.4.4 Preparação para a instalação do mundo Esta é a primeira etapa que não pode mais ser desfeita, certifique-se de possuir um backup atualizado do sistema, caso contrário, em casos de pane, você terá muita dor de cabeça. Antes de iniciarmos a instalação do mundo própriamente dita, temos que dar uma olhada na ferramenta mergemaster. Apesar do processo de construção do mundo fazer grande parte da atualização, ele não a faz totalmente. É necessário ainda atualizar individualmente o diretório /etc, pois a cada nova versão ou atualização os scripts ou arquivos do diretório /etc podem ser modificados, deletados ou ainda inclusos outros novos. Para auxiliar nesta tarefa, podemos utilizar a ferramenta mergemaster, que é um script em Shell que irá auxiliar na tarefa de encontrar diferenças entre os arquivos armazenados em /etc e os novos em /usr/src/etc.

101

NOTA Mais uma vez alertamos para a importância de se ter um backup completo do diretório /etc

antes de iniciar o uso da ferramenta mergemaster.

Logo após executar os comandos de construção e instalação do kernel, digite o seguinte comando:

#mergemaster -p

*** The directory specified for the temporary root environment,

/var/tmp/temproot, exists. This can be a security risk if untrusted

users have access to the system.

Use 'd' to delete the old /var/tmp/temproot and continue

Use 't' to select a new temporary root directory

Use 'e' to exit mergemaster

Default is to use /var/tmp/temproot as is

How should I deal with this? [Use the existing /var/tmp/temproot]

Nesta tela pressione enter para continuar, você irá se deparar com uma tela assim:

+++ ./etc/group 2009-08-03 05:13:06.000000000 -0300

@@ -1,6 +1,6 @@

-# $FreeBSD: src/etc/group,v 1.35.10.1.2.1 2009/10/25 01:10:29 kensmith

Exp $

+# $FreeBSD: src/etc/group,v 1.35.10.1 2009/08/03 08:13:06 kensmith Exp

$

#

-wheel:*:0:root,marcus

+wheel:*:0:root

daemon:*:1:

kmem:*:2:

sys:*:3:

@@ -29,4 +29,3 @@

www:*:80:

nogroup:*:65533:

nobody:*:65534:

-marcus:*:1001:

Use 'd' to delete the temporary ./etc/group

Use 'i' to install the temporary ./etc/group

Use 'm' to merge the temporary and installed versions

Use 'v' to view the diff results again

Default is to leave the temporary file to deal with by hand

How should I deal with this? [Leave it for later]

A primeira comparação a ser realizada pelo mergemaster é no arquivo /etc/group. É imprescindível prestar atenção nos seguintes detalhes:

Toda linha a ser removida da nova versão é iniciada com um sinal de menos “-“;

Toda linha a ser inserida na nova versão é iniciada com um sinal de mais “+”;

102

Ao se utilizar a opção d, o sistema descarta o novo arquivo e continua com o arquivo antigo (linhas iniciadas com “-“), ao se escolher a opção i, o sistema instala o novo arquivo, substituindo todas as linhas conflitantes pelas linhas com sinal “+”. Preste muita atenção, pois ao se instalar um novo arquivo, seu usuário será deletado. Neste caso as opções mais recomendadas são manter o arquivo original ou utilizar a opção m e explorar o arquivo linha a linha, inserindo as linhas desejadas. Logo após, uma nova tela será exibida para a escolha: *** Displaying differences between ./etc/master.passwd and installed version:

--- /etc/master.passwd 2010-02-27 13:17:02.000000000 -0300

+++ ./etc/master.passwd 2009-08-03 05:13:06.000000000 -0300

@@ -1,6 +1,6 @@

-# $FreeBSD: src/etc/master.passwd,v 1.40.22.1.2.1 2009/10/25 01:10:29

kensmith Exp $

+# $FreeBSD: src/etc/master.passwd,v 1.40.22.1 2009/08/03 08:13:06 kensmith

Exp $

#

-root:$1$vk28cfT8$S5Nn42LODHFfOGKZwAaGK.:0:0::0:0:Charlie &:/root:/bin/csh

+root::0:0::0:0:Charlie &:/root:/bin/csh

toor:*:0:0::0:0:Bourne-again Superuser:/root:

daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin

operator:*:2:5::0:0:System &:/:/usr/sbin/nologin

@@ -21,4 +21,3 @@

pop:*:68:6::0:0:Post Office Owner:/nonexistent:/usr/sbin/nologin

www:*:80:80::0:0:World Wide Web Owner:/nonexistent:/usr/sbin/nologin

nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin

-marcus:$1$VMdPrGYY$MfGH6VOrxaz0qMNIZU/0H1:1001:1001::0:0:User

&:/home/marcus:/bin/sh

Use 'd' to delete the temporary ./etc/master.passwd

Use 'i' to install the temporary ./etc/master.passwd

Use 'm' to merge the temporary and installed versions

Use 'v' to view the diff results again

Default is to leave the temporary file to deal with by hand

How should I deal with this? [Leave it for later]

Novamente, muito cuidado com este arquivo, pois você poderá perder sua conta de usuário bem como a senha da conta de root. Feita esta primeira comparação com o mergemaster, é hora de instalar o mundo.

6.5 Instalação do mundo É recomendável que a instalação do mundo seja feita em modo mono usuário, para isso:

#shutdown now

Com isso o sistema mata todos os processos necessários e para tudo, mantendo-se apenas em modo mono usuário. Depois é necessário montar o sistema de arquivos, para isso

103

#mount -a

O sistema de arquivos é montado conforme o arquivo /etc/fstab Entre no diretório /usr/src e instale o novo mundo

#cd /usr/src

#make installworld

Terminado o processo o sistema está parcialmente instalado. Novamente é hora de a ferramenta mergemaster entrar em ação, dessa vez digite:

#mergemaster -Ui

A opção -U faz com que o mesgemaster atualize automaticamente todos os arquivos de configuração que não foram alterados e a opção i irá abrir uma tela de decisão para cada arquivo de configuração que já foi modificado. Ao final do mesgemaster, basta reiniciar o sistema.

#reboot

Após o sistema reiniciar é hora de realizar a limpeza. Primeiro checamos as

# make check-old

>>> Checking for old files

/usr/share/man/man8/rc.early.8.gz

/usr/share/man/man3/pselect.3.gz

>>> Checking for old libraries

>>> Checking for old directories

To remove old files and directories run 'make delete-old'.

To remove old libraries run 'make delete-old-libs'.

>>> Removing old files (only deletes safe to delete libs)

remove /usr/share/man/man8/rc.early.8.gz? y

remove /usr/share/man/man3/pselect.3.gz? y

>>> Old files removed

>>> Removing old directories

>>> Old directories removed

To remove old libraries run 'make delete-old-libs'.

>>> Removing old libraries

Please be sure no application still uses those libraries, else you

can not start such an application. Consult UPDATING for more

information regarding how to cope with the removal/revision bump

of a specific library.

>>> Old libraries removed

104

105

7. Atualizando a árvore do ports Assim como o FreeBSD, a árvore do ports é continuamente atualizada com novas versões de software. Para realizar a atualização da árvore, o FreeBSD disponibiliza duas ferramentas, a primeira e já conhecida, csup através do arquivo ports-supfile e também a ferramenta portsnap, desenvolvida por Colin Percival e disponível na base do sistema desde sua versão 6.2. A escolha de cada ferramenta fica a cargo de cada administrador, mas a partir do momento que uma delas foi escolhida, apenas esta poderá ser utilizada para realizar as atualizações. Aqui abordaremos a ferramenta portsnap.

7.1 Portsnap O portnsnap possui algumas vantagens em relação ao csup, que deixam a vida dos administradores de sistema muito mais fácil. Algumas dessas vantagens são:

Todas as atualizações são assinadas criptograficamentes aumentando a

segurança;

Não requer nenhuma configuração e utiliza poucos comandos para atualizar toda

a árvore;

Está incluso na base do FreeBSD, não sendo necessária a instalação de

softwares de terceiros;

Utiliza uma menor quantidade de recursos, tanto de rede quanto de disco ao se

comparar com o protocolo CVSup.

7.1.2 Configurando o portsnap Como foi descrito, o portsnap pode ser utilizado sem nenhuma configuração prévia, mas se alguma alteração for necessária, seu arquivo de configuração pode ser localizado em /etc/portsnap.conf. Algumas opções desse arquivo são: SERVERNAME=portsnap.freebsd.org

Esta linha indica ao portsnap de qual servidor ele fará o download das atualizações. O servidor portsnap.freebsd.org é atualmente um conjunto de servidores. Futuramente o projeto FreeBSD poderá adicionar mirrors regionais, assim como para os packages e também para o CVSup. Quando isto acontecer, o servidor regional mais próximo deverá ser adicionado nesta linha. KEYPRINT=9b5feee6d69f170e3dd0a2c8e469ddbd64f13f978f2f3aede40c9863

3216c330

Esta é uma chave criptográfica para o servidor portsnap. O portsnap assina criptograficamente as atualizações para garantir sua autenticidade e integridade. REFUSE arabic chinese french german hebrew hungarian japanese

A variável REFUSE indica ao portsnap que ele não deve atualizar as categorias nela descrita.

106

7.1.3 Utilizando o portsnap A atualização via portsnap, assim como no csup, é incremental, o que significa que não é necessário fazer o download de toda a árvore do ports a cada atualização. Quando o portsnap é utilizado pela primeira vez, é baixado de um servidor portsnap o último snapshot de toda a árvore e depois é extraído em /usr/ports. Este procedimento irá baixar um arquivo de aproximadamente 61MB. Os comandos para sua execução são:

#portsnap fetch

#portsnap extract

A partir da segunda utilização do portsnap, este é seguido de outro parâmetro, indicando que apenas os ports que possuem atualizações deverão ser atualizados. Esta atualização pode ser feita via:

#portsnap fetch update

Também é possível agendar uma atualização, diária, por exemplo, da árvore do ports. Para isso os parâmetros são um pouco diferentes: portsnap cron update. O parâmetro cron irá realizar o update no intervalo de tempo de uma hora, com a esolha do tempo aleatóriamente evitando sobrecargas nos servidores de atualiação. Dessa forma, para exemplificar uma atualização agendada diariamente para as cinco da manhã, uma entrada na crontrab deverá ser feita da seguinte forma: 0 5 * * * /usr/sbin/portsnap cron update

7.2 Atualizando os ports instalados Após a atualização da coleção do ports, todos os ports instalados a partir desse momento estarão atualizados, mas os anteriores a esta atualização, deverão ser atualizados evitando falhas de segurança. A atualização de aplicativos já instalados pode se tornar uma tarefa árdua, uma vez que vários aplicativos são dependentes de outros aplicativos e a atualização de apenas um deles pode fazer com que outros parem de funcionar ou funcionem de forma incorreta. Para evitar problemas como esses, o FreeBSD disponibiliza na árvore do ports, duas ferramentas para auxiliar nesta tarefa, o portupgrade e o portmaster. O portupgrade é a ferramente original do FreeBSD para atualização dos ports. É escrita em Ruby e mantém um banco de dados das informações da árvore do ports. O portmaster é apenas um Shell script que realiza as tarefas mais comuns na atualização dos ports, não utiliza outros softwares ou bancos de dados. Como é bem mais simples, as chances de algo errado acontecer, são menores. NOTA É altamente recomendável que antes de atualizar qualquer port instalado, um backup de seus

arquivos de configuração seja feito.

Para instalar o portmaster:

#cd /usr/ports/ports-mgmt/portmaster

#make install clean

107

Execute o programa com o seguinte parâmetro:

#portmaster -l

Uma lista será exibida com todos os ports instalados no sistema. Esta lista é dividida em quatro sublistas, sendo elas: root ports, trunk ports, branch ports e leaf ports.

Root ports não possuem dependências de nenhum outro software e também

não são dependência de outros softwares. Por exemplo, o próprio portmaster é

um root port. Alguns outros aplicativos, como o sudo, bash e zip são root ports.

Trunk ports não possuem dependências, mas são dependências de outros

softwares. Geralmente são bibliotecas compartilhadas, scripts e linguagens de

programação. Para ilustrar exemplos desta categoria podemos citar a linguagem

Perl.

Branch ports possuem dependências e também são dependências. Podemos

encontrar nesta divisão o apache, o Java e o sistema x.

Leaf ports apenas possuem dependências, mas não são dependências de

nenhum outro software. Aqui podemos encontrar softwares como editores de

texto, navegadores web, clientes de chat entre outros.

Um exemplo de saída do comando portmaster -l

lopez# portmaster -l

===>>> Root ports (No dependencies, not depended on)

===>>> bigreqsproto-1.0.2

===>>> inputproto-1.5.0

===>>> libcheck-0.9.6

===>>> libtool-2.2.6a

===>>> portmaster-2.19

===>>> xcmiscproto-1.1.2

===>>> xf86bigfontproto-1.1.2

===>>> xorg-macros-1.2.1

===>>> 8 root ports

===>>> Trunk ports (No dependencies, are depended on)

===>>> autoconf-wrapper-20071109

===>>> automake-wrapper-20071109

===>>> expat-2.0.1

===>>> jpeg-7

===>>> kbproto-1.0.3

===>>> libiconv-1.13.1

===>>> m4-1.4.13,1

===>>> perl-threaded-5.8.9_3

===>>> pkg-config-0.23_1

===>>> png-1.2.40

===>>> printproto-1.0.4

===>>> python26-2.6.2_3

===>>> xextproto-7.0.5

===>>> 13 trunk ports

===>>> Branch ports (Have dependencies, are depended on)

108

===>>> apache-2.0.63_3

===>>> autoconf-2.62

===>>> freetype2-2.3.9_1

===>>> gettext-0.17_1

===>>> libICE-1.0.4_1,1

===>>> libSM-1.1.0_1,1

===>>> libX11-1.2.1_1,1

===>>> libXau-1.0.4

===>>> libXaw-1.0.5_1,1

===>>> libXdmcp-1.0.2_1

===>>> libXext-1.0.5,1

===>>> libXmu-1.0.4,1

===>>> libXp-1.0.0,1

===>>> libXpm-3.5.7

===>>> libXt-1.0.5_1

===>>> libgcrypt-1.4.4

===>>> libgpg-error-1.7

===>>> libpthread-stubs-0.1

===>>> libxcb-1.4

===>>> libxml2-2.7.5

===>>> p5-gettext-1.05_2

===>>> php5-5.2.11

===>>> php5-ctype-5.2.11

===>>> php5-dom-5.2.11

===>>> php5-filter-5.2.11

===>>> php5-hash-5.2.11

===>>> php5-iconv-5.2.11

===>>> php5-json-5.2.11

===>>> php5-pcre-5.2.11

===>>> php5-pdo-5.2.11

===>>> php5-pdo_sqlite-5.2.11

===>>> php5-posix-5.2.11

===>>> php5-session-5.2.11

===>>> php5-simplexml-5.2.11

===>>> php5-spl-5.2.11

===>>> php5-sqlite-5.2.11

===>>> php5-tokenizer-5.2.11

===>>> php5-xml-5.2.11

===>>> php5-xmlreader-5.2.11

===>>> php5-xmlwriter-5.2.11

===>>> t1lib-5.1.2_1,1

===>>> xcb-proto-1.5

===>>> xproto-7.0.15

===>>> 43 branch ports

===>>> Leaf ports (Have dependencies, not depended on)

===>>> automake-1.10.1

===>>> gmake-3.81_3

===>>> help2man-1.36.4_3

===>>> libxslt-1.1.26

===>>> php5-extensions-1.3

===>>> php5-gd-5.2.11

===>>> php5-gettext-5.2.11

===>>> porteasy-2.8.4

===>>> xtrans-1.2.3

===>>> 9 leaf ports

===>>> 73 total installed ports

109

7.2.1 Identificando softwares desnecessários Muitas vezes instalamos softwares para realização de testes ou apenas para a execução de uma tarefa específica, mas com o passar do tempo este software não é mais útil e fica apenas consumindo espaço em disco ou até mesmo criando brechas na segurança por apresentar vulnerabilidades. O portmaster facilita a busca por estes softwares. Geralmente softwares desse tipo estão localizados nas categorias root ports e leaf ports, mas podem ser encontrados em todas elas. Se encontrar um port desconhecido ou que não se recorde de sua funcionalidade, utilize o comando whereis + nome do port para ver onde ele está instalado e também cheque a descrição do software. Se realmente não for mais necessário, desinstale-o com o comando:

#portmaster -e nome_do_port

O parâmetro -e faz com que o portmaster desinstale o port e todas as suas dependências se e somente se elas não forem dependências de outros ports instalados. 7.2.2 Identificando e atualizando softwares Os ports que possuem atualização podem ser encontrados com o comando

#portmaster -L

===>>> libcheck-0.9.6

===>>> New version available: libcheck-0.9.8

===>>> php5-5.2.11

===>>> New version available: php5-5.2.12

Neste caso para atualizar o php, basta a execução do seguinte comando:

#portmaster php5-5.2.11

O portmaster irá atualizar o PHP5 e todas as suas dependências que necessitarem de atualizações, neste caso, após a execução do comando, a seguinte mensagem será exibida:

The following actions will be taken if you choose to proceed:

Upgrade php5-5.2.11 to php5-5.2.12

Upgrade libxml2-2.7.5 to libxml2-2.7.6_1

Upgrade libiconv-1.13.1 to libiconv-1.13.1_1

Upgrade libtool-2.2.6a to libtool-2.2.6b

Mesmo assim ainda existem chances do processo de atualização falhar. O portmaster durante este processo desinstala a versão antiga do port a ser atualizado e depois instala a versão nova, criando assim uma janela de tempo entre o port ser desinstalado e a nova versão instalada. Para previnir qualquer eventualidade neste processo, pode-se executar o programa com a opção -b que irá manter um backup do port desinstalado em /usr/ports/packages/portmaster-backup/ Após a atualização ser completada com êxito, caso tenha utilizado o comando com a opção -b limpe o diretório de backup para evitar uso desnecessário do disco.

110

Em alguns casos, após a atualização do FreeBSD, alguns softwares podem não funcionar corretamente. Isto ocorre devido à atualização de bibliotecas que eram requeridas pelo software, por exemplo, a atualização da libutil.so.5 para libutil.so.6 pode fazer com que o sudo para de funcionar. O portmaster não consegue encontrar este tipo de problemas, mas pode ajudar a resolver, reinstalando o software. Para isso apenas digite portmaster e o nome do software. Este procedimento fará com que o portmaster construa novamente o software, ligando-o as novas bibliotecas instaladas e removendo as dependências para os arquivos obsoletos. Caso o port a reconstruído esteja na categoria leaf ports, o comando pode ser utilizado acrescido do parâmetro -f que fará com que todas as dependêcias deste software também sejam atualizadas. 7.2.3 Reconstruindo programas dependentes. O portmaster automaticamente atualiza softwares requeridos por um software que está sendo atualizado, mas também pode atualizar todos os softwares dependentes do software em questão. Esta opção de atualização pode ser executada com o comando:

#portmaster -r <nome_do_port>

Exemplificando:

#portmaster -r expat-2.0.1

===>>> The following actions will be taken if you choose to proceed:

Upgrade expat-2.0.1 to expat-2.0.1_1

Re-install apache-2.0.63_3

Re-install php5-5.2.12

Upgrade php5-ctype-5.2.11 to php5-ctype-5.2.12

Upgrade php5-dom-5.2.11 to php5-dom-5.2.12

Upgrade php5-spl-5.2.11 to php5-spl-5.2.12

Upgrade php5-pcre-5.2.11 to php5-pcre-5.2.12

Upgrade php5-simplexml-5.2.11 to php5-simplexml-5.2.12

Re-install php5-extensions-1.3

Upgrade php5-iconv-5.2.11 to php5-iconv-5.2.12

Upgrade php5-pdo-5.2.11 to php5-pdo-5.2.12

Upgrade php5-pdo_sqlite-5.2.11 to php5-pdo_sqlite-5.2.12

Upgrade php5-sqlite-5.2.11 to php5-sqlite-5.2.12

Upgrade php5-json-5.2.11 to php5-json-5.2.12

Upgrade php5-tokenizer-5.2.11 to php5-tokenizer-5.2.12

Upgrade php5-filter-5.2.11 to php5-filter-5.2.12

Upgrade php5-hash-5.2.11 to php5-hash-5.2.12

Upgrade php5-posix-5.2.11 to php5-posix-5.2.12

Upgrade php5-xml-5.2.11 to php5-xml-5.2.12

Upgrade php5-xmlreader-5.2.11 to php5-xmlreader-5.2.12

Upgrade php5-xmlwriter-5.2.11 to php5-xmlwriter-5.2.12

Upgrade php5-session-5.2.11 to php5-session-5.2.12

Upgrade php5-gd-5.2.11 to php5-gd-5.2.12

Upgrade jpeg-7 to jpeg-8

Upgrade png-1.2.40 to png-1.2.42

Upgrade freetype2-2.3.9_1 to freetype2-2.3.11

Upgrade php5-gettext-5.2.11 to php5-gettext-5.2.12

===>>> Proceed? y/n [y]

111

Ao escolher a opção y, nem todos os ports serão atualizados, alguns, como o apache e o PHP serão apenas reconstruídos, criando assim novos vínculos com as bibliotecas atualizadas. 7.2.4 Ignorando Ports Ocasionalmente, você pode não querer atualizar um port que faça parte de uma recursão, como no método de atualiazação anterior. Um bom exemplo disso é o software OpenOffice.org, uma atualização completa dele e de todas as suas dependências pode levar horas. Para casos como este, basta criar um arquivo +IGNOREME no diretório de instalação do port:

#cd /var/db/pkg/nome_do_port

#touch +IGNOREME

7.2.5 Reduzindo o tamanho da árvore do ports. Ao longo do tempo, após várias instalações, a árvore do ports fica cada vez maior, uma vez que para cada port instalado, todo o seu código fonte é baixado na pasta distfiles. É recomendável que periódicamente seja feita uma limpeza na árvore, reduzindo o uso de disco. O portmaster possui uma função para executar a limpeza da árvore. Ele busca todas as distfiles desnecessárias e pergunta se você deseja mesmo remover cada uma delas. Para isso digite:

#portmaster -clean-distfiles

Se houver uma quantidade grande de distfiles, este processo se tornará cansativo e pode ser resolvido apagando todas as distfiles sem confirmação, com:

#portmaster -clean-distfiles-all

Outro problema que acontece é quando uma instalação é feita sem o comando clean no final, isso acaba deixando a pasta work dentro da árvore do ports, o que causa um aumento no consumo de espaço em disco. Para resolver este problema a própria árvore do ports possui sua solução:

#cd /usr/ports

#make clean NOCLEANDEPENDS=Yes

Este comando fará recursão em toda a árvore do ports e realiza um make clean para cada port com o diretório work. Com estas ferramentas você será capaz de deixar seu sistema sempre atualizado e de forma segura.

112

113

8. Apache, PHP e MySQL 8.1 Introdução O Apache é um esforço da Apache Software Foundation para desenvolver e manter o servidor web livre para sistemas operacionais modernos. O Apache é o servidor web mais utilizado no mundo desde Abril de 1996. Uma implementação comum do apache é sua instalação junto do PHP e MySQL para interpretação de páginas dinâmicas. Este capítulo cobrirá aspectos básicos da instalação e configuração do Apache, PHP e MySQL no sistema FreeBSD

8.2 Instalação do apache Devido aos beneficios e facilidades que o ports nos oferece seguiremos a instalação do apache através dele. Uma abordagem simples e direta mostrando a facilidade e rapidez que conseguimos construir um servidor web no FreeBSD.

Primeiramente devemos ir ao diretório /usr/ports/www/ e escolher qual a versão do

apache que desejamos que seja instalada.

paguera# cd /usr/ports/www/apache

apache-contrib/ apache-mode.el/ apache13-modperl/

apache13-modssl/ apache13/ apache22-peruser-mpm/

apache-forrest/ apache13+ipv6/ apache13-modssl+ipv6/

apache13-ssl/ apache20/ apache22/

Agora vocês devem estar se perguntando, qual a versão eu devo usar? Bom, a reposta para esta pergunta pode ser usada para outros tipos de instalações as quais temos dúvidas quanto às versões. O melhor caminho para ter a certeza de que se está fazendo a coisa certa é consultar a documentação do software do site do desenvolvedor. Acessando o site oficial do apache (http://httpd.apache.org/) podemos encontrar as informações referentes às versões mais atualizadas e diferenças que cada uma tem entre si, melhorias, novas implementações e etc. Podemos dizer que esta é uma boa pratica e que deveria ser utilizada sempre. Evidência retirada do site.

114

Como podemos afirmar que a melhor versão 2.2.14 indicada pelo site é a mesma que

está no diretório /usr/ports/www/apache22 ? Uma maneira simples e que vale para outros pacotes também é checar o arquivo Makefile.

# grep "^PORTVERSION=" /usr/ports/www/apache22/Makefile

PORTVERSION= 2.2.14

Agora que já sabemos a versão correta a ser instalada, seguiremos com a instalação.

Vamos utilizar o comando make config para verificar quais módulos estão ou não habilitados.

# make config

115

Utilizaremos as configurações padrões para a nossa instalação. Vale lembrar que habilitar tudo não é sinonimo de boa configuração. O mesmo vale para desabilitar tudo. Tenha certeza do que você está adicionando e removendo. Uma vez configurado vamos prosseguir selecionando OK. Em seguida iremos iniciar a compilação/instalação do apache através do comando:

# make install clean

Logo após a execução dos comandos o sistema fará o download do apache e suas dependências para a compilação e instalação. O que vemos a seguir são as mensagens exibidas durante o processo de instalação.

To enable a module category: WITH_<CATEGORY>_MODULES

To disable a module category: WITHOUT_<CATEGORY>_MODULES

Per default categories are:

AUTH AUTHN AUTHZ DAV CACHE MISC

Categories available:

AUTH AUTHN AUTHZ CACHE DAV EXPERIMENTAL LDAP MISC PROXY SSL SUEXEC

THREADS

To see all available knobs, type make show-options

To see all modules in different categories, type make show-categories

You can check your modules configuration by using make show-modules

===> Vulnerability check disabled, database not found

===> Found saved configuration for apache-2.2.14_5

=> MD5 Checksum OK for apache22/httpd-2.2.14.tar.bz2.

=> SHA256 Checksum OK for apache22/httpd-2.2.14.tar.bz2.

===> apache-2.2.14_5 depends on file: /usr/local/bin/perl5.8.9 - found

===> Patching for apache-2.2.14_5

===> apache-2.2.14_5 depends on file: /usr/local/bin/perl5.8.9 - found

===> Applying extra patch /usr/ports/www/apache22/files/opt-patch-

modules:proxy:mod_proxy_connect.c

===> Applying FreeBSD patches for apache-2.2.14_5

===> apache-2.2.14_5 depends on file: /usr/local/bin/perl5.8.9 - found

===> apache-2.2.14_5 depends on file: /usr/local/bin/autoconf-2.62 -

not found

===> Verifying install for /usr/local/bin/autoconf-2.62 in

/usr/ports/devel/autoconf262

===> Vulnerability check disabled, database not found

=> autoconf-2.62.tar.bz2 doesn't seem to exist in /usr/ports/distfiles/.

=> Attempting to fetch from http://ftp.gnu.org/gnu/autoconf/.

===> Extracting for autoconf-2.62

=> MD5 Checksum OK for autoconf-2.62.tar.bz2.

=> SHA256 Checksum OK for autoconf-2.62.tar.bz2.

===> autoconf-2.62 depends on file: /usr/local/bin/perl5.8.9 - found

===> Patching for autoconf-2.62

===> autoconf-2.62 depends on file: /usr/local/bin/perl5.8.9 - found

===> Applying FreeBSD patches for autoconf-2.62

===> autoconf-2.62 depends on executable: gm4 - not found

===> Verifying install for gm4 in /usr/ports/devel/m4

===> Vulnerability check disabled, database not found

===> Found saved configuration for m4-1.4.13,1

=> m4-1.4.13.tar.bz2 doesn't seem to exist in /usr/ports/distfiles/.

116

=> Attempting to fetch from http://ftp.gnu.org/gnu/m4/.

===> Extracting for m4-1.4.13,1

=> MD5 Checksum OK for m4-1.4.13.tar.bz2.

=> SHA256 Checksum OK for m4-1.4.13.tar.bz2.

===> Patching for m4-1.4.13,1

===> Applying FreeBSD patches for m4-1.4.13,1

===> Configuring for m4-1.4.13,1

checking for a BSD-compatible install... /usr/bin/install -c -o root -g

wheel

checking whether build environment is sane... yes

checking for a thread-safe mkdir -p... build-aux/install-sh -c -d

checking for gawk... no

checking for mawk... no

checking for nawk... nawk

checking whether make sets $(MAKE)... yes

checking for gcc... cc

checking for C compiler default output file name... a.out

checking whether the C compiler works... yes

checking whether we are cross compiling... no

checking for suffix of executables...

checking for suffix of object files... o

checking whether we are using the GNU C compiler... yes

checking whether cc accepts -g... yes

...

...

Installing configuration files

Installing HTML documents

Installing error documents

Installing icons

Installing CGIs

Installing header files

Installing build system files

Installing man pages and online manual

To run apache www server from startup, add apache22_enable="YES"

in your /etc/rc.conf. Extra options can be found in startup script.

Your hostname must be resolvable using at least 1 mechanism in

/etc/nsswitch typically DNS or /etc/hosts or apache might

have issues starting depending on the modules you are using.

===> Installing rc.d startup script(s)

===> Compressing manual pages for apache-2.2.14_5

===> Running ldconfig

/sbin/ldconfig -m /usr/local/lib

===> Registering installation for apache-2.2.14_5

===> SECURITY REPORT:

This port has installed the following files which may act as

network servers and may therefore pose a remote security risk to the

system.

/usr/local/lib/libapr-1.so.3

This port has installed the following startup scripts which may

cause these network services to be started at boot time.

/usr/local/etc/rc.d/apache22

/usr/local/etc/rc.d/htcacheclean

If there are vulnerabilities in these programs there may be a

security risk to the system. FreeBSD makes no guarantee about the

security of ports included in the Ports Collection. Please type 'make

deinstall' to deinstall the port if this is a concern.

117

For more information, and contact details about the security

status of this software, see the following webpage:

http://httpd.apache.org/

Pronto! Você acaba de terminar a instalação do apache, agora só nos resta dedicarmos mais alguns minutos para fazer as configurações prévias e então iniciar o serviço. Porém, esse processo de instalação pode exigir acompanhamento periódico devido ao apache instalar várias dependências. Algumas vezes deixamos a instalação do apache em andamento enquanto trabalhamos com outras atividades em diferentes terminais e, decorrido algum tempo, descobrimos que a instalação do apache está parada aguardando a confirmação de alguma opção de instalação. Podemos sintetizar esse momento através do roteiro abaixo. Você está trabalhando em outras coisas quando: Alt + TAB – Instalação parada esperando intervenção, você responde ao ports e a instalação prossegue; Alt + TAB – Você volta ao trabalho; Alt + TAB – Instalação parada esperando intervenção, você responde ao ports e a instalação prossegue; Alt + TAB – Você volta ao trabalho Alt + TAB – E advinha? Instalação parada esperando intervenção novamente. Felizmente há uma boa notícia! Podemos agrupar toda a intervenção de configuração em um momento para que possamos responder todos os questionamentos do ports, um após o outro, e deixar a etapa downloads, compilação e instalação sem interrupções. Essa é uma dica muito útil que muitos usuários desconhecem. Primeiramente vamos checar quais são todas as opções disponíveis com o comando

make showconfig-recursive que mostrará configurações para o pacote e todas as suas dependências.

# make showconfig-recursive

===> The following configuration options are available for apache-

2.2.14_5 and dependencies

===> The following configuration options are available for apache-

2.2.14_5:

APR_FROM_PORTS=off "Use devel/apr as APR (preferred)"

THREADS=off "Enable threads support in APR"

MYSQL=off "Enable MySQL support for apr-dbd"

PGSQL=off "Enable PostgreSQL support for apr-dbd"

SQLITE=off "Enable SQLite support for apr-dbd"

IPV6=on "Enable IPv6 support"

118

BDB=off "Enable BerkeleyDB dbm"

AUTH_BASIC=on "Enable mod_auth_basic"

AUTH_DIGEST=on "Enable mod_auth_digest"

AUTHN_FILE=on "Enable mod_authn_file"

AUTHN_DBD=off "Enable mod_authn_dbd"

AUTHN_DBM=on "Enable mod_authn_dbm"

AUTHN_ANON=on "Enable mod_authn_anon"

AUTHN_DEFAULT=on "Enable mod_authn_default"

AUTHN_ALIAS=on "Enable mod_authn_alias"

AUTHZ_HOST=on "Enable mod_authz_host"

AUTHZ_GROUPFILE=on "Enable mod_authz_groupfile"

AUTHZ_USER=on "Enable mod_authz_user"

AUTHZ_DBM=on "Enable mod_authz_dbm"

AUTHZ_OWNER=on "Enable mod_authz_owner"

AUTHZ_DEFAULT=on "Enable mod_authz_default"

CACHE=on "Enable mod_cache"

DISK_CACHE=on "Enable mod_disk_cache"

FILE_CACHE=on "Enable mod_file_cache"

MEM_CACHE=off "Enable mod_mem_cache"

DAV=on "Enable mod_dav"

DAV_FS=on "Enable mod_dav_fs"

BUCKETEER=off "Enable mod_bucketeer"

CASE_FILTER=off "Enable mod_case_filter"

CASE_FILTER_IN=off "Enable mod_case_filter_in"

EXT_FILTER=off "Enable mod_ext_filter"

LOG_FORENSIC=off "Enable mod_log_forensic"

OPTIONAL_HOOK_EXPORT=off "Enable mod_optional_hook_export"

OPTIONAL_HOOK_IMPORT=off "Enable mod_optional_hook_import"

OPTIONAL_FN_IMPORT=off "Enable mod_optional_fn_import"

OPTIONAL_FN_EXPORT=off "Enable mod_optional_fn_export"

LDAP=off "Enable mod_ldap"

AUTHNZ_LDAP=off "Enable mod_authnz_ldap"

ACTIONS=on "Enable mod_actions"

ALIAS=on "Enable mod_alias"

ASIS=on "Enable mod_asis"

AUTOINDEX=on "Enable mod_autoindex"

CERN_META=on "Enable mod_cern_meta"

CGI=on "Enable mod_cgi"

CHARSET_LITE=on "Enable mod_charset_lite"

DBD=off "Enable mod_dbd"

DEFLATE=on "Enable mod_deflate"

DIR=on "Enable mod_dir"

DUMPIO=on "Enable mod_dumpio"

ENV=on "Enable mod_env"

EXPIRES=on "Enable mod_expires"

HEADERS=on "Enable mod_headers"

IMAGEMAP=on "Enable mod_imagemap"

INCLUDE=on "Enable mod_include"

INFO=on "Enable mod_info"

LOG_CONFIG=on "Enable mod_log_config"

LOGIO=on "Enable mod_logio"

MIME=on "Enable mod_mime"

MIME_MAGIC=on "Enable mod_mime_magic"

NEGOTIATION=on "Enable mod_negotiation"

REWRITE=on "Enable mod_rewrite"

SETENVIF=on "Enable mod_setenvif"

SPELING=on "Enable mod_speling"

STATUS=on "Enable mod_status"

UNIQUE_ID=on "Enable mod_unique_id"

119

USERDIR=on "Enable mod_userdir"

USERTRACK=on "Enable mod_usertrack"

VHOST_ALIAS=on "Enable mod_vhost_alias"

FILTER=on "Enable mod_filter"

VERSION=on "Enable mod_version"

PROXY=off "Enable mod_proxy"

PROXY_CONNECT=off "Enable mod_proxy_connect"

PATCH_PROXY_CONNECT=on "Patch proxy_connect SSL support"

PROXY_FTP=off "Enable mod_proxy_ftp"

PROXY_HTTP=off "Enable mod_proxy_http"

PROXY_AJP=off "Enable mod_proxy_ajp"

PROXY_BALANCER=off "Enable mod_proxy_balancer"

PROXY_SCGI=off "Enable mod_proxy_scgi"

SSL=on "Enable mod_ssl"

SUEXEC=off "Enable mod_suexec"

CGID=off "Enable mod_cgid"

===> Use 'make config' to modify these settings

===> The following configuration options are available for perl-5.10.1:

DEBUGGING=off "Build with debugging support"

GDBM=off "Build GDBM_File extension"

PERL_MALLOC=off "Use Perl malloc"

PERL_64BITINT=on "Use 64 bit integers (on i386)"

THREADS=off "Build threaded perl"

MULTIPLICITY=off "Use multiplicity"

SUIDPERL=off "Build set-user-id suidperl binary"

SITECUSTOMIZE=off "Run-time customization of @INC"

USE_PERL=on "Rewrite links in /usr/bin"

===> Use 'make config' to modify these settings

===> The following configuration options are available for libiconv-

1.13.1_1:

EXTRA_ENCODINGS=on "Include extra character sets"

EXTRA_PATCHES=off "Apply patches to fix CP932 add EUCJP-MS"

===> Use 'make config' to modify these settings

===> The following configuration options are available for m4-1.4.13,1:

LIBSIGSEGV=off "Use libsigsegv for better diagnostics"

===> Use 'make config' to modify these settings

Acima temos cada um dos valores padrão para os menus que o sistema exibirá na instalação do apache e suas dependências. Através do comando seguinte podemos responder a todos esses questionamentos de uma só vez.

# make config-recursive

Algumas janelas de configuração serão exibidas:

120

121

Assim que o sistema terminar todos os questionamentos, podemos iniciar o processo

de instalação através do comando make install clean, que desta vez irá fazer o download dos fontes, a compilação e a instalação sem pedir qualquer intervenção ao usuário. Se algo der errado, cair a conexão ou se você responder algo errado, o que muitas vezes não é tão incomum de acontecer ainda temos as seguintes combinações possíveis: Retomar a configuração

# make config-recursive

Pular as perguntas das quais você ja respondeu

# make config-conditional

Se mesmo assim você estiver incerto se está correto ou não e deseja repetir o processo todo novamente, a combinação abaixo remove todas as configurações feitas anteriormente e volta as respostas padrão para o estado original

# make rmconfig-recursive

===> Removing user-specified options for apache-2.2.14_5 and

dependencies

===> Removing user-configured options for apache-2.2.14_5

===> Removing user-configured options for perl-5.10.1

===> No user-specified options configured for autoconf-2.62

===> No user-specified options configured for libtool-2.2.6b

===> No user-specified options configured for expat-2.0.1_1

===> No user-specified options configured for pcre-8.00

===> No user-specified options configured for libiconv-1.13.1_1

122

===> No user-specified options configured for m4-1.4.13,1

===> No user-specified options configured for help2man-1.37.1

===> No user-specified options configured for gmake-3.81_3

===> No user-specified options configured for autoconf-wrapper-20071109

===> No user-specified options configured for p5-gettext-1.05_2

===> No user-specified options configured for gettext-0.17_1

Remoção feita, agora podemos iniciar novamente a configuração com make config-

recursive e responder as perguntas novamente. Se você já esta ciente das opções e deseja instalar as configurações padrões pré definidas para o pacote faça o seguinte:

# make install BATCH=yes

A instalação será feita sem te perguntar absolutamente nada.

8.3 Configuração do Apache Agora vamos agora iniciar o apache. Como o apache é um programa terceiro os

arquivos de inicialização foram colocados abaixo do diretório /usr/local/etc/rc.d/ Vamos checar qual é o atual status do nosso novo serviço.

# /usr/local/etc/rc.d/apache22 status

Cannot 'status' apache22. Set apache22_enable to YES in /etc/rc.conf or

use 'onestatus' instead of 'status'.

Obtivemos a mensagem acima porque ainda não adicionamos a seguinte linha no /etc/rc.conf apache22_enable=”YES”

Se mesmo assim não quisermos configura a linha agora podemos tanto obter status quanto iniciar o serviço com:

# /usr/local/etc/rc.d/apache22 onestatus

apache22 is not running.

# /usr/local/etc/rc.d/apache22 onestart

Performing sanity check on apache22 configuration:

Syntax OK

Starting apache22.

# /usr/local/etc/rc.d/apache22 onestatus

apache22 is running as pid 99239.

Podemos ver que o apache subiu e checar se o serviço está escutando na porta 80

# sockstat -46 -p 80

USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN

ADDRESS

123

www httpd 99244 3 tcp4 6 *:80 *:*

www httpd 99243 3 tcp4 6 *:80 *:*

www httpd 99242 3 tcp4 6 *:80 *:*

www httpd 99241 3 tcp4 6 *:80 *:*

www httpd 99240 3 tcp4 6 *:80 *:*

root httpd 99239 3 tcp4 6 *:80 *:*

Vamos então tentar conectar ao nosso servidor www por um web browser de sua preferencia, conectado ao servidor por um web browser e rodando seguinte comando para checar as conexões podemos perceber que uma conexão foi estabelecida pelo cliente 201.95.181.116 na porta 3970

# sockstat -46 -p 80

USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN

ADDRESS

www httpd 99372 3 tcp4 6 *:80 *:*

www httpd 99244 3 tcp4 6 *:80 *:*

www httpd 99243 3 tcp4 6 *:80 *:*

www httpd 99242 3 tcp4 6 *:80 *:*

www httpd 99241 3 tcp4 6 *:80 *:*

www httpd 99240 3 tcp4 6 *:80 *:*

www httpd 99240 13 tcp4 143.106.51.5:80 201.95.181.116:3970

root httpd 99239 3 tcp4 6 *:80 *:*

Espere alguns minutos, atualize a página novamente no web browser e faça o mesmo teste novamente. Você vai perceber que o host 201.95.181.116 conectou-se novamente, porém em uma porta diferente, desta vez utilizou a 3978.

# sockstat -46 -p 80

USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN

ADDRESS

www httpd 99372 3 tcp4 6 *:80 *:*

www httpd 99244 3 tcp4 6 *:80 *:*

www httpd 99243 3 tcp4 6 *:80 *:*

www httpd 99242 3 tcp4 6 *:80 *:*

www httpd 99241 3 tcp4 6 *:80 *:*

www httpd 99240 3 tcp4 6 *:80 *:*

www httpd 99240 13 tcp4 143.106.51.5:80 201.95.181.116:3978

root httpd 99239 3 tcp4 6 *:80 *:*

paguera#

Vamos agora refinar as configurações do /usr/local/etc/apache22/httpd.conf . Para quem gosta de ir direto ao ponto, segue um exemplo do arquivo padrão

httpd.conf sem os comentários: paguera# egrep -v "^#| *#" /usr/local/etc/apache22/httpd.conf |

sed '/^$/d'

ServerRoot "/usr/local"

Listen 80

LoadModule authn_file_module libexec/apache22/mod_authn_file.so

LoadModule authn_dbm_module libexec/apache22/mod_authn_dbm.so

124

LoadModule authn_anon_module libexec/apache22/mod_authn_anon.so

LoadModule authn_default_module

libexec/apache22/mod_authn_default.so

LoadModule authn_alias_module libexec/apache22/mod_authn_alias.so

LoadModule authz_host_module libexec/apache22/mod_authz_host.so

LoadModule authz_groupfile_module

libexec/apache22/mod_authz_groupfile.so

LoadModule authz_user_module libexec/apache22/mod_authz_user.so

LoadModule authz_dbm_module libexec/apache22/mod_authz_dbm.so

LoadModule authz_owner_module libexec/apache22/mod_authz_owner.so

LoadModule authz_default_module

libexec/apache22/mod_authz_default.so

LoadModule auth_basic_module libexec/apache22/mod_auth_basic.so

LoadModule auth_digest_module libexec/apache22/mod_auth_digest.so

LoadModule file_cache_module libexec/apache22/mod_file_cache.so

LoadModule cache_module libexec/apache22/mod_cache.so

LoadModule disk_cache_module libexec/apache22/mod_disk_cache.so

LoadModule dumpio_module libexec/apache22/mod_dumpio.so

LoadModule include_module libexec/apache22/mod_include.so

LoadModule filter_module libexec/apache22/mod_filter.so

LoadModule charset_lite_module

libexec/apache22/mod_charset_lite.so

LoadModule deflate_module libexec/apache22/mod_deflate.so

LoadModule log_config_module libexec/apache22/mod_log_config.so

LoadModule logio_module libexec/apache22/mod_logio.so

LoadModule env_module libexec/apache22/mod_env.so

LoadModule mime_magic_module libexec/apache22/mod_mime_magic.so

LoadModule cern_meta_module libexec/apache22/mod_cern_meta.so

LoadModule expires_module libexec/apache22/mod_expires.so

LoadModule headers_module libexec/apache22/mod_headers.so

LoadModule usertrack_module libexec/apache22/mod_usertrack.so

LoadModule unique_id_module libexec/apache22/mod_unique_id.so

LoadModule setenvif_module libexec/apache22/mod_setenvif.so

LoadModule version_module libexec/apache22/mod_version.so

LoadModule ssl_module libexec/apache22/mod_ssl.so

LoadModule mime_module libexec/apache22/mod_mime.so

LoadModule dav_module libexec/apache22/mod_dav.so

LoadModule status_module libexec/apache22/mod_status.so

LoadModule autoindex_module libexec/apache22/mod_autoindex.so

LoadModule asis_module libexec/apache22/mod_asis.so

LoadModule info_module libexec/apache22/mod_info.so

LoadModule cgi_module libexec/apache22/mod_cgi.so

LoadModule dav_fs_module libexec/apache22/mod_dav_fs.so

LoadModule vhost_alias_module libexec/apache22/mod_vhost_alias.so

LoadModule negotiation_module libexec/apache22/mod_negotiation.so

LoadModule dir_module libexec/apache22/mod_dir.so

LoadModule imagemap_module libexec/apache22/mod_imagemap.so

LoadModule actions_module libexec/apache22/mod_actions.so

LoadModule speling_module libexec/apache22/mod_speling.so

125

LoadModule userdir_module libexec/apache22/mod_userdir.so

LoadModule alias_module libexec/apache22/mod_alias.so

LoadModule rewrite_module libexec/apache22/mod_rewrite.so

<IfModule !mpm_netware_module>

<IfModule !mpm_winnt_module>

User www

Group www

</IfModule>

</IfModule>

ServerAdmin [email protected]

DocumentRoot "/usr/local/www/apache22/data"

<Directory />

AllowOverride None

Order deny,allow

Deny from all

</Directory>

<Directory "/usr/local/www/apache22/data">

Options Indexes FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

<IfModule dir_module>

DirectoryIndex index.html

</IfModule>

<FilesMatch "^\.ht">

Order allow,deny

Deny from all

Satisfy All

</FilesMatch>

ErrorLog "/var/log/httpd-error.log"

LogLevel warn

<IfModule log_config_module>

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"

\"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common

<IfModule logio_module>

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"

\"%{User-Agent}i\" %I %O" combinedio

</IfModule>

CustomLog "/var/log/httpd-access.log" combined

</IfModule>

<IfModule alias_module>

ScriptAlias /cgi-bin/ "/usr/local/www/apache22/cgi-bin/"

</IfModule>

<IfModule cgid_module>

</IfModule>

<Directory "/usr/local/www/apache22/cgi-bin">

AllowOverride None

126

Options None

Order allow,deny

Allow from all

</Directory>

DefaultType text/plain

<IfModule mime_module>

TypesConfig etc/apache22/mime.types

AddType application/x-compress .Z

AddType application/x-gzip .gz .tgz

</IfModule>

<IfModule ssl_module>

SSLRandomSeed startup builtin

SSLRandomSeed connect builtin

</IfModule>

Include etc/apache22/Includes/*.conf

paguera#

Acima estão as configurações padrões, vamos então alterar algumas e entender outras.

Lembrando que o httpd.conf como muitos outros arquivos de configuração há vários comentários. É altamente recomendável dispensar algum tempo lendo-os. Não queremos que o serviço www fique disponível em todos os endereços IPs de nosso servidor como exemplo abaixo:

# sockstat -46 -p 80

USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN

ADDRESS

www httpd 99497 3 tcp4 6 *:80 *:*

www httpd 99496 3 tcp4 6 *:80 *:*

www httpd 99495 3 tcp4 6 *:80 *:*

www httpd 99494 3 tcp4 6 *:80 *:*

www httpd 99493 3 tcp4 6 *:80 *:*

root httpd 99492 3 tcp4 6 *:80 *:*

O * indica que todos os IPs configurados no servidor irão ouvir na porta 80 Para isso vamos identificar qual o IP desejamos deixar dedicado

# netstat -nI bge0

Name Mtu Network Address Ipkts Ierrs Opkts

Oerrs Coll

bge0 1500 <Link#1> 00:1e:c9:28:13:4c 2480898 0 134151

0 0

bge0 1500 143.106.51.0/ 143.106.51.5 212940 - 131872

- -

paguera#

Agora editaremos a seguinte linha no httpd.conf

Antiga linha: Listen 80

127

Vamos substituir por: Listen 143.106.51.5:80 Isso vai fazer com que somente o endereço IP 143.106.51.5 escute na porta 80. Vamos então iniciar o apache novamente e verificar se as configurações funcionaram corretamente.

# /usr/local/etc/rc.d/apache22 start

Cannot 'start' apache22. Set apache22_enable to YES in /etc/rc.conf or

use 'onestart' instead of 'start'.

Vamos logo adicionar a linha solicitada no arquivo /etc/rc.conf para evitar maiores transtornos.

# grep "^apache22_enable=" /etc/rc.conf

apache22_enable="YES"

Pronto, agora sim.

# /usr/local/etc/rc.d/apache22 start

Performing sanity check on apache22 configuration:

Syntax OK

Starting apache22.

Apache em execução, vamos verificar se nossas configurações funcionaram adequadamente:

# sockstat -46 -p 80

USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN

ADDRESS

www httpd 6196 3 tcp4 143.106.51.5:80 *:*

www httpd 6195 3 tcp4 143.106.51.5:80 *:*

www httpd 6194 3 tcp4 143.106.51.5:80 *:*

www httpd 6193 3 tcp4 143.106.51.5:80 *:*

www httpd 6192 3 tcp4 143.106.51.5:80 *:*

root httpd 6191 3 tcp4 143.106.51.5:80 *:*

Tudo rodando como configurado. Reparem que agora o * foi substituído pelo IP que especificamos. Agora vamos configurar a diretiva ServerAdmin para que um email seja informado em caso de algum erro ocorrer. ServerAdmin [email protected]

Utilizada para aqueles que têm um dominio registrado, não é obrigatório colocar seu dominio nesta opção, porém isso evita alguns erros que podem acontecer na inicialização do apache. ServerName www.meudominio.com.br:80

128

DocumentRoot é onde o apache irá buscar pelos arquivos, poderíamos colocar no /web por exemplo, porém como este nosso servidor www é somente para fins didáticos vamos deixar o valor padrão. DocumentRoot "/usr/local/www/apache22/data"

Uma das opções para garantir a segurança do nosso servidor www é a sessão

<Directory >, nela podemos especificar quais os tipos de acesso para cada diretório de paginas a ser visitado pelo cliente.

O Directory / abaixo se refere ao ServerRoot que definimos no inicio do arquivo de configuração, podemos ver que ninguém tem acesso direto a ele: <Directory />

AllowOverride None

Order deny,allow

Deny from all

</Directory>

O seguinte é o DocumentRoot, este já é mais acessível permitindo que todos possam ve-lo <Directory "/usr/local/www/apache22/data">

Options Indexes FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

Para as opções como FollowSymLinks e demais, consulte a pagina oficial http://httpd.apache.org/docs/2.2/mod/core.html#options Algumas vezes nossas paginas não são abertas no browser, aparecendo somente uma lista de arquivos que há no diretório. Isso acontece porque o apache está configurado a buscar uma lista de páginas se não for informado o nome da página desejada. A

diretiva que configura esse comportamento é a DirectoryIndex. DirectoryIndex index.html

Neste caso somente paginas index.html serão precessadas automaticamente. Um ponto importante que foi incorporado na versão 2.2 do apache é a divisão dos

vhosts e de outros arquivos do arquivo principal (httpd.conf), isso ajuda bastante na compreensão e organização do conteúdo.

#cat /usr/local/etc/apache22/extra/httpd-vhosts.conf

#

# Virtual Hosts

129

#

# If you want to maintain multiple domains/hostnames on your

# machine you can setup VirtualHost containers for them. Most

configurations

# use only name-based virtual hosts so the server doesn't need to

worry about

# IP addresses. This is indicated by the asterisks in the

directives below.

#

# Please see the documentation at

# <URL:http://httpd.apache.org/docs/2.2/vhosts/>

# for further details before you try to setup virtual hosts.

#

# You may use the command line option '-S' to verify your virtual

host

# configuration.

#

# Use name-based virtual hosting.

#

NameVirtualHost *:80

#

# VirtualHost example:

# Almost any Apache directive may go into a VirtualHost

container.

# The first VirtualHost section is used for all requests that do

not

# match a ServerName or ServerAlias in any <VirtualHost> block.

#

<VirtualHost *:80>

ServerAdmin [email protected]

DocumentRoot "/usr/local/docs/dummy-host.example.com"

ServerName dummy-host.example.com

ServerAlias www.dummy-host.example.com

ErrorLog "/var/log/dummy-host.example.com-error_log"

CustomLog "/var/log/dummy-host.example.com-access_log" common

</VirtualHost>

<VirtualHost *:80>

ServerAdmin [email protected]

DocumentRoot "/usr/local/docs/dummy-host2.example.com"

ServerName dummy-host2.example.com

ErrorLog "/var/log/dummy-host2.example.com-error_log"

CustomLog "/var/log/dummy-host2.example.com-access_log"

common

</VirtualHost>

Para os que ainda não sabem o que é vhost, lá vai:

130

vhost é uma abreviação carinhosa para VirtualHost, utilizado para que mais de um domínio possa funcionar em um servidor. Sem ele teriamos praticamente que ter um servidor apache para cada domínio, o que atualmente é inviável devido à grande quantidade de webpages.

A configuração do vhost quanto dos outros parametros do httpd.conf e afins é bem intuitiva como exemplos e comentários, para maiores detalhes e configurações mais refinadas consulte http://httpd.apache.org/docs/vhosts/ . Vamos abrir uma página e ver como esta o nosso servidor web: Se tudo estiver correto podemos ver a pratica:

Sugestivo não ?! Vamos então criar uma simples pagina em php e ver o que acontece:

# pwd

/usr/local/www/apache22/data

# ls

index.html index.php

# mv index.html index.htm

# cat index.php

<?php

php_info();

?>

’ Devido a nossa alteração da pagina index.html para index.htm o apache não foi capaz

de processá-la já que na diretiva DirectoryIndex não havia index.php nem index.htm. Vamos corrigir isso:

131

# grep index.php /usr/local/etc/apache22/httpd.conf

DirectoryIndex index.php index.htm

Ja que alteramos um arquivo de configuração precisamos da releitura do arquivo para que as configurações efetuadas tenham efeito.

# apachectl graceful

Ou

# /usr/local/etc/rc.d/apache22 graceful

Checando nossa pagina agora:

O que aconteceu ?!

8.4 Instalação PHP Como não temos o PHP instalado, a pagina foi interpretada como texto normal. Daremos inicio a instalação do php:

# cd /usr/ports/lang/php5

# make config

132

Devemos marcar a opção APACHE, em seguida OK

# make install clean

===> Vulnerability check disabled, database not found

===> Found saved configuration for php5-5.2.12

=> php-5.2.12.tar.bz2 doesn't seem to exist in /usr/ports/distfiles/.

=> Attempting to fetch from http://dk.php.net/distributions/.

php-5.2.12.tar.bz2 0% of 8862 kB 33 kBps

.

.

.

***************************************************************

Make sure index.php is part of your DirectoryIndex.

You should add the following to your Apache configuration file:

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

***************************************************************

===> Compressing manual pages for php5-5.2.12

===> Registering installation for php5-5.2.12

===> SECURITY REPORT:

This port has installed the following files which may act as

network servers and may therefore pose a remote security risk to the

system.

/usr/local/libexec/apache22/libphp5.so

/usr/local/bin/php

/usr/local/bin/php-cgi

If there are vulnerabilities in these programs there may be a

security risk to the system. FreeBSD makes no guarantee about the

security of ports included in the Ports Collection. Please type 'make

deinstall' to deinstall the port if this is a concern.

133

For more information, and contact details about the security

status of this software, see the following webpage:

http://www.php.net/

===> Cleaning for pkg-config-0.23_1

===> Cleaning for libxml2-2.7.6_1

===> Cleaning for php5-5.2.12

8.5 Integrando Apache e PHP Conforme a mensagem de pós-instalação, vamos adicionar as linha requisitadas pelo

php em nosso arquivo httpd.conf. Vale lembrar que podemos ver essa mensagem a qualquer momento através do comando:

# pkg_info –Dx php5

# grep x-httpd-php /usr/local/etc/apache22/httpd.conf

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

Linhas adicionadas, vamos agora ver se tudo esta funcionando como esperado.

# /usr/local/etc/rc.d/apache22 restart

Performing sanity check on apache22 configuration:

Syntax OK

Stopping apache22.

Waiting for PIDS: 6229.

Performing sanity check on apache22 configuration:

Syntax OK

Starting apache22.

Ops... Fatal error, mas fique feliz porque sabemos que a instalação do PHP foi com sucesso, ja que a pagina foi processada. Vamos então ver o que a de errado na linha 2 da nossa pagina.

# cat /usr/local/www/apache22/data/index.php

<?php

php_info();

?>

Isso mesmo, a função php_info não existe, o correto é phpinfo. Feita as devidas alterações vamos ver qual o comportamento agora.

134

Agora sim ! Analise esta pagina gerada pelo phinfo pois há varias opções e valores do apache e php.

8.6 Instalação do MySQL

135

Bom pessoal já temos um servidor web rodando com apache, simples assim. Para adicionar suporte a MySQL podemos fazer simplesmente:

# cd /usr/ports/databases/php5-mysql

paguera# make config

===> No options to configure

paguera# make install clean

===> Vulnerability check disabled, database not found

===> Extracting for php5-mysql-5.2.12

=> MD5 Checksum OK for php-5.2.12.tar.bz2.

=> SHA256 Checksum OK for php-5.2.12.tar.bz2.

===> Patching for php5-mysql-5.2.12

===> php5-mysql-5.2.12 depends on file: /usr/local/bin/phpize - found

===> php5-mysql-5.2.12 depends on file: /usr/local/bin/autoconf-2.62 -

found

===> php5-mysql-5.2.12 depends on shared library: mysqlclient.15 - not

found

===> Verifying install for mysqlclient.15 in

/usr/ports/databases/mysql50-client

===> Vulnerability check disabled, database not found

=> mysql-5.0.90.tar.gz doesn't seem to exist in /usr/ports/distfiles/.

=> Attempting to fetch from

ftp://ftp.fi.muni.cz/pub/mysql/Downloads/MySQL-5.0/.

.

.

.

----------------------------------------------------------------------

Build complete.

Don't forget to run 'make test'.

===> Installing for php5-mysql-5.2.12

===> php5-mysql-5.2.12 depends on file:

/usr/local/include/php/main/php.h - found

===> Generating temporary packing list

===> Checking if databases/php5-mysql already installed

===> Registering installation for php5-mysql-5.2.12

************************************************************************

****

The following line has been added to your

/usr/local/etc/php/extensions.ini

configuration file to automatically load the installed extension:

extension=mysql.so

************************************************************************

****

===> Cleaning for mysql-client-5.0.90

===> Cleaning for php5-mysql-5.2.12

Pronto, após esta instalação o PHP ja está apto a interpretar comandos do MySQL. Dificil ?!, Acabamos de criar um servidor www com suporte a PHP e MySQL, praticamente uma das combinações mais utilizados nos dias de hoje.

136

137

9. DNS Bind 9.1 Introdução O DNS (Domain Name Server) é um serviço de mapeamento de nomes em endereços IP (e vice-versa) que dá vida à internet como conhecemos. Aplicações utilizam o endereço IP nas suas comunicações. Devido à difícil memorização dos endereços IP, foi criado o serviço de tradução DNS.

No inicio da internet, sistemas operacionais mantinham um arquivo texto (/etc/hosts) contendo uma lista de nomes e endereços IP de todos os hosts da internet . Com o crescimento da internet esse método tornou-se inviável. Para solucionar o problema criou-se um banco de dados hierárquico e distribuído que contem informações de mapeamento de endereços IP. Assim surgia um dos serviços mais importantes da internet, o servidor DNS. Vejamos o diagrama abaixo para entendermos melhor a hierarquia dos servidores dns.

Retirado de http://bio3d.colorado.edu/tor/sadocs/dns/dns-1.png Veremos uma implementação do servidor de DNS no sistema FreeBSD. O objetivo deste capítulo é apresentar alguns aspectos do servidor DNS e principalmente detalhes da sua implementação no sistema FreeBSD.

9.2 O BIND – Berkeley Internet Name Domain O BIND é a implementação do servidor DNS mais utilizada no mundo. Muitas vezes o BIND é referenciado pelo nome de seu daemon, o named. Uma característica interessante da implementação do BIND no FreeBSD é que dispensa a instalação do servidor, pois o serviço é parte integrante do sistema. Sendo assim, para criarmos nosso servidor BIND, basta configurarmos os arquivos necessários. O FreeBSD 8.0 possui a versão 9.6.1 do BIND conforme vemos abaixo.

# named –v

BIND 9.6.1-P1

138

O diretório que mantém as informações do named é /etc/namedb. Veremos a seguir os principais arquivos.

9.2.1 named.root Contém a lista de servidores de mais alto nível na internet (root servers). Caso o servidor DNS local receba uma consulta que não está armazenada em seu cache, ele pesquisa os rootservers para obter a resposta desejada para consulta DNS. Normalmente esse arquivo não necessita nenhuma configuração.

9.2.2 named.conf O named.conf é o principal arquivo de configuração do servidor named. Dentro dele podemos definir diversas diretivas que configuram o comportamento do servidor. Esse arquivo aceita comentários semelhante aos utilizados da linguagem C. Podemos

utilizar duas barras (//) para comentar de um determinado ponto até o fim daquela

linha ou utilizar o comentário de múltiplas linhas delimitadas por /* e */.

9.3 Arquivos de configuração de zona O servidor dns permite o agrupamento lógico de hosts e endereços IP´s em zonas. Cada zona possui seu arquivo de configuração no formato texto que define o mapeamento nome em IP (ou vice-versa). Boa parte da administração de um servidor dns consiste na edição desses arquivos, inserindo ou removendo informações sobre mapeamento. Veremos adiante exemplos desse arquivo.

9.4 Resource Records (RRs) O named disponibiliza as informações em forma de Resource Records (RRs). Vejamos alguns exemplos de RRs mais utilizados:

SOA (Start Of Authority) – Identifica o inicio de uma zona ao qual o servidor

especificado tem autoridade sobre esse domínio. É composto de parâmetros

como: endereço do administrador do domínio, número serial, tempo de

atualização (refresh), tempo de consulta ao master (retry), tempo de expiração

(expire) e TTL mínimo.

A (Address) – Mapeamento de nomes em endereços IPv4

PTR (Pointer) – Mapeamento reverso, ou seja, endereços IP em nomes

CNAME (Canonical Name) – Nomes canônicos que são utilizados como

apelidos. Referenciam um registro tipo A.

NS (Name Servers) – Especifica os servidores que possuem autoridade sobre o

domínio especificado.

MX (Mail Exchange) – Especifica os servidores de email para o domínio

139

9.5 Configurando o named Agora que já conhecemos alguns detalhes do named, chegou a hora de configurá-lo para podermos entender melhor seu funcionamento. Utilizarei como exemplo de configuração o domínio fictício aulabsd.com.br com endereços IP 192.168.0.0/24. Baseando-se nesse exemplo, segue o arquivo

named.conf com as principais diretivas. // Clausula options contem diversas diretivas que configuram o

comportamento

// do servidor

options {

// Define o diretório de trabalho do named.

directory "/etc/namedb";

// Define um arquivo texto que contem o pid do named

pid-file "/var/run/named/pid";

// Define uma string que será exibida quando for consultada

a versão

// do bind. Seu uso e aconselhado para ocultar a versão e

assim

// dificultar um possível ataque

version "[SECURE]";

// Especifica em quais endereços o named atendera suas

requisições

// Você pode especificar algum endereço caso a maquina tenha

mais de

// um ou comentar a diretiva para que ele receba requisições

// em qualquer endereço disponível

listen-on { 127.0.0.1; 192.168.0.10; };

// Especifica que todas as requisições serão encaminhadas ao

servidor

// definido pelo endereço IP especificado. Note que a

diretiva abaixo

// não será interpretada pelo named por estar comentada

// (entre /* e */)

/*

forwarders {

192.168.0.50;

};

*/

// Os caracteres “};” abaixo indicam que a clausula options esta

terminada

140

};

// Abertura da clausula zone que fornece informações sobre a zona

referenciada

// A zona "." significa toda a internet, ou seja, os root servers

// A diretiva type hint define o tipo da zona, essa é a única

zona definida

// com esse tipo, todas as outras são do tipo master ou slave

// A diretiva file indica o arquivo que contem as informações da

zona, ou

// nesse caso os endereços dos servidores root servers na

internet

// Observe que podemos especificar as diretivas type e file em

uma linha ou

// utilizando uma linha para cada diretiva.

zone "." { type hint; file "named.root"; };

// A zona localhost e a responsável por mapear o host localhost

para o IP

// 127.0.0.1. A diretiva type indica que esse servidor é o

master da zona

// e a diretiva file indica o arquivo que contem as informações

da zona

// Por padrão, o FreeBSD mantém os arquivos localhost-forward.db

(mapeamento

// direto) e localhost-reverse.db (mapeamento reverso) para o

localhost

zone "localhost" { type master; file "master/localhost-

forward.db"; };

// Declaração do mapeamento reverso do localhost. Declaracoes de

zona reversa

// sempre terminam com o nome .in-addr.arpa

zone "127.in-addr.arpa" { type master; file "master/localhost-

reverse.db"; };

// Abaixo temos uma zona definida como aulabsd.com.br

// A diretiva type indica que esse servidor é o master da zona

(Adiante

// veremos configuração de zona tipo slave).

// A diretiva file indica qual o arquivo que contem todas as

informações

// sobre a zona definida na clausula zone.

zone "aulabsd.com.br" {

type master;

file "master/aulabsd.com.br.db";

};

141

// A zona declarada acima é responsável pelo mapeamento direto do

nome

// xxx.aulabsd.com.br em um endereço IP 192.168.0.XX. Lembre-se

que

// alguns serviços necessitam do mapeamento reverso, ou seja, do

IP

// 192.168.0.XX -> xxx.aulabsd.com.br. Para que isso seja

possível precisamos

// da declaração da zona in-addr.arpa conforme abaixo (notem que

a declaração

// a esquerda do nome "in-addr.arpa" é justamente os 3 primeiros

octetos

// da rede 192.168.0.0 porém em ordem invertida)

zone "0.168.192.in-addr.arpa" {

type master;

file "master/192.168.0.db";

};

Agora que temos o arquivo named.conf configurado, precisamos configurar as informações da zona direta aulabsd.com.br e reversa 0.168.192.in-addr.arpa nos

arquivos aulabsd.com.br.bd e 192.168.0.db respectivamente. É importante salientar que não existe uma regra definida para nomear os arquivos de zona direta e reversa. Normalmente cada administrador de rede segue o seu padrão de nomeação. Analisaremos abaixo o conteúdo do arquivo de mapeamento direto da zona aulabsd.com.br.

// Time to live para as informações da zona

$TTL 14400

// O registro SOA indica que o servidor possui autoridade sob a

zona

// aulabsd.com.br.

@ IN SOA ns1 hostmaster (

// O serial da zona normalmente é formado pelo concatenação

ultima

// data de alteração da zona (AAAAMMDDSS)seguido de um numero que

// indica a alteração feita no dia (SS)

2010012500 ; Serial

// Refresh - Intervalo de tempo em segundos em que o servidor

// secundário consultará o primário para verificar atualizações.

Isso

// é realizado comparando os seriais entre os servidores.

// Se houver atualizações, o secundário irá sincronizar com o

// primário através da transferência da zona.

86400 ; Refresh

// Retry – Caso o servidor primário esteja indisponível, o

servidor

// secundário utilizará o intervalo de retry para verificação da

142

// conexão com o primário.

7200 ; Retry

// Expire – Caso o servidor primário não possa ser contactado no

// período de tempo estabelecido pelo expire, o servidor

secundário

// deixa de responder sobre informações dessa zona

3600000 ; Expire

// TTL para respostas negativas desta zona

14400 ; min ttl

)

// As 2 linhas abaixo definem os servidores para esta zona

@ IN NS ns1

@ IN NS ns2

// O registro MX (Mail Exchange) define o servidor de e-mail para

esta

// zona. O número 10 representa a prioridade do servidor.

Números

// menores estabelecem maior prioridade

@ IN MX 10 mx1

// Os registros tipo A definem uma mapeamento direto (nome -> IP)

ns1 IN A 192.168.0.1

ns2 IN A 192.168.0.2

mx1 IN A 192.168.0.10

server1 IN A 192.168.0.12

// O registro CNAME funciona como um apelido, ou seja, www é um

// apelido para server1 que possui o IP 192.168.0.12

www IN CNAME server1

ftp IN CNAME server1

Agora que já vimos a configuração da zona aulabsd.com.br, veremos a seguir as informações do mapeamento reverso dessa zona. As informações da zona reversa são semelhantes às encontradas na zona direta. Basicamente o que difere são os registros (RRs) tipo PTR (POINTER).

$TTL 14400

@ IN SOA ns1 hostmaster (

2010012502 ; Serial

86400 ; Refresh

7200 ; Retry

3600000 ; Expire

14400 ; min ttl

)

@ IN NS ns1.aulabsd.com.br.

@ IN NS ns2.aulabsd.com.br.

// Abaixo temos os registros PTR que são responsáveis pelo

mapeamento

143

// reverso (IP -> host) da zona. Notem que os nomes dos hosts

devem

// ser definidos no formato FQDN (Fully Qualifield Domain Name,

ou

// seja, a declaração é formada pelo nome + domínio com o “.”

como

// terminação.

1 IN PTR ns1.aulabsd.com.br.

2 IN PTR ns2.aulabsd.com.br.

10 IN PTR mx1.aulabsd.com.br.

12 IN PTR server1.aulabsd.com.br.

Neste ponto temos o serviço configurado e pronto para funcionar, porém ao iniciá-lo recebemos a mensagem abaixo:

# /etc/rc.d/named start

Cannot 'start' named. Set named_enable to YES in /etc/rc.conf or use

'onestart' instead of 'start'.

Isso ocorreu porque não existe o registro na inicialização do named no rc.conf. Para

configurar a inicialização correto do named, basta acrescentar a diretiva

named_enable=”YES” no arquivo /etc/rc.conf

# /etc/rc.d/named start

Starting named.

Vamos analisar o log messages para verificarmos se o named foi realmente

iniciado com sucesso.

# cat /var/log/messages | grep named

Feb 25 22:34:41 vbox named[1007]: starting BIND 9.6.1-P1 -t /var/named -

u bind

Feb 25 22:34:41 vbox named[1007]: built with '--prefix=/usr' '--

infodir=/usr/share/info' '--mandir=/usr/share/man' '--enable-threads' '-

-disable-ipv6' '--enable-getifaddrs' '--disable-linux-caps' '--with-

openssl=/usr' '--with-randomdev=/dev/random' '--without-idn' '--without-

libxml2'

Feb 25 22:34:41 vbox named[1007]: command channel listening on

127.0.0.1#953

Feb 25 22:34:41 vbox named[1007]: command channel listening on ::1#953

Feb 25 22:34:41 vbox named[1007]: running

9.6 Configurando DNS server secundário (SLAVE) São necessários no mínimo dois servidores DNS para o funcionamento de um domínio. Um deles atua como primário (master), onde são feitas as alterações necessárias para a administração do domínio. Essas alterações são transferidas para o segundo servidor, que atua como secundário (slave). O funcionamento do primário e do secundário proporciona alta disponibilidade através da redundância do serviço. Caso um dos servidores pare de funcionar, o outro continua respondendo consultas DNS e mantendo seu domínio operacional. Podemos configurar um servidor para atuar como secundário de um domínio qualquer

através de diretivas definidas no named.conf. Para exemplificar melhor essa

144

configuração, suponhamos que nosso servidor é secundário do domínio aulabsd2.com.br (zona direta e reversa) que utiliza a classe de IP 192.168.10.0/24 e que possui o servidor primário com o IP 192.168.10.10. Para configurarmos nosso servidor para ser o secundário devemos incluir as linhas abaixo no named.conf:

zone "aulabsd2.com.br" {

// A diretiva type indica que este servidor atua como slave e

deve sincronizar

// as informações desta zona com os servidores indicados na

diretiva masters

type slave;

file "slave/aulabsd2.com.br.db";

masters { 192.168.10.10; };

};

zone "10.168.192.in-addr.arpa" {

type master;

file "slave/192.168.10.db";

masters { 192.168.10.10; };

};

Para que a transferência de zona entre os servidores dns primários e secundários funcione adequadamente, é necessária a inclusão de diretiva no servidor primário que autorize essa transferência. Abaixo temos a configuração recomendada para o servidor primário da zona aulabsd2.com.br.

options {

....

// A diretiva abaixo configura o named globalmente para não

// permitir transferências de zonas

allow-transfer {"none";};

};

...

zone "aulabsd2.com.br" in{

....

// A diretiva abaixo permite o servidor 192.168.0.1 transferir

// as informações apenas desta zona.

allow-transfer (192.168.0.1;);

};

...

zone "10.168.192.in-addr.arpa" in{

....

allow-transfer (192.168.0.1;);

};

145

9.7 Testando nosso servidor dns O FreeBSD disponibiliza poderosas ferramentas para nos auxiliar a executar pesquisas (queries) em nosso servidor DNS para fins de testes. Utilizaremos o comando host para sabermos se nosso servidor está resolvendo o nome ns1.aulabsd.com.br.

# host ns1.aulabsd.com.br

ns1.aulabsd.com.br has address 192.168.0.1

# host 192.168.0.1

1.0.168.192.in-addr.arpa domain name pointer ns1.aulabsd.com.br.

Como vimos acima, o comando host foi utilizado para fazer uma consulta simples ao nosso servidor DNS e podemos constatar que nosso servidor respondeu as consultas adequadamente.

Outro aplicativo muito útil é o dig, que executa consultas DNS com um nível maior de detalhamento e opções de consulta.

# dig www.aulabsd.com.br

; <<>> DiG 9.6.1-P1 <<>> www.aulabsd.com.br

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44202

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:

;www.aulabsd.com.br. IN A

;; ANSWER SECTION:

www.aulabsd.com.br. 14400 IN CNAME server1.aulabsd.com.br.

server1.aulabsd.com.br. 14400 IN A 192.168.0.12

;; AUTHORITY SECTION:

aulabsd.com.br. 14400 IN NS ns2.aulabsd.com.br.

aulabsd.com.br. 14400 IN NS ns1.aulabsd.com.br.

;; ADDITIONAL SECTION:

ns1.aulabsd.com.br. 14400 IN A 192.168.0.1

ns2.aulabsd.com.br. 14400 IN A 192.168.0.2

;; Query time: 2 msec

;; SERVER: 127.0.0.1#53(127.0.0.1)

;; WHEN: Fri Feb 26 00:22:26 2010

;; MSG SIZE rcvd: 142

Podemos utilizar o dig para executar consultas reversas adicionando o parâmetro -x

# dig -x 192.168.0.12

;; global options: +cmd

146

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59803

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:

;12.0.168.192.in-addr.arpa. IN PTR

;; ANSWER SECTION:

12.0.168.192.in-addr.arpa. 14400 IN PTR server1.aulabsd.com.br.

;; AUTHORITY SECTION:

0.168.192.in-addr.arpa. 14400 IN NS ns1.aulabsd.com.br.

;; ADDITIONAL SECTION:

ns1.aulabsd.com.br. 14400 IN A 192.168.0.1

;; Query time: 1 msec

;; SERVER: 127.0.0.1#53(127.0.0.1)

;; WHEN: Fri Feb 26 00:22:29 2010

;; MSG SIZE rcvd: 113

Abaixo temos um exemplo de pesquisa de registros MX (Mail Exchange) em nosso domínio de exemplo.

# dig mx aulabsd.com.br

; <<>> DiG 9.6.1-P1 <<>> mx aulabsd.com.br

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9144

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; QUESTION SECTION:

;aulabsd.com.br. IN MX

;; ANSWER SECTION:

aulabsd.com.br. 14400 IN MX 10 mx1.aulabsd.com.br.

;; AUTHORITY SECTION:

aulabsd.com.br. 14400 IN NS ns1.aulabsd.com.br.

aulabsd.com.br. 14400 IN NS ns2.aulabsd.com.br.

;; ADDITIONAL SECTION:

mx1.aulabsd.com.br. 14400 IN A 192.168.0.10

ns1.aulabsd.com.br. 14400 IN A 192.168.0.1

ns2.aulabsd.com.br. 14400 IN A 192.168.0.2

;; Query time: 2 msec

;; SERVER: 127.0.0.1#53(127.0.0.1)

;; WHEN: Fri Feb 26 01:53:13 2010

;; MSG SIZE rcvd: 136

Nos exemplos demonstrados acima o dig utilize o servidor DNS definido em

/etc/resolv.conf para executar suas consultas. Podemos especificar qual servidor será consultado conforme abaixo:

# dig @ns1.unicamp.br www.unicamp.br

147

; <<>> DiG 9.6.1-P1 <<>> @ns1.unicamp.br www.unicamp.br

; (1 server found)

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14410

;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 2

;; WARNING: recursion requested but not available

;; QUESTION SECTION:

;www.unicamp.br. IN A

;; ANSWER SECTION:

www.unicamp.br. 3600 IN CNAME lvs0.unicamp.br.

lvs0.unicamp.br. 3600 IN A 143.106.10.30

;; AUTHORITY SECTION:

unicamp.br. 86400 IN NS ns1.ansp.br.

unicamp.br. 86400 IN NS ns1.unicamp.br.

unicamp.br. 86400 IN NS ns3.unicamp.br.

;; ADDITIONAL SECTION:

ns1.unicamp.br. 3600 IN A 143.106.2.2

ns3.unicamp.br. 86400 IN A 143.106.2.133

;; Query time: 20 msec

;; SERVER: 143.106.2.2#53(143.106.2.2)

;; WHEN: Fri Feb 26 02:34:40 2010

;; MSG SIZE rcvd: 158

Abaixo temos uma utilização do dig muito interessante. Através da opção trace ligada

(+trace) podemos ver todo o caminho que a consulta percorreu desde o root server até o servidor do domínio em questão.

Através das informações exibidas pelo dig podemos ter uma boa idéia de como é organizada a hierarquia dos servidores de DNS na internet.

dig +trace www.uol.com.br

; <<>> DiG 9.6.1-P1 <<>> +trace www.uol.com.br

;; global options: +cmd

. 509746 IN NS b.root-servers.net.

. 509746 IN NS j.root-servers.net.

. 509746 IN NS c.root-servers.net.

. 509746 IN NS h.root-servers.net.

. 509746 IN NS i.root-servers.net.

. 509746 IN NS g.root-servers.net.

. 509746 IN NS d.root-servers.net.

. 509746 IN NS a.root-servers.net.

. 509746 IN NS f.root-servers.net.

. 509746 IN NS k.root-servers.net.

. 509746 IN NS m.root-servers.net.

. 509746 IN NS e.root-servers.net.

. 509746 IN NS l.root-servers.net.

;; Received 500 bytes from 127.0.0.1#53(127.0.0.1) in 2 ms

br. 172800 IN NS B.DNS.br.

br. 172800 IN NS E.DNS.br.

148

br. 172800 IN NS F.DNS.br.

br. 172800 IN NS C.DNS.br.

br. 172800 IN NS A.DNS.br.

br. 172800 IN NS D.DNS.br.

;; Received 284 bytes from 192.33.4.12#53(c.root-servers.net) in 189 ms

uol.com.br. 86400 IN NS borges.uol.com.br.

uol.com.br. 86400 IN NS charles.uol.com.br.

uol.com.br. 86400 IN NS eliot.uol.com.br.

;; Received 143 bytes from 200.219.154.10#53(D.DNS.br) in 245 ms

www.uol.com.br. 300 IN A 200.221.2.45

www.uol.com.br. 300 IN A 200.98.249.120

uol.com.br. 3600 IN NS eliot.uol.com.br.

uol.com.br. 3600 IN NS borges.uol.com.br.

uol.com.br. 3600 IN NS charles.uol.com.br.

;; Received 175 bytes from 200.221.11.98#53(eliot.uol.com.br) in 21 ms

Podemos utilizar o comando dig para testarmos se a transferência de zona entre os

servidores primários e secundários ocorrem com sucesso. Se o comando for executado no servidor secundário da zona aulabsd2.com.br e não retornar todos os registros da zona significa que algo está errado.

# dig bsd2.com.br @192.168.10.10 axfr