Dicas simplificada para a compilação do kernel

Transcrição

Dicas simplificada para a compilação do kernel
Dicas simplificada para a compilação do
kernel do FreeBSD v5.x/6.x/
Autor: Paulo Henrique [RDDCK].
Escrito em: 17 de Junho de 2008.
Última revisão: 09 de Setembro de 2008.
Versão: 0.38.
Abordarei apenas essas duas séries do sistema pelo fato de não ter compilado o mesmo
na sua série atual 7.x, e não comentarei sobre a série 4.x pelo fato de fazer muito tempo
que não compilo o sistema sobre a mesma.
Essa postagem será uma de uma série um pouco extensa, e haverá diversas informações
que poderá torna-se confuso, recomendo a leitura de demais arquivos que deixarei
exposto através de links, com esse links se encontra na internet não poderei colocar
com certeza se o mesmos se encontraram disponíveis quando estiverem lendo esse
documento.
Caso não se encontre satisfeito ou em dúvida com alguma informação presente nesse
documento o mesmo foi escrito baseado sobre primeiramente experiência na utilização
do sistema assim como também através de informações contidas no handbook, fóruns e
lista de discussões.
O handbook se encontra disponível em:
Versão em Inglês: aqui .
Versão em Português: se encontra disponível em:
http://doc.fug.com.br/handbook/
A compilação do kernel "núcleo" do sistema operacional só se torna possível em
sistemas correlatos com modelo de desenvolvimento Open Source no qual se tem
acesso ao código fonte do sistema, entre suas vantagens temos:
Estabilidade, pois somente o necessário para o seu hardware e aplicações realmente
precisem para funcionar.
Velocidade, o kernel no qual integra um sistema de fabrica é de certa forma grande pelo
fato dele possuir suporte nativo ao maior número de hardware possível para que sua
instalação seja realizada, não tem como os desenvolvedores fazer uma versão para cada
hardware específico no qual o sistema irá rodar, na compilação do sistema será
removido suporte a hardware que não se tem presente na maquina, suporte a protocolos
de transporte, suporte a padrões no qual não se fará uso sendo assim deixará o núcleo
consideravelmente compacto, salvo em alguns casos que acabada deixando o núcleo do
sistema maior do que o de fábrica mais com suporte a bem mais funcionalidades nas
quais são necessária para determinadas tarefas.
E sobre meu ponto de vista sendo ela o principal motivo "SEGURANÇA" :
Segurança: quando se compila um sistema pode anteriormente sincronizar a árvore do
código fonte do seu sistema com a última versão disponível nos servidores CVS do
Projeto, irei em após essas postagem colocar um simples guia sobre como fazer essa
sincronização ou mais popularmente update do sistema, corrigindo assim bugs que
surgiu no decorrer da imagem baixada até o momento da sincronização, esse bugs são
tanto por parte de segurança tendo como alvo príncipal, como também por parte de
desempenho, suporte a novos tipos de hardware, suporte a novos protocolos enfim a
lista é um pouquinho grande, depois mostrarei qual o arquivo consultar no sistema para
saber o que foi atualizado.
Para se compilar o kernel primeiramente o que se necessita é ter pelo menos o GCC
Instalado no sistema além do MAKE no caso o pacote DEVELOPED disponível no cd
de instalação, e claro, os fontes do sistema, no caso uma árvore de diretórios disposta
sobre o "/usr/src/” ou “/sys/”.
VERIFICANDO A FERRAMENTAS
DE DESENVOLVIMENTO NO SISTEMA.
No prompt de comando do sistema digite:
matilda%gcc -v
vai ser apresentado como o seguinte exemplo:
matilda%gcc -v
Using built-in specs.
Configured with: FreeBSD/i386 system compiler
Thread model: posix
gcc version 3.4.6 [FreeBSD] 20060305
matilda%
se tiver como retorno a seguinte expressão:
matilda%gcc -v
gcc: Command no found
matilda%
Significa que você não tem um ambiente DEVELOPED instalado no seu sistema, para
instalá-lo basta seguir uns dos passos:
INSTALANDO A DISTRIBUIÇÃO DEVELOPED NO SISTEMA:
Com o CD 1 de instalação:
//como root:
matilda#sysinstall [enter]
///na tela do sysinstall e com o cd dentro do driver de cdrom.
Vai em:
{CUSTOM}
{DISTRIBUTIONS}
{DEVELOPED} Marque a opção com "espaço"
Vai solicitar se deseja instalar a coleção de ports do sistema responde "NO" e depois:
{EXIT}
{MEDIA}
{1CD/DVD}
{COMMIT}
A distribuição DEVELOPED e suas dependências serão todas instaladas no sistema no
caso se estiver com o CD1 de instalação.
Agora instalaremos os fontes do sistema:
INSTALAÇÃO DAS FONTES DO SISTEMA NO SISTEMA:
Para saber se tem as fontes do sistema instaladas execute o seguinte comando no
terminal:
matilda# ls -l /usr/src
total 272
-rw-r--r-- 1 root wheel 6192 1 Jan 09:37 COPYRIGHT
-rw-r--r-- 1 root wheel 403 6 Fev 2006 LOCKS
-rw-r--r-- 1 root wheel 6683 9 Jul 2006 MAINTAINERS
-rw-r--r-- 1 root wheel 11161 28 Mar 2007 Makefile
-rw-r--r-- 1 root wheel 36318 25 Nov 2007 Makefile.inc1
-rw-r--r-- 1 root wheel 140746 20 Dez 2007 ObsoleteFiles.inc
-rw-r--r-- 1 root wheel 2816 4 Mar 2006 README
-rw-r--r-- 1 root wheel 22330 8 Mai 20:31 UPDATING
drwxr-xr-x 37 root wheel 1024 8 Mai 19:37 bin
drwxr-xr-x 55 root wheel 1024 8 Mai 19:36 contrib
drwxr-xr-x 5 root wheel 512 8 Mai 19:37 crypto
drwxr-xr-x 21 root wheel 2048 8 Mai 19:37 etc
drwxr-xr-x 13 root wheel 512 8 Mai 19:37 games
drwxr-xr-x 4 root wheel 512 8 Mai 19:37 gnu
drwxr-xr-x 6 root wheel 2048 8 Mai 19:37 include
drwxr-xr-x 9 root wheel 512 8 Mai 19:37 kerberos5
drwxr-xr-x 71 root wheel 1536 8 Mai 19:37 lib
drwxr-xr-x 33 root wheel 1024 8 Mai 19:37 libexec
drwxr-xr-x 13 root wheel 512 8 Mai 19:37 release
drwxr-xr-x 4 root wheel 512 8 Mai 19:37 rescue
drwxr-xr-x 94 root wheel 2048 8 Mai 19:37 sbin
drwxr-xr-x 6 root wheel 512 8 Mai 19:37 secure
drwxr-xr-x 25 root wheel 512 8 Mai 19:37 share
drwxr-xr-x 58 root wheel 1024 8 Mai 19:37 sys
drwxr-xr-x 12 root wheel 512 8 Mai 19:37 tools
drwxr-xr-x 224 root wheel 4096 8 Mai 19:37 usr.bin
drwxr-xr-x 193 root wheel 3584 8 Mai 19:37 usr.sbin
matilda#
No caso será retornado uma arvore de diretórios e arquivos, caso contrario não obter
retorno é sinal que não possui as fontes instaladas. Para instalar as fontes segue os
seguintes procedimentos:
matilda#sysinstall
{CONFIGURE}
{DISTRIBUTIONS}
{[ ] SRC}
{ALL}
{EXIT}
{EXIT}
{MEDIA}
{1- CD/DVD}
{OK}
No caso assim terá instalado todas as fontes do sistema.
DIRETÓRIOS DE TRABALHO NA COMPILAÇÃO DO KERNEL
ARQUITETURAS I386/X86-64
No caso essa postagem abordará apenas compilações para processadores de arquitetura
CISC que são os mais comuns em computadores pessoais esse processadores são os
seguintes, não listarei todos apenas alguns que lembro de mente no momento.
Intel 386, 386DX, 386SX no caso o suporte a 386 foi removido na RELEASE 5.x
Intel 486, 486DX, 486SX no caso o suporte a 486 foi removido na RELEASE 6.x
Intel Pentium, Pentium MMX, Pentium-PRO, Pentium II, Celeron, Pentium III,
Pentium IV, Pentium D, Celeron D, Celeron M, Centrino, Centrino Duo, Core
Duo, Core 2 Duo, Quad Core, Xeon, Xeon SMP, Xeon Série 3000*¹, Xeon Serie
4000*¹, Xeon Serie 5000*¹
Amd 586, AMD Athlon, AMD Duron, AMD Athlon XP, AMD Sempron, AMD
Athlon XP 64, AMD Athlon FX, AMD Athlon FX 64, ATHLON FX X2, e correlatos
alem dos AMD Opterons.
Obs.: A série de processadores Xeon da Intel tem certos cuidados, pois algumas séries
usa como núcleo outra arquitetura e não a x86-64, no caso eles são baseados no núcleo
do Itanium2 que no caso sua arquitetura referente é a IA64 uma arquitetura 100%
RISC. Caso possua um Xeon procure na documentação do seu hardware sobre qual
tecnologia ele foi baseado, pode até ter instalado uma versão I386 mesmo ele sendo de
arquitetura IA64, pois tal arquitetura oferece emulação para códigos de I386 mais não
terá o desempenho que por sinal é muito superior quando executado com código sobre a
arquitetura correta. No caso o FreeBSD oferece suporte para tal arquitetura, discutirei
sobre ela quando possível.
Bom no caso, voltando ao assunto:
Os diretorios de trabalho para no momento será o diretório:
"/usr/src" => Diretório contento fontes do sistema e documentação básica.
"/usr/src/UPDATING" => Arquivo contendo referências para possíveis atualizações.
"/usr/src/README" => Arquivo explicando demais arquivos e a tarefas empregadas
na compilação do sistema.
"/usr/src/sys/i386/conf/" => Diretório contendo o arquivo de configuração do kernel
para arquiteturas I386.
"/usr/scr/sys/amd64/conf/" => Diretório contendo o arquivo de configuração do kernel
para arquiteturas x86-64 ou amd64.
No caso da arquitetura x86-64, aconselho baixar a versão do sistema para 64Bits pois
até hoje já com várias tentativa não obtive sucesso na compilação do sistema sobre I386
para 64 bits, embora já li que é possível, como não consegui então não aconselho a
perder tempo tentando.
RESSALVAS... Sincronizando o Código Fonte do Sistema com a
arvore disponível nos servidores do Projeto sobre CVSUP.
Bom antes de começar as dicas sobre compilação do kernel do sistema em si,
seria bom já manter um vício sobre a administração do sistema que é atualização do
Código fonte.
Diferente de muitos sistemas em que para se ter que ter um sistema "livres" de bugs o
máximo que se pode fazer é instalar uns updates que na maioria do caso corrige um
problema e surge outro, com os sistema Open Sources uma atualização se tem como
principal forma a reconstrução total ou parcial do sistema, sendo assim não degradando
com a performance do sistema a longo prazo.
Bom diferente do Linux que o que se pode fazer é reinstalar o kernel e aplicar patchs ou
gastar horas a fio para reconstruir uma única biblioteca do sistema com uma falha grave
de seguraça, nos sistemas BSD em geral te oferece não só atualizar o kernel como no
Linux mais sim todo o sistema, bom essa diferença se dá pela seguinte observação
LINUX É SÓ UM KERNEL, SISTEMAS
BSDs SÃO SISTEMAS OPERACIONAIS
COMPLETOS
Mesmo o Linux possuindo creio eu a maior parte dos desenvolvedores open sources
eles não consegue a qualidade de código nem a praticidade dos sistemas BSDs consegue
com seu poucos mais dedicados e talentosos desenvolvedores, o suporte que os BSDs
oferecem sobre linux é quase que esmagadora, quase todas as partes do sistema tem não
uma pessoa mais um grupo de usuários destinados a orientar e resolver determinados
problemas.
Bom mais saindo da filosofia, e falar de algo no momento mais interessante.
Por que atualizar o Código Fonte de sistema ?
Bom tem vários motivos os principais sobre meus olhos de Administrador de Sistemas
"picareta"* entre os benefícios temos por prioridade:
1= > Segurança, atualizando o código fonte após o termino da compilação você terá
um sistema corrigido e sem bugs, sendo esses os descobertos entre o período que você
instalou o sistema até o momento a sincronização dos seus fontes com os
disponibilizados pelo projeto.
2=> Estabilidade => Algumas atualizações são destinadas a partes do sistema que
depois de liberadas se mostraram instáveis ou não testadas o suficiente, mesmo sendo
raro, já que, BSDs no geral até ter uma RELEASE disponibilizada é submetidas em
laboratórios a testes que muitos sistema com raras, mais raras exceções mesmo outros
sistemas suportaria, alguns até com trademark Unix no rótulo, não estou tirando aqui a
qualidade desses sistemas mais é que em se tratando de BSDs, ele são estáveis muito
antes de chegarem ao nível de CURRENT na engenharia de releases. Com o tempo que
já tenho de usuário assim como administrador de sistemas “picareta”* acredito que hoje
pelo menos 35% da Internet está sediado sobre algum dos sistemas BSDs sendo eles
tanto, FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, DarwinBSD, MaC OS X, iBSD,
E possivelmente outros projetos que são embedded de uns desses sistemas bases.
*Picareta por que não possui nenhum curso técnico profissionalizante, nem esquentei a bunda em
um banco de universidade.:D
3=> Desempenho, muitas correções tem muito pouco haver em si com a segurança,
pois o sistema em si já é consideravelmente bem projetado tendo poucas
vulnerabilidades, a maioria das atualizações se refere a um driver ou outro ou rescrita de
parte de um código que ficou lento, tais atualização saem para melhorar a performance
do sistema. De vez enquanto vejo pessoas dizendo que BSD é lento mais sinceramente
não sei se falam que ele é lento ou se é por que tem digamos que preguiça de melhorar o
desempenho... :D, quando puder darei umas dicas de tunning aqui.
4 = > Adicionamento de recursos , alguns recursos são tido estáveis após o
lançamento da RELEASE e então são liberado sobre a árvore para que já se passa a
usufruir de tais recursos sem ter que esperar a próxima RELEASE a ser liberada, e olha
como demora sair uma RELEASE. :D
Bom considerações aparte mãos a obra :D....
O CVSUP
O Cvsup é um utilitário disponível no sistema para auxiliar o administrador na tarefa de
sincronização das fonte do sistema com a do projeto, além dele temos o CTM e o csup,
o CTM é usado muito quando o link de conecção com a internet é muito restrito no
quesito tempo, e o csup é o substituto do cvsup até onde sei.. O CTM quando puder
coloco uma explicação aqui para a sua utilização quanto ao csup assim que usa-lo...
Bom primeiro um guia rápido depois destino um post para a especificação completa do
cvsup.
Primeiro verifique se tem ele instalado no sistema caso contrário instalei através dos
port. o seu diretório de compilação no ports é:
/usr/ports/net/cvsup-without-gui
ou
/usr/ports/net/cvsup
No caso o primeiro não compila e instala a parte destinada ao X11 pois o cvsup em si é
um aplicativo para uso junto com o servidor X, o segundo já compila com a GUI dele.
Pode usar também o "pkg_add" para isso basta:
add_pkg -r cvsup-without-gui ou
add_pkg -r cvsup
Se tiver o CD de instalação ele está no CD1 do FreeBSD no caso o mesmo que se
encontra as distribuições base para o sistema funcionar.
Bom seguindo ...
no diretório /usr/share/examples/cvsup temos alguns exemplos, o conteúdo do mesmo é:
matilda# cd /usr/share/examples/cvsup/
matilda# ls -l
total 36
-r--r--r-- 1 root wheel 1180 24 Jun 14:57 README
-r--r--r-- 1 root wheel 5225 24 Jun 14:57 cvs-supfile
-r--r--r-- 1 root wheel 2636 24 Jun 14:57 doc-supfile
-r--r--r-- 1 root wheel 2290 24 Jun 14:57 gnats-supfile
-r--r--r-- 1 root wheel 3814 24 Jun 14:57 ports-supfile
-r--r--r-- 1 root wheel 367 24 Jun 14:57 refuse
-r--r--r-- 1 root wheel 1949 24 Jun 14:57 refuse.README
-r--r--r-- 1 root wheel 3889 24 Jun 14:57 stable-supfile
-r--r--r-- 1 root wheel 3053 24 Jun 14:57 standard-supfile
-r--r--r-- 1 root wheel 2361 24 Jun 14:57 www-supfile
no caso vamos apenas fazer de momento referencia ao arquivo standart-supfile
copie-o para o /etc e adiciona permissão de escrita nele, basta para isso seguir o seguinte
comando.
matilda# cd /usr/share/examples/cvsup/standart-supfile /etc & chmod u+w /etc/standartsupfile
Bom após isso com um editor qualquer tipo o ee ou vi abra esse arquivo e vamos ao
conteúdo do mesmo.
matilda# ee /etc/standart-supfile
# $FreeBSD: src/share/examples/cvsup/standard-supfile,v 1.23.4.4.2.1 2007/11/25
06:32:51 kensmith Exp $
#
# This file contains all of the "CVSup collections" that make up the
# FreeBSD 6.x-STABLE source tree.
#
# CVSup (CVS Update Protocol) allows you to download the latest CVS
# tree (or any branch of development therefrom) to your system easily
# and efficiently (far more so than with sup, which CVSup is aimed
# at replacing). If you're running CVSup interactively, and are
# currently using an X display server, you should run CVSup as follows
# to keep your CVS tree up-to-date:
#
# cvsup standard-supfile
#
# If not running X, or invoking cvsup from a non-interactive script, then
# run it as follows:
#
# cvsup -g -L 2 standard-supfile
#
# You may wish to change some of the settings in this file to better
# suit your system:
#
# host=CHANGE_THIS.FreeBSD.org
# This specifies the server host which will supply the
# file updates. You must change it to one of the CVSup
# mirror sites listed in the FreeBSD Handbook at
# http://www.freebsd.org/doc/handbook/mirrors.html.
# You can override this setting on the command line
# with cvsup's "-h host" option.
#
# base=/var/db
# This specifies the root where CVSup will store information
# about the collections you have transferred to your system.
# A setting of "/var/db" will generate this information in
# /var/db/sup. You can override the "base" setting on the
# command line with cvsup's "-b base" option. This directory
# must exist in order to run CVSup.
#
# prefix=/usr
# This specifies where to place the requested files. A
# setting of "/usr" will place all of the files requested
# in "/usr/src" (e.g., "/usr/src/bin", "/usr/src/lib").
# The prefix directory must exist in order to run CVSup.
# Defaults that apply to all the collections
#
# IMPORTANT: Change the next line to use one of the CVSup mirror sites
# listed at http://www.freebsd.org/doc/handbook/mirrors.html.
*default host=cvsup12.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_6_3
*default delete use-rel-suffix
# If you seem to be limited by CPU rather than network or disk bandwidth, try
# commenting out the following line. (Normally, today's CPUs are fast enough
# that you want to run compression.)
*default compress
## Main Source Tree.
#
# The easiest way to get the main source tree is to use the "src-all"
# mega-collection. It includes all of the individual "src-*" collections.
#src-all
# These are the individual collections that make up "src-all". If you
# use these, be sure to comment out "src-all" above.
src-base
src-bin
src-cddl
src-contrib
src-etc
#src-games
src-gnu
src-include
#src-kerberos5
#src-kerberosIV
src-lib
src-libexec
src-release
src-rescue
src-sbin
src-share
src-sys
src-tools
src-usrbin
src-usrsbin
# These are the individual collections that make up FreeBSD's crypto
# collection. They are no longer export-restricted and are a part of
# src-all
src-crypto
src-eBones
src-secure
src-sys-crypto
###END-SUPFILE ###
Bom no caso o meu já se encontra modificado:
apenas o que temos de momento nos atentar é sobre as alterações das seguintes linhas :
*default host=cvsup12.FreeBSD.org
No caso essa linha estará sem a parte "cvsup12" apenas coloca nesse trecho da linha o
servidor cvsup do projeto que você irá se conectar para sincronizar as fontes. Para mais
informações por favor verifique a seguinte url contendo todos os servidores disponíveis
ao redor do mundo.
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvsup.html#CVSUPMIRRORS
Bom, após isso a próxima linha a verificar é a seguinte:
*default release=cvs tag=RELENG_6_3
Verifique se a ultima entrada "RELENG_6_3" no caso estou sincronizando junto a
release 6.3 que no caso é a atual do meus sistema, faça a modificação correta para o seu
sistema, embora normalmente vai estar já corretamente configurado.
após isso temos a linha
src-all e mais a baixo outras entradas parecidas, bom eu comento a linha src-all e
descomenta apenas as partes do sistema que me é interessante tipo games mesmo eu não
uso então não preciso atualizar ela as linhas referentes a kerberos mesmo só atualizo
quando o sistema vai servir de base para tais aplicações caso contrario também não
atualizo tal parte assim economizo tempo, banda e dinheiro.
bom apos isso salva o arquivo e vamos atualizar os fontes do sistema.
como root rode o seguinte comando:
matilda#cvsup -g -L 2 /etc/standart-supfile
no caso o parâmetro "-g" é para rodar o cvsup em modo CLI e o parâmetro "-L 2" fala
quanto ao nível de debbuger no caso variando de 0-2..
bom se tudo ocorrer bem terá linhas parecidas com essas plotando no seu terminal:
matilda# cvsup -g -L 2 /etc/standard-supfile
Parsing supfile "/etc/standard-supfile"
Connecting to cvsup12.FreeBSD.org
Connected to cvsup12.FreeBSD.org
Server software version: SNAP_16_1h
Negotiating file attribute support
Exchanging collection information
Establishing multiplexed-mode data connection
Running
Updating collection src-all/cvs
bom quando aparecer uma mensagem colocando que a atualização foi realizada com
sucesso terá acabado a atualização e você terá o prompt devolvido para uso.
Com os fontes do sistema atualizado podemos agora retornar a compilação do kernel.
O ARQUIVO DE CONFIGURAÇÃO DO KERNEL
Bom, voltando a compilação do kernel, isso é claro nessa altura já teremos nossa árvore
de fontes do sistema sincronizadas com a última RELEASE STABLE da árvore
disponível nos mirrores de base do projeto FreeBSD.
O DIRETÓRIO "/usr/src/sys/i386/conf".
Nesse diretório encontramos a seguinte listagem de arquivos presentes sobre sua árvore:
matilda# cd /usr/src/sys/i386/conf/
matilda# ls -al /usr/src/sys/i386/conf/
total 96
drwxr-xr-x 2 root wheel 512 25 Jun 12:47 .
drwxr-xr-x 15 root wheel 512 8 Mai 19:37 ..
-rw-r--r-- 1 root wheel 13 20 Jun 2005 .cvsignore
-rw-r--r-- 1 root wheel 372 28 Out 2005 DEFAULTS
-rw-r--r-- 1 root wheel 10755 15 Dez 2007 GENERIC
-rw-r--r-- 1 root wheel 1741 14 Jan 2005 GENERIC.hints
-rw-r--r-- 1 root wheel 17878 25 Jun 12:47 LINT
-rw-r--r-- 1 root wheel 120 26 Fev 2003 Makefile
-rw-r--r-- 1 root wheel 35176 15 Dez 2007 NOTES
-rw-r--r-- 1 root wheel 2069 15 Dez 2007 PAE
-rw-r--r-- 1 root wheel 322 18 Set 2005 SMP
-rw-r--r-- 1 root wheel 7866 10 Mai 10:45 SOLDIER
-rw-r--r-- 1 root wheel 3389 23 Ago 2006 XBOX
matilda#
Bom estando dentro dele teremos os arquivos listados anteriormente, possivelmente e
com certeza dois arquivos presente na listagem não conterá na sua lista os respectivos
arquivos são o LINT e o MATILDA, entrarei em detalhes sobre eles mais tarde.
Voltando aos arquivos default que terão no seu sistema os principais sobre essa árvore é
o GENERIC e o NOTES.
O Arquivo GENERIC:
Esse arquivo é o arquivo de configuração padrão do kernel do FreeBSD. Nele se
encontra todas as especificações bases para o sistema poder ser bootado no maior
número de maquinas possíveis, com tão decisão o projeto coloca nele definições de
configurações cautelosas quem pode e consideravelmente faz o sistema ser um pouco
lento com o uso desse kernel mais mesmo assim ele e funcional em muitas aplicações.
Obs.: Assim como existe o arquivo GENERIC sobre a árvore de diretórios "/usr/src/sys/
i386/conf" o mesmo arquivo se encontrará presente sobre a árvore de diretório de sua
respectiva arquitetura como "/usr/src/sys/amd64/conf" destinado a arquiteturas x86-64,
"/usr/src/sys/sparc64/conf" destinado a arquiteturas dos processadores desenvolvidos
pela Sun Microsystens, "/usr/src/sys/ia64/conf" destinado a arquiteturas baseadas sobre
a dos processadores Itanium da Intel uma plataforma de hardware robusta que assim
como a da Sun MicroSystens destinadas a servidores de alta carga de trabalho, "/usr/src/
sys/pc98/conf" arquitetura disponivel apenas na Ásia, sendo ela uma arquitetura de pc
popular, "/usr/src/sys/alpha/conf" destinado a arquitetura desenvolvida pela HP, com o
mesmo ênfase da IA64 e da SPARC64, essa arquitetura será descontinuada apartir de
2011 como consta no site da HP, o que é uma pena pois é uma arquitetura de alto poder
de processamento e que colocou muitos conceitos entre o contexto das arquiteturas
RISC, como pipeline e outras que de momento não lembro, "/usr/src/sys/powerpc/conf"
Arquitetura RISC desenvolvida pela IBM que durante muito tempo reinou no mundo
dos Macs da Apple Inc, nas últimas informações até o momento apenas um mantenedor
é responsável por essa arquitetura o que a coloca como deficiente de muitos recursos
disponíveis já nas arquiteturas i386, amd64 e outras, isso tudo por que o uso dessa
arquitetura caiu muito no uso com a adoção da Apple por processadores Intel, mais se
você possuir um Xserver G5 ou G4 ou um POWERMAC G5, G4, G3, G2 essa é
ramificação da árvore dos fontes do kernel do freebsd que garantirá suporte para a sua
arquitetura, pode parecer estranho, mais apenas uma observação que foge um pouco no
escopo do nosso assunto, o kernel atual do sistema Mac OS X é FreeBSD e antes do
FreeBSD eles usava o Sistema DarwinBSD o único sistema BSD que não leva a licença
de Berkeley mais tem contribuído em muito com os demais projetos BSDs, antes dos
BSD reinar entre os Macs o sistema usado pela Apple era o OS2 que não confirmado
tem parte do seu código derivado das primeiras versões de Unix, mais não o suficiente
para considera-lo Unix. Bom mais voltando ao assunto....
Creio ter sitado todas as arquiteturas e seus respectivos locais onde se encontra os
arquivo de configuração do kernel dessas arquiteturas.
O CONTEÚDO DO ARQUIVO DE CONFIGURAÇÃO DO
KERNEL GENERIC PARA i386.
Abaixo segue o arquivo de configuração do kernel para a arquitetura i386... Não
colocarei de todas aqui por que alem de não ser necessário, será de certa forma
desnecessário e tomaria muito espaço com algo já escrito por outra pessoa, esse arquivo
será apenas por referencia para poder explicar alguns pontos importantes na edição
desse arquivo para a compilação do kernel.
#
# GENERIC -- Generic kernel configuration file for FreeBSD/i386
#
# For more information on this file, please read the handbook section on
# Kernel Configuration Files:
#
# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfigconfig.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.429.2.14.2.1 2007/12/15 06:32:32 scottl
Exp $
machine i386
cpu I486_CPU
cpu I586_CPU
cpu I686_CPU
ident GENERIC
# To statically compile in device wiring instead of /boot/device.hints
#hints "GENERIC.hints" # Default places to look for devices.
makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
options SCHED_4BSD # 4BSD scheduler
options PREEMPTION # Enable kernel thread preemption
options INET # InterNETworking
options INET6 # IPv6 communications protocols
options FFS # Berkeley Fast Filesystem
options SOFTUPDATES # Enable FFS soft updates support
options UFS_ACL # Support for access control lists
options UFS_DIRHASH # Improve performance on big directories
options MD_ROOT # MD is a potential root device
options NFSCLIENT # Network Filesystem Client
options NFSSERVER # Network Filesystem Server
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_GPT # GUID Partition Tables.
options COMPAT_43 # Compatible with BSD 4.3 [KEEP THIS!]
options COMPAT_FREEBSD4 # Compatible with FreeBSD4
options COMPAT_FREEBSD5 # Compatible with FreeBSD5
options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI
options KTRACE # ktrace(1) support
options SYSVSHM # SYSV-style shared memory
options SYSVMSG # SYSV-style message queues
options SYSVSEM # SYSV-style semaphores
options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time
extensions
options KBD_INSTALL_CDEV # install a CDEV entry in /dev
options ADAPTIVE_GIANT # Giant mutex is adaptive.
device apic # I/O APIC
# Bus support.
device eisa
device pci
# Floppy drives
device fdc
# ATA and ATAPI devices
device ata
device atadisk # ATA disk drives
device ataraid # ATA RAID drives
device atapicd # ATAPI CDROM drives
device atapifd # ATAPI floppy drives
options UFS_DIRHASH # Improve performance on big directories
options MD_ROOT # MD is a potential root device
options NFSCLIENT # Network Filesystem Client
options NFSSERVER # Network Filesystem Server
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_GPT # GUID Partition Tables.
options COMPAT_43 # Compatible with BSD 4.3 [KEEP THIS!]
options COMPAT_FREEBSD4 # Compatible with FreeBSD4
options COMPAT_FREEBSD5 # Compatible with FreeBSD5
options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI
options KTRACE # ktrace(1) support
options SYSVSHM # SYSV-style shared memory
options SYSVMSG # SYSV-style message queues
options SYSVSEM # SYSV-style semaphores
options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time
extensions
options KBD_INSTALL_CDEV # install a CDEV entry in /dev
options ADAPTIVE_GIANT # Giant mutex is adaptive.
device apic # I/O APIC
# Bus support.
device eisa
device pci
# Floppy drives
device fdc
# ATA and ATAPI devices
device ata
device atadisk # ATA disk drives
device ataraid # ATA RAID drives
device atapicd # ATAPI CDROM drives
device atapifd # ATAPI floppy drives
device atapist # ATAPI tape drives
options ATA_STATIC_ID # Static device numbering
# SCSI Controllers
device ahb # EISA AHA1742 family
device ahc # AHA2940 and onboard AIC7xxx devices
options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~128k to driver.
device ahd # AHA39320/29320 and onboard AIC79xx devices
options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~215k to driver.
device amd # AMD 53C974 (Tekram DC-390(T))
device isp # Qlogic family
#device ispfw # Firmware for QLogic HBAs- normally a module
device mpt # LSI-Logic MPT-Fusion
#device ncr # NCR/Symbios Logic
device sym # NCR/Symbios Logic (newer chipsets + those of `ncr')
device trm # Tekram DC395U/UW/F DC315U adapters
device adv # Advansys SCSI adapters
device adw # Advansys wide SCSI adapters
device aha # Adaptec 154x SCSI adapters
device aic # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
device bt # Buslogic/Mylex MultiMaster SCSI adapters
device ncv # NCR 53C500
device nsp # Workbit Ninja SCSI-3
device stg # TMC 18C30/18C50
# SCSI peripherals
device scbus # SCSI bus (required for SCSI)
device ch # SCSI media changers
device da # Direct Access (disks)
device sa # Sequential Access (tape etc)
device cd # CD
device pass # Passthrough device (direct SCSI access)
device ses # SCSI Environmental Services (and SAF-TE)
# RAID controllers interfaced to the SCSI subsystem
device amr # AMI MegaRAID
device arcmsr # Areca SATA II RAID
device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
device ciss # Compaq Smart RAID 5*
device dpt # DPT Smartcache III, IV - See NOTES for options
device hptmv # Highpoint RocketRAID 182x
device hptrr # Highpoint RocketRAID 17xx, 22xx, 23xx, 25xx
device rr232x # Highpoint RocketRAID 232x
device iir # Intel Integrated RAID
device ips # IBM (Adaptec) ServeRAID
device mly # Mylex AcceleRAID/eXtremeRAID
device twa # 3ware 9000 series PATA/SATA RAID
# RAID controllers
device aac # Adaptec FSA RAID
device aacp # SCSI passthrough for aac (requires CAM)
device ida # Compaq Smart RAID
device mfi # LSI MegaRAID SAS
device mlx # Mylex DAC960 family
device pst # Promise Supertrak SX6000
device twe # 3ware ATA RAID
# atkbdc0 controls both the keyboard and the PS/2 mouse
device atkbdc # AT keyboard controller
device atkbd # AT keyboard
device psm # PS/2 mouse
device kbdmux # keyboard multiplexer
device vga # VGA video card driver
device splash # Splash screen and screen saver support
# syscons is the default console driver, resembling an SCO console
device sc
# Enable this for the pcvt (VT220 compatible) console driver
#device vt
#options XSERVER # support for X server on a vt console
#options FAT_CURSOR # start with block cursor
device agp # support several AGP chipsets
# Power management support (see NOTES for more options)
#device apm
# Add suspend/resume support for the i8254.
device pmtimer
# PCCARD (PCMCIA) support
# PCMCIA and cardbus bridge support
device cbb # cardbus (yenta) bridge
device pccard # PC Card (16-bit) bus
device cardbus # CardBus (32-bit) bus
# Serial (COM) ports
device sio # 8250, 16[45]50 based serial ports
# Parallel port
device ppc
device ppbus # Parallel port bus (required)
device lpt # Printer
device plip # TCP/IP over parallel
device ppi # Parallel port interface device
#device vpo # Requires scbus and da
# If you've got a "dumb" serial or parallel PCI card that is
# supported by the puc(4) glue driver, uncomment the following
# line to enable it (connects to the sio and/or ppc drivers):
#device puc
# PCI Ethernet NICs.
device de # DEC/Intel DC21x4x (``Tulip'')
device em # Intel PRO/1000 adapter Gigabit Ethernet Card
device ixgb # Intel PRO/10GbE Ethernet Card
device txp # 3Com 3cR990 (``Typhoon'')
device vx # 3Com 3c590, 3c595 (``Vortex'')
# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device miibus # MII bus support
device 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
device fxp # Intel EtherExpress PRO/100B (82557, 82558)
device lge # Level 1 LXT1001 gigabit Ethernet
device msk # Marvell/SysKonnect Yukon II Gigabit 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 'lnc')
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 ti # Alteon Networks Tigon I/II gigabit Ethernet
device tl # Texas Instruments ThunderLAN
device tx # SMC EtherPower II (83c170 ``EPIC'')
device vge # VIA VT612x gigabit Ethernet
device vr # VIA Rhine, Rhine II
device wb # Winbond W89C840F
device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
# ISA Ethernet NICs. pccard NICs included.
device cs # Crystal Semiconductor CS89x0 NIC
# 'device ed' requires 'device miibus'
device ed # NE[12]000, SMC Ultra, 3c503, DS8390 cards
device ex # Intel EtherExpress Pro/10 and Pro/10+
device ep # Etherlink III based cards
device fe # Fujitsu MB8696x based cards
device ie # EtherExpress 8/16, 3C507, StarLAN 10 etc.
device lnc # NE2100, NE32-VL Lance Ethernet cards
device sn # SMC's 9000 series of Ethernet chips
device xe # Xircom pccard Ethernet
# Wireless NIC cards
device wlan # 802.11 support
device wlan_wep # 802.11 WEP support
device wlan_ccmp # 802.11 CCMP support
device wlan_tkip # 802.11 TKIP support
device an # Aironet 4500/4800 802.11 wireless NICs.
device ath # Atheros pci/cardbus NIC's
device ath_hal # Atheros HAL (Hardware Access Layer)
device ath_rate_sample # SampleRate tx rate control for ath
device awi # BayStack 660 and others
device ral # Ralink Technology RT2500 wireless NICs.
device wi # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
#device wl # Older non 802.11 Wavelan wireless NIC.
# Pseudo devices.
device loop # Network loopback
device random # Entropy device
device ether # Ethernet support
device sl # Kernel SLIP
device ppp # Kernel PPP
device tun # Packet tunnel.
device pty # Pseudo-ttys (telnet etc)
device md # Memory "disks"
device gif # IPv6 and IPv4 tunneling
device faith # IPv6-to-IPv4 relaying (translation)
# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
device bpf # Berkeley packet filter
# USB support
device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device ehci # EHCI PCI->USB interface (USB 2.0)
device usb # USB Bus (required)
#device udbp # USB Double Bulk Pipe devices
device ugen # Generic
device uhid # "Human Interface Devices"
device ukbd # Keyboard
device ulpt # Printer
device umass # Disks/Mass storage - Requires scbus and da
device ums # Mouse
device ural # Ralink Technology RT2500USB wireless NICs
device urio # Diamond Rio 500 MP3 player
device uscanner # Scanners
# USB Ethernet, requires miibus
device aue # ADMtek USB Ethernet
device axe # ASIX Electronics USB Ethernet
device cdce # Generic USB over Ethernet
device cue # CATC USB Ethernet
device kue # Kawasaki LSI USB Ethernet
device rue # RealTek RTL8150 USB Ethernet
# FireWire support
device firewire # FireWire bus code
device sbp # SCSI over FireWire (Requires scbus and da)
device fwe # Ethernet over FireWire (non-standard!)
Bom não irei entrar em detalhes sobre cada linha pois alem das disponíveis nesse
arquivo a outras em que entrarei em detalhes mais tarde indicando onde elas se
encontra. Se observar bem verá que o arquivo é dividido em sessão apenas por
organização, até a série 4.x do FreeBSD a ordem nesse arquivo em que as opções de
configuração se encontrava interferiam severamente no processo de compilação do
sistema.
Passei varias noites resolvendo dependências na compilação de kernels sobre a série 4.x.
hoje a compilação do sistema se torno tão bem escrita que em poucos casos acontece
alguns problemas.
Bom vamos descrever as sessões desse arquivo:
AS SESSÕES DO ARQUIVO DE CONFIGURAÇÃO DO
SISTEMA.
Primeira Sessão: Definição da Sub-arquitetura da Máquina.
Como em tudo na tecnologia sofre evolução não seria diferente com os processadores,
apenas exemplo, sobre a arquitetura i386 temos as seguintes sub-arquiteturas ou classes
da arquitetura.
i386 -> i486 -> i586 ->PENTIUM ou i686, como pode ver existe uma linha de
desenvolvimento de uma sub-arquitetura para outra mais em todas o código da
arquitetura mais antiga é suportado nas mais recentes. Bom com isso nessa sessão do
arquivo de configuração se defini a arquitetura e a sub-arquitetura no qual estamos
compilando e que abrigará o sistema.
Segunda Sessão: Opções Gerais do Kernel.
Nessa sessão são declaradas as opções que em algum caso não se pode retirar do kernel,
com pena de ocorrer erros durante a compilação em si ou até com erros no processo do
boot do sistema após a instalação do kernel compilado na máquina.
Nessa sessão tem-se definidas referências sobre Redes, Sistema de arquivos,
Compatibilidades com versões passadas e de outros sistemas como a compatibilidade
linux, Schenduler empregado no sistema como o conhecido 44BSD ou o SMP, Padrões
que o código do sistema segue entre outras configurações relacionada a sistema e suas
funcionalidades.
Terceira Sessão: Dispositivos e Barramentos suportados pelo Sistema.
Nas próximas sessões o que se segue são definições de barramento suportado pelo
sistema, e devices que ele possui, subdividas em outras sessões com suporte a discos
barramento EIDE e IDE, barramento de dispositivos de armazenamento SCSI,
disposivos virtuais como drivers de X11R6, splash, sessão de controladoras com
tecnologia RAID, sessão de dispositivos de entrada, como teclado, mouse..., sessão de
suporte a PCMCIA, portas paralelas e seriais, dispositivos de rede, tanto de
10/100/1000, wireless, sessão de pseudo dispositivos para o kernel, sessão de suporte a
dispositivos USBs, sessão de suporte a dispositivos Firewire. Não está 100% listado
aqui, pois a leitura desse arquivo é de melhor valia do que comentários meus, sempre na
frente de cada opção encontra-se presente uma breve descrição para qual função é
adicionada ao sistema quando tal opção é compilado no kernel.
O ARQUIVO "NOTES".
O Arquivo NOTES contém, contéudo de suma valia no quesito de customização e
adicionamento de novos recursos ao sistema, ele apresenta junto uma descrição melhor
do que a presente no arquivo GENERIC e quando o assunto é muito extenso passa
referência para se conseguir melhores informações sobre tão informação.
Além do arquivo NOTES disponível sobre a arvore "/usr/src/sys/$arch/conf" do sistema
temos também outros arquivos com breves descrições sobre o sistema como o "/usr/src/
sys/conf/NOTES" informações sobre partes do sistema como sobre geom disponivel
sobre a arvore "/usr/src/sys/geom/notes" sendo o arquivo escrito com letras minusculas,
subsistema NETGraph encontrado na árvore: "/usr/src/sys/netgraph/NOTES", além de
outros disponíveis em diretórios específicos de documentação para utilização e
administração do sistema.
Sem duvida que todos os arquivos aqui descritos e outros são importantes para um
melhor controle do sistema ainda mais no processo de compilação do mesmo, mais o
que julgo de maior importância são os NOTES disponíveis sobre a arvores,
"/usr/src/sys/conf", "/usr/src/sys/$arch/conf", pois neles se descreve o maior numero de
detalhes sobre suporte e recursos oferecidos pelo FreeBSD após uma compilação de
kernel.
COMPILANDO O KERNEL DO SISTEMA
Após todo esse ritual vem o tão sonhado e esperado ritual maior, compilando o sistema.
Com o arquivo de configuração do kernel pronto disposto no diretório de configuração
da sua arquitetura seguimos determinados passos.
matilda# make buildkernel KERNCONF=MATILDA
No caso o “MATILDA” é o nome do kernel especificado na opção “ident” no arquivo
de configuração do kernel.
Logo depois desse longo e demorado sistema vira a segunda parte muito importante.
matilda#make installkernel KERNCONF=MATILDA
Com esse comando o kernel será instalado, bastando para depois de concluido a
instalação rebootar o sistema para verificar se ele está 100% ou tem alguma coisa
errada.
Com esse modo de compilação só tive um problema até hoje mais erro na edição do
arquivo de configuração do kernel.
Assim que reinstalar o kernel novo, convém reiniciar o sistema para que ele boot com o
novo kernel e possa aplica a ultima parte de nossa aventura.
matilda#mergemaster -p
Esse comando irá verificar os arquivos que ele gerou cm os presentes contido no /etc do
sistema se tiver alguma coisa diferente atravez de comparações e as ocorrencias que
aparecer leia e verifique qual eh a sua opção, no final após o ultimo reboot teremos
nosso sistema atualizado e o kernel customizado por nós.

Documentos relacionados

Guia de Estudo

Guia de Estudo em aprofundar seus conhecimentos em administração de sistemas GNU/Linux.

Leia mais