Linux do Zero (LFS)

Versão 8.1

Criado por Gerard Beekmans

Edição: Bruce Dubbs

Tradução: @artfesg


Sumário

i. Prólogo

Minha jornada para aprender e entender melhor o Linux começou há mais de uma década, em 1998. Eu tinha acabado de instalar minha primeira distribuição Linux e rapidamente fiquei intrigado com toda a concepção e filosofia pro trás do Linux.

Há diversas maneiras de se realizar uma única tarefa. O mesmo pode ser dito sobre distribuições Linux. Houve muitas ao longo dos anos. Algumas continuam a existir, outras se transformaram em outra coisa, enquanto outras foram relegadas às nossas memórias. Todas fazem coisas diferentes para servirem aos seus públicos-alvo. Por existirem maneiras tão diferentes de atingir o mesmo objetivo, eu comecei a perceber que eu não tinha mais que ser limitado por qualquer implementação que fosse. Antes de descobrir o Linux, nós simplesmente toleramos alguns problemas em outros sistemas operacionais já que não há outra escolha. Era como era, gostando você ou não. Com o Linux, o conceito de escolha começa a surgir. Se você não gosta de algo, você é livre e até incentivado a mudá-lo.

Eu testei várias distribuições e não pude decidir sobre qualquer uma. Eram grandes sistemas em seus limites. Isto passou a não ser uma questão de certo ou errado. Isto passou a ser uma questão de gosto pessoal. Com todas essas opções disponíveis, começou a parecer que não poderia haver um único sistema que fosse perfeito para mim. Então, eu decidi criar meu próprio sistema Linux, que fosse completamente de acordo com as minhas preferências pessoais.

Para verdadeiramente fazer meu próprio sistema, eu resolvi compilar tudo a partir do código-fonte em vez de usar pacotes binários pré-compilados. Esse sistema Linux "perfeito" deveria ter os pontos fortes de vários sistemas sem os pontos fracos já percebidos. Primeiramente, a ideia era bastante assustadora. Mas eu continuava com a ideia de que um sistema poderia ser construído.

Após enfrentar problemas como dependências circulares e erros de tempo de compilação, eu finalmente construí um sistema Linux customizado. Ele era totalmente operacional e perfeitamente utilizável como qualquer outro sistema Linux. Mas era a minha própria criação. Foi bastante satisfatório construir um sistema sozinho. Ecrever cada pedaço de cada programa seria a única coisa melhor do que isso.

Conforme eu compartilhava meus êxitos e experiências com outros membros da comunidade Linux, ficou aparente que havia um interesse firme nessas ideias. Rapidamente ficou claro que uma construção Linux customizada serve não apenas para conhecer as necessidades específicas de cada usuário, mas também serve para uma oportunidade ideal de aprendizagem para programadores e administradores de sistemas reforçarem suas habilidades (já existentes) em Linux. Para além deste objetivo amplo, o projeto Linux do Zero nasceu.

Este livro é o núcleo central desse projeto. Ele provê o conhecimento e as instruções necessárias para você projetar e construir seu próprio sistema. Enquanto este livro fornece um modelo que resulta em um sistema corretamente funcional, você é livre para alterar as instruções para atender a você mesmo, que é, em parte, uma parte importante deste projeto. Você permanece no controle; nós apenas oferecemos uma ajuda para você começar a sua própria jornada.

Eu sinceramente espero que você obtenha êxito em construir seu próprio sistema Linux do Zero e aproveite os inúmeros benefícios de ter um sistema que é verdadeiramente seu.

--
Gerard Beekmans
gerard@linuxfromscratch.org

ii. Público-alvo

Há muitas razões pelas quais você dever querer ler este livro. Uma das questões que muita gente levanta é "por que se embananar construindo manualmente um sistema Linux do zero quando você pode apenas baixar e intalar uma dsitribuição já existente?".

Uma razão importante para a existência deste projeto é ajudar você a aprender como um sistema Linux funciona de dentro para fora. Construindo um Linux do zero ajuda a demonstrar o que faz o Linux ser rápido, e como as coisas funcionam em conjunto e dependem umas das outras. Uma das melhores coisas que essa experiência de aprendizagem pode fornecer é a habilidade par acustomizar um sistema Linux para cumprir susas próprias necessidades.

Outro benefício chave do Linux do Zero é permitir que você tenha mais controle sobre o sustema sem depender de alguma implementaão Linux alheia. Com o Linux do Zero você está no controle e é capaz de ditar cada aspecto do sistema.

O Linux do Zero permite que você crie sistemas Linux bastante compactos. Ao instalar uma distribuição regular, geralmente você geralmente é forçado a uma grande quantidade de progrmas que você nunca vai usar ou entender.E estes programas consomem recursos. Você pode dizer que as CPU's e os discos rígidos fazem com que esta não seja uma preocupação importante. Porém, às vezes você precisa sim levar em consideração as limitações de armazenamento, dentre outras. Pense em CD's inicializáveis, pendrives, e sistemas embarcados. São nestas sistuações em quem o Linux do Zero pode ser interessante.

Outra vantagem de uma construção Linux customizada é a segurana. Compilando um sistema inteiro do código-fonte, você tem o poder de inspecionar absolutamente tudo e aplicar todas as correções de segurança que você quiser, não sendo mais necessário esperar que alguém compile pacotes binários que corrijam falahas de segurança. A menos que você examine a correção e implemente-a sozinho, você não tem garantia alguma de que o novo pacote binário foi construído corretamente e corrige o problema da forma adequada.

O objetivo do Linux do Zero é construir um sistema fundamentalmente completo e utilizável. Se você não quer construir seu sistema Linux do zero, você pode não se beneficiar completamente de toda a informação aqui constante.

Existem inúmeras outras boas razões para construir seu próprio sistema Linux do Zero. Ao fim e ao cabo, conhecimento é de longe a razão mais importante. Conforme você prosseguir na experiência Linux do Zero, você vai descobrir o poder que a informação e o conhecimento realmente trazem.

iii. Arquiteturas de destino

As principais arquiteturas visadas pelo Linux do Zero são as CPU's AMD/Intel x86 (32 bits) e x86_64 (64 bits). Por outro lado, as instruções deste livro também podem funcionar, com algumas modificações, para as CPU's Power PC e ARM. Para construir um sistema que utiliza uma destas CPU's, o principal pré-requisito, junto a outros vistos mais adiante, é um sistema Linux, como um Linux do Zero instalado previamente, Ubuntu, Red Hat/ Fedora, SuSE, ou outra distribuição rodando na arquitetura de destino. Note também que um distribuição de 32 bits pode ser instalada e usada como um sistema anfitrião em um computador AMD/Intel de 64 bits.

Alguns outros fatos sobre sistemas de 64 bits merecem ser aqui mencionados. Quando comparado a um sitema de 64 bits, o tamanho do arquivo executável é consideravelmente maior e a velocidade de execução é levemente mais rápida. Por exemplo, numa construção de testes Linux do Zero 6.5, numa CPU Core 2 Duo, foram obtidas as seguintes estatísticas:

Arquitetura  Tempo de construção     Tamanho da construção
32-bit       198.5 minutos           648 MB
64-bit       190.6 minutos           709 MB

Como se pode ver, uma construção de 64 bits é apenas 4% mais rápido e 9% maior do que uma construção de 32 bits. O ganho obtido por um sistema de 64 bits é relativamente mínimo. Com efeito, se você tem mais de 4GB de RAM ou quer manipular dados que excedem o tamanho de 4GB, as vantagens de um sistema de 64 bits são substanciais.

Uma construção Linux do Zero padrão de 64 bits é considerada um sistema de 64 bits "puro". Isto é, suporta apenas executáveis de 64 bits. Se for pra cosntruir um sistema "multi-lib", é preciso compilar muitos programas duas vezes: uma para 32 bits e outra para 64 bits. Isto não é diretamente suportado no Linux do Zero porque acabaria afetando o objetivo educacional de prover as instruções necessárias para uma base sólida em sistemas Linux. Você pode consultar o projeto Linux do Zero Cruzado para maiores informações sobre este tópico avançado.

iv. Padrões

A estrutura do Linux do Zero segue os padrões Linux o máximo quanto possível. os principais são:

Criar um sistema Linux do Zero 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, Bc, Binutils, Coreutils, Diffutils, File, Findutils, Gawk, Grep, Gzip, M4, Man-DB, Ncurses, Procps, Psmisc, Sed, Shadow, Tar, Util-linux, Zlib

LSB Desktop:

Nenhum

LSB Runtime Languages:

Perl

LSB Imaging:

Nenhum

LSB Gtk3 e LSB Graphics (experimentais):

Nenhum

Pacotes disponibilizados pelo BLFS necessários para satisfazer os requisitos do LSB

LSB Core:

At, Batch (uma parte do At), Cpio, Ed, Fcrontab, Initd-tools, Lsb_release, NSPR, NSS, PAM, Pax, Sendmail (ou Postfix ou Exim), time

LSB Desktop:

Alsa, ATK, Cairo, Desktop-file-utils, Freetype, Fontconfig, Gdk-pixbuf, Glib2, GTK+2, Icon-naming-utils, Libjpeg-turbo, Libpng, Libtiff, Libxml2, MesaLib, Pango, Qt4, Xdg-utils, Xorg

LSB Runtime Languages:

Python, Libxml2, Libxslt

LSB Imaging:

CUPS, Cups-filters, Ghostscript, SANE

LSB Gtk3 e LSB Graphics (experimentais):

GTK+3

Pacotes não suportados pelo LFS ou BLFS necessários para satisfazer os requisitos do LSB

LSB Core:

Nenhum

LSB Desktop:

Nenhum

LSB Runtime Languages:

Nenhum

LSB Imaging:

Nenhum

LSB Gtk3 e LSB Graphics (experimentais):

Nenhum

v. Justificativa para pacotes no livro

Como estabelecido anteriormente, o objetivo do LFS é compilar um sistema básico completo e utilizável. Isso inclui todos os pacotes necessários para replicálo enquenato provê uma base relativamente mínima através da qual seja possível customizar um sistema mais completo de acordo com as escolhas do usuário. Isto não quer dizer que o LFS é o menor sistema possível. Há muitos pacotes importantes inclusos que não são estritamente requeridos. A lista abaixo contém as justificativa para cada pacote incluso neste livro.

vi. Prerrequisitos

Compilar um sistema LFS não é uma tarefa simples. Requer um certo nível de conhecimento de adminsitração de sistemas Unix a fim de resolver problemas e executar corretamente os comandos listados.Em particular, como algo absolutamente mínimo, você deve já possuir a habilidade de usar a linha de comando para copiar ou mover arquivos e pastas, listar conteúdos de pastas e mudar o diretório atual. É também esperado que você tenha um conhecimento razoável sobre utilização e instalação de programas no Linux.

Porque o livro supõe ao menos este nível básico de perícia, os vários fóruns LFS de suporte provavelmente não são aptos a fornecerem a ti ajuda nessas áreas. Você vai perceber que seus questionamentos versando sobre conhecimentos básicos serão ignorados ou respondidos com uma lista de pré-leitura para o LFS.

Antes de compilar um sistema LFS, recomenda-se ler o seguinte: