PROJETO INTREGRADOR 2
Distribuição LNT
novo_distribuicao_lnt_linux_network_test_.ppt
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
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