PROJETO INTREGRADOR 2

Distribuição LNT

Ante Projeto

novo_distribuicao_lnt_linux_network_test_.ppt

distribuicao_lnt_final.ppt

artigo_lnt.pdf

Distribuições similares: backtrack

Ferramentas que serão estudas e analisadas para possivel integração na distribuição.

wireshark: Verificar requisições dos host da rede.

snort: verificar portas abertas

hydra: verificar acesso ssh

DNS-Stuff Alternativo: testa o dns que o cliente está utilizando no momento testa das configurações/funcionalidades de um dns próprio ou da operadora (por ex. saber do reverso).

xplico: Ferramenta de analise forense.

Inicialmente a distribuição será customizada com o centos 4.8 como distribuição anfitrião.

Ferramentas para criação e customização da distribuição

Cross-compilation:

Cross-compiling é utilizar um compilador em um sistema para desenvolver código para executar em outro. A cross-compiling é relativamente rara entre usuários ocasionais do UNIX, já que o padrão é ter um compilador instalado para uso em tal sistema. Entretanto, a cross-compiling torna-se bastante comum (e relevante) ao escolher sistemas embarcados. Mesmo quando o host e o destino estão na mesma arquitetura, é necessário distinguir entre seus compiladores; eles podem ter diferentes versões de bibliotecas ou bibliotecas construídas com diferentes opções de compilador, por isso, algo compilado com o compilador do host poderia falhar ao executar ou poderia comportar-se de maneira inesperada no destino.

Obtendo ferramentas de compilação cruzada

Ou seja, na teoria, é bem possível construir um compilador cruzado sozinho, mas isto é raramente prático. A série de estágios de autoinicialização necessária pode ser difícil e consumir tempo e sempre é necessário construir um compilador mínimo, que é utilizado para parcialmente configurar e construir bibliotecas, os cabeçalhos dos quais são, então, utilizados para reconstruir o compilador para que possa utilizá-los e assim por diante. Uma grande quantidade de fontes comerciais para trabalhar com compiladores cruzados para diversas combinações de arquitetura estão disponíveis, bem como diversos kits de ferramentas de cross-compiling gratuitos.

Apresentando o crosstool-ng

O crosstool de Dan Kegel (consulte Recursos para obter detalhes) coleta uma variedade de conhecimentos e algumas correções especializadas para automaticamente construir cadeias de ferramentas para uma grande quantidade de sistemas. O crosstool não tem sido atualizado faz algum tempo, mas o novo projeto crosstool-ng é baseado neste trabalho. Para este tutorial, eu utilizei o crosstool-ng versão 1.1.0, lançado em maio de 2008. Faça download dele a partir do site de distribuição (consulte Recursos).

Instalando o crosstool-ng

O crosstool-ng tem um script de configuração . Para configurá-lo, simplesmente execute o script utilizando –prefix para configurar um local. Por exemplo:

$ ./configure –prefix=$HOME/7800/ctng

Assim que o tiver configurado, construa-o utilizando make e, então, make install. O processo de construção cria um diretório ctng no diretório de trabalho do 7800 que contém os scripts de construção do crosstool-ng. Inclua o subdiretório ctng/bin em seu caminho:

$ PATH=$PATH:$HOME/7800/ctng/bin

Configurando o crosstool-ng

O crosstool-ng utiliza um arquivo .config semelhante àqueles utilizados pelo kernel Linux. É preciso criar um arquivo de configuração que corresponde ao seu destino para utilizar o crosstool-ng. Crie um diretório de trabalho para uma construção crosstool-ng:

$ mkdir toolchain-build $ cd toolchain-build

Agora, copie em uma configuração padrão. É possível configurar o crosstool-ng manualmente, mas uma das configurações de amostra ajusta-se ao destino perfeitamente:

$ cp ../ctng/lib/ct-ng-1.1.0/samples/arm-unknown-linux-uclibc/* .

Finalmente, renomeie o arquivo crosstool.config :

$ mv crosstool.config .config

Isto copia em um arquivo de configuração que tem como destino um processador armv5te, o modelo utilizado no TS-7800. Ele é construído com uClibc, uma variante libc destinada a sistemas embarcados. Entretanto, o arquivo de configuração não precisa de uma modificação.

Corrigindo o caminho da configuração

O diretório de destino padrão para uma construção do crosstool-ng é $HOME/x-tools/$TARGET. Por exemplo, nesta construção, ele poderia aparecer como x-tools/arm-unknown-linux-uclibc. Isto é muito útil se você estiver construindo para uma grande quantidade de destinos, mas não é tão útil se você estiver construindo para apenas um destino. Edite o arquivo .config e altere CT_PREFIX_DIR para ${HOME}/7800/toolchain.

Construindo a string de ferramentas

Para construir a string de ferramentas, execute o script ct-ng com o argumento build .Para melhorar o desempenho, especialmente em um sistema com vários núcleos, você pode querer executar com várias tarefas, especificadas como build.#. Por exemplo, este comando é construído com quatro tarefas:

$ ct-ng build.4

Isto pode levar algum tempo, dependendo do seu sistema host. Quando isto tiver sido concluído, a string de ferramentas está instalada em $HOME/7800/toolchain. O diretório e seus conteúdos são marcados como somente leitura; se você precisar movê-los ou excluí-los, utilize o chmod u+w. O script ct-ng obtém outros argumentos, tal como help. Observe que ct-ng é um script para o utilitário make padrão e, como resultado, a saída de –help é apenas a ajuda do make padrão; utilize ct-ng help para obter ajuda para o crosstool-ng.

Se você não tiver visto este truque antes, ele é genial. Sistemas UNIX modernos interpretam um arquivo executável no qual a primeira linha inicia com #! como um script, especificamente, um script para o programa nomeado no resto da linha. Por exemplo, muitos shell scripts iniciam com #!/bin/sh. O nome do arquivo é transmitido para o programa. Para programas que tratam seu primeiro argumento como um script para executar, isto é suficiente. Embora make não faça isto automaticamente, você pode fornecer a ele um arquivo para ser executado utilizando o sinalizador -f . A primeira linha do ct-ng é #!/usr/bin/make -rf. O sinalizador -r suprime as regras de construção padrão integradas de make e o sinalizador -f informa que a palavra seguinte (que é o nome do arquivo do script) é o nome de um arquivo para utilizar ao invés de um Makefile. O resultado é um script executável que utiliza a sintaxe make ao invés da sintaxe do shell.

Utilizando a string de ferramentas

Para iniciantes, inclua o diretório contendo o compilador em seu caminho:

$ PATH=~/7800/toolchain/bin:$PATH

Com isso em seu caminho, agora você pode compilar programas:

$ arm-unknown-linux-uclibc-gcc -o hello hello.c $ file hello hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), not stripped

Onde estão as bibliotecas?

As bibliotecas utilizadas pela string de ferramentas para vincular binários estão armazenadas em arm-unknown-linux-uclibc/sys-root, sob o diretório toolchain . Este diretório forma a base de um eventual sistema de arquivos raiz, um tópico que iremos abranger sob Sistemas de arquivos, assim que o kernel for construído.

Configuração de kernel

A árvore de distribuição do kernel fornecida pelo fornecedor já está configurada para cross-compiling. No caso mais simples (que é este), a única coisa que você precisa fazer para executar uma cross-compiling de um kernel Linux é configurar a variável CROSS_COMPILE no Makefile de nível superior. Este é um prefixo que é anexado no início de diversos programas (gcc, as, ld) utilizado durante a construção. Por exemplo, se você configurar CROSS_COMPILE para arm-, a compilação tentará localizar um programa denominado arm-gcc em seu caminho. Para esta construção, então, o valor correto é arm-unknown-linux-uclibc. Ou, se você não quiser contar com as configurações de caminho, é possível especificar o caminho inteiro, como neste exemplo:

CROSS_COMPILE ?= $(HOME)/7800/toolchain/bin/arm-unknown-linux-uclibc-

Configuração de kernel

Uma discussão completa sobre a configuração do kernel está além do escopo deste tutorial. Neste caso, o destino ts7800_defconfig me deu uma configuração padrão utilizável para o 7800, com um pequeno contratempo: a configuração CONFIG_DMA_ENGINE foi terminada com off quando deveria ter sido terminada com on.

Refinando o kernel

Normalmente, é melhor editar o kernel utilizando make menuconfig, que oferece uma interface semigráfica para a configuração do kernel. Esta interface é navegada utilizando as teclas de seta para mover o cursor, a tecla Tab para selecionar opções na parte inferior da tela e as teclas de espaço ou Enter para selecionar opções. Por exemplo, para sair sem alterar nada, pressione Tab até que a opção <Sair> na parte inferior da tela fique realçado e, então, pressione Enter. Executar make menuconfig novamente reabre o editor.

Alterando o console padrão

O TS-7800 normalmente inicializa silenciosamente, porque a configuração padrão do kernel especifica um dispositivo de console nulo para manter o monitor silencioso. Para alterar isto, utilize as teclas de seta para navegar para baixo para as “Opções de boot” e pressione Enter. A terceira linha mostra as opções padrão do kernel, que seleciona o ramdisk, o script de inicialização e o console. Utilize as teclas de seta para navegar para baixo até esta linha, pressione Enter e altere console none para console ttyS0,115200. Em seguida, pressione Tab para mover o cursor para <Ok> na parte inferior do painel e pressione Enter. Agora, pressione Tab para selecionar <Sair> e pressione Enter, retornando-o ao menu principal.

Com o objetivo de inicializar o mais rápido possível, o console não é útil e, de fato, mesmo em uma alta taxa de bauds, o envio de mensagens de kernel pode levar uma fração notável de tempo que o sistema leva para inicializar. Entretanto, para depuração e reprodução, você precisa do console.

Ativando o mecanismo DMA

Navegue para baixo até “Drivers de dispositivo” e pressione Enter. Esta lista é mais longa do que o monitor usual, portanto, você precisará rolar até o final da opção para “Mecanismos DMA”. Navegue até esta opção com as teclas de seta e pressione Enter. Há duas opções na parte superior desta página que possuem colchetes indicando uma opção booleana. A segunda opção, “Suporte para mecanismos DMA”, não estava ativada por padrão no download com o qual eu iniciei. Navegue até esta opção com as teclas de seta e pressione a tecla de espaço para alternar seu estado. Agora, utilize Tab e Enter para selecionar <Sair> em cada tela para navegar até o nível superior do programa e, então, <Sair> mais uma vez para sair do programa. Quando perguntado se você deseja salvar sua nova configuração de kernel, utilize a tecla Tab até chegar em <Sim> e pressione Enter.

Compilando o kernel

Digite make. Sim, é realmente simples assim. Isto constrói um kernel, bem como uma coleção de módulos. Novamente, usuários com vários núcleos podem desejar várias tarefas; tente make -j 5. Para os propósitos deste projeto, vou ignorar os módulos de kernel e favorecer a compilação de quaisquer recursos necessários. A técnica ramdisk de autoinicialização utilizada para obter os drivers necessários no kernel antecipadamente parece excessiva e a construção de um sistema de arquivos raiz já é complicada o suficiente. Isto, é claro, traz a questão de como obter uma inicialização de kernel, o assunto da próxima seção.

Requisitos para o sistema anfitrião

requisitos

kernel 2.6.2 ou posterior

compilação gcc 3.0 ou posterior

verificar se o sistema anfitrião tem os requisitos com o comando

cat /proc/version

criar uma partição nova.

fdisk

m = help comando

n = cria partição

w = grava

formatar partição mkfs.ext3 /dev/sdb

montar partição mount /dev/sdb /lnt

colocar a montagem da partição no /etc/fstab

Observação importante. * Algumas distribuições do sistema anfitrião usam características próprias em suas ferramentas da criação do sistema de arquivos (e2fsprogs). Isto pode causar problemas quando inicializar o seu novo sistema LFS no capítulo 9, porque aquelas características não serão suportadas pelo e2fsprogs instalado pelo LFS; você verá um erro similar a “unsupported filesystem features, upgrade your e2fsprogs”. Para verificar se seu sistema anfitrião utiliza alguma característica própria, execute o seguinte comando: debugfs -R feature /dev/[xxx] Se a saída obtida contiver características diferentes de dir_index; filetype; large_file; resize_inode or sparse_super então seu sistema anfitrião pode ter características próprias. Neste caso, para evitar problemas futuros, você deve compilar o pacote do e2fsprogs e usar os binários resultantes para recriar o sistema de arquivos em sua partição LFS: cd /tmp tar xjf /path/to/sources/e2fsprogs-1.37.tar.bz2 cd e2fsprogs-1.37 mkdir build cd build ../configure make #note that we intentionally don't 'make install' here! ./misc/mke2fs /dev/[xxx] cd /tmp rm -rf e2fsprogs-1.37

Pacotes necessários:

• Autoconf (2.59) - 908 kilobytes (KB):

• Automake (1.9.5) - 748 KB:

• Bash (3.0) - 1,824 KB:

• Binutils (2.15.94.0.2.2) - 11,056 KB:

• Bison (2.0) - 916 KB:

• Bzip2 (1.0.3) - 596 KB:

• Coreutils (5.2.1) - 4,184 KB:

• DejaGNU (1.4.4) - 852 KB:

• Diffutils (2.8.1) - 648 KB:

• E2fsprogs (1.37) - 3,100 KB:

• Expect (5.43.0) - 416 KB:

• File (4.13) - 324 KB:

• Findutils (4.2.23) - 784 KB:

• Flex (2.5.31) - 672 KB:

• Gawk (3.1.4) - 1,696 KB:

• GCC (3.4.3) - 26,816 KB:

• Gettext (0.14.3) - 4,568 KB:

• Glibc (2.3.4) - 12,924 KB:

• Glibc-Linuxthreads (2.3.4) - 236 KB:

• Grep (2.5.1a) - 520 KB:

• Groff (1.19.1) - 2,096 KB:

• GRUB (0.96) - 768 KB:

• Gzip (1.3.5) - 284 KB:

• Hotplug (2004_09_23) - 40 KB:

• Iana-Etc (1.04) - 176 KB:

• Inetutils (1.4.2) - 752 KB:

• IPRoute2 (2.6.11-050330) - 276 KB:

• Kbd (1.12) - 624 KB:

• Less (382) - 216 KB:

• LFS-Bootscripts (3.2.1) - 32 KB:

• Libtool (1.5.14) - 1,604 KB:

• Linux (2.6.11.12) - 35,792 KB:

• Linux-Libc-Headers (2.6.11.2) - 2,476 KB:

• M4 (1.4.3) - 304 KB:

• Make (3.80) - 904 KB:

• Man (1.5p) - 208 KB:

• Man-pages (2.01) - 1,640 KB:

• Mktemp (1.5) - 68 KB:

• Module-Init-Tools (3.1) - 128 KB:

• Ncurses (5.4) - 1,556 KB:

• Patch (2.5.4) - 156 KB:

Perl (5.8.6) - 9,484 KB:

• Procps (3.2.5) - 224 KB:

• Psmisc (21.6) - 188 KB:

• Readline (5.0) - 1,456 KB:

• Sed (4.1.4) - 632 KB:

• Shadow (4.0.9) - 1,084 KB:

• Sysklogd (1.4.1) - 72 KB:

• Sysvinit (2.86) - 88 KB:

• Tar (1.15.1) - 1,580 KB:

• Tcl (8.4.9) - 2,748 KB:

• Texinfo (4.8) - 1,492 KB:

• Udev (056) - 476 KB:

• Udev Rules Configuration - 5 KB:

• Util-linux (2.12q) - 1,344 KB:

• Vim (6.3) - 3,620 KB:

• Vim (6.3) language files (optional) - 540 KB:

• Zlib (1.2.2) - 368 KB:

total de 170 mb

Sites para com vairos pacotes disponiveis

http://ftp.gnu.org/gnu

http://www.kernel.org/pub

Patches necessários

• Bash Various Fixes - 23 KB:

• Bash Avoid Wcontinued Patch - 1 KB:

• Coreutils Suppress Uptime, Kill, Su Patch - 15 KB:

• Coreutils Uname Patch - 4 KB:

• Expect Spawn Patch - 7 KB:

• Flex Brokenness Patch - 156 KB:

• GCC Linkonce Patch - 12 KB:

• GCC No-Fixincludes Patch - 1 KB:

• GCC Specs Patch - 14 KB:

• Glibc Fix Testsuite Patch - 1 KB:

• Gzip Security Patch - 2 KB:

• Inetutils Kernel Headers Patch - 1 KB:

• Inetutils No-Server-Man-Pages Patch - 4 KB:

• IPRoute2 Disable DB Patch - 1 KB:

• Mktemp Tempfile Patch - 3 KB:

Perl Libc Patch - 1 KB:

• Readline Fixes Patch - 7 KB:

• Sysklogd Fixes Patch - 27 KB:

• Tar Sparse Fix Patch - 1 KB:

• Util-linux Cramfs Patch - 3 KB:

• Vim Security Patch - 8 KB:

• Zlib Security Patch - 1 KB

Criar uma variavel $LNT para facilitar na customização, para criar é so executar o comando export LNT=/home/lnt, LNT é a variavel, /home/lnt é o ponto de montagem ao executar o comando $LNT a saida devera ser /home/lnt.

criar 2 pastas dentro do /home/lnt, pasta sources onde estara os pacotes e os path e a pasta tools, a pasta source foi configurado permissão de somente leitura apenas o proprietario tem permissão para escluir, a pasta tools foi criado um link simbolico softlink da pasta tools do lnt para a pasta tools do sistema anfitrião

preparando o ambiente para copilação com o comando

source ~/.bash_profile

entrar com o usuario lnt: su - lnt

entrar na pasta sources cd sources

instalando o primeiro pacote binutils-2.15

criando pasta: mkdir binutils-build cd binuils-build

preparando para copilar.

../binutils-2.15/configure –prefix=/tools –disable-nls

o comando ../ retorna uma pasta e entra na pasta binutils-2.15 e acessa o arquivo configure

comando –prefix=/tool

Diz ao script de configuração para preparar-se para instalar os programas do Binutils no diretório /tools.

comando –disable-nls Desabilita a internacionalização pois o i18n não é necessário para as ferramentas provisórias.

Copilando: make

Instalando o pacote: make install

Vinculador dinâmico a ser instalado: make -C ld clean make -C ld LIB_PATH=/tools/lib

comando -C ld clean Diz ao make para remover todos os arquivos compilados do subdiretório ld.

comando -C ld LIB_PATH=/tools/lib Esta opção reconfigura tudo no subdiretório ld. Especificar a variável LIB_PATH do Makefile na linha de comando permite que nós cancelemos o valor padrão e indiquemos a posição das ferramentas provisórias. O valor desta variável determina o caminho de busca da biblioteca padrão do vinculador dinâmico.

Instalando o pacote gcc 3.4

criar pasta gcc-build dentro da pasta source mkdir gcc-build cd gcc-build

preparando para copilar.

../gcc-3.4.3/configure –prefix=/tools –libexecdir=/tools/lib –with-local-prefix=/tools \ –disable-nls –enable-shared –enable-languages=c

comando –with-local-prefix=/tools Remove o diretório /usr/local/include do caminho de busca do gcc. Isto não é absolutamente essencial, entretanto ajuda a minimizar a influência do sistema anfitrião.

comando –enable-shared Permite a configuração das bibliotecas libgcc_s.so.1 e libgcc_eh.a. Ter a libgcc_eh.a disponível garante que o script de configuração do Glibc produza os resultados apropriados.

comando –enable-languages=c Assegura que somente o compilador de C seja configurado.

Copilando: make bootstrap

comando bootstrap Este parâmetro não apenas compila o GCC, mas o faz diversas vezes. Usa os programas compilados em um primeiro tempo para compilar-se uma segunda vez, e então uma terceira vez. Compara então esta segunda com esta terceira compilação para certificar-se que pode se remontar perfeitamente. Isto significa também que foi compilado corretamente.

instalado o pacote: make install

Criando um vinculo

ln -s gcc /tools/bin/cc