sábado, 30 de janeiro de 2010

Linux From Scratch Parte 1

Este artigo será escrito em partes, por ser um pouco extenso e complexo. Na primeira parte estarei abordando a criação de um compilador para dar sequência na instalação de um sistema temporário.

Estarei o utilizando o livro LFS-Development segue o link para acompanhamento:

http://www.linuxfromscratch.org/lfs/view/development/

Estarei utilizando uma máquina virtual para a criação de um Livecd baseado no LFS.

O software utilizado é o Virtual Box.


Façam o download do Live CD lfslivecd-x86-6.3-r2160.iso, sistema que será utlizado como base para a construção de nosso sistema.

Abaixo segue o link:

ftp://anduin.linuxfromscratch.org/LFS-LiveCD/lfslivecd-x86-6.3-r2160.iso

Após a conclusão do Download, crie uma máquina virtual com o live cd LFS.

Crie uma partição, no meu caso criei uma partição de 8g e uma swap de 512mb.


Após a criação da máquina siga os passos abaixo:

#mke2fs -jv /dev/hda1


#mkswap /dev/hda2


#swapon /dev/hda2


#export LFS=/mnt/lfs


#mkdir -pv $LFS

#mount -v -t ext3 /dev/hda1 $LFS

#mkdir -p $LFS/sources


#chmod -v a+wt $LFS/sources


Vamos fazer o download dos soucers e patches:


#cd $LFS/sources

#wget http://www.linuxfromscratch.org/lfs/view/development/wget-list


#wget -i wget-list


# mkdir $LFS/tools


#ln -sv $LFS/tools /


#groupadd lfs


#useradd -s /bin/bash -g lfs -m -k /dev/null lfs


#passwd lfs (insira a senha para o usuário lfs.)
#chown -v lfs $LFS/tools

#chown -v lfs $LFS/sources

#su - lfs

Agora como usuário LFS crie o arquivo bash_profile e o
.bashrc conforme abaixo:

lfs: ~$cat > .bash_profile << "EOF"

exec env -i HOME=$HOME TERM=$TERM PS1='\u: \w\$ '
/bin/bash

EOF

Crie o .bashrc:

lfs: ~$cat > .bashrc << "EOF"

set +h umask 022 LFS=/mnt/lfs LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH

EOF

lfs: ~$source .bash_profile

Para que tem processadores com 2 núcleos ou mais:

lfs: ~$set MAKEFLAGS='-j 2'
No diretório $LFS/sources descompacte o binutils conforme abaixo:
lfs: ~$cd $LFS/sources
lfs: ~$tar -jxvpf binutils-2.20.tar.bz2
lfs: ~$ cd binutils-2.20/
lfs: ~$mkdir ../binutils-build

lfs: ~$cd ../binutils-2.20/

lfs: ~$../binutils-2.20/configure --target=$LFS_TGT
--prefix=/tools --disable-nls --disable-werror
lfs: ~$make

lfs: ~$make install

Agora vamos para o GCC:

lfs: ~$cd ../sources

lfs: ~$tar -jxvpf gcc-4.4.3.tar.bz2

Um detalhe muito importante para poder compilar o gcc,
é necessário ter mpfr e o gmp.

Para que a nossa compilação prossiga corretamente
faremos desta maneira:

Dentro do diretório $LFS/sources descompacte o mpfr e o
gmp para dentro da pasta do GCC.

lfs: ~$tar -jxvpf mpfr-2.4.2.tar.bz2 -C gcc-4.4.3/

lfs: ~$tar -jxvpf gmp-5.0.0.tar.bz2 -C gcc-4.4.3/

lfs: ~$cd gcc-4.4.3/

lfs: ~$mv mpfr -2.4.2 mpfr

lfs: ~$mv gmp-5.0.0 gmp

lfs: ~$mkdir ../gcc-build

lfs: ~$cd ../gcc-build

lfs: ~$../gcc-4.4.3/configure --target=$LFS_TGT --prefix=/tools
--disable-nls --disable-shared --disable-multilib
--disable-decimal-float --disable-threads --disable-libmudflap
--disable-libssp --disable-libgomp --enable-languages=c

lfs: ~$make

lfs: ~$make install

lfs: ~$ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name
| sed 's/libgcc/&_eh/`

lfs: ~$cd ../sources

lfs: ~$tar -jxvpf linux-2.6.32.6.tar.bz2

lfs: ~$cd linux-2.6.32.6/

lfs: ~$make mrproper

lfs: ~$make headers_check

lfs: ~$make INSTALL_HDR_PATH=dest headers_install

lfs: ~$cp -rv dest/include/* /tools/include

lfs: ~$cd ../sources

lfs: ~$tar -jxvpf glibc-2.11.1.tar.bz2

lfs: ~$cd glibc-2.11.1/

lfs: ~$mkdir -v ../glibc-build

lfs: ~$cd ../glibc-build

lfs: ~$case `uname -m` in
i?86) echo "CFLAGS += -march=i486
-mtune=native" > configparms ;;
esac

lfs: ~$../glibc-2.11.1/configure --prefix=/tools --host=$LFS_TGT
--build=$(../glibc-2.11.1/scripts/config.guess)
--disable-profile --enable-add-ons --enable-kernel=2.6.18
--with-headers=/tools/include
libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes

lfs: ~$make

lfs: ~$make install

lfs: ~$SPECS=`dirname $($LFS_TGT-gcc
-print-libgcc-file-name)`
/specs $LFS_TGT-gcc -dumpspecs | sed \
-e 's@/lib\(64\)\?/ld@/tools&@g' \
-e "/^\*cpp:$/{n;s,$, -isystem /tools/include,}"
> $SPECS
echo "New specs file is: $SPECS"
unset SPECS

Após a execução do ajuste da Tollchain acima vamos
aplicar um teste para ver se esta tudo ok com o
nosso compilador:

lfs: ~$echo 'main(){}' > dummy.c
$LFS_TGT-gcc -B/tools/lib dummy.c
readelf -l a.out | grep ': /tools'

O resultado do comando acima tem quer ser este:

[Requesting program interpreter: /tools/lib/ld-linux.so.2]

Caso contrário reveja os passos anteriores.

lfs: ~$
rm -v dummy.c a.out

Este é o fim da primeira parte deste artigo.

Na segunda parte desta série começaremos a construir um
sistema temporário.

Um comentário:

  1. Ótima iniciativa.
    Parabéns pelo artigo.
    Vou continuar seguindo quando você lançar a continuação.

    ResponderExcluir

Arquivo do blog