2013-02-19

Linux Radical Parte I: Comparar LFS, Gentoo e Arch Linux


Embora Ubuntu seja a distribuição Linux mais conhecida para o utilizador final, os profissionais e hobbyistas extremos optam por distribuições menos conhecidas mas com outras grandes vantagens.

Porquê gastar tempo com isso? Quais são os problemas principais de distribuições como Fedora, Debian e Ubuntu?

Por um lado elas têm um processo que não incentiva a conhecer o sistema mas apenas a usá-lo, por outro instalam quase tudo o que você não usa. E utilizam quantidades relativamente grandes de recursos, numa altura em que a poupança energética é importante.

A vantagem principal destas distribuições é óbvia: apresentam um sistema com tudo pronto a funcionar.

Nesta série de posts vamos analisar três distribuições "extremas" que são muito apetecíveis: são elas a LFS, Gentoo e Arch, cada uma diferente mas aliciante.

Neste post vamos resumir a LFS, que, como veremos não é propriamente uma "distro".

Leia também: Parte II: Arch Linux e Parte III: Gentoo (em breve).



LFS (Linux From Scratch)

Adeptos da LEGO(tm), rejubilem!

O LFS é um projeto educativo, uma distribuição em forma de... documentação (!!!) que mostra como construir o sistema peça por peça e passo a passo. É a mais radical de todas e a que mais "abre os olhos" aos novos administradores de sistema!

OK, pode ser batota dizer que é uma distribuição, mas considere que é uma distro "manual" pois acaba por ter o sistema instalado completo.

O projeto evoluiu de um livro para vários livros, que ensinam como criar um sistema seguro, um LiveCD, etc.

O sistema é construído usando uma distribuição já existente que providencia as ferramentas necessárias: um compilador, um linker, um terminal, etc. Afinal é preciso um programa para fazer um programa e um sistema para fazer um sistema!

Tudo começa com a criação de uma partição de disco, onde será construído o sistema.

Depois é baixado o código fonte das seguintes utilidades: autoconf, automake, bash, binutils, bison, bzip2, check, coreutils, dejaGNU, diffutils, e2fsprogs, expect, file, findutils, flex, gawk, gcc, gdbm, gettext, glibc, gmp, grep, groff, grub, gzip, iana-etc, inetutils, iproute2, kbd, kmod, less, lfs-bootsctipts, libpipeline, libtool, linux, m4, make, man-db, man-pages, mpc, mpfr, ncurses, patch, perl, pkg-config, procps, psmisc, readline, sed, shadow, sysklogd, sysvinit, tar, tcl, tzdata, textinfo, systemd, udev-lfs, util-linux, vim, xz e zlib.

Conforme se compreende, não são usados pacotes pré-compilados, aqui os pacotes são código-fonte puro e baixados do seu "fabricante" original.

Alguns patches são também descarregados e os programas são todos colocados num diretório /tools usando um utilizador normal para compilar, de forma a não destruir o sistema por engano.

A maioria dos pacotes traz um conjunto de testes que é boa ideia executar. Com tudo isto é criado um sistema temporário mínimo em dois passos: primeiro é construída uma cadeia de ferramentas independentes para compilação (compilador, assemblador, linker, bibliotecas e algumas outras utilidades). O segundo passo é construir as restantes ferramentas essenciais.

O pacote binutils contém um linker, um assembler e outras ferramentas. O GCC contém uma coleção de compilador C e C++.

De seguida são disponibilizados os headers do Linux, que é código que expõe a API do kernel para ser usada pela bilblioteca C. Isto é preciso logo de início porque as utilidades necessitam desses dados para que possam compilar.

Glibc é o pacote principal que contém a biblioteca C, providenciando as rotinas básicas para alocar memória, procurar diretórios, abrir e fechar ficheiros, ler e escrever em ficheiros, manipular strings, busca de padrões, aritmética, etc. É também essencial ter isto disponível à partida.

Binutils contêm um linker, um assembler e outras ferramentas para manipular ficheiros-objeto e GCC significa Gnu Compiler Collection.

Assim, sucessivamente, e por determinada ordem, as ferramentas são compiladas a partir diretamente do código-fonte. É comum cada pacote ter várias ferramentas. Por exemplo, util-linux contém as seguintes:

addpart, agetty, blkid, blockdev, cal, cfdisk, chcpu, chkdupexe, chrt, col, colcrt, colrm, column, ctrlaltdel, cytune, delpart, dmesg, fallocate, fdformat, fdisk, findfs, findmnt, flock, fsck, fsck.cramfs, fsck.minix, fsfreeze, fstrim, getopt, hexdump, hwclock, i386, ionice, ipcmk, ipcrm, ipcs, isosize, ldattach, linux32, linux64, logger, look, losetup, lsblk, lscpu, mcookie, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap, more, mount, mountpoint, namei, partx, pg, pivot_root, prlimit, raw, readprofile, rename, renice, rev, rtcwake, script, scriptreplay, setarch, setsid, setterm, sfdisk, swaplabel,
swapoff (link to swapon), swapon, switch_root, tailf, taskset, tunelp, ul, umount,
unshare, uuidd, uuidgen, wall, whereis, wipefs, e x86_64.

Bom, então depois de compilar isto tudo, passa-se a scripts de sistema que vão estar coordenados para funcionarem na altura em que se liga o computador. As tarefas destes scripts é serem a "cola" que liga todo o sistema. Eles tratam de ligar à rede, detetar dispositivos ligados ao PC, no fundo fazer todo o sistema funcionar como se fosse um só. Mas como sabemos, os sistemas baseados em UNIX são muito, muito modulares e por isso muito apelativos.

Parte da questão é o carregamento de módulos do núcleo do sistema. O Linux é um kernel modular e que permite carregar módulos "a quente". Também nesta fase é tratada a configuração dos "serviços", que são automaticamente iniciados quando se faz o boot e automaticamente desligados quando se encerra o sistema.

É preciso também tornar o sistema "bootável", criando o ficheiro /etc/fstab.

Depois obviamente é preciso compilar o núcleo, o "Linux" propriamente dito. Isso envolve vários passos, a configuração, compilação e instalação. Depois é preciso especificar a ordem de carregamento dos módulos do núcleo.

Por fim, um sistema não funciona sem um bootloader. É preciso configurar o GRUB para que o sistema possa iniciar.

Com isto o sistema fica instalável!

Este é apenas um pequeno resumo. As 352 páginas do Linux From Scratch ensinam tudo o que é preciso. 

Se parece muito, a verdade é que o LFS é apenas o início. O site também tem:

- BLFS (Beyond Linux From Scratch), que começa onde acaba o LFS para ajudar os utilizadores a instalar uma quantidade de pacotes sobre o LFS a partir do ponto em que este ficou;

- ALFS (Automated Linux From Scratch), que desenvolve um framework para um construtor de sistema e gestor de pacotes

- CLFS (Cross-Linux From Scratch), que ensina como criar um cross-compiler e portar o Linux para outras plataformas como x86_64, mips, alpha, sparc, hppa, arm.

- HLFS (Hardened Linux From Scratch) - é uma variante de LFS que ensina a criar um sistema especialmente adaptado para segurança.

No próximo post vamos ver o Arch Linux.
Happy hacking!

Sem comentários:

Enviar um comentário