Obrigado!
********************
*****
Prefácio
Minha
jornada para aprender e entender melhor Linux começou há mais de
uma década, em meados de 1998. Eu havia acabado de instalar minha
primeira distribuição Linux e rapidamente fiquei intrigado com todo
o conceito e filosofia por trás do Linux.
Há
sempre várias maneiras de se completar uma tarefa. O mesmo pode ser
dito sobre distribuições Linux. Muitas surgiram através dos anos.
Algumas ainda existem, outras se transformaram em outra distribuição,
e ainda há outras que ficaram relegadas à nossas memórias. Todas
elas executam as tarefas de maneira diferente para se adequar às
necessidades de seus respectivos públicos-alvo. Devido ao fato de
haver tantas maneiras diferentes de se executar uma tarefa, eu
comecei a perceber que eu não tinha que me limitar à implementação
de outra pessoa. Antes de descobrir o Linux, nós simplesmente
lidávamos com problemas em outros sistemas operacionais como se nós
não tivéssemos escolha. A coisa era o que era, não importando se
você gostasse ou não. Com Linux, o conceito de escolha começou a
emergir. Se você não gostou de alguma coisa, você seria livre, até
encorajado, a mudá-la.
Eu tentei
várias distribuições, mas não consegui me decidir por nenhuma.
Elas eram ótimas distribuições em seu próprio direito. Não era
mais uma questão de certo ou errado. O problema havia se
transformado em uma questão de gosto pessoal. Com todas aquelas
opções disponíveis, tornou-se aparente que não haveria um único
sistema que seria perfeito para mim. Então eu me propus a criar meu
próprio sistema Linux que estaria totalmente em conformidade com
minhas preferências pessoais.
Para
realmente fazer meu próprio sistema, eu resolvi compilar tudo a
partir do código fonte em vez de usar pacotes pré-compilados. Esse
sistema Linux “perfeito” teria a força de vários sistemas sem
suas fraquezas visíveis. A princípio, a ideia era bastante
amedrontadora. Mas eu me mantive comprometido à ideia de que esse
sistema poderia ser construído.
Após
lidar com questões como dependências recíprocas e erros durante a
compilação, eu finalmente construí um sistema Linux customizado. O
sistema era totalmente operacional e perfeitamente utilizável como
qualquer outro sistema Linux disponível na época. Mas era minha
própria criação. Montar um sistema desses foi muito gratificante.
A única coisa que poderia ser melhor seria se eu mesmo tivesse
escrito cada programa. Essa foi a melhor coisa que se seguiu.
Conforme
eu compartilhei meus objetivos e minhas experiências com outros
membros da comunidade Linux, ficou aparente que havia um interesse
firme nessas ideias. Logo ficou claro que tal sistema Linux
customizado não serviria apenas para as necessidades específicas
dos usuários, mas também como uma oportunidade ideal para
programadores e administradores elevarem suas ( existentes )
habilidades com Linux. Como resultado desse interesse amplo, o
Projeto “Linux From Scratch” nasce. ( Linux From Scratch pode ser
traduzido como Linux do Zero )
Este
livro Linux From Scratch é o núcleo do projeto. O livro provê a
base e as instruções necessárias para você modelar e construir
seu próprio sistema. Mesmo este livro disponibilizando instruções
que resultarão em um sistema que funciona corretamente, você é
livre para alterar as instruções para adaptá-las à suas
necessidades, o que é uma importante parte deste projeto. Você
permanece no controle; nós só damos uma mão para ajudá-lo a
começar sua própria jornada.
Eu
sinceramente espero que você divirta-se trabalhando no seu próprio
Linux From Scratch e faça proveito dos benefícios de construir um
sistema verdadeiramente seu.
--
Gerard Beekmans
Público-alvo
Há vários motivos que o levariam a
ler este livro. Uma das questões que muitas pessoas levantam é “por
que passar por todo o sofrimento de construir manualmente um sistema
Linux do Zero quando você pode simplesmente baixar e instalar um
sistema existente?”
Uma razão importante que justifica
a existência deste projeto é ajudá-lo a aprender como um sistema
Linux funciona por dentro. Construir um sistema LFS ajuda a
demonstrar o que faz um sistema Linux leve, e como tudo funciona e se
inter-relaciona. Uma das melhores coisas que esta experiência de
aprendizado pode proporcionar é a habilidade de customizar um
sistema Linux para se adaptar as suas necessidades únicas.
Outro benefício chave do LFS é
permitir que você tenha mais controle sobre o sistema sem ter que
confiar na implementação de outra pessoa. Com LFS, você está no
assento do motorista e dita cada aspecto do sistema.
LFS permite que você crie um
sistema Linux muito compacto. Quando instalando uma distribuição
regular, você é frequentemente forçado a instalar vários
programas que provavelmente nunca serão usados ou entendidos. Esses
programas desperdiçam recursos. Você pode argumentar que com os
discos rígidos e as CPUs de hoje esses recursos não são mais um
ponto a ser considerado. Algumas vezes, entretanto, você é limitado
por questões de espaço se não por outros pontos. Pense sobre CDs
inicializáveis, pendrives e sistemas embarcados. Essas são área
onde LFS pode ser benéfico.
Outra vantagem de um sistema Linux
customizado é a segurança. Compilando todo o sistema a partir do
código fonte, você tem o poder de auditar tudo e aplicar todos as
correções (patches) de segurança que quiser. Não é mais
necessário esperar que alguém compile um programa que conserte uma
falha de segurança. A menos que você examine o patch e implemente-o
você mesmo, não há garantia de que o novo binário foi construído
corretamente nem que resolve o problema.
O objetivo do LFS é construir um
sistema base completo e utilizável. Se você não se interessa em
construir seu sistema Linux do Zero, você não vai se beneficiar
inteiramente das informações contidas neste livro.
Há muitas outras boas razões para
construir seu próprio sistema LFS para listá-las aqui neste espaço
limitado. No final, educação é de longe a razão mais forte.
Conforme você prossegue com sua experiência, você vai descobrir a
força que a informação e o conhecimento realmente trazem.
Arquiteturas
A principal arquitetura do LFS são
os processadores AMD/Intel x86 (32 bits) e x86_64 (64 bits).
Entretanto as instruções disponíveis neste livro funcionam, com
algumas modificações, com o processador Power PC. Para construir um
sistema que utiliza uma dessas CPUs, o principal pré-requisito, em
adição àqueles que estão nas próximas páginas, é uma
distribuição Linux existente, como um LFS previamente instalado,
Ubuntu, Red Hat/Fedora, SuSE, ou outra distribuição que esteja
disponível para a arquitetura que você tem. Note também que
distribuições de 32-bits também podem ser instaladas e usadas em
um computador com processador AMD/Intel 64-bits.
Alguns outros fatos sobre sistemas
64-bits precisam ser adicionados aqui. Quando comparado com sistemas
32-bits, o tamanho dos executáveis é um pouco maior e são um pouco
mais rápidos. Por exemplo, em um teste de construção do LFS-6.5 em
um processador Core2Duo os seguintes estatísticas foram verificadas:
Architecture
|
Build Time
|
Build Size
|
32-bit
|
198.5 minutes
|
648 MB
|
64-bit
|
190.6 minutes
|
709 MB
|
Como você pode ver, a compilação
no sistema 64-bit é apenas 4% mais rápida e 9% maior que a de
32-bit. Os ganhos de um sistema 64-bit são relativamente mínimos.
Claro, se você tem mais de 4GB de RAM ou quer manipular dados que
excedem 4GB, as vantagens de um sistema 64-bit são substanciais.
O padrão de 64-bit compilado que é
resultante do LFS é considerando um sistema 64-bit “puro”. Ou
seja, ele apenas suporta executáveis 64-bit. Construir um sistema
“mult-lib” requer a compilação de muitos aplicativos duas
vezes, uma para 32-bit e outra para 64-bit. Não é dado suporte
direto para isso porque esse procedimento iria interferir no objetivo
educacional de prover instruções necessárias para um sistema Linux
base limpo. Você pode procurar o projeto “Cross Linux From
Scratch” para esse tópico avançado.
Este é um último comentário sobre
sistemas 64-bit. Há pacotes antigos que não podem ser compilados em
um sistema 64-bit “puro” ou necessitam de instruções
específicas para isso. Geralmente esses pacotes tem instruções
assembly 32-bit embutidas que falham quando compiladas em um sistema
64-bit. Isso inclui alguns drivers Xorg para algumas placas de vídeo
antigas na página
http://xorg.freedesktop.org/releases/individual/driver/.
Muitos desses problemas podem ser resolvidos, mas podem necessitar de
procedimentos específicos ou patches.
LFS e Padrões
A estrutura do LFS segue os padrões
Linux tão rigorosamente quanto possível. Os principais padrões
são:
- POSIX.1-2008
- Filesystem Hierarchy Standard (FHS)
- Linux Standar Base (LSB) Specifications
O LSB tem cinco padrões separados:
Core, C++, Desktop, Runtime Languages (linguagens em tempo de
execução), e Printing(impressão). Em adição aos requerimentos
genéricos há os requerimentos específicos de cada arquitetura. LFS
tenta ficar de acordo com as arquiteturas discutidas na sessão
anterior.
Nota
Muitas
pessoas não concordam com as condições do LSB. O principal
propósito de definir tais condições é garantir que softwares
proprietários possam ser instalados e executados propriamente em um
sistema que esteja de acordo com o referido padrão. Sendo o LFS
baseado em código fonte, o usuário tem total controle sobre que
pacotes ele quer e muitos escolhem não instalar alguns dos pacotes
especificados pelo LSB.
Criar
um sistema LFS capaz de passar nos testes para certificação LSB é
possível, mas não sem a adição de pacotes que transcendem o
escopo do LFS. Esses pacotes adicionais tem instruções para
instalação no BLFS.
Pacotes
disponibilizados pelo LFS que são necessários para satisfazer as
condições do LSB
LSB Core: Bash, Binutils, Coreutils, Diffutils, File,
Findutils, Gawk, Grep, Gzip, M4, ManDB, Ncurses, Procps, Psmisc, Sed,
Shadow, Tar, Util-linux, Zlib
LSB C++: Gcc
LSB Desktop: None
LSB Runtime Languages: Perl
LSB Printing: None
LSB Multimedia: None
Pacotes
disponibilizados pelo BLFS necessários para satisfazer os
requerimentos do LSB
LSB
Core: At, Batch (parte
do At), BC, Cpio, Ed, Fcrontab, Initd-tools, Lsb_release, PAM,
Sendmail ( ou Postfix ou Exim)
LSB
C++: None
LSB
Desktop: ATK, Cairo,
Desktop-file-utils, Freetype, Fontconfig, Glib2, GTK+2,
Icon-naming-utils, Libjpeg, Libpng, Libxml2, MesaLib, Pango, Qt3,
Qt4, Xorg
LSB
Runtime Languages:
Python
LSB
Printing: CUPS
LSB
Multimedia: Alsa
Libraries, NSPR, NSS, OpenSSL, Java, Xdg-utils
Pacotes
não suportados pelo LFS ou BLFS necessários para satisfazer os
requerimentos do LSB
LSB Core: None
LSB C++: None
LSB Desktop: None
LSB Runtime Languages: None
LSB Printing: None
LSB Multimedia: None
Justificativa para os pacotes no Livro
Como dito anteriormente, o objetivo
do LFS é construir um sistema em nível de base completo e
funcional. Isso inclui todos os pacotes necessários para replicá-lo
ao tempo que disponibiliza uma base relativamente pequena sobre a
qual o usuário pode customizar um sistema mais completo baseado em
suas próprias escolhas. Isso não significa que o LFS é o menor
sistema possível. Vários pacotes importantes estão inclusos, mas
não são estritamente necessários. A lista abaixo documenta a
justificativa para cada pacote no livro.
- Autoconf: Este pacote contém programas para produzir “shell scripts” que podem configurar automaticamente o código fonte a partir de um modelo. É geralmente necessário para reconstruir um pacote após atualizações nos procedimentos de construção do referido pacote.
- Automake: Este pacote contém programas para gerar “Make files” a partir de um modelo. É geralmente necessário para reconstruir pacotes após atualizações no processo de construção do referido pacote.
- Bash: Este pacote satisfaz um requerimento do LFS Core para disponibilizar uma interface Burn Shell para o sistema. Foi escolhido pelo seu uso comum e por suas capacidades que transcendem as funções básicas do shell.
- Binutils: esse pacote contém um linker, um assembler e outras ferramentas para manipular “object files”. Os programas neste pacote são necessários para compilar a maioria dos pacotes no LFS além de muitos outros.
- Bison: Este pacote contém a versão GNU do yacc ( Yet Another Compiler Compiler) necessário para construir vários outros programas no LFS.
- Bzip2: Este pacote contém programas para compressão e descompressão de arquivos. É necessário para descomprimir vários pacotes no LFS.
- Check: Este pacote contém um conjunto de ferramentas de teste para outros programas. É instalado apenas nas ferramentas temporárias.
- Coreutils: Este pacote contém vários programas essenciais para visualização e manipulação de arquivos e diretórios. Esses pacotes são necessários para o gerenciamento de arquivos por linha de comando e para a instalação de todos os pacotes do LFS.
- DejaGNU: Este pacote contém um sistema para testar outros programas. É instalado apenas nas ferramentas temporárias.
- Diffutils: Este pacote contém programas que mostram as diferenças entre arquivos ou diretórios. Esses programas podem ser usados para criar patches e também são usados na construção de vários pacotes.
- E2fsprogs: Este pacote contém os utilitários para manipular os sistemas de arquivos ext2, ext3, ext4. Esses são os sistemas mais comuns e testados que o Linux suporta.
- Expect: Este pacote contém programas que executam scripts de diálogos com outros programas interativos. É comumente usado para testar outros pacotes. É instalado apenas nas ferramentas temporárias.
- File: Este pacote é usado para determinar o tipo de um dado arquivo ou arquivos. Poucos pacotes precisam deles para serem construídos.
- Findutils: Este pacote contém programas para encontrar arquivos em um sistema de arquivos. É usado em muitos scripts de construção.
- Flex: Este pacote serve para gerar programas que reconhecem padrões em textos. É a versão GNU do programa lex (lexical analizer). É necessário para construir vários programas no LFS.
- Gawk: Este pacote contém programas para manipular arquivos de texto. É a versão GNU do awk (Aho-Weinberg-Kernighan). É usado no script de construção de vários outros pacotes.
- Gcc: Este pacote é o Gnu Compiler Collection. Ele contém os compiladores C e C++ assim como vários outros não construídos no LFS.
- GDBM: Este pacote contém o GNU Database Manager Library. É usado por um outro pacote no LFS, o Man-DB.
- Gettext: Este pacote contém utilitários e bibliotecas para internacionalização e localização de vários pacotes.
- Glibc: Este pacote contém a biblioteca C principal. Programas Linux não funcionariam sem isso.
- GMP: Este pacote contém bibliotecas matemáticas que contém funções úteis para aritmética de precisão arbitrária. É necessário para compilar Gcc.
- Grep: Este pacote contém programas para procurar dentro de arquivos. Esses programas são usados pela maioria dos scripts para construção de pacotes.
- Groff: Este pacote contém programas para processamento e formatação de texto. Uma função importante desses programas é formatar páginas de manuais (man pages).
- GRUB: Este é o Grand Unified Boot Loader. É um dos vários gerenciadores de inicialização disponíveis, mas é o mais flexível.
- Gzip: Este pacote contém programas para compressão e descompressão de arquivos. É necessário para descomprimir vários pacotes no LFS.
- Iana-etc: Este pacote provê dados para serviços e protocolos de rede. É necessário para habilitar suporte a rede adequado.
- Inetutils: Este pacote contém programas para administração básica de rede.
- IProute2: Este pacote contém programas básicos e avançados para redes IPv4 e IPv6. Foi escolhido em detrimento de outros pelo seu suporte a IPv6.
- Kbd: Este pacote contém arquivos com tabelas de caracteres, utilitários para teclados que não são estadunidenses (non-US keyboards) e várias fontes.
- Kmod: Este pacote contém programas para administrar os módulos do kernel do Linux.
- Less: Este pacote contém um visualizador de textos muito bom que permite rolar o texto para cima ou para baixo. É também usado pelo Man-DB para visualizar páginas de manuais.
- Libpipeline: O pacote Libpipeline contém bibliotecas para manipular pipelines de sub-processos de uma maneira flexível e conveniente. É necessário para pacote Man-DB.
- Libtool: Este pacote contém bibliotecas genéricas para suporte a scripts. Ele esconde a complexidade do uso de bibliotecas compartilhadas em uma interface consistente e portável. É necessário para as ferramentas de testes de outros pacotes do LFS.
- Linux Kernel: Este pacote é o Sistema Operacional. É o Linux no ambiente GNU/Linux.
- M4: Este pacote contém um processador de textos útil como ferramenta de construção para outros programas.
- Make: Este pacote contém programas para direcionar a construção de pacotes. É necessário para quase todos os pacotes no LFS.
- Man-DB: Este pacote contém programas para encontrar e visualizar páginas de manuais. Fui escolhido em detrimento do pacote man devido a capacidades de internacionalização superiores. Ele faz as vezes do man.
- Man-pages: Este pacote contém o conteúdo básico das páginas de manual do Linux.
- MPC: Este pacote contém funções para aritmética de números complexos. É necessário para Gcc.
- MPFR: Este pacote contém funções para aritmética de funções múltiplas. É necessário para Gcc.
- Ncurses: Este pacote contém bibliotecas para manipulação de caracteres de forma independente do terminal. É utilizado geralmente para disponibilizar controle de cursor em um sistema com menus. É necessária para vários pacotes do LFS.
- Patch: Este pacote contém um programa para modificar ou criar arquivos aplicando um arquivo “patch” tipicamente criado pelo programa diff. É necessário para construir vários pacotes LFS.
- Perl: Este pacote é um interpretador para a linguagem PERL. É necessário para instalação e ferramentas de teste de vários pacotes no LFS.
- Pkg-config: Este pacote contém um programa que retorna meta-dados sobre uma biblioteca ou pacote instalado.
- Procps-NG: Este pacote contém programas para monitorar processos. Esses programas são úteis para administradores de sistemas, e são também usados pelos scripts de inicialização do LFS.
- Psmisc: Este pacote contém programas para mostrar informações sobre processos que estão rodando. Esses programas são úteis para administradores de sistemas.
- Readline: Este pacote é um conjunto de bibliotecas que oferecem capacidade para edição por linha de comando e histórico. É usado pelo Bash.
- Sed: Este pacote permite a edição de texto sem abri-lo em um editor de textos. É também necessário para a maioria dos scripts de configuração dos pacotes do LFS.
- Shadow: Este pacote contém programas para manipulação de senhas de uma maneira segura.
- Sysklogd: Este pacote contém programas para registro de mensagens do sistema, tais como aqueles enviadas pelo kernel ou por daemons quando um evento não-usual acontece.
- Sysvinit: Este pacote disponibiliza o programa init, o qual é “pai” de todos os outros processos no sistema Linux.
- Tar: Este pacote provê capacidade de empacotamento e extração de virtualmente todos os pacotes usados no LFS.
- Tcl: Este pacote contém a Linguagem de Comando de Ferramentas (Tool Command Language) usada por muitas ferramentas de teste nos pacotes do LFS. É instalado apenas nas ferramentas temporárias.
- Texinfo: Este pacote contém programas para leitura, escrita e conversão de páginas info. É usado nos procedimentos de instalação de vários pacotes LFS.
- Udev: Este pacote contém programas para a criação dinâmica de nós de dispositivos (device nodes). É uma alternativa à criação de milhares de dispositivos estáticos no diretório /dev.
- Util-linux: Este pacote contém uma variedade de aplicativos utilitários. Entre eles estão ferramentas para manipulação de sistemas de arquivos, consoles, partições e mensagens.
- Vim: Este pacote contém um editor. Ele foi escolhido por sua compatibilidade com o clássico editor vi e o número gigante de habilidades poderosas. Um editor é uma escolha muito pessoal para muitos usuários e um outro editor poderia ser substituído se assim desejar.
- XZ Utils: Este pacote contém programas para compressão e descompressão de arquivos. Ele tem a maior taxa de compressão geralmente disponível e é útil para descomprimir pacotes nos formatos XZ ou LZMA.
- Zlib: Este pacote contém rotinas para compressão e descompressão usadas por alguns programas.
Pré-requisitos
Construir um sistema
LFS não é uma tarefa simples. Esta tarefa requer um certo nível de
conhecimento de administração de sistemas Unix para resolver
problemas e executar as linhas de comandos listadas corretamente. Em
particular, no mínimo, você deveria ter a habilidade de usar linha
de comando (shell) para copiar ou mover arquivos e diretórios,
listar diretórios e conteúdos de arquivos, e navegar entre os
diretórios. Também é de se esperar que você tenha um conhecimento
razoável sobre como usar e instalar software no Linux.
Devido ao fato do livro
LFS assumir que você tem no mínimo esse nível básico de
habilidades, os vários fóruns de suporte do LFS não serão
adequados para ajudá-lo nessas áreas. Você vai perceber que suas
perguntas com relação a esse conhecimento básico não serão
respondidas ou serão remetidas à lista de itens essenciais de
pré-leitura.
Antes de construir um
sistema LFS nós recomendamos a leitura dos seguintes HOWTOs:
- Software-Building-HOWTO http://www.tldp.org/HOWTO/Software-Building-HOWTO.htmlEste é um guia compreensivo de como construir e instalar pacotes de software Unix “genéricos” no Linux. Embora tenha sido escrito há algum tempo, este guia ainda fornece um bom resumo das técnicas básicas necessárias para construir e instalar programas.
- O Guia do usuário do Linux http://tldp.org/pub/Linux/docs/ldp-archived/users-guide/Este guia cobre o uso de vários softwares do Linux. Esta referência também é antiga, mas ainda é válida.
- Dica essencial de pré-leitura http://www.linuxfromscratch.org/hints/downloads/files/essential_prereading.txtEssa é uma dica do LFS especialmente escrita para usuários novos no Linux. Ele inclui uma lista de links excelentes para fontes de informação sobre uma vasta gama de tópicos. Qualquer um tentando instalar LFS deveria ter um entendimento sobre muitos dos tópicos nessa dica.
Exigências de Sistema
O seu sistema deve ter
os seguintes programas com as versões mínimas indicadas. Esse não
deve ser um problema para a maioria das distribuições Linux
modernas. Note também que muitas distribuições colocarão os
cabeçalhos dos programas em pacotes separados, frequentemente na
forma “<nome do pacote>-devel” ou “<nome do
pacote>-dev”. Certifique-se de instalar tais pacotes se sua
distribuição os fornece.
Versões anteriores dos
programas listados podem funcionar, mas não foram testadas.
- Bash-3.2 (/bin/sh deve ser um link simbólico ou um hard link para o bash)
- Binutils-2.17 (versões superiores a 2.23.1 não são recomendadas porque não foram testadas)
- Bison-2.3 (/usr/bin/yacc deve ser um link para bison ou um pequeno script que o executa)
- Bzip2-1.0.4
- Coreutils-6.9
- Diffutils-2.8.1
- Findutils-4.2.31
- Gawk-3.1.5(/usr/bin/awk deve ser um link para gawk)
- Gcc-4.1.2 (Versões superiores a 4.7.2 não são recomendadas porque não foram testadas)
- Glibc-2.5.1(Versões superiores a 2.17 não são recomendadas porque não foram testadas)
- Grep-2.5.1a
- Gzip-1.13.12
- Linux Kernel-2.6.25 (sendo compilado com GCC-4.1.2 ou superior)
A razão para o
requisito da versão do kernel é que esta versão deve ser
especificada quando compilando glibc no Capítulo 6 nas recomendações
dos desenvolvedores. É também necessária para o udev.
Se o kernel do sistema
anfitrião é mais antigo que 2.6.25, ou não foi compilado com
GCC-4.1.2 (ou superior), você vai precisar substituir o kernel por
um que esteja de acordo com as especificações. Há dois caminhos a
serem seguidos nessa situação. Primeiro, veja se seu fornecedor
Linux disponibiliza pacotes de kernel 2.6.25 ou posteriores. Caso
sim, então instale. Se o seu fornecedor não disponibiliza um pacote
de kernel aceitável, ou você prefere não instalar, você pode
compilar um kernel. Instruções para compilação do kernel e
configuração do boot loader (considerando que o sistema anfitrião
usa o GRUB) estão localizadas no Capítulo 8.
- M4-1.4.10
- Make-3.81
- Patch-2.5.4
- Perl-5.8.8
- Sed-4.1.5
- Tar-1.18
- Texinfo-4.9
- Xz-5.0.0
Note que os links
simbólicos (symlink) mencionados acima são necessários para
construir um sistema LFS usando as instruções contidas neste livro.
Symlinks que apontam para outros programas (como dash, mawk, etc.)
podem funcionar, mas não foram testados ou não receberam suporte da
equipe de desenvolvimento do LFS, e podem necessitar tanto de
instruções adicionais ou patches para outros pacotes.
Para ver se seu sistema
anfitrião tem todas as versões apropriadas, e a capacidade de
compilar programas, execute o seguinte código:
cat >
version-check.sh << "EOF"
#!/bin/bash
#Script
simples para listar o numero de versao das ferramentas de
desenvolvimento criticas
export
LC_ALL=C
bash
--version | head -n1 | cut -d" " -f2-4
echo
"/bin/sh -> `readlink -f /bin/sh`"
echo -n
"Binutils: "; ld --version | head -n1 | cut -d" "
-f3-
bison
--version | head -n1
if [ -e
/usr/bin/yacc ];
then echo
"/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
else echo
"yacc not found"; fi
bzip2
--version 2>&1 < /dev/null | head -n1 | cut -d" "
-f1,6-
echo -n
"Coreutils: "; chown --version | head -n1 | cut -d")"
-f2
diff
--version | head -n1
find
--version | head -n1
gawk
--version | head -n1
if [ -e
/usr/bin/awk ];
then echo
"/usr/bin/awk -> `readlink -f /usr/bin/awk`";
else echo
"awk not found"; fi
gcc
--version | head -n1
ldd
--version | head -n1 | cut -d" " -f2- # glibc version
grep
--version | head -n1
gzip
--version | head -n1
cat
/proc/version
m4
--version | head -n1
make
--version | head -n1
patch
--version | head -n1
echo Perl
`perl -V:version`
sed
--version | head -n1
tar
--version | head -n1
echo
"Texinfo: `makeinfo --version | head -n1`"
xz
--version | head -n1
echo
'main(){}' > dummy.c && gcc -o dummy dummy.c
if [ -x
dummy ]
then echo
"gcc compilation OK";
else echo
"gcc compilation failed"; fi
rm -f
dummy.c dummy
EOF
bash
version-check.sh
Tipografia
Para fazer as coisas
mas fáceis de serem seguidas, há algumas convenções tipográficas
usadas neste livro. Esta sessão contém alguns exemplos da
formatação tipográfica encontrada neste livro.
./configure
–prefix=/usr
Esta forma de texto deve ser digitada do jeito que está, a menos que
seja dito o contrário no texto. É também usada na sessão de
explicação para identificar quais dos comandos estão sendo
referenciados.
Em alguns casos, uma linha lógica é estendida em duas ou mais
linhas físicas com uma barra invertida no final da linha.
CC="gcc
-B/usr/bin/" ../binutils-2.18/configure \
--prefix=/tools
--disable-nls --disable-werror
Note que a barra invertida deve ser seguida imediatamente por uma
quebra de linha. Outros espaços em branco como tabulação criarão
resultados incorretos.
install-info:
unknown option '--dir-file=/mnt/lfs/usr/info/dir'
Esta
forma de texto ( largura fixa) mostra a saída da tela, geralmente
como resultado de um comando executado. Esse formato é também
utilizado para mostrar nomes de arquivos, como /etc/ld.so.conf.
Ênfase
Esta forma de texto é usada para vários propósitos neste livro.
Seu propósito principal é enfatizar pontos ou itens importantes.
Esta formatação é usada para hiperlinks tanto dentro da comunidade
LFS quanto em páginas externas. Isso inclui HOWTOs, localizações
de downloads e páginas da internet.
cat > $LFS/etc/group << "EOF"
root:x:0:
bin:x:1:
......
EOF
Esse formato é usado quando arquivos de
configuração são criados. O primeiro comando diz para o sistema
criar o arquivo $LFS/etc/group
a partir do que quer que seja digitado nas linhas seguintes até
encontrar a sequência “End Of File” (EOF). Portanto, toda essa
sequência é geralmente digitada da maneira como é vista.
<TEXTO
SUBSTITUÍDO>
Este formato é usado para encapsular texto que não deve ser
digitado como visto ou para operações de “copiar-colar”.
[TEXTO
OPCIONAL]
Este formato é usado para encapsular texto que é opcional.
passwd(5)
Este formato é usado para referir-se a uma página
de manual específica (man). O número entre parênteses indica uma
seção específica dentro do manual. Por exemplo, passwd
tem duas páginas de manual. Conforme as instruções de instalação
do LFS, essas duas páginas estarão localizadas em
/usr/share/man/man1/passwd.1
e /usr/share/man/man5/passwd.5.
Quando o livro usa passwd(5)
ele está se referindo especificamente a
/usr/share/man/man5/passwd.5.
man
passwd
irá exibir a primeira página de manual que corresponde a “passwd”,
a qual será /usr/share/man/man1/passwd.1.
Para este exemplo em particular, você precisará executar o comando
man
5 passwd para
ler a página especifica que está sendo referenciada. Deve-se notar
que a maioria das páginas de manual não possuem nomes de páginas
duplicados em diferentes seções. Portanto, man
<nome
do programa>
geralmente é suficiente.
Estrutura
Este livro é dividido nas
seguintes partes.
Parte I – Introdução
Parte I explica algumas
notas importantes sobre como proceder com a instalação do LFS. Essa
seção também fornece meta-informação sobre o livro.
Parte II – Preparando para Construção
Parte II descreve como
se preparar para o processo de construção – fazendo uma partição,
baixando os pacotes, e compilando as ferramentas temporárias.
Parte II – Construindo o Sistema LFS
Parte III guia o leitor
pela construção do sistema LFS – compilando e instalando todos os
pacotes, um por um, configurando o script de inicialização e
instalando o kernel. O sistema Linux resultante é a base sobre a
qual outros programas podem ser construídos para expandir o sistema
conforme desejado. No final deste livro, há uma lista de referência
de fácil uso com todos os programas, bibliotecas e arquivos
importantes que foram instalados.
Errata
Os programas
utilizados para criar o LFS estão sendo constantemente atualizados e
melhorados. Avisos de segurança e correções de erros podem ser
disponibilizados após a liberação do livro LFS. Para checar se
versões de pacotes ou instruções nesta versão do LFS necessitam
de modificações para acomodar vulnerabilidades ou corrigir erros,
por favor visite http://www.linuxfromscratch.org/lfs/errata/7.3/
antes de continuar com a construção do sistema. Você deve tomar
nota de quaisquer mudanças e aplicá-las à seção relevante do
livro conforme você constrói o sistema LFS.
Nenhum comentário:
Postar um comentário