Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

FreeBSD Embedded, Notas de estudo de Sistemas Operacionais

FreeBSD, servidor, internet, intranet. Para embutir um servidor em uma memória flash ROM, há a necessidade de um sistema operacional seguro, confiável e ...

Tipologia: Notas de estudo

2022

Compartilhado em 07/11/2022

Botafogo
Botafogo 🇧🇷

4.5

(118)

218 documentos

1 / 13

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
127
FreeBSD Embedded - Servidores embutidos em memória flash
Autor: Antonio Valceni de Oliveira Tomé
Professores Orientadores: Dr. Cláudio Roberto de Vincenzi
Esp. Decio Lago
Faculdade Politécnica de Matão
Resumo
Introdução
É intuito deste, definir técnicas de
implementação e customização de servidores
embutidos em memória flash ROM fazendo uso
da tecnologia embedded do projeto FreeBSD,
compactando ao máximo o sistema operacional
mantendo a robustez, a segurança e o alto grau
de disponibilidade sem perder performance,
utilizando arquiteturas de hardware subtilizados
para tal implementação.
Palavras-chave: Memória, flash, linux,
FreeBSD, servidor, internet, intranet.
Para embutir um servidor em uma
memória flash ROM, há a necessidade de um
sistema operacional seguro, confiável e estável
para atender as necessidades e ser um servidor
de alta disponibilidade, por isso a escolha do
FreeBSD como o sistema operacional do
projeto.
Segundo o artigo FreeBSD FAQ
disponível em: <http://www.freebsd.org/
pt_BR.ISO88591/books/faq/
book.html#introduction> diz: Em síntese,
FreeBSD é um sistema operacional UN*X-
like para plataformas i386 e Alpha/AXP,
baseado no “4.4BSD-Lite’’ da Universidade
da Califórnia em Berkeley, com alguns
aprimoramentos adotados do “4.4BSD-
Lite2'’. O FreeBSD também é baseado,
indiretamente, na conversão de William Jolitz
conhecida como ``386BSD’’ para a
plataforma i386 do ``Net/2'’ da Universidade
da Califórnia, em Berkeley; apesar que
pouquíssimo código originado do 386BSD
ainda exista no FreeBSD.
Segundo o artigo Dispositivo de discos em
estado sólido disponível em: <http://
doc.fugspbr.org/articles/solid-state/#intro> diz
que “As memórias flash ROM são dispositivos
de armazenamento de estado sólido, não são
voláteis, ou seja, mesmo que desligados não
perdem o seu conteúdo, outra característica
é que não tem problemas com temperaturas
elevadas e não são danificadas facilmente,
são muito resistentes a impactos físicos como
quedas, diferentemente dos discos magnéticos
convencionais, essa é a grande vantagem de
trabalhar com memórias flash em servidores
onde não há a necessidade de grandes espaços
para armazenamentos de dados e onde há
grande quantidade de leitura de dados, já que
as memórias flash são mais rápidas para
leitura do que os discos magnéticos”.
Objetivos
O objetivo geral refere-se à definição de
técnicas de customização e implementação de
servidores dedicados a serviços de Internet/
Intranet, analisando suas características em
determinados ambientes, fazendo uso da
tecnologia embedded do Projeto FreeBSD a fim
de criar plataformas de operação de serviços
de Internet e Intranet mais robustas, estáveis e
confiáveis. Tem-se também como objetivos
determinar o grau de eficiência da aplicação de
tal tecnologia no aproveitamento de
equipamentos mais antigos, avaliando o
desempenho e a confiabilidade obtidas, de modo
a determinar a viabilidade do uso de tal tecnologia
em ambientes operacionais onde determinados
níveis de desempenho devem ser mantidos e
onde a ocorrência de falhas e downtime devem
ser minimizados. Também esperamos determinar
o perfil das aplicações que podem ser executadas
com a plataforma resultante.
pf3
pf4
pf5
pf8
pf9
pfa
pfd

Pré-visualização parcial do texto

Baixe FreeBSD Embedded e outras Notas de estudo em PDF para Sistemas Operacionais, somente na Docsity!

FreeBSD Embedded - Servidores embutidos em memória flash

Autor: Antonio Valceni de Oliveira Tomé Professores Orientadores: Dr. Cláudio Roberto de Vincenzi Esp. Decio Lago Faculdade Politécnica de Matão Resumo

Introdução

É intuito deste, definir técnicas de implementação e customização de servidores embutidos em memória flash ROM fazendo uso da tecnologia embedded do projeto FreeBSD, compactando ao máximo o sistema operacional mantendo a robustez, a segurança e o alto grau

de disponibilidade sem perder performance, utilizando arquiteturas de hardware subtilizados para tal implementação.

Palavras-chave: Memória, flash, linux, FreeBSD, servidor, internet, intranet.

Para embutir um servidor em uma memória flash ROM, há a necessidade de um sistema operacional seguro, confiável e estável para atender as necessidades e ser um servidor de alta disponibilidade, por isso a escolha do FreeBSD como o sistema operacional do projeto. Segundo o artigo FreeBSD FAQ disponível em: <http://www.freebsd.org/ p t _ B R. I S O 8 8 5 9 1 / b o o k s / f a q / book.html#introduction> diz: Em síntese, FreeBSD é um sistema operacional UN*X- like para plataformas i386 e Alpha/AXP, baseado no “4.4BSD-Lite’’ da Universidade da Califórnia em Berkeley, com alguns aprimoramentos adotados do “4.4BSD- Lite2'’. O FreeBSD também é baseado, indiretamente, na conversão de William Jolitz conhecida como 386BSD’’ para a plataforma i386 doNet/2'’ da Universidade da Califórnia, em Berkeley; apesar que pouquíssimo código originado do 386BSD ainda exista no FreeBSD. Segundo o artigo Dispositivo de discos em estado sólido disponível em: <http:// doc.fugspbr.org/articles/solid-state/#intro> diz que “ As memórias flash ROM são dispositivos de armazenamento de estado sólido, não são voláteis, ou seja, mesmo que desligados não perdem o seu conteúdo, outra característica é que não tem problemas com temperaturas elevadas e não são danificadas facilmente,

são muito resistentes a impactos físicos como quedas, diferentemente dos discos magnéticos convencionais, essa é a grande vantagem de trabalhar com memórias flash em servidores onde não há a necessidade de grandes espaços para armazenamentos de dados e onde há grande quantidade de leitura de dados, já que as memórias flash são mais rápidas para leitura do que os discos magnéticos”.

Objetivos

O objetivo geral refere-se à definição de técnicas de customização e implementação de servidores dedicados a serviços de Internet/ Intranet, analisando suas características em determinados ambientes, fazendo uso da tecnologia embedded do Projeto FreeBSD a fim de criar plataformas de operação de serviços de Internet e Intranet mais robustas, estáveis e confiáveis. Tem-se também como objetivos determinar o grau de eficiência da aplicação de tal tecnologia no aproveitamento de equipamentos mais antigos, avaliando o desempenho e a confiabilidade obtidas, de modo a determinar a viabilidade do uso de tal tecnologia em ambientes operacionais onde determinados níveis de desempenho devem ser mantidos e onde a ocorrência de falhas e downtime devem ser minimizados. Também esperamos determinar o perfil das aplicações que podem ser executadas com a plataforma resultante.

Referencial Teórico

Os principais conceitos e elementos de tecnologia envolvidos no trabalho foram: UNIX: Segundo o artigo Aos 28 (com um corpinho de 15), o Unix vai muito bem disponível em http://www.iis.com.br/~cat/infoetc/ 19970331-Unix.htm diz que: “ Em 1969 nascia o Unix, num minicomputador DEC PDP- que estava encostado numa das salas do Bell Labs. Ken Thompson e Dennis Ritchie, com uns poucos colaboradores, implementaram esse sistema operacional flexível e poderoso, sem imaginar as dimensões do que acabavam de fazer. Tanto que parece piada o que consta no manual de programação, publicado em 72: “O número de instalações Unix já chegou a dez e espera-se que aumente ainda mais.”Basta dizer que, hoje, grande parte das instalações em que se baseia a Internet roda Unix.” UNIX é um sistema operativo (ou sistema operacional) portável, multitarefa e multi-usuário originalmente criado por um grupo de programadores da AT&T e dos Bell Labs, que incluem Ken Thompson, Dennis Ritchie e Douglas McIlroy. Em 1969 Thompson escreveu o primeiro sistema UNIX totalmente em assembly e destinado a rodar em máquinas PDP-7. Mais tarde Ken Thompson e Dennis Ritchie reescreveram ainda em assembly o UNIX para as plataformas PDP-11 e PDP-20. Apenas no início da década de 1970 o UNIX passou a ser desenvolvido usando exclusivamente a nova linguagem C (criada também por Ritchie nessa época) e começou a tomar forma semelhante à que possui atualmente e a tornar-se portável através de várias plataformas. Finalmente, ao longo dos anos 70 e 80 foram sendo desenvolvidas as primeiras distribuições de grande dimensão como os sistemas BSD (na Universidade de Berkeley na Califórnia) e os System III e System V(nos Bell Labs). Atualmente, UNIX (ou *NIX ) é o nome dado a uma grande família de Sistemas Operacionais que partilham muitos dos conceitos dos Sistemas UNIX originais, sendo todos eles

desenvolvidos em torno de standards como o POSIX (Portable Operating System Interface) e outros. Alguns dos Sistemas Operacionais UNIX atuais são: BSD (FreeBSD, OpenBSD e NetBSD), Solaris (anteriormente conhecido por SunOS), IRIX, AIX, HP-UX, Tru64, Linux (nas suas milhares de distribuições), e até o Mac OS X (baseado em um kernel Mach BSD chamado Darwin). FreeBSD: O FreeBSD é um sistema operacional UNIX Multitarefa de 32 bits, completo, robusto e gratuito, para plataformas de hardware conhecidas como Intel x86. Ele é distribuído com seu código fonte aberto, o que faz dele um excelente sistema operacional para estudantes de computação. Oferece capacidades avançadas de conectividade, performance, segurança, e compatibilidade ainda não disponíveis em outros sistemas operacionais, comerciais ou gratuitos. O robusto suporte TCP/ IP do FreeBSD faz do mesmo um sistema operacional de baixo custo ideal para aplicações Internet/Intranet. FreeBSD tem muitas características valiosas. Algumas destas são: Multitarefa preemptiva com ajustes dinâmicos de prioridade que garantem compartilhamento claro e racional do computador entre as aplicações e usuários, mesmo sob a mais intensa demanda. Características multi-usuário que permite várias pessoas utilizarem um sistema FreeBSD de forma simultânea, para uma variedade de coisas. Isto implica, por exemplo, que os periféricos do sistema como impressoras e dispositivos de fita serão apropriadamente compartilhados entre todos usuários no sistema ou na rede, e que limites individuais possam ser definidos para usuários e grupos de usuários, protegendo recursos críticos do sistema de sobrecarga. Forte rede TCP/IP com suporte a padrões industriais como SLIP, PPP, NFS, DHCP e NIS. Isto significa que uma estação FreeBSD pode interagir facilmente com outros sistemas da mesma forma que pode agir como um servidor corporativo, oferecendo funções vitais como NFS (acesso remoto à arquivos) e serviços de correio eletrônico, ou então na

Infelizmente, as IRQs e endereços de memória padrão utilizados por alguns dispositivos costumam entrar em conflito. Isso se deve ao fato de alguns equipamentos ISA serem vendidos com configurações conflitantes por padrão. O padrão no dispositivo de controle do kernel do FreeBSD são deliberadamente definidos como espelho dos padrões do fabricante, de forma que o maior número possível de dispositivos funcionarão sem necessitar modificações. Flash ROM: A memória flash é uma memória em estado sólido (sem nenhuma parte móvel) a qual não é volátil (a memória mantém os dados mesmo depois que todas as fontes de energia são desligadas). A memória flash pode suportar grandes choques físicos (quedas, etc) e é mais rápida que os discos magnéticos convencionais. Um aspecto muito importante das memórias flash, e que cada setor possui uma capacidade limitada de reescrita. Você somente pode escrever, apagar, e escrever de novo para um setor de uma memória flash um certo número de vezes antes que o setor se torne permanentemente inutilizado. Embora muitos dispositivos de memória flash mapeiem automaticamente os blocos ruins, e embora alguns deles distribuam as operações de escrita através de toda a unidade, permanece o fato de que existe um limite para o numero de operações de escrita que se pode realizar no dispositivo. As unidades competitivas possuem em sua especificação uma vida útil entre 1.000.000 e 10.000.000 de escritas por setor. Esta vida útil é variável em função da temperatura do ambiente. Especificamente, as unidades adotadas neste projeto são compact-flash compatíveis com o padrão ATA e unidades de memória flash DiskOnChip® da M-Systems. Os cartões compact-flash compatíveis com o padrão ATA são muito populares como mídias de armazenamento para câmeras digitais. O interesse particular neste tipo de unidade reside no fato de que elas podem ser conectadas ao barramento IDE, e por serem compatíveis com a especificação ATA. Conseqüentemente, com um adaptador muito simples e de baixo custo, estes dispositivos podem ser conectados

diretamente no barramento IDE de um computador. Ao conectar o dispositivo desta forma, os sistemas operacionais como o FreeBSD irão enxergar o dispositivo como um disco rígido comum (apesar de pequeno). O produto DiskOnChip da M-Systems é baseado na mesma tecnologia de memória flash utilizada nos cartões compact flash compatíveis com o padrão ATA, mas são comercializados no formato de um DIP (um Circuito Integrado) e não são compatíveis com o padrão ATA. Para utilizar este tipo de dispositivo, não basta instalá- lo em uma placa mãe que possua um socket para DiskOnChip, você também precisará gerar um novo kernel para o seu FreeBSD habilitando o suporte ao driver “fla’’. E mais, e isso é critico, existem dados específicos colocados pelo fabricante no setor de boot deste dispositivo, desta forma devemos ter o cuidado de não instalar o boot loader do FreeBSD (e nenhum outro) quando estiver utilizando um DiskOnChip. Existem outras soluções de disco em estado sólido, mas eles são caros, obscuros e relativamente complicados para serem abordados dentro do escopo deste projeto. Boot (processo, finalidade): O processo de inicialização e carregamento de um sistema operacional refere-se a um “processo de inicializar’’, ou simplesmente “carregar’’. O processo de inicialização do FreeBSD fornece uma grande flexibilidade que acontece quando você inicia o sistema, permitindo que você selecione diferentes operações no sistema instalado no computador, ou igualar diferentes versões do mesmo sistema operacional ou do kernel instalado. Este problema paralelo está no livro As aventuras de Baron Munchausen escrito por Rudolph Eric Raspe. O personagem despencou por um bueiro, e puxou a si mesmo pelos cadarços ( bootstraps ). Atualmente na computação, o termo boostrap refere-se ao mecanismo utilizado para carregar o sistema operacional, que abreviado tornou-se o processo de booting. No hardware x86 o Sistema Básico de Entrada/Saida (BIOS) é responsável por carregar o sistema operacional. Para fazer isto,

na BIOS aparece o disco rígido para o Master Boot Record (MBR), que deve ser alocado sobre um local específico do disco. A BIOS tem bastante mudanças que podem ser feitas para carregar e rodar a MBR, e assume que a MBR pode então carregar a saída do resto das tarefas envolvidas na inicialização do sistema operacional. O restante do sistema bootstrap do FreeBSD é divido em três estágios. O primeiro estágio é executado pela MBR, que sabe apenas iniciar o computador em um estado específico e rodar o segundo estágio. O segundo estágio pode fazer mais um pedaço em pouco tempo, depois roda o terceiro estágio. O terceiro estágio terminará a tarefa de carregar o sistema operacional. O trabalho é dividido dentro destes três estágios porque o padrão do computador impõe limites sobre o tamanho dos programas que podem ser rodados nos estágios um e dois. Acorrentar as tarefas permite que o FreeBSD forneça um carregador mais flexível. O kernel então é inicializado e começa a testar os dispositivos, e então inicializa estes para o uso. Uma vez que o processo de inicialização do kernel é terminado, o kernel passa o controle do processo para init8 , o qual se certifica se os discos estão em um estado aproveitável. O Init começa então a configuração a nível-de-usuário que monta o sistema de arquivos, seta e levanta dispositivos de rede para comunicação com a mesma, e normalmente inicia todos os processos que são rodados sobre um sistema FreeBSD na inicialização.

Metodologia

Instalando o FreeBSD

Para a implementação do servidor embutido em memória flash ROM, inicialmente instalei o FreeBSD de forma padrão de FreeBSD em um microcomputador tipo IBM- PC equipado com um microprocessador Intel Pentium-S, clock de 120 MHz, placa mãe marca VIA-VX98 com 32 MB de memória RAM instalada. Esta instalação mínima contém os fontes do kernel que é de estrema importância

para a construção de um novo kernel customizado e adequado para o servidor embutido.

chroot jail

Para não danificar e/ou mudar a base do sistema de nenhuma maneira, tinha duas escolhas: um chroot jail ou um segundo disco rígido. O último é mais fácil - pois apenas precisa ser instalado o FreeBSD em um disco rígido separado (ou ao menos em uma partição separada) e usar apenas para preparo do sistema operacional reduzido (embedded), e nada mais. O outro método permite que você trabalhe em um “sandbox” sem requerer um segundo disco rígido ou partição. Optamos por utilizar o chroot jail, pois é consideravelmente mais fácil de instalar, apenas fizemos um diretório em uma partição com espaço suficiente (recomendado 800 MB), e nomeamos este de diretório de /usr/jail. Então colocamos o CD-ROM de instalação do FreeBSD no drive, e iniciamos com o seguinte comando /stand/sysinstall, começamos uma instalação customizado e ajustamos o “Install Root” nas opções para apontar o diretório /usr/ jail. Após isto, iniciamos a instalação e quando concluímos, tivemos um “FreeBSD dentro do FreeBSD”. Para encerrar digitamos a seguinte linha de comando: chroot /usr/jail O diretório raiz do sistema de arquivos foi mudado com o comando acima, o diretório root (/) no Shell é realmente somente /usr/jail, ou seja, com isso meu sistema operacional está todo dentro do diretório /usr/jail.. Um detalhe importante que deve se atentar e que deixar o shell, você tem que entrar em modo chroot outra vez.

Fazendo a árvore de diretório

Dentro do diretório /usr/jail, temos que construir a árvore de diretórios que o servidor necessita, esses diretórios contém também alguns subdiretórios padrões (bin, dev, etc, usr, e assim por diante). Está árvore é criada manualmente,

/neon1.net/misc/minibsd/mkmini.pl: #!/usr/bin/perl use File::Copy; exit unless $#ARGV == 2; print “Populating MiniBSD tree: $ARGV[2]\n”;

make_dirs($srcfile, $destdir)

sub make_dirs { my @args = @; my $srcfile = $args[0]; my $destdir = $args[1]; @subdirs = split(///, $srcfile); chomp @subdirs; $curdir=$destdir; for (0 .. $#subdirs-1) { $curdir = $curdir. “/”. @subdirs[$]; if (! ( (-e $curdir) && (-d $curdir) ) ) { print “Making directory $curdir\n”; mkdir($curdir, 0777); } } }

populate_tree(treefile, srcpath, destpath)

sub populate_tree { my @args = @_; open TREEFILE, $args[0]; TREE: while () { next TREE if /^#/; next TREE if /^ *$/; @srcfiles = split(/:/); chomp @srcfiles; $srcfile = shift(@srcfiles); @srcstat = stat($args[1]. “/”. $srcfile); make_dirs($srcfile, $args[2]); if (copy($args[1]. “/”. $srcfile, $args[2]. “/”. $srcfile)) { printf “Copy $args[1]/$srcfile -> $args[2]/$srcfile ($srcstat[4]/$srcstat[5]/%04o)\n”, ($srcstat[2]

chown $srcstat[4], $srcstat[5], $args[2]. “/”. $srcfile; chmod $srcstat[2] & 07777, $args[2]. “/”. $srcfile; } else { print “ERROR while copying file $args[1]/$srcfile\n”; }

foreach $lnfile (@srcfiles) {

make_dirs($lnfile, $args[2]);

if (link($args[2]

. “/”. $srcfile, $args[2]. “/”. $lnfile)) { print “Link $args[2]/$srcfile -> $args[2]/$lnfile\n”; } else { print “ERROR while linking file $args[2]/$srcfile -> $args[2]/$lnfile \n”; } } } } populate_tree $ARGV[0], $ARGV[1], $ARGV[2];

O arquivo que contém a lista de todos os binários que o script em perl está lendo chama- se minibsd.files onde se encontra todos os binários necessários para o funcionamento do sistema. Para executar o script mkmini.pl é necessário certificar que os diretórios /usr/ minibsd/bin, /usr/minibsd/usr/bin, estão vazios, se não mkmini.pl pode falhar enquanto tenta fazer os links. Executamos o script com o seguinte comando: perl mkmini.pl minibsd.files / /usr/minibsd O arquivo mkmini.pl lê a lista dos arquivos em minibsd.files e os copia do sistema original

em / para dentro de seu sistema de arquivo root miniBSD em /usr/minibsd. Minha lista de arquivos contém uma quantidade razoável de binários ajustados para sacrificar menor quantidade de funcionalidade para minha finalidade, mas cabe ainda bem em um cartão CF. As coisas como perl e sendmail faltam, entretanto, porque eu não os necessito realmente. Se você necessita, mude minibsd.files para refletir suas exigências.

Construindo o kernel

Devemos fazer um kernel customizado para conservar mais espaço e para incluir as opções específicas para a arquitetura de hardware (necessitamos de ter os sources/ compilers instalados em sua base do sistema). Entramos no diretório /sys/i386/conf, e fazemos uma cópia do arquivo de configuração do kernel nomeado de GENERIC para MINIBSD. As outras configurações como controladores SCSI, NICs que não necessite, suporte a USB, etc, removemos do arquivo de configuração. Neste projeto removi as opções CD9660 desde que eu não posso conectar um drive de CD-ROM ao meu servidor de qualquer maneira. Agora vamos começar a compilar o kernel, inicialmente com o seguinte comando: config MINIBSD E em seguida entramos no diretório para / sys/compile/MYKERNEL e digitamos make depend && make para compilar o kernel no entanto o a instalação do kernel não está sendo feita, pois compactaremos com o aplicativo gzip afim de economizar espaço na memória flash da seguinte forma: gzip -9 Kernel Logo em seguida devemos copiar o kernel para o diretório onde se encontra o nosso servidor embutido. O carregador do FreeBSD encontrará automaticamente o kernel.gz e ele será descompactado pelo gunzip antes de ser iniciado.

Copiando as bibliotecas

Até o momento não foram copiadas todas as bibliotecas essenciais em /usr/lib ainda. Estas

não são listadas em minibsd.files porque a lista de bibliotecas necessárias depende de que binários nós instalamos. Sendo assim, utilizamos um script feito por Manuel Kasper chamada de mklibs.pl, que anda através da arvore de diretórios do servidor embutido e usa o ldd em todos os binários para extrair uma lista das bibliotecas que serão requeridas para ao menos um binário no sistema embutido. O script mklibs.pl segue abaixo e encontra- se em http://neon1.net/misc/minibsd/mklibs.pl: #!/usr/bin/perl

mklibs.pl

use File::Find;

exit unless $#ARGV == 0;

undef @liblist;

check_libs(path)

sub check_libs {

@filestat = stat($File::Find::name);

process only if it’s a regular file,

executable and not a kernel module

if ((($filestat[2] & 0170000) ==

  1. &&

($filestat[2] & 0111) && (!/.ko$/ )) {

@curlibs = qx{/usr/bin/ldd -f “%p\n” $File::Find::name 2>/dev/null};

push(@liblist, @curlibs);

}

}

walk the directory tree

find(&check_libs, $ARGV[0]);

throw out dupes

undef %hlib;

@hlib{@liblist} = ()

|— ssh | |— primes | |— ssh_config | |— ssh_host_dsa_key | |— ssh_host_dsa_key.pub | |— ssh_host_key | |— ssh_host_key.pub | ‘— sshd_config |— ssl | ‘— openssl.cnf |— sysctl.conf |— syslog.conf |— termcap -> /usr/share/misc/termcap |— ttys ‘— wall_cmos_clock

Em seguida faz-se necessário editar o arquivo fstab que está dentro do diretório /etc e remover todas as montagens que não necessitaremos para utilizar o servidor. No projeto em questão o arquivo fstab está da seguinte forma: /dev/ad0a / ufs ro 1 1 proc /proc procfs rw 0 0 O sistema de arquivo root encontra-se em ad0a desde que ad0 é o dispositivo que as memórias flash são associadas nas arquiteturas de hardware x86. Como o sistema de arquivo do servidor será montado como somente-leitura, atribuímos a opções ‘ro’ (read-only) na partição /dev/ad0a. Isto é necessário devido a mídia flash ter um número limitado de ciclos de escrita até que desgaste. Caso nós o mantivessemos montado como leitura/gravação e tivéssemos arquivos log ou algo que escreva periodicamente, o cartão flash não trabalharia por muito tempo. O próximo arquivo a ser configurado é o rc.conf. Este arquivo é bastante importante porque nele desabilitamos aplicações (daemons) que já vem por padrão no FreeBSD, como por exemplo, usbd ou sendmail. O rc.conf do projeto em questão segue abaixo:

hostname=”minibsd.polimatao.edu.br”

ifconfig_sis0=”200.210.23.85 netmask 255.255.255.240"

ifconfig_rl0=”192.168.0.50 netmask 255.255.255.0"

kern_securelevel_enable=”NO”

nfs_reserved_port_only=”YES”

sendmail_enable=”NONE”

sshd_enable=”YES”

usbd_enable=”NO”

inetd_enable=”NO”

portmap_enable=”NO”

diskless_mount=”/etc/rc.diskless2"

update_motd=”NO”

varsize= O diskless_mount instrui o script de boot, dentro do /etc/rc, chamando o arquivo /etc/ rc.diskless2, que é fornecido com o FreeBSD por default e serve para montar sistemas de arquivos em memória para /var e /dev. O varsize define o tamanho desse sistema de arquivos a 4 MB (8192 blocos). Update_motd instrui o rc para não tentar atualizar os índices /etc/motd com o nome atual do release do sistema (não poderá fazer isso, desde que / esteja montado como somente-leitura). Outro arquivo a ser editado é o /etc/ newsyslog.conf para rotacionar arquivos de log mais freqüentemente e não arquiva-las. Caso seja feita quaisquer mudanças a master.passwd (arquivo que contem todas as senhas das contas existentes no servidor), teremos que reconstruir a base de dados com o seguinte comando: pwd_mkdb -p -d /usr/minibsd/etc /usr/ minibsd/etc/master.passwd

/dev fun

Para carregar e executar o FreeBSD embutido (miniBSD), necessita também de alguns arquivos especiais de dispositivo. O File System (FS) em que residem os dispositivos tem que ser montado como leitura/gravação para que todo o material como getty possa funcionar, assim que rc.diskless2 construa uma FS em memória para ele. O kernel ainda esperará encontrar o

arquivo do dispositivo dentro da partição root para montá-lo dentro desta, assim que construiremos um /dev completo em nosso FS root do miniBSD. Para isso seguimos uma ordem de comandos:

cp /dev/MAKEDEV /usr/minibsd/dev

cd /usr/minibsd/dev

sh MAKEDEV all

O rc.diskless2 espera encontrar um arquivo chamado /conf/dev.cpio.gz com todos os arquivos de dispositivo, se não puder encontar, ele irá procurar todos os arquivos de dispositivo em sua partição root e gerar o arquivo cpio em no diretório /tmp.

Usando Tar em tudo

Agora é a construção de um arquivo tar, ou seja, uma compactção da instalação inteira do FreeBSD customizado. Seguindo assim:

cd /usr/minibsd

tar cfvz /usr/minibsd-4.10-1.tgz

Gerando a imagem flash

Inicialmente precisei conectar a memória flash ao hardware, para isso fiz da seguinte forma, utilizei um adaptador IDE para conecta-la ao barramento IDE da placa-mãe do computador, com isso o FreeBSD a reconhece como uma unidade de disco IDE. Para a geração da imagem da memória flash, usamos o vnconfig, uma vez que a memória está conectada ao computador, usei o seguinte comando para encontrar o número de setores:

disklabel -rwn ad1 auto | grep sectors/unit

Este procedimento não costuma apresentar nenhum tipo de problemas, mas no primeiro teste, o disklabel relatou erros como “Nenhum espaço restando no dispositivo”, isto quer dizer que pode ter alguns dados binários que vem diretamente do fabricante da memória

impedindo a criação da imagem para a correção efetuei o seguinte comando:

dd if=/dev/ad1 of=/dev/rad1 bs=1k count=

Agora vamos criar uma imagem de disco do mesmo tamanho, enchida inicialmente com os zeros como seguinte comando:

dd if=/dev/zero of=/usr/minibsd-disk.bin bs=512 count=[number of sectors on your flash card]

Agora o disco virtual novo tem que ser particionado e o sistema de arquivo criado. Para isso usamos:

vnconfig -s labels -c vn0 /usr/minibsd-disk.bin

disklabel -Brw vn0 auto

disklabel -e vn

Agora vamos encriptar a partição criada com newfs e montar nossa partição:

newfs -b 8192 -f 1024 -U /dev/vn0a

mount /dev/vn0a /mnt

Assim nós conseguimos nosso disco virtual montado em /mnt, e nós estamos agora pronto para explodir nosso sistema compactado: cd /mnt

tar xfvzP /usr/minibsd-4.10-1.tgz

Copiando tudo para o cartão flash

Agora podemos simplesmente transferir a imagem de disco que nós criamos no passo anterior bloco-por-bloco em nosso cartão flash: dd if=/usr/minibsd-disk.bin of=/dev/rad bs=8k

Referências Bibliográficas

FreeBSD FAQ. Disponível em: <http:// www.freebsd.org /doc/pt_BRISO88591/books/faq/ book.html#introduction> Acesso em: 28 ago. 2004. FreeBSD FAQ. Disponível em: <http://doc.fugspbr.org /articles/solid-state/#intro> Acesso em: 28 ago. 2004. TEIXEIRA, C. A. O GLOBO - Informática Etc. Disponível em: <http://www.iis.com.br/~cat/infoetc/ 19970331-Unix.htm>. Acesso em: 18 nov. 2004. KASPER, M. Scripts para implementação de servidores embutidos. Disponível em: <http:// neon1.net/misc/minibsd/mkmini.pl>. Acesso em: 25 mai. 2004. KASPER, M. Scripts para implementação de servidores embutidos. Disponível em: <http:// neon1.net/misc/minibsd/mklib.pl>. Acesso em: 25 mai.

BRANDI, E. Grupo de usuários de FreeBSD. Disponível em: http://www.fugsbr.org. Acesso em: 17 jul. 2004. BRANDI, E. FreeBSD primeiros passos. Disponível em: http://www.freebsd.ag.com.br. Acesso em: 22 set. 2004. ENGINEERING Soekris. Engenharia Soekris. 5400 Soquel Avenue, Suíte E Santa Cruz, CA 95062- 7803 USA. Disponível em: http://www.soekris.com

. Acesso em: 30 set. 2004. FreeBSD.ORG. Site oficial do sistema operacional FreeBSD. Disponível em: http://www.freebsd.org. LAVIGNE, D. BSD Hacks. Sebastopol 1005 Gravenstein Highway North Sebastopol, CA 95472 USA : Oreilly & Assoc., 2003. LEHEY, Greg. The complete FreeBSD. Sebastopol 1005 Gravenstein Highway North Sebastopol, CA 95472 USA: Oreilly & Assoc., 2003. LUCAS, Michel. Dominando BSD São Paulo - São Paulo Rua Padre Adelino, 758 - Belenzinho São Paulo CEP 03303-904 Ciência Moderna, 2003. MC KUSICK, M. K. Design and implementation of the FreeBSD operating. 75 Arlington Street Suite 300 Boston, MA 02116: Addison Wesley, 2004. MELO, J. M. FreeBSD FAQ .Disponível em: <http:// www.free.bsd.com.br>. Acesso em: 14 out. 2004.