Escolar Documentos
Profissional Documentos
Cultura Documentos
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
3
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
4
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
5
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
6
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.
Retirado de http://penguin.dcs.bbk.ac.uk/academic/unix/linux/slides/dennis-ken2.jpg
7
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
8
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.
9
documentação disponíveis na internet (FAQ, Handbook, listas de discussão
especializadas, entre outros).
10
2. Instalação do FreeBSD
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)
11
2.2 Iniciando a instalação
Loading /boot/defaults/loader.conf
/boot/kernel/kernel text=0x64daa0 data=0xa4e80+0xa9e40
syms=[0x4+0x6cac0+0x4+0x88e9d]
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)
13
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
14
Em seguida, podemos escolheremos o mapa correspondente ao teclado ABNT2
selecionando a opção “Brazil ISO (accent)”.
15
2.3 O utilitário sysinstall
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.
17
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.
18
Caso a instalação tenha detectado mais de um disco rígido, o sistema vai pedir para
selecionar o disco a ser particionado.
19
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 Movem o cursor pela tabela de partições
direcionais
Cria um único slice ocupando todo o disco. Caso exista outras partições
o Fdisk irá sobrepor as partições existentes.
A
Esta opção é muito utilizada quando estamos instalando o sistema em
servidores
D Exclui a partição selecionada
Altera o tipo de partição selecionada. O tipo de cada partição é definido
T
por um número. A partição do tipo BSD é definida pelo número 165.
Define as configurações da geometria do disco. É utilizada quando o
G
kernel não detecta corretamente essas configurações.
Alterna a unidade de medida do tamanho do slice entre ST (Setores),
Z
KB (Kbytes), MB (Megabytes),GB (Gigabytes)
U Desfaz todas as ações efetuadas no disco
Cria um slice no disco. É preciso informar o tipo de partição e o
C
tamanho
S Define a partição selecionada como inicializavel
Q Sai do Fdisk e grava a tabela de partições
Entra no modo expert. Este modo possibilita a manipulação das
| (pipe) partições por meio de comandos digitados diretamente no prompt da
aplicação.
20
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
21
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
Z Pesquisar
R Pesquisar
22
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.
24
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.
25
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.
26
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.
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
27
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.
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.
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
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.
29
Definiremos a seguir a senha para o administrador do sistema – root.
30
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.
Welcome to FreeBSD!
31
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.
32
# 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
# # be paranoid
# alias cp='cp -ip'
# alias mv='mv -i'
# alias rm='rm -i'
33
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:
34
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
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.
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 root:wheel
-rw-r--r-- 1 root wheel 59 Jan 13 20:11 arq1.txt
/etc/mail
Arquivos de configuração para os agentes de transferência de
correio, como sendmail
36
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).
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
/usr/local/ 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.
37
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.
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.
38
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
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.
39
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
40
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.
41
# 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.
New Password:
$ passwd
Changing local password for afpu1
Old Password:
New Password:
Retype New Password:
Para entendermos melhor como é feito o bloqueio, consultaremos como ficou o registro
do usuário afpu no arquivo /etc/master.passwd.
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
# vipw
43
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"
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)
44
ntpd is running as pid 627.
# /etc/rc.d/ntpd status
ntpd is not running.
# /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
Figura retirada de
http://www.rwc.uc.edu/thomas/Intro_Unix_Text/Images/Unix_file_system.png
45
É 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.
46
/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)
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
47
3.12.3 O comando umount
Exemplos de utilização:
Desmontar todas as partições tipo NTFS:
# mount –at ntfs
48
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
49
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
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.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.
52
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
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
53
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
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.
…
É 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.
55
56
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
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
57
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.
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:
58
#mount /cdrom
#cd /cdrom/8.0-RELEASE/ports
#./install.sh
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.
60
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.
63
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
64
4.3 Usando packages
#pkg_add -r gnuls
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
65
ftp2.br.freebsd.org
ftp3.br.freebsd.org
ftp4.br.freebsd.org
ftp5.br.freebsd.org
ftp6.br.freebsd.org
ftp7.br.freebsd.org
Com isso o pkg_add irá realizar os downloads a partir de um servidor mais próximo.
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.
WWW: http://www.rootkit.nl/projects/lynis.html
Author: Michael Boelen
66
-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.
Package Size:
13493 (1K-blocks)
Package Size:
2256 (1K-blocks)
Package Size:
2450 (1K-blocks)
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.
67
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.
#make install
68
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;
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
70
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
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.
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.
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.
72
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.
73
74
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
75
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
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.
76
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).
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.
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.
77
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
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
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.
Para isso o FreeBSD fornece algumas ferramentas, como o dmesg, sysctl, uname e
pciconf.
78
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.
79
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
#
# 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
80
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 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.
Estas opções controlam como o FreeBSD irá realizar seu escalonamento interno e qual
será a forma de tratamento das threads.
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.
81
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
O parâmetro acima é suficiente para ativar o suporte ao uso do IPFW. Mas para seu
bom funcionamento é necessário adicionar mais algumas linhas:
82
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
options DUMMYNET
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.
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
83
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
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
# Bus support.
device acpi
device eisa
device pci
# Floppy drives
device fdc
# 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
# 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)
85
device ses # SCSI Environmental Services (and SAF-
TE)
# 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
# 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
# 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
87
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'')
# 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
# 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
89
# 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 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
90
Após, copie o arquivo GENERIC para o nome do seu servidor e faça as alterações que
forem necessárias
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
--------------------------------------------------------------
>>> 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
.
.
.
.
91
--------------------------------------------------------------
>>> 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 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.
92
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.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.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.
93
6.2 Métodos de atualizaçã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.
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.
94
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
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.
96
*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=.
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
97
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:
#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.
#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
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:
98
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
# 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
--------------------------------------------------------------
99
--------------------------------------------------------------
>>> stage 1.2: bootstrap tools
--------------------------------------------------------------
100
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.
#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.
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:
101
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.
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.
#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
102
#mount -a
#cd /usr/src
#make installworld
#mergemaster -Ui
#reboot
# 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'.
103
104
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.
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.
105
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
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:
NOTA É altamente recomendável que antes de atualizar qualquer port instalado, um backup de seus
arquivos de configuração seja feito.
106
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.
107
===>>> 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
108
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
109
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.
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
110
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.
#portmaster -clean-distfiles
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.
111
112
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
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/
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.
113
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.
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
114
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:
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.
115
=> 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.
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
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.
# 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"
117
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"
118
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
119
120
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
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
121
===> 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:
# /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'.
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
122
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#
123
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
124
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 you@example.com
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
125
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 *:*
126
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.
# /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.
# /usr/local/etc/rc.d/apache22 start
Performing sanity check on apache22 configuration:
Syntax OK
Starting apache22.
# 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 webmaster@meudominio.com.br
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
127
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.
<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>
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
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
128
#
# 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 webmaster@dummy-host.example.com
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 webmaster@dummy-host2.example.com
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>
Vamos abrir uma página e ver como esta o nosso servidor web:
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.
# apachectl graceful
Ou
# /usr/local/etc/rc.d/apache22 graceful
O que aconteceu ?!
# cd /usr/ports/lang/php5
# make config
131
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
.
.
.
***************************************************************
***************************************************************
===> 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
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.
# 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.
133
Agora sim !
Analise esta pagina gerada pelo phinfo pois há varias opções e valores do apache e
php.
# 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
************************************************************************
****
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.
135
136
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.
137
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 */.
138
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";
139
};
$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
142
// 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
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; };
};
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;);
};
144
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
;; 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
;; 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
;; 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
146
; <<>> 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
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
147
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
148