Friday, July 20, 2007

Olá pessoal...

Estive pesquisando nos ultimos dias sobre dicas de compilação do Kernel do FreeBSD e notei que ainda possui muito pouco para não falar de apenas uma unica referência sobre o assunto na internet em pt-BR. Bom decidi editar um arquivo pdf sobre a correta configuração e compilação do kernel do Freebsd para Série 6.x , mais com resalvas para as proximas. assim que possivel verificarei um lugar para que possa ser divulgado. espero me esteder muito alem do assunto que até então esta centrado nas arquiteturas i386 e abranger AMD64, EM64T, SPARC, e demais arquiteturas, além de serviços especificos.

Colocarei uma breve de como o pdf será editado.

De principio colocarei referências para configuração de Hardwares em geral .

A segunda parte terá um referência não completa mais abrangiva relacionado a sistemas de arquivos.

a Terceira será dedicada a Firewall e recursos de redes, ( Espero conseguir adiquiri algum material bom sobre Firewall para o FreeBSD baseado tanto no IPFW como no PF e incluir além de referência sobre o NETGRAPH).

A Quarta parte terá o Alvo a considerações, espero pela ajuda de Vocês afinal, são muitas possibilidades e problemas encontrado em compilações assim como uma breve nos arquivos que são referênciados tambem na compilação do kernel , como o make.conf, o device.hints e outros.

Se alguem dispor a me ajudar deixo desde já meus agradecimentos.

Para entrar em contato por favor o email é : paulonormand@gmail.com.

Obs: Continuarei a colocar prévias do que estará sendo escrito aqui.

A todos Obrigado. e até mais.

Saturday, July 14, 2007

Dicas de Compilação do Kernel do FreeBSD

Dicas de Compilação do Kernel FreeBSD para Séries 6, em alguns casos aplicaveis em outras Séries.

Esse artigo é o primeiro de não sei quantos, devido ao extenço assunto. para duvidas, reclamações, ou sujestões, por favor entrar em contato com Paulo Normand. e-mail paulonormand@gmail.com em breve divulgo um pdf reunindo todos os post aqui colocados.

Essa pequena contribuição visa a considerar vários aspectos no ato de compilação do kernel do FreeBSD nas séries mais recentes, com âmbito de discussão focado mais na edição do arquivo de configuração do kernel para sistemas Intel x86 sendo o mesmo encontrado primeira no diretório “/usr/src/sys/i386/conf/” com o nome de GENERIC, aconselhado por muitas pessoas, para não vim a editar esse arquivo diretamente e sim copia-lo para um diretório abaixo da arvoré de compilação do sistema “/usr/src/”, e copiá-lo após termino da edição para o diretório de configuração, mantendo-se assim um arquivo de backup, para caso o mesmo arquivo seja apagado na atualização do sistema via CTM ou CVSUP. O mesmo arquivo será referênciado no comando de construção do kernel atravéz da variavél “KERNCONF”.

Quando ao nome para não causar confusão quando se mantém varias máquinas com sistema FreeBSD passase a nomea-lo com o nome da estação ao qual ele foi designado. Sendo assim mantém-se o GENERIC intacto e seu sistema passa a ter um nome próprio posteriormente podendo ser visualizado atravez do comando,


#uname -a

E na inicialização do sistema, podendo ser posteriormente visualizado com o comando,

#dmesg | less

Esse post não tem em nenhum momento ser destinado a documentação completa da compilação do kernel e sim apenas a divulgação de considerações sobre experiências adquiridas ao longo do meu tempo de usuário do FreeBSD. Para mais informações seguirá na Bibliográfia endereços de sites e documentos que se poderá obter mais informação sobre tal prática, que quando bem aplicada ajuda muito na performace e na segurança do sistema.

Opções que são de panorama default no arquivo de configuração.

# machine i386 # especifica para qual arquitetura o arquivo é válido, isso por que o FreeBSD é suportado por diversas arquiteturas de processadores, entre elas, a IA-64 próprias para os processadores Intel Itanium's, SPARC que são próprias para maquinas da SUN Microsystens, as maquinas de aquitetura baseadas na Compaq Alpha, pc98 que é uma série de processadores muito empregado no Japão “não encontrei muito sobre essa arquitetura”, além de ser aplicados a várias sub-arquiteturas do das arquiteturas principais comentadas acima com por exemplo na “AMD64” que é a arquitetura destinadas a processadores de 64 bits baseado em CISC.

# cpu I686_CPU # quando especificada o compilador, trabalhara aplicando no ato da compilação uma melhor adquamento ao processador em questão no qual estará compilando o sistema.

Entre as opções se tem tambem as sub-classes “I386_CPU” que é destinado a sistemas com processadores intel i386, ou baseados nessa classe de arquitetura, “I486_CPU” destinado a processadores Intel I486 ou classes baseadas,

“I586_CPU” destinado a classe próprias da serie Pentium, e k6 e a cyrix586, e a classe “I686_CPU” e destinados a todos os demais processadores do pentium III em diantes como Pentium4 , Pentium D, Xeon, Amd Athlon, Amd Duron, Celeron, Via Transmeta entre outros.

Sistema de Preempção e Escalonador do FreeBSD.

# options SCHED_4BSD # especifica qual o escalonador será empregado no sistema, como opções que sobre-colocaria essa seria para o novo escalonador que esta sendo atualmente (14 de Julho de 2007) desenvolvido por Jeff Roberson

próprio para a série FreeBSD 7.x cuja opção é “SCHED_ULE” temporáriamente batizado como “SHED-SMP” no qual tem como prioridade um melhor desempenho para maquinas que usa multiprocessamento, como os novos Intel Core 2, Pentium D, AMD Athlon FX 64, AMD Opteron, Intel Xeon Core-Duo, Intel Itanium Core-Duo, e processadores Sun Ultra Sparc 2 64 com as devidas emplementações de multiplos Core's , além dos tão já conhecidos sistemas dual Soquetes, utilizado propriamente para areas onde requer muito processamento como Banco de Dados, Aplicações cientifícas, e outras, enclusive para o desenvolvido e redenrização de Filmes como Matrix, e outros que me forge de momento os nomes.

#options SMP # especifica que o sistema terá suporte a Simetric Multi processament, ou seja que possuirá suporte a mais de um processador no mesmo sistema ou mais de um core de processamento.

# options PREENPTION # declaração para que o sistema simplesmente premedite atravez de determinas algoritmos complexos a proxima ação do usuário no sistema, muito utilizado em estações de produção com constante interação entre usuário e sistema, não muito utilizado na emplementações de servidores, devido a queda performace em servidores no quais estão em âmbito de missão critica ou servidores dedicados.

# options FULL_PREENPTION” é usado para desktops em si no qual todo o sistema trabalha na premeditação de ações. Em teste na minha maquina notei que a completa preempição do sistema causava baixa latência, com um custo de o processador trabalhar quase que a todo o momento entre 80 % e 100 % desnecessário para muitos sistemas, mais em alguns aconselhavél como uma estação de trabalho com softwares comuns, se usa muito de calculos graficos pesados como Jogos 3D, desaconselho, em jogos como o Gl-117 gastou-se muito processamento para baixa taxa de frames/segundos.


# options NO-PREENPTION” não achei documentação sobre ela mais lembro de ter a visto num LINT acho que de alguma versão da serie 5.x ou 4.x não tenho certeza, parece que a removeram no qual para se ter esse ambiente basta não especificar nenhuma das opções referentes acima sobre preenption.

Obs: não estou certo, sobre esse assunto, procurarei e posteriormente postarei aqui, para esclarecimento, mesmo assim é otimo quando se trabalha com sistemas de tempo real como o necessário para o software PBX “Asterisk”.

Compatibilidade Binária do Sistema.

# options COMPAT_43 # opção quase que obrigatória devido ao fato de muito código do FreeBSD atual ainda ser do tempo inferior a série 4.x assim mantén-se a compatibilidade de código de séries passadas com as atuais.

# options COMPAT_FREEBSD4 # Opção obrigatória devido ao mesmo motivo que a de cima, muito código escrito nessas séries e que até hoje permutam no sistema como um todo.

# options COMPAT_FREEBSD5 # devido as mesmas condições impostas nas duas ultimas opção, só de resalva, não testei, até mesmo não achei ainda, mais sobre alguns documentos que li referêntes a compatibilidaentre versões do FreeBSD para alguns software que só rodam sobre antigos sistemas FreeBSD e essa compatibilidade é para tambem permitir que esses software desenvolvidos para antigos sistema possa rodar normalmente nas novas versões.

# options COMPAT_LINUX # Compila estaticamente no kernel o suporte a compatibilidade binário com software desenvolvidos para o Linux, desde que o mesmo não use rotinas muito interlaçadas no kernel do proprio sistema Linux como o ALSA.

#options COMPAT_AOUT # Compatibilidade com binários escritos em sistemas Unix antigos. Requerido para o device gzip.

#options PECOFF_SUPPORT # Compatibilidade para binários remanecentes de sistemas como MS Windows, em teste com o Wine notei uma melhor performace, mais não coloco como certeza de tal performace devido há não possuir muito conhecimento sobre emulação de programas desenvolvidos para ambiente MS Windows atravez do Wine posso ter notado alguma performace atravez de alguma opção de configuração do mesmo e desconhecer.

Obs(Não achei nenhum material sobre esse assunto no FreeBSD)

# options COMPAT_SVR4 # Compatibilidade com programas escritos para sistema Solaris Release 4 ou SunOS Release 4.x

#options DEBUG_SVR4 # Próprio para quando se tem enteresse em portar aplicações do sistemas Solaris ou SunOS para o FreeBSD assim o debug da aplicação terá mais detalhes sobre a interação do Kernel com a aplicação própria para desenvolvimento e portabilidade de aplicações remanecentes dos sistemas sitados.


Os sistemas de arquivos do FreeBSD e suporte a sistemas de arquivos de outros sistemas, alem de Pseudo sistemas de arquivos.

Não englobarei todos os sistemas de arquivos que o FreeBSD suporta, apenas os mais comumentes encontrados.

# options FFS # opção necessáriamente obrigatória para o sistema devido ao fato do sistema de arquivos do FreeBSD padrão ser esse o Fast File System, e que se não tiver suporte como o Kernel poderá ler o sistema de arquivos do proprio sistema.

#options SOFTUPDATES # Habilita o suporte a Soft Up Dates no sistema de arquivos FFS. Aumenta consideravelmente a performace e leitura e escrita alem de possibilitar uma menor chance de perda de dados por quedas de energia ou outro fator que comprometa os dados.

Obs ( quando se instala o sistema tirando a raiz “/” as demais partições são marcados para usar Softupdates sendo assim testei tirando o suporte a esse feature e tive problemas em montar as partições que possuia soft update emplementado,) Desaconselho remover essa opção só a retire se por acaso na instalação desabilitou o uso do soft Up Date das demais partições.

#Options UFS_ACL # Suporte a lista de controle de acesso a arquivos, é aconselhavel manter essa opção devido ao fato saber quando um arquivo usado pela ultima vez, em servidores de arquivos onde retem uma grande demanda de leitura e escrita é aconselhavel desativar na partição onde esta hospedado o diretório compartilhado de arquivos as ACLs, diminui a segurança mais aumenta consideralvemente a performace.

# options UFS_DIRHASH # aumenta a performace em diretórios muito grandes.

# options MD_ROOT # Opção no qual não achei documentação para saber ao certo o que faz mais creio que seja algo relacionado ao device da partição raiz.

# options NFSCLIENT # Suporte a Network File system Cliente para poder ter acesso a compartilhamentos montados sobre sistema de arquivo da rede. Não confunda com SMB ou CIFS esse são protocolos de compartilhamento de arquivos para ambientes Heterogenes com estações MS Windows, para ambiente 100% Unix eu achei o NFS mais rapido do que o Samba, mais carregava mais a rede.

# options NFSSERVER # Quando se deseja montar um servidor de arquivos montados sobre NFS. Se seu intuito não é usar o NFS aconselho remove-los do arquivo para não ocupar espaço em memória desnecessáriamente.

#options NFS_ROOT # Quando o sistema raiz será montado atravez de NFS.

# options LINPROCFS # suporte a sistema de arquivos /proc remanecentes de ambientes Gnu/Linux, o sistema de arquivo /proc do FreeBSD trabalha de foma distinta com relação a do Linux.


# options LINSYSFS # Suporte a arquivos do sistema Linux, requerido por LINPROCFS

# options PSEUDOFS # Suporte a sistemas de arquivos pseudos requirido por PROCFS, e demais opções como device tun, device ppp, device loop, device random, device pty, device gif, device faith, device ls. entre outros.

# options PROCFS # Susporte a sistema de arquivos /proc do FreeBSD, desaconselhavel te-lo montado por questão de segurança, requerido por alguns softwares como o proprio Strace.

# options SMBFS # não consegui compilar um kernel com essa opção ainda não sei por que, deve ser alguma dependência ou até mesmo conflito.

# options CD9660 # Quando usara Cds de dados ou DVDs.

Obs(Não é necessário para acessar cds de audio segundo o Srº Tracanelli ou o Srº Grandi da FreeBSD Primeiros Passos, bom não lembro quem foi mais foi num dos materiais deles que li sobre.)

# options NTFS # quando é nescessário acessar sistema de arquivos do tipo NTFS usado por sistemas MS Windows na mesma maquina, não é necessário para compartilhamento, é só exigido quando se quer acessar sistemas locais. Precisa instalar software adcionais atraves do ports como Fusefs encontrado em “/usr/ports/sysutils/fuse-ntfs” ou o ntfsprogs encontrado no diretório “/usr/ports/sysutils/ntfsprogs”.

# options EXT2FS # Suporte a sistemas de arquivos do tipo EXT2 e EXT3 utilizado no Linux. Para obter todas as funcionalidades desse sistema de arquivos tem que instalar o port “/usr/ports/sysutils/e2fsprogs”

# options REISERFS # Suporte a sistemas de arquivos do tipo Reiser atualmente utilizados em sistemas Linux com kernel da serie 2.6 embora se usa ele na serie de Kernel 2.4. Recomendado instalar o port “/usr/ports/sysutils/progsreiserfs”

#options QUOTA # quando se quer aplicar politicas de quotas para o sistema de arquivo, para quando se monta um servidor de arquivos e o ve simplesmente se tornar um deposito de videos pôrnos e mp3. Assim voce defini um limite e a administração fica mais facil.

# options UFS_EXTATTR # Não consegui compilar um kernel com essa opção, mais ela é usada quando se quer utilizar atributos extras dos que já estão emplementados no UFS_ACL.

#options MSDOSFS # Suporte a leitura e escrita para sistema do tipo Vfat ou Fat32 , e Fat16. Otimo quando se tem por exemplo FreeBSD, Gnu/Linux, MS Windows e OpenSolaris na maquina e quer manter todos se comunicando ai é só colocar uma partição primária com esse sistema de arquivos colocar seus arquivos todos nele e não terá problema quando algum dos sistemas não conseguem ler o sistema de arquivos do outro. Usei essa adptação tecnica por mais 8 meses só achava ruim por que não passei de 3 meses sem perder algum arquivo. Sorte que recuperaçõa de arquivo nesse tipo de fs é mais facil do que em outros.

Bom de principio é só, assim que me sobrar mais tempo eu escrevo mais sobre compilação do Kernel. Quanto a bibliografia, terá muitas informações em “/usr/src/sys/NOTES”, “/usr/src/sys/$arch/NOTES”,

$arch = a arquitetura em questão, pode ser i386, ALPHA, AMD64, PC98, ia64.

E o outro local que terá bastante informação é em www.google.com.br. Eta local que tem documentação.



Saturday, June 30, 2007

strace e o FreeBSD
Sempre quiz utilizar o strace no FreeBSD, mas nunca conseguia, não existia o comando, então corri atrás de uma solução funcional, mas não encontrei, até teve um pessoal que me indicou o ktrace, mas não consegui faze-lo funcionar. Então procurei um port do strace para o FreeBSD e qual foi a minha surpresa quando vi que nem precisava procurar, existe uma versão do strace no próprio FreeBSD, não é um port do Linux é um comando do BSD nativo. ai vai um crash-course de como instalar e usar a criança.

ATENÇÃO: Segundo algumas dicas que encontrei na internet o /proc que está descrito abaixo e deve ser montado é algo muito arriscado, ainda não descobri o motivo, por isto o comando strace não é tão usado na comunidade FreeBSD, mas é um comando útil.

Instalando o strace:
cd /usr/ports/devel/strace/
make install clean

Edite o fstab e adicione a linha para que o proc possa ser montado.
proc /proc procfs rw 0 0

depois monte o /proc
mount /proc

e vc pode utilizar o strace com um pid rodando com o comando
strace -p PID

exemplo de saída com o mysqld ...

strace -p 25394
Process 25394 attached - interrupt to quit
syscall_383(0x844bf40) = 0
syscall_383(0x844bf40) = 0
syscall_383(0x844bf40) = 0
syscall_383(0x844bf40) = 0
syscall_383(0x844bf40) = 0
syscall_383(0x844bf40) = 0
syscall_383(0x844bf40) = 0
syscall_383(0x844bf40) = 0
syscall_383(0x844bf40) = 0
syscall_383(0x844bf40) = 0
syscall: missing entry
) = 0x17f
syscall_383(0x844bf40syscall: missing exit

syscall_383(0x844bf40syscall: missing exit

syscall_383(0x844bf40syscall: missing exit

syscall_383(0x844bf40syscall: missing exit

syscall_383(0x844bf40syscall: missing exit

syscall_383(0x844bf40syscall: missing exit
syscall_383(0x844bf40syscall: missing exit

syscall_383(0x844bf40, 0x8447034) = 0x17f
syscall_383(0x844bf40, 0x8447034, 0x844bf58, 0x2854f9fa, 0x844bf40, 0x844d000) = 0x17f
syscall_383(0x844bf40, 0x8447034, 0x844bf58, 0x2854f9fa, 0x844bf40) = 0x17f
syscall_383(0x844bf40, 0x8447034, 0x844bf58) = 0x17f
syscall_383(0x844bf40, 0x8447034, 0x844bf58, 0x2854f9fa, 0x844bf40, 0x844d000) = 0x17f
syscall_383(0x844bf40, 0x8447034, 0x844bf58) = 0x17f
syscall_383(0x844bf40, 0x8447034) = 0x17f
syscall_383(0x844bf40, 0x8447034, 0x844bf58) = 0x17f
syscall_383(0x844bf40, 0x8447034, 0x844bf58) = 0x17f
syscall_383(0x844bf40, 0x8447034)