Anda di halaman 1dari 76

LEC

LINUX EM CONSTRU��O CVS-211101

Daniel Zilli

================================================================================

Copyright (c) 2001 - Daniel Zilli

Uma c�pia f�sica ou verbal deste documento ou parte dele pode ser livremente
distribu�da ou colocada em meios de distribui��o eletr�nicos desde que contenha um
aviso mencionando a origem do documento e o seu respectivo autor. A distribui��o
e/ou reprodu��o comercial � encorajada, no entanto o autor deve ser notificado e
todas as informa��es de direitos reservadas devem permanecer intactas.
Os nomes "Linux Em Constru��o", "LEC", do autor e de seus colaboradores n�o podem
ser utilizados para endossar ou promover produtos derivados deste material sem uma
permiss�o por escrito. O autor e colaboradores n�o se responsabilizam por
quaisquer danos ou perdas que o livro ou o mau uso do mesmo venha causar.

DEDICAT�RIA

Dedico este livro a minha esposa e fam�lia.

================================================================================

EMENT�RIO

================================================================================

PREF�CIO
ORGANIZA��O
LOGS

PARTE 1 - TEORIA DO SISTEMA

1 - O Linux

A CRIA��O
AS CARACTER�STICAS
AS DISTRIBUI��ES

2 - PADR�ES

FILESYSTEM HIERARCHY STANDARD


LINUX STANDARD BASE

3 - PREPARA��O

COMO SER� FEITO


PR�-REQUISITOS
FAZENDO O DOWNLOAD
DESCOMPACTANDO
QUADRO DE INSTALA��O
EXEMPLO DE INSTAL��O
PARTE 2 - PREPARANDO O SISTEMA

4 - PRIMEIROS TIJOLOS

CRIANDO UMA PARTI��O E UM SISTEMA DE ARQUIVOS


MOUNTANDO A NOVA PARTI��O
CRIANDO OS DIRET�RIOS

5 - CONSTRU�NDO A BASE

INSTALANDO BASH
INSTALANDO BINUTILS
INSTALANDO BZIP2
INSTALANDO DIFFUTILS
INSTALANDO FILEUTILS
INSTALANDO GCC
INSTALANDO GREP
INSTALANDO GZIP
INSTALANDO KERNEL Linux
INSTALANDO MAKE
INSTALANDO MAWK
INSTALANDO SED
INSTALANDO SHELLUTILS
INSTALANDO TAR
INSTALANDO TEXINFO
INSTALANDO TEXTUTILS

PARTE 3 - INSTALANDO O LEC

6 - INSTALANDO OS SOFTWARES NECESS�RIOS

CRIANDO PASSWD E GROUP


MONTANDO PROC
CRIANDO BASHPROFILE
ENTRANDO NO AMBIENTE CHROOT
INSTALANDO GLIBC
CRIANDO DEVICES
INSTALNADO PATCH
INSTALANDO GZIP
INSTALANDO MAN-PAGES
INSTALANDO FINDUTILS
INSTALANDO MAWK
INSTALANDO NCURSES
INSTALANDO VIM
INSTALANDO GCC
INSTALANDO BISON
INSTALANDO LESS
INSTALANDO GROFF
INSTALANDO MAN
INSTALANDO PERL
INSTALANDO M4
INSTALANDO TEXINFO
INSTALANDO AUTOCONF
INSTALANDO AUTOMAKE
INSTALANDO BASH
INSTALANDO FLEX
INSTALANDO FILE
INSTALANDO LIBTOOL
INSTALANDO BIN86
INSTALANDO BINUTILS
INSTALANDO BZIP2
INSTALANDO ED
INSTALANDO GETTEXT
INSTALANDO KBD
INSTALANDO DIFFUTILS
INSTALANDO E2FSPROGS
INSTALANDO FILEUTILS
INSTALANDO GREP
INSTALANDO LILO
INSTALANDO LINKS
INSTALANDO MAKE
INSTALANDO MODUTILS
INSTALANDO NETKIT-BASE
INSTALANDO NET-TOOLS
INSTALANDO PROCINFO
INSTALANDO PROCPS
INSTALANDO PSMISC
INSTALANDO SED
INSTALANDO SHELLUTILS
INSTALANDO SHADOWPWD
INSTALANDO SYSKLOGD
INSTALANDO SYSVINIT
INSTALANDO TAR
INSTALANDO TEXTUTILS
INSTALANDO UTIL Linux
CONFIGURA��ES
CONFIGURANDO VIM
CONFIGURANDO GLIBC
CONFIGURANDO TIMEZONE
CONFIGURANDO DYNAMIC LOADER
CONFIGURANDO SYSKLOGK
CONFIGURANDO SYSVINIT
CRIANDO OS ARQUIVOS UTMP WTMP BTMP
CRIANDO A SENHA PARA O ROOT

PARTE 4 - FINALIZANDO O LEC

7 - BOOT SCRIPTS & CONFIGURA��ES FINAIS

ENTEDENDO O PROCESSO DE INICIALIZA��O DO SISTEMA


CRIANDO DIRET�RIOS
CRIANDO RC
CRIANDO RCS
CRIANDO FUNCTIONS
CRIANDO CHECKFS
CRIANDO HALT
CRIANDO LOADKEYS
CRIANDO MOUNTFS
CRIANDO REBOOT
CRIANDO SENDSIGNALS
CRIANDO SETCLOCK
CRIANDO SYSKLOGD
CRIANDO TEMPLATE
ATRIBU�NDO LINKS SIMB�LICOS E PERMISS�ES I
CRIANDO FSTAB
INSTALANDO KERNEL Linux
CONFIGURANDO O LILO
PREPARANDO A REDE
CRIANDO LOCALNET
ATRIBU�NDO LINKS SIMB�LICOS E PERMISS�ES II
CRIANDO NETWORK I
CRIANDO HOSTS
CRIANDO ETHNET
CRIANDO NETWORK II
CRIANDO ARQUIVOS DE CONFIGURA��ES DO NIC
ATRIBU�NDO LINKS SIMB�LICOS E PERMISS�ES III

CONCLUS�O
BIBLIOGRAFIA
AP�NDICE - ERROS

================================================================================

PREF�CIO

Devido ao grande n�mero de distribui��es Linux existente no mercado, h� um bom


tempo vinha me perguntando, por que existe tanta gente fazendo Linux? Qual � a
formula m�gica? � realmente t�o f�cil assim?

Descobri que n�o existe UMA formula m�gica e sim v�rias. Para min o Linux n�o
passa de um grande quebra-cabe�a, para ter o resultado esperado, apenas junte as
pe�as na ordem certa e tudo funcionar� corretamente...� isso o que livro faz.

O projeto LEC atrav�s deste livro tem por objetivo levar � todas as pessoas
interessadas, condi��es necess�rias para a constru��o passo a passo do seu pr�prio
sistema operacional Linux.

� isso mesmo! Voc� vai construir o seu pr�prio Linux, e raz�es para isso n�o
faltam. Insatisfa��o com alguma distribui��o ou ter o prazer de construir a sua
pr�pria, s�o algumas das raz�es que podem te motivar para esse trabalho, mas para
mim, o principal motivo que me levou a construir o meu pr�prio sistema, foi de
poder conhecer em detalhes o seu funcionamento e assim entende-lo como um todo.

O nosso sistema � 100% puro Linux, n�o sendo baseado em nenhuma outra
distribui��o. O objetivo disso � criar um sistema base para que depois cada um
possa personaliza-lo ao seu modo.

================================================================================

ORGANIZA��O

Para um melhor entendimento do livro, explicarei como este se encontra organizado.


O livro est� dividido em 4 partes:

Primeira parte. Do capitulo um ao tr�s � onde se encontram os ensinamentos


te�ricos necess�rios para uma perfeita compreens�o do LEC.
Segunda parte. Os cap�tulos quatro e cinco s�o encarregados de come�ar a forma��o
da base necess�ria.

Terceira parte. No capitulo seis � onde efetivamente constru�mos o nosso sistema.

Quarta parte. E finalmente no cap�tulo sete � onde configuramos e damos os �ltimos


ajustes no LEC.

================================================================================

LOGS 19-11-01

Confira o que mudou no nosso livro.

Capitulo 1

- Altera��es no texto e revis�o liter�ria

Cap�tulo 2 e 3

- Revis�o liter�ria

Capitulo 4

- Restrutura��o total dos diretorios, tornando-os assim 100% FHS compat�veis.

Cap�tulo 5

- Alterado os parametros de instala��o do gcc

Cap�tulo 6

- man-pages-1.39 -> man-pages-1.42

Capitulo 7 e 8

- Revis�o liter�ria
- Corre��o de bugs nos scripts

===============================================================================

PARTE 1
TEORIA DO SISTEMA

================================================================================

CAP�TULO 1 - O Linux

================================================================================

Antes de constru�rmos o LEC, vamos aprender um pouco mais sobre esse sistema
operacional que est� conquistando o mundo a cada dia que passa.

A CRIA��O

O nascimento do Linux, ao contr�rio do que muita gente pensa, n�o � uma obra
exclusiva de Linus Torvalds, apesar dele ser o mentor de toda essa revolu��o que o
linux ou melhor GNU/Linux est� causando, podemos destacar na verdade duas pessoas,
Linus e Richard. Richard Stallman � fundador da Free Software Foundation e do
projeto GNU. Projeto esse o qual desenvolve a grande maioria dos programas que
compoem o sistema GNU/Linux de qualquer distribui��o.
Quando Richard iniciou o projeto GNU em 1984, a ideia era fazer um sistema
operacional (chamado GNU, que signfica GNU N�o � Unix)de codigo aberto baseado no
Unix. Por volta de 1991 a �nica coisa que faltava era desenvolver o kernel, e � a�
que Linus entrou. Num trabalho isolado mas com as mesmas inten��es, Linus come�ou
a constru��o de um sistema operacional. O detalhe � que Torvalds come�ou pelo
kernel o qual batizou de Linux e o disponibilizou na internet. Com o tempo as duas
partes se juntaram formando o sistema operacional. Por esse motivo que o correto
nome do sistema � GNU/Linux e n�o apenas Linux, j� que Linux � apenas o kernel e
ele sozinho n�o faz nada.

AS CARACTER�STICAS

O sistema GNU/Linux � descendente do padr�o POSIX que � o pai do UNIX e suas


variantes. A seguir algumas das principais caracter�sticas desse sistema:

- � um sistema operacional de c�digo aberto distribu�do gratuitamente pela


Internet.

- Multiusu�rio

- Multitarefa real

- Multi-processamento

- Prote��o entre processos executados na mem�ria RAM

- Pode ser executado em 10 arquiteturas diferentes com Intel,Macintosh,Alpha,etc.

- Mem�ria Virtual (swap).

- Suporte a v�rios sistemas de arquivos.

- Utiliza permiss�es de acesso a arquivos, diret�rios e programas.

AS DISTRIBUI��ES

Existe atualmente mais de 180 distribui��es GNU/Linux ao redor do mundo, sendo


elas mantidas por empresas, organiza��es e/ou pessoas comum.

Ao grosso modo, uma distribui��o � onde basicamente se encontra o sistema base


GNU/Linux junto com aplicativos adicionais. Cada distribui��o tem a sua pr�pria
caracter�stica,ou seja, cont�m algumas particularidades como configuradores,
gerenciadores de pacotes, sistema de instala��o, o objetivo, p�blico alvo...etc,
mas no final todas tem a mesma origem.

O que as empresas vendem na verdade � a distribui��o ,ou seja, a caixa contendo os


livros, cds de instala��o, programas adicionais e obrigatoriamente o c�digo fonte
do sistema. A empresa que desenvolve a distribui��o precisa tamb�m disponibilizar
o download gratuito do GNU/Linux atrav�s da internet.

Dentre as distribui��es mais famosas do mundo, podemos citar as top 5 : Red Hat,
Slackware, Suse, Debian, Mandrake. Sendo a Debian a distribui��o oficial do
GNU/Linux por ser desenvolvida e mantida atrav�s de volunt�rios espalhados ao
redor do mundo, sem fundo comercial.

A escolha de uma distribui��o � pessoal, mas se voc� ficar na d�vida fa�a que nem
eu construa a sua pr�pria distribui��o! :)

================================================================================

CAP�TULO 2 - PADR�ES

================================================================================

Como tudo na vida precisa de regras, o GNU/Linux n�o se difere disso. Imagina se
aquelas mais de 180 distribui��es fizessem cada uma o GNU/Linux do seu jeito. Voc�
pode imaginar s� o tamanho da salada de fruta que seria, sem mencionar a
incompatibilidade entre as distribui��es, � claro.

Para evitar essa dor de cabe�as criou-se organiza��es para ditarem normas e
padr�es. Duas organiza��es destacam-se nesse papel , a Filesystem Hierarchy
Standard (Hierarquia Padr�o Para Sistemas De Arquivos) mais conhecida como FHS e a
Linux Standard Base (Padr�es Para Base Linux) ou LSB como preferir. Os dois
padr�es ser�o estudados mais detalhadamente agora.

FILESYSTEM HIERARCHY STANDARD

O FHS s�o normas usadas para cria��o e localiza��o de diretorios e arquivos num
sistema GNU/Linux. Estas normas s�o usadas por desenvolvedores de distribui��es
Linux/Unix, programadores GNU/Linux e implementadores de sistemas, tendo como
inten��o servir de refer�ncia para realiza��es de tais atividades.

Encurtando o papo, � o pessoal da FHS que define quais os diret�rios que devem
existir e aonde cada arquivo deve ser instalado no sistema.

Todos aqueles diret�rios existente no nosso sistema n�o est�o a� por acaso, e sim,
por seguirem normas. Grande parte das distribui��es existente no mercado s�o FHS
compat�veis, ou seja, seguem os padr�es estabelecidos para a constru��o do sistema
e isso � bom, pelo motivo que ajuda a crescer a compatibilidade entre as mesmas.

Como unanimidade � quase imposs�vel quando falamos em padr�es. A FHS tamb�m tem
seus protestantes. Muita gente como, desenvolvedores de sistemas e algumas
distribui��es n�o concordam com certas regras ditas pelo FHS e prova maior de que
essa discord�ncia existe, foi o que escreveu um dos coordenadores do projeto no
lan�amento da �ltima vers�o do documento.

"Com muita demora e controv�rsia, a vers�o 2.2 do FHS est� lan�ado"

Como j� foi dito, certas distribui��es fogem um pouco do esquema da FHS. Isso
porque cada distribui��o tem as suas particularidades e jeito de trabalhar.
Nenhuma distribui��o � obrigada a seguir os padr�es da FHS, mas quanto mais
empresas o seguirem menor ser� a incompatibilidade entre as distribui��es.

A atual vers�o do FHS � a 2.2 datada em 24 de maio de 2001. Por essa vers�o ser
relativamente nova, poder� levar algum tempo para que as distribui��es a adotem e
a coloquem em pr�tica.

Para voc� obter maiores informa��es sobre o FHS entre no site


www.pathname.com/fhs.

LINUX STANDARD BASE

O objetivo do LSB � desenvolver e promover um conjunto de padr�es que aumentam a


compatibilidade entre distribui��es GNU/Linux e permitir que aplica��es de
softwares funcionem em qualquer sistema GNU/Linux.

O LSB na verdade n�o � um padr�o, e sim, uma fam�lia de standards (padr�es);


contando mais ou menos uns 20 padr�es, inclusive o FHS.

� da uni�o de todos esses padr�es que nasceu o LSB. Na verdade o que definir� a
compatibilidade entre as distribui��es ser� o quanto do LSB os desenvolvedores ou
as empresas adotar�o para o seu sistema.

O GNU/Linux Standard Base � um assunto bastante t�cnico, sendo voltado


principalmente para engenheiros de software e programadores experientes, mas com
certeza n�o far� mal � voc� caso queira visitar o site www.linuxbase.org.

================================================================================

CAP�TULO 3 - PREPARA��O

================================================================================

COMO SER� FEITO

Este livro descreve o processo de constru��o do nosso pr�prio sistema operacional


GNU/Linux, atrav�s de uma distribui��o GNU/Linux j� instalada, usando apenas as
fontes dos programas necess�rios para tal e nada mais.

PR�-REQUISITOS

Como descrito acima � necess�rio voc� ter apenas uma distribui��o GNU/Linux j�
instalada no seu computador, n�o importando qual, s� n�o pode ser muito velha, mas
tamb�m n�o precisa ser o �ltimo lan�amento.

Particularmente para constru��o eu j� usei Red Hat 6.2, Mandrake 7.2 e Slackware
7.1 e nunca tive problemas sendo por isso que eu as recomendo. A �nica
particularidade que pedirei � voc� � para que a sua distribui��o base tenha como
gerenciador de boot o lilo.

Quanto � maquina este livro � voltado para arquitetura intel e a princ�pio um


modelo de m�dio porte � a escolha mais certa. J� observei alguns problemas com
m�quinas velhas como 386 e 486. O ideal seria voc� dispor de um computador s� para
trabalhar com o LEC no in�cio, at� voc� pegar o jeito da coisa, mas se voc� n�o
poder, tudo bem, o importante � ter uma m�quina que esteja funcionando tudo
certinho, na d�vida e se voc� poder, formate (n�o se esque�a de fazer os backups
necess�rios antes) a m�quina e instale tudo de novo.

A paci�ncia ser� muito importante durante o aprendizado. Digite os comandos com


calma e tente realmente entender o que voc� est� fazendo. � realmente recomendado
que voc� leia a documenta��o de cada pacote, assim voc� estar� dando um grande
passo para a compreens�o do sistema.
FAZENDO O DOWNLOAD

Para podermos continuar com a constru��o do nosso sistema � preciso realizar o


downlaod dos pacotes necess�rios. Isso � feito atraves do nosso site
www.projetolec.com.br em:
download -> pacotes -> CVS

DESCOMPACTANDO

Todos os pacotes necess�rios para a cria��o do nosso sistema encontram-se


compactados. Quando come�armos a constru��o do GNU/Linux iremos ter que
descompactar dezenas de pacotes, ent�o para poupar tempo explicarei agora como
fazer isso:

Para os pacotes com extens�o .tar.gz use esse comando:

tar -xvzf nomedoarquivo.tar.gz

Para os pacotes com extens�o .tar.bz2 use esse comando:

bzcat nomedoarquivo.tar.bz2 | tar xv

Para os pacotes com extens�o .bz2 use esse comando:

bunzip nomedoarquivoa.bz2

QUADRO DE INSTALA��O

Agora que voc� j� sabe como descompactar, vou explicar o funcionamento do quadro
de instala��o. Todos os pacotes a serem instalados ser�o apresentados para voc�
nesta forma:

Pacote:
Tempo:
Observa��o:
Instala��o:
Descri��o do pacote:
Descri��o da instala��o:

Onde:

Pacote: Nesse campo voc� encontrar� o nome e vers�o do pacote a ser instalado.
Tempo: Por serem pacotes de tamanhos diferentes o tempo de instala��o tamb�m muda.
Os pacotes est�o divididos em tr�s categorias em rela��o ao tempo. r�pido, m�dio
e demorado.
Observa��o: Caso seja necess�rio apresentar alguma observa��o em rela��o ao pacote
ou a instala��o ela ser� feita aqui.
Instala��o: Aqui � descrito os comandos referente � instala��o
Descri��o do pacote: Neste campo ser� feita uma descri��o do pacote a ser
instalado.
Descri��o da instala��o: Aqui explicarei os comandos usado na instala��o.

EXEMPLO DE INSTAL��O

Como � a primeira vez (eu acho) que voc� constr�i um sistema operacional, vou te
dar uma m�o e exemplificar como ocorrer� as instala��es dos pacotes. Usarei como
exemplo a instala��o do pacote Bash.

Quando voc� descompactar um pacote o mesmo criar� automaticamente um subdiret�rio


dentro do diret�rio /mnt/lec/usr/src/fontes . O pr�ximo passo � simplesmente
instalar o pacote. Para isso voc� tem duas op��es:

1) Uma � simplesmente entrando no diret�rio criado pelo pacote e digitar os


comandos descritos no campo instala��o.
2) Outra maneira � copiar o script referente ao pacote para o diret�rio criado e
execut�-lo.

Exemplo 1:

Para instalar o bash fa�a o seguinte:

- entre no diret�rio /mnt/lec/usr/src/fontes (� assumido neste livro que voc�


tenha todos os pacotes no diret�rio fontes do sistema LEC, esse diret�rio ser�
criado mais tarde.)
- Descompacte o pacote bash usando esse comando:

tar -xvzf bash-2.05.tar.gz ou bzcat bash-2.05.tar.bz2 | tar xv

- Entre no novo diret�rio criado, o bash-2.05 e execute os comandos descritos na


instala��o.

Exemplo 2:

- Primeiramente descompacte o pacote bash.


- Depois descompacte o pacote comandos.tar.gz dentro do diret�rio fontes e entre
no diret�rio capitulo5; copie o arquivo cap5_bash para o diret�rio que a
descompacta��o do pacote bash criou.
- Dentro do diret�rio bash apenas digite: bash cap5_bash

Para instalar os outros pacotes prossiga da mesma maneira. Sempre digitando a


palavra bash na frente do arquivo. Ex: bash cap5_binutils , bash cap5_lilo ..etc.

Feita a instala��o saia do diret�rio bash e remova-o com o seguinte comando:

rm -rf bash-2.05

� recomendado que voc� remova o diret�rio depois de feita a instala��o, mas


aten��o, � para apagar somente o diret�rio criado pela descompacta��o e n�o o
pacote. Como sempre tem um que quer fugir da regra, voc� est� proibido de remover
o diret�rio Linux criado pela descompacta��o do kernel depois da instala��o.
Alguns pacotes iram precisar dos kernel heards, por isso o diret�rio deve ficar.

================================================================================

PARTE 2
PREPARANDO O SISTEMA

================================================================================

CAP�TULO 4 - PRIMEIROS TIJOLOS

================================================================================
� extremamente necess�rio que voc� fa�a a constru��o do LEC como usu�rio root do
seu GNU/Linux anfitri�o e at� ordem contr�ria voc� dever� permanecer nele. Inicie
o ping�im e vamos l�!

CRIANDO UMA PARTI��O E UM SISTEMA DE ARQUIVOS

A primeira a��o que iremos fazer ser� obter uma parti��o vazia. 800 MB � o
necess�rio para voc� construir o sistema base sem se preocupar com espa�o, mas se
voc� pretende adicionar outros aplicativos mais tarde como, X11, kde, alguns
daemons ..etc, ent�o � bom aumentar o tamanho da parti��o. Para a cria��o da
parti��o voc� poder� usar programas como fdisk ou cfdisk, escolha o seu e crie uma
parti��o Linux nativa.

Depois de criada, a parti��o ficou como hda alguma coisa, para mim ficou hda2.
Anote esse numero, pois ele � a sua parti��o LEC.

N�o se preocupe com a participa��o swap, pois n�o ser� preciso criar, j� que
usaremos a parti��o existente do nosso sistema anfitri�o.

Com a nova parti��o j� criada, � hora de definirmos o sistema de arquivos do nosso


LEC. Por padr�o dos sistemas GNU/Linux usaremos o ext2. Para isso fa�a o seguinte:

mke2fs /dev/hdax

Substitua o "x" pelo n�mero da sua parti��o.

MOUNTANDO A NOVA PARTI��O

Agora que o sistema de arquivos j� est� criado, n�s precisamos montar a parti��o
para permitir o acesso de leitura e grava��o nela. Iremos montar em /mnt/lec e
assumirei que voc� tenha feito o mesmo. Para criar o diret�rio lec em /mnt fa�a:

mkdir -p /mnt/lec

Para montar a parti��o fa�a:

mount /dev/hdax /mnt/lec

CRIANDO OS DIRET�RIOS

� hora de criarmos os diret�rios necess�rios para sistema, sempre dentro do padr�o


estabelecido pela FHS. Para isso repita os comandos a seguir:

cd /mnt/lec
mkdir -p bin boot dev etc/opt lib mnt opt sbin tmp usr var home root proc
cd /mnt/lec/usr
mkdir bin include lib local sbin share src
cd /mnt/lec/usr/local
mkdir bin include lib man sbin share src
cd /mnt/lec/usr/share
mkdir man misc
cd /mnt/lec/usr/share/man
mkdir man{1,2,3,4,5,6,7,8}
cd /mnt/lec/var
mkdir -p cache lib/misc local lock log opt run spool tmp mail
cd /mnt/lec/usr
ln -s ../var/tmp tmp

Geralmente os diret�rios s�o criados com permiss�o mode de 755, o que n�o � boa
coisa para alguns diret�rios, por isso iremos mudar algumas permiss�es.

cd /mnt/lec &&
chmod 0750 root &&
chmod 1777 tmp var/tmp

A primeira mudan�a acima foi feita no root, que � para ter certeza que nem todos
possam acessar o diret�rio. A segunda mudan�a foi nos diret�rios tmp. Essa mudan�a
proporciona que todos os usu�rios possam escrever nestes diret�rios, mas n�o
possam apagar os arquivos de outros usu�rios.

Agora n�s vamos precisar criar o diret�rio fontes em /mnt/lec/usr/src.

mkdir /mnt/lec/usr/src/fontes

Feito isso copie todos os pacotes baixados no download para o diret�rio fontes
rec�m criado no nosso sistema LEC.

Depois de criados os diret�rios e preparada a parti��o para receber os pacotes,


vamos entender um pouco a fun��o de cada diret�rio.

/
Este � o diret�rio principal do sistema ele � o raiz. Dentro dele se encontram os
diret�rios e subdiret�rios do sistema.

/bin
No bin se encontram os comandos ess�nciais para o funcionamento do sistema.

/boot
Neste diret�rio est�o os arquivos respons�veis pela inicializa��o do sistema.

/dev
Neste diret�rio encontram-se todos os devices do sistema.

/etc
Aqui encontra-se os arquivos e diret�rios de configura��o do sistema.

/lib
Neste diret�rio est�o as bibliotecas do sistema, respons�veis pela sua
inicializa��o e funcionamento.

/mnt
Esse diret�rio � reservado para voc� montar os seus devices como: disquetes,
cdrom, zip.etc.

/opt
Esse diret�rio � usado para instala��o de software adicionais.

/sbin
Nesse diret�rio voc� encontrar� programas ess�nciais do sistemas usado pelo
superusu�rio (root) para administra��o e controle do sistema.
/tmp
Aqui s�o armazenados os arquivos tempor�rios.

/usr
� a segunda parte mais importante do sistema. Nele se encontra muitos
subdiret�rios ess�nciais para o GNU/Linux.

/var
Cont�m a maior parte dos arquivos que s�o gravados com freq��ncia pelos programas
do sistema, e-mails, spool de impressora, cache, etc

/home
Este diret�rio cont�m todos os arquivos dos usu�rios do sistema.

/root
� o diret�rio home do usu�rio root.

===============================================================================

CAP�TULO 5 - CONSTRU�NDO A BASE

================================================================================

Todos os softwares no cap�tulo 5 ser�o linkados est�ticamente e reinstalados no


capitulo 6, sendo somente neste momento linkados din�micamente.

A raz�o para instalar a vers�o est�tica primeiro � que existe uma grande chance de
que o GNU/Linux anfitri�o e o nosso LEC n�o estejam usando as mesmas vers�es de
Biblioteca C. Se os programas na primeira parte s�o linkados contra uma vers�o de
biblioteca C mais velha, aqueles programas n�o funcionaram no nosso sistema LEC.

================================================================================
INSTALANDO BASH

Pacote: bash-2.05.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --enable-static-link --prefix=/mnt/lec/usr \


--bindir=/mnt/lec/bin &&
make &&
make install &&
cd /mnt/lec/bin &&
ln -s bash sh

Descri��o do pacote:

O bash (Bourne-Again Shell) � o interpretador de comandos padr�o em sistemas Unix


e GNU/Linux, sendo ele o respons�vel por fazer o computador entender o que
digitamos no console.

Descri��o da instala��o:

--enable-static-link: Est� configura��o for�a o linkamento est�tico


--prefix=/mnt/lec/usr: Est� op��o faz que todos os arquivos do bash sejam
instalados no diret�rio /mnt/lec/usr.

--bindir=/mnt/lec/bin: Instala os execut�veis em /mnt/lec/bin.

ln -s bash sh: Este comando cria o link simb�lico sh que aponta para o bash.

Os && no final de cada linha causa a execu��o do comando da pr�xima linha, desde
que a linha anterior n�o retorne erros.

Nas instala��es futuras descreverei apenas os par�metros e descri��es n�o


repetit�vas.

================================================================================

INSTALANDO BINUTILS

Pacote: binutils-2.11.2.tar.bz2
Tempo: m�dio
observa��o:
Instala��o:

./configure --prefix=/mnt/lec/usr --disable-nls &&


make -e LDFLAGS=-all-static tooldir=/mnt/lec/usr &&
make -e tooldir=/mnt/lec/usr install

Descri��o do pacote:

Este pacote cont�m v�rios GNU compiladores, assembles, linkers, debugges, etc..

Descri��o da instala��o:

--disable-nls: este par�metro disabilita o Suporte a Lingua Nativa, tornado o


sistema compat�vel apenas com o ingl�s.

LDFLAGS=-all-static: Apontando LDFLAGS para o par�metro -all-static permite que o


binutils seja todo ele linkado estaticamente.

tooldir=/mnt/lec/usr: Normalmente o tooldir est� atribu�ndo para $(exec_prefix)/$


(target_alias) mas, como estamos constru�ndo o nosso pr�prio sistema, n�o
precisamos desta atribui��o espec�fica em /mnt/lec/usr.

================================================================================

INSTALANDO BZIP2

Pacote: bzip2-1.0.1.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

sed \
s/"\$(CC) \$(CFLAGS) -o"/"\$(CC) \$(CFLAGS) \$(LDFLAGS) -o"/ \
Makefile | make -f - LDFLAGS=-static &&
make PREFIX=/mnt/lec/usr install &&
cd /mnt/lec/usr/bin &&
mv bzcat bunzip2 bzip2 bzip2recover /mnt/lec/bin

Descri��o do pacote:

O pacote bzip2 cont�m v�rios programas voltados para compress�o e descompress�o de


dados, entre eles o bzip2 e bunzip2.

Descri��o da instala��o:

sed: O comando sed procura aqui pela string "$(CC) $(CFLAGS) -o" e a substit�i por
"$(CC) $(CFLAGS) $(LDFLAGS) -o" no arquivo do Makefile. Fazemos essa modifica��o
para a linkagem est�tica do bzip2.

Makefile | make -f - : Makefile � o �ltimo par�metro do comando sed que indica o


arquivo para pesquisar e substituir.

LDFLAGS=-static: Este � o segundo modo que n�s usamos para ligar um pacote
estaticamente.

================================================================================

INSTALANDO DIFFUTILS

Pacote: diffutils-2.7.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

export CPPFLAGS=-Dre_max_failures=re_max_failures2 &&


./configure --prefix=/mnt/lec/usr &&
unset CPPFLAGS &&
make LDFLAGS=-static &&
make install

Descri��o do pacote:

O pacote Diffutils cont�m os seguintes programas: cmp, diff, diff3 e sdiff . Esses
programas s�o usados para comparar arquivos entre si e mostrar suas diferen�as.
Somente o formato texto � aceito para compara��o.

Descri��o da instala��o:

CPPFLAGS=-Dre_max_failures=re_max_failures2: A vari�vel CPPFLAGS � a vari�vel que


est� sendo lida pelo programa cpp. O valor desta vari�vel ordena o preprocessor
para repor toda solicita��o que re_max_failures encontrar por re_max_failures2 .

================================================================================

INSTALANDO FILEUTILS

Pacote: fileutils-4.1.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --disable-nls \
--prefix=/mnt/lec/usr --libexecdir=/mnt/lec/bin --bindir=/mnt/lec/bin &&
make LDFLAGS=-static &&
make install &&
cd /mnt/lec/usr/bin &&
ln -s ../../bin/install

Descri��o do pacote:

O pacote fileutils cont�m os progamas chgrp, chmod, chown, cp, dd, df, dir,
dircolors, du, install, ln, ls, mkdir, mkfifo, mknod, mv, rm, rmdir, sync, touch e
vdir. Esses programas s�o voltados para manipula��o de arquivos e diret�rios.

Descri��o da instala��o:

--libexecdir=/mnt/lec/bin: Este par�metro da configura��o, atribuir� o diret�rio


execut�vel do programa para /mnt/lec/bin.

================================================================================

INSTALANDO GCC

Pacote: gcc-2.95.3.tar.bz2
Tempo: demorado
Observa��o: Tenha calma o gcc � bem demorado mesmo.
Instala��o:

mkdir /mnt/lec/usr/src/gcc-build &&


cd /mnt/lec/usr/src/gcc-build &&
../fontes/gcc-2.95.3/configure --prefix=/usr \
--with-gxx-include-dir=/usr/include/g++ \
--enable-languages=c,c++ --disable-nls &&
make BOOT_LDFLAGS=-static bootstrap &&
make prefix=/mnt/lec/usr local_prefix=/mnt/lec/usr/local \
gxx_include_dir=/mnt/lec/usr/include/g++ install &&
cd /mnt/lec/lib &&
ln -s ../usr/bin/cpp &&
cd /mnt/lec/usr/lib &&
ln -s ../bin/cpp &&
cd /mnt/lec/usr/bin &&
ln -s gcc cc

Descri��o do pacote:

O pacote GCC cont�m al�m do famoso compilador gcc, preprocessors,GNU C++


bibliotecas entre outros.

Descri��o da instala��o:

--enable-languages=c,c++ :Esta op��o constr�i unicamente os compiladores C e C++ e


n�o os outros dispon�veis no pacote, como Fortran e Java. Se voc� precisar dos
outros compiladores, apenas omita o comando acima.
ln -s ../usr/bin/cpp: Isto cria o link simb�lico /mnt/lec/lib/cpp. Alguns pacotes
tentam encontrar o cpp em /lib.

ln -s ../bin/cpp: Isto cria o link simb�lico /mnt/lec/usr/lib/cpp , porque h�


pacotes que esperam encontrar o cpp em /usr/lib.

================================================================================

INSTALANDO GREP

Pacote: grep-2.4.2.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --disable-nls --without-included-regex --prefix=/mnt/lec/usr &&


make LDFLAGS=-static &&
make install

Descri��o do pacote:

O pacote grep cont�m os seguintes programas: egrep, fgrep egrep e s�o usados para
pesquisa de palavras ou texto.

================================================================================

INSTALANDO GZIP

Pacote: gzip-1.2.4a.tar.bz2
Tempo: rapido
Observa��o: descompactar o patch primeiro.
Instala��o:

patch -Np1 -i ../gzip-1.2.4a.patch && ./configure --prefix=/mnt/lec/usr &&


make LDFLAGS=-static &&
make install &&
cp /mnt/lec/usr/bin/gunzip /mnt/lec/usr/bin/gzip /mnt/lec/bin &&
rm /mnt/lec/usr/bin/gunzip /mnt/lec/usr/bin/gzip

================================================================================

INSTALANDO Kernel Linux

Pacote: Linux-2.4.10.tar.bz2
Tempo: demorado
Observa��o: N�o estaremos compilando uma nova imagem do kernel ainda. N�s faremos
isso depois de termos terminado a instala��o do sistema base. Mas como alguns
pacotes necessitam dos arquivos de cabe�alho do kernel, vamos descompactar o
kernel agora e configur�-lo de modo a podermos compilar os pacote dependente.
Instala��o:

make mrproper &&


yes "" | make config &&
make dep &&
cd /mnt/lec/usr/include &&
cp -a ../src/linux/include/linux . &&
mkdir asm &&
cp -a ../src/linux/include/asm/* asm

Descri��o do pacote:

O Kernel � o n�cleo do sistema GNU/Linux, ele � o software que possui a fun��o de


detectar, configurar e operar o hardware que possu�mos no nosso computador, al�m
de ser o respons�vel pelo controle de discos, inicializa��o de programas, aloca��o
de mem�rias e outras fun��es. � por isso que o kernel � chamado de o cora��o do
sistema.

Descri��o da instala��o:

make mrproper: Este comando assegura que a �rvore de diret�rio do kernel est�
absolutamente limpa.

yes "" | make config: Este par�metro faz que todas as perguntas do config sejam
respondida como sim por padr�o.

make dep: Chequa e monta o arquivo de depend�ncias, mas para n�s o que realmente
importa agora � que ele crie os arquivos em /mnt/lec/usr/src/linux/include/linux
que ser�o necess�rios a seguir.

cp -a ../src/linux/include/linux . e mkdir asm && cp -a ../src/linux/include/asm/*


. : Esses comandos copiam os cabe�alhos do kernel para /mnt/lec/usr/include.

================================================================================

INSTALANDO MAKE

Pacote: make-3.79.1.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/mnt/lec/usr --disable-nls &&


make LDFLAGS=-static &&
make install

Descri��o do pacote:

O pacote make cont�m o programa make. O make determina automaticamente que parte
de um programa necessita ser recompilado, e assume os comandos para recompila-lo.

================================================================================

INSTALANDO MAWK

Pacote: mawk1.3.3.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure &&
make CFLAGS="-O -static" &&
make BINDIR=/mnt/lec/usr/bin \ MANDIR=/mnt/lec/usr/share/man/man1 install

Descri��o do pacote:

O pacote mawk cont�m o programa mawk. Mawk � um interpretador para linguagem de


programa��o AWK.

================================================================================

INSTALANDO SED

Pacote: sed-3.02.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

export CPPFLAGS=-Dre_max_failures=re_max_failures2 &&


./configure --prefix=/mnt/lec/usr --bindir=/mnt/lec/bin &&
unset CPPFLAGS &&
make LDFLAGS=-static &&
make install

Descri��o do pacote:

Sed � um editor de stream. Um editor de stream � utilizado para desempenhar


transforma��es b�sicas de texto em uma stream de entrada (um arquivo ou entrada de
um pipeline).

================================================================================

INSTALNDO SH-UTILS

Pacote: sh-utils-2.0.tar.bz2
Tempo: r�pido
Observa��o: descompactar o patch antes da instala��o
Instala��o:

patch -Np1 -i ../sh-utils-2.0.patch &&


./configure --prefix=/mnt/lec/usr --disable-nls &&
make LDFLAGS=-static &&
make install &&
cd /mnt/lec/usr/bin &&
mv date echo false pwd stty /mnt/lec/bin &&
mv su true uname hostname /mnt/lec/bin

Descri��o do pacote:

O pacote sh-utils cont�m os progamas: basename, chroot, date, dirname, echo, env,
expr, factor, false, groups, hostid, hostname, id, logname, nice, nohup, pathchk,
pinky, printenv, printf, pwd, seq, sleep, stty, su, tee, test, true, tty, uname,
uptime, users, who, whoami e yes. Esses pequenos utilit�rios s�o usados
normalmente para programa��o shell .

================================================================================
INSTALANDO TAR

Pacote: tar-1.13.tar.bz2
Tempo: r�pido
Observa��o: descompactar o patch antes da instala��o
Instala��o:

cd src &&
patch -i ../../tarpatch.txt &&
cd .. &&
./configure --prefix=/mnt/lec/usr --disable-nls \
--libexecdir=/mnt/lec/usr/bin --bindir=/mnt/lec/bin &&
make LDFLAGS=-static &&
make install

Descri��o do pacote:

O pacote tar cont�m o programa tar e rmt.

Tar � um programa projetado para agrupar arquivos. Ao contr�rio do que muitos


pensam, o tar n�o � um compactador e sim um arquivador, sua fun��o � juntar v�rios
arquivos em um s�, mas pode tambem ser usado em conjunto com um compactador (como
o gzip ou zip) para armazen�-los compactados.

O rmt (the remote tape server)� um programa utilizado pelo dump e restaura
programas de manipula��o de fita magn�tica.

================================================================================

INSTALANDO TEXINFO

Pacote: texinfo-4.0.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/mnt/lec/usr --disable-nls &&


make LDFLAGS=-static &&
make install

Descri��o do pacote:

O pacote texinfo cont�m os programas: info, install-info, makeinfo, texi2dvi e


texindex . Sendo usados para constru��o de documentos de textos.

================================================================================

INSTALANDO TEXTUTILS

Pacote: textuils-2.0.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/mnt/lec/usr --disable-nls &&


make LDFLAGS=-static &&
make install &&
mv /mnt/lec/usr/bin/cat /mnt/lec/bin

Descri��o do pacote:

O pacote textutils cont�m os seguintes programas: cat, cksum, comm, split, cut,
expand, fmt, fold, head, join, md5sum, nl, od, paste, pr, ptx, sort, split, sum,
tac, tail, tr, tsort, unexpand, uniq e wc. S�o usados como utilit�rios de
processamento de texto.

================================================================================

PARTE 3
INSTALANDO O LEC

================================================================================

CAP�TULO 6 - INSTALANDO OS SOFTWARE NECESS�RIOS

===============================================================================

At� agora instalamos 16 pacotes e todos estaticamente, o motivo disso j� foi


explicado anteriormente. Daqui em diante iremos instalar novos pacotes e
reinstalar dinamicamente os j� instalados.

================================================================================
CRIANDO PASSWD E GROUP

Para que o usu�rio root e o seu grupo sejam reconhecido pelo sistema e deste modo
obter a capacidade de se logar, existe a necessidade de ser criada uma entrada nos
arquivos /etc/passwd e /etc/group.

Para criar o arquivo passwd em /mnt/lec/etc/passwd fa�a o seguinte comando:

echo "root:x:0:0:root:/root:/bin/bash" > /mnt/lec/etc/passwd

Crie um novo arquivo /mnt/lec/etc/group seguindo os comandos:

cat > /mnt/lec/etc/group << "EOF"


root:x:0:
bin:x:1:
sys:x:2:
kmem:x:3:
tty:x:4:
tape:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
EOF

===============================================================================

MOUNTANDO PROC
Devido � necessidade que para certos programas funcionarem corretamente, o sistema
de arquivo proc precisa estar montado. Iremos montar o sistema de arquivos proc
agora:

mount proc /mnt/lec/proc -t proc

================================================================================

CRIANDO BASH_PROFILE

Este arquivo reside no diret�rio pessoal de cada usu�rio. � executado por shells
que usam autentica��o (nome e senha).

O .bash_profile cont�m comandos que s�o executados para o usu�rio no momento do


login no sistema. O ponto "." na frente do bash_profile indica que � um arquivo
oculto.

Crie um novo arquivo /mnt/lec/root/.bash_profile executando o seguinte.

cat > /mnt/lec/root/.bash_profile << "EOF"


# Begin /root/.bash_profile

PS1='\u:\w\$ '
PATH=/bin:/usr/bin:/sbin:/usr/sbin

export PS1 PATH

alias ls='ls --color=always'

# End /root/.bash_profile
EOF

================================================================================

ENTRANDO NO AMBIENTE CHROOT

Agora � hora de entrar no ambiente chroot'ed para instalar o restante dos pacotes
que necessitamos.

cd /mnt/lec &&
chroot /mnt/lec /usr/bin/env -i HOME=/root \
TERM=$TERM /bin/bash --login

A constru��o TERM=$TERM atribuir� a $TERM o valor interno do chroot ao valor


externo do mesmo chroot, isso � necess�rio para programas como o vim e o less
poderem funcionar corretamente.

Note que o prompt do bash cont�m a frase "I have no name!" Isto � normal porque
Glibc n�o est� instalada ainda.

================================================================================

INSTALANDO GLIBC

Pacote: glibc-2.2.4.tar.bz2
Tempo: demorado
Observa��o: descompactar glibc-linuxthreads dentro do diret�rio glibc-2.2.4
Instala��o:
mknod -m 0666 /dev/null c 1 3 &&
touch /etc/ld.so.conf &&
mkdir /usr/src/glibc-build &&
cd /usr/src/glibc-build &&
sed "s/root/0/" ../fontes/glibc-2.2.4/login/Makefile > tmp~ &&
mv tmp~ ../fontes/glibc-2.2.4/login/Makefile &&
../fontes/glibc-2.2.4/configure \
--prefix=/usr --enable-add-ons \
--libexecdir=/usr/bin &&
sed s/"cross-compiling = yes"/"cross-compiling = no"/ \
config.make > config.make~ &&
mv config.make~ config.make &&
make &&
make install &&
make localedata/install-locales

Agora que instalamos o glibc podemos resolver o problema da mensagem exibida no


prompt. Para isso simplesmente sai do ambiente chroot e entre novamente, assim
far� com que a mensagem "I have no name!" desapare�a.

logout
cd /mnt/lec &&
chroot /mnt/lec /usr/bin/env -i HOME=/root \
TERM=$TERM /bin/bash --login

Descri��o do pacote:

O pacote Glibc cont�m a Biblioteca GNU C. A biblioteca C � uma cole��o das fun��es
mais utilizadas por programas no GNU/Linux.

Descri��o da instala��o:

mknod -m 0666 /dev/null c 1 3: Glibc necessita um dispositivo nulo para compilar


propriamente.

touch /etc/ld.so.conf :Um dos passos finais da instala��o do Glibc � executar


ldconfig para atualizar o loader de cache din�mico. Isso � necess�rio para
evitarmos que o glibc aborte a opera��o.

--enable-add-ons: Isto habilita os add-on que n�s instalamos com o glibc-


linuxthreads

================================================================================

CRIANDO DEVICES

Pacote: makedev-1.1.bz2
Tempo: r�pido
Observa��o: O arquivo que voc� descompactou � apenas um script e n�o um programa,
por esse motivo n�o � criado nenhum diret�rio na descompactac�o.
Instala��o:

chmod 755 makedev &&


cp makedev /dev &&
cd /dev &&
./makedev -v generic

Descri��o do pacote:

O makedev � o respons�vel pela cria��o de todos os dispositivos do sistema, como:


hda1, fd0...etc.

Descri��o da instala��o:

./MAKEDEV -v generic: Isto cria os principais dispositivos que normalmente voc�


necessita.

================================================================================

INSTALADO PATCH

Pacote: patch-2.5.4.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr &&


make &&
make install

Descri��o do pacote:

O programa patch � usado para modificar arquivos, ou melhor, atualiza arquivos


texto atrav�s das diferen�as geradas pelo comando diff.

================================================================================

INSTALANDO GZIP

Pacote: gzip-1.2.4a.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr &&


make &&
make install &&
cd /usr/bin &&
mv gzip /bin &&
rm -rf gunzip zcat &&
cd /bin &&
ln -sf gzip gunzip &&
ln -s gzip zcat &&
ln -s gzip compress &&
ln -s gunzip uncompress

================================================================================

INSTALANDO MAN-PAGES
Pacote: man-pages-1.42.tar.gz
Tempo: r�pido
Observa��o:
Instala��o:

make install

Descri��o do pacote:

O pacote man-pages cont�m v�rios manuais que n�o vem com alguns pacotes.

================================================================================

INSTALANDO FINDUTILS

Pacote: findutils-4.1.tar.bz2
Tempo: r�pido
Observa��o: descompactar o patch antes de instalar o arquivo principal.
Instala��o:

patch -Np1 -i ../findutils-4.1.patch &&


./configure --prefix=/usr &&
make &&
make libexecdir=/usr/bin install

================================================================================

INSTALANDO MAWK

Pacote: mawk1.3.3.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure &&
make &&
make BINDIR=/usr/bin \
MANDIR=/usr/share/man/man1 install &&
cd /usr/bin &&
ln -s mawk awk

================================================================================

INSTALANDO NCURSES

Pacote: ncurses-5.2.tar.bz2
Tempo: m�dio
Observa��o:
Instala��o:

./configure --prefix=/usr --libdir=/lib \


--with-shared --disable-termcap &&
make &&
make install &&
cd /lib &&
ln -s libncurses.a libcurses.a
Descri��o do pacote:

O pacote ncurses cont�m os seguintes programas: ncurses, painel, menu e


bibliotecas.

Descri��o da instala��o:

--with-shared: Isto habilita a constru��o dos arquivos da biblioteca do ncurses


compartilhados.
--disable-termcap: Desabilita a compila��o do suporte de termcap para fall back
ln -s libncurses.a libcurses.a: Isto cria o link simb�lico /lib/libcurses.a .

===============================================================================

INSTALANDO VIM

Pacote: vim-5.8-rt.tar.bz2 e vim-5.8-src.tar.bz2


Tempo: r�pido
Observa��o: Ambos os pacotes necessitam ser descompactados para instalar o Vim. Os
dois ser�o descompactados dentro do diret�rio vim-5.8.
Instala��o:

./configure --prefix=/usr --localstatedir=/var/lib/vim &&


make &&
make install &&
cd /usr/bin &&
ln -s vim vi &&
mkdir /var/lib/vim

Descri��o do pacote:

Entre v�rios programas que se encontram no livro, com certeza o editor vim tem o
seu destaque. Concordo que ele n�o � nada f�cil para usu�rios iniciante, mas
tamb�m n�o � um bicho de sete cabe�as. O motivo de sua instala��o � simples. O vim
� praticamente um padr�o. Quase todas das distribui��es GNU/Linux e Unix, tem ele
como default na instala��o.

================================================================================

INSTALANDO GCC

Pacote: GCC-2.95.3.tar.bz2
Tempo: demorado
Observa��o:
Instala��o:

rm -rf /usr/src/gcc-build &&


mkdir /usr/src/gcc-build &&
cd /usr/src/gcc-build &&
../fontes/gcc-2.95.3/configure --prefix=/usr \
--with-slibdir=/lib --enable-shared \
--enable-languages=c,c++ &&
make bootstrap &&
make install

Descri��o da instala��o:

rm -rf /usr/src/gcc-build: Ao instalarmos no cap�tulo anterior o gcc ele cria o


diret�rio /gcc-build no qual se n�o for destru�do n�o permitira a continua��o da
instala��o.

================================================================================

INSTALANDO BISON

Pacote: bison-1.28.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr \
--datadir=/usr/share/bison &&
make &&
make install

Descri��o do pacote:

Bison � um software que gera um programa para analisar a estrutura de um arquivo


de texto.

Descri��o da instala��o:

--datadir=/usr/share/bison: Isto instala o arquivo de gram�tica do bison em


/usr/share/bison em vez de /usr/share.

Alguns programas n�o sabem sobre bison e tentam encontrar o programa yacc (muito
usado antigamente). Assim para ajudar aqueles poucos desavisados que ainda usam o
yacc, criaremos um scritp que chama o programa bison e emula a sa�da do arquivo de
conven��es de nome do yacc.

Para criar o script fa�a o seguinte:

cat > /usr/bin/yacc << "EOF"


#!/bin/sh
# Begin /usr/bin/yacc
/usr/bin/bison -y "$@"
# End /usr/bin/yacc
EOF

chmod 755 /usr/bin/yacc

================================================================================

INSTALANDO LESS

Pacote: less-358.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr --bindir=/bin &&


make &&
make install

Descri��o do pacote:

O programa less � um visualizador de texto. Ele exibe o texto de um arquivo com a


capacidade de poder "rolar" o conte�do.

================================================================================

INSTALANDO GROFF

Pacote: groff-1.17.2.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

CXXFLAGS=-Dstrerror=strerror ./configure --prefix=/usr &&


make &&
make install

Descri��o do pacote:

O pacote groff cont�m os seguintes programas: addftinfo, afmtodit, eqn, grodvi,


groff, grog, grohtml, grolj4, grops, grotty, hpftodit, indxbib, lkbib, lookbib,
neqn, nroff, pfbtops, pic, psbb, refer, soelim, tbl, tfmtodit e troff.

Descri��o da instala��o:

CXXFLAGS=-Dstrerror=strerror: Se nenhum strerror macro � definido,


src/include/lib.h declara um prot�tipo de fun��o ao strerror que � incompat�vel
com o Glibc /usr/include/string.h. Por garantia um macro strerror=strerror �
definido para prevenir a declara��o e n�o altera-se o significado de strerror.

================================================================================

INSTALANDO MAN

Pacote: man-1.5i2.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure -default &&


make &&
make install

Descri��o do pacote:

O pacote man cont�m os programas: man, apropos whatis e makewhatis.


================================================================================

INSTALANDO PERL

Pacote: perl-5.6.1.tar.bz2
Tempo: m�dio
Observa��o:
Instala��o:

./Configure -Dprefix=/usr -d -e &&


make &&
make install

Descri��o do pacote:

Perl significa Practical Extraction and Report Language, e � uma linguagem de


programa��o interpretada muito poderosa e utilizada na internet.

Descri��o da instala��o:

-d -e : Essa op��o faz com que o script de configura��o use todas as configura��es
padr�es na instala��o do perl.

================================================================================

INSTALANDO M4

Pacote: m4-1.4.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr &&


make &&
make install

Descri��o do pacote:

M4 � um processador macro.

================================================================================

INSTALANDO TEXINFO

Pacote: texinfo-4.0.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr &&


make &&
make install &&
make TEXMF=/usr/share/texmf install-tex
================================================================================

INSTALANDO AUTOCONF

Pacote: autoconf-2.52.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr &&


make &&
make install

Descri��o do pacote:

O Autoconf cont�m os pacotes: autoconf, autoheader, autoreconf, autoscan,


autoupdate e ifnames. Esses pacotes s�o usados para cria��o de scripts durante a
instala��o de programas

================================================================================

INSTALANDO AUTOMAKE

Pacote: automake-1.5.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr &&


make install

Descri��o do pacote:

O pacote Automake cont�m os seguintes programas: aclocal e automake.

================================================================================

INSTALANDO BASH

Pacote: bash-2.05.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr --with-curses &&


make &&
make install

Feita a instala��o vamos agora sair do terminal e efetuar esses comandos:

logout
mv /mnt/lec/usr/bin/bash /mnt/lec/usr/bin/bashbug /mnt/lec/bin

Com isso que foi feito, movemos o bash e bashbug de /usr/bin para /bin.
Agora que a instala��o est�tica do bash foi substitu�da pela instala��o din�mica,
� hora de reentrarmos novamente no ambiente chroot:

cd /mnt/lec &&
chroot /mnt/lec /usr/bin/env -i HOME=/root \
TERM=$TERM /bin/bash -login

================================================================================

INSTALANDO FLEX:

Pacote: flex-2.5.4a.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr &&


make &&
make install &&
cd /usr/bin &&
ln -s flex lex

Descri��o do pacote:

Flex � uma ferramenta para gerar os programas que reconhecem padr�es no texto.

================================================================================

INSTALANDO FILE

Pacote: file-3.36.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr --datadir=/usr/share/misc &&


make &&
make install

Descri��o do pacote:

O file testa cada arquivo com a intui��o de classific�-lo.

================================================================================

INSTALANDO LIBTOOL

Pacote: libtool-1.4.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr &&


make &&
make install
Descri��o do pacote:

O pacote libtool cont�m os seguinte programas e biblioteca: libtool e libtoolize e


ltdl.

================================================================================

INSTALANDO BIN86

Pacote: bin86-0.16.0.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

make &&
make PREFIX=/usr install

Descri��o do pacote:

O pacote bin86 cont�m programas: as86, as86_encap, ld86, objdump86, nm86 e


size86.

================================================================================

INSTALANDO BINUTILS

Pacote: binutils-2.11.2.tar.bz2
Tempo: demorado
Observa��o:
Instala��o:

./configure --prefix=/usr --enable-shared &&


make -e tooldir=/usr &&
make -e tooldir=/usr install &&
make -e tooldir=/usr install-info

================================================================================

INSTALANDO BZIP2

Pacote: bzp2-1.0.1.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

make -f Makefile-libbz2_so &&


make bzip2recover libbz2.a &&
cp bzip2-shared /bin/bzip2 &&
cp bzip2recover /bin &&
cp bzip2.1 /usr/share/man/man1 &&
cp bzlib.h /usr/include &&
cp -a libbz2.so* libbz2.a /lib &&
rm /usr/lib/libbz2.a &&
cd /bin &&
ln -sf bzip2 bunzip2 &&
ln -sf bzip2 bzcat &&
cd /usr/share/man/man1 &&
ln -s bzip2.1 bunzip2.1 &&
ln -s bzip2.1 bzcat.1 &&
ln -s bzip2.1 bzip2recover.1

Descri��o da instala��o:

make -f Makefile-libbz2_so: Este par�metro ordenar� ao bzip2 que seja constru�do


usando um outro arquivo Makefile, neste caso o Makefile-libbz2_so, criar� uma
biblioteca din�mica libbz2.so e linkar� os utilit�rios bzip2 contra ela.

================================================================================

INSTALANDO ED

Pacote: ed-0.2.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr &&


make &&
make install &&
mv /usr/bin/ed /usr/bin/red /bin

Descri��o do pacote:

Ed � um editor de texto.

================================================================================

INSTALANDO GETTEXT

Pacote: gettext-0.10.40.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr &&


make &&
make install

Descri��o do pacote:

O pacote gettext � usado para internacionaliza��o de softwares. Programas podem


ser compilados com Native Language Support (Suporte a L�ngua Nativa) habilitando
assim as mensagens de sa�das para linguagem nativa do usu�rio.

================================================================================

INSTALANDO KBD

Pacote: kbd-1.06.tar.bz2
Tempo: r�pido
Observa��o: Agora voc� vai escolher o tipo de teclado para ser configurado no LEC.
Como padr�o foi usado o abnt2. Se voc� usa um teclado diferente, entre no
diret�rio /usr/share/kbd/keymaps , encontre o keymap que voc� gostaria de usar
como defautl e substitua na �ltima linha do comando pelo keymap correto:
Instala��o:

./configure --datadir=/usr/share/kbd &&


make &&
make install &&
rm /usr/share/kbd/keymaps/i386/qwerty/defkeymap.map.gz &&
cd /usr/share/kbd/keymaps &&
ln -s i386/qwerty/br-abnt2.map.gz. defkeymap.map.gz

Descri��o do pacote:

O pacote kbd cont�m os arquivos keytable e utilit�rios de teclado.

Descri��o da instala��o:

--datadir=/usr/share/kbd: Isto coloca os arquivos de dados do kbd no diret�rio


/usr/share/kbd.

rm /usr/share/kbd/keymaps/i386/qwerty/defkeymap.map.gz: � removido este arquivo


para voc� poder escolher o seu keymap padr�o.

ln -s <caminho-para-keymap> defkeymap.map.gz : Com este comando voc� atribui o


keymap padr�o que pode ser carregado usando o comando loadkeys -d.

================================================================================

INSTALANDO DIFFUTILS

Pacote: diffutils-2.7.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr &&


make &&
make install

================================================================================

INSTALANDO E2FSPROGS

Pacote: e2fsprogs-1.25.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr --with-root-prefix= \


--enable-elf-shlibs &&
make &&
make install &&
make install-libs &&
mv /usr/sbin/mklost+found /sbin

Descri��o do pacote:

O pacote e2fsprogs cont�m os seguintes programas: chattr, lsattr, uuidgen,


badblocks, debugfs, dumpe2fs, e2fsck, e2label, fsck, fsck.ext2, mke2fs, mkfs.ext2,
mklost+found e tune2fs. Todos eles s�o utilit�rios para manuten��o do sistema de
arquivos ext2.

================================================================================

INSTALANDO FILEUTILS

Pacote: fileutils-4.1.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr --bindir=/bin \


--libexecdir=/bin &&
make &&
make install

================================================================================

INSTALANDO GREP

Pacote: grep-2.4.2.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr &&


make &&
make install

================================================================================

INSTALANDO LILO

Pacote: lilo-21.7.5.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

make &&
make install

Descri��o do pacote:

O Lilo significa Linux Loader, e � atualmente o gerenciador de inicializa��o


GNU/Linux mais usado no mundo. Sua fun��o � permitir qual sistema operacional ser�
iniciado na maquina, caso exista mais de um.
================================================================================

INSTALANDO LINKS

Pacote: links-0.96.tar.gz
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr &&


make &&
make install

Descri��o do pacote:

Links � um browser de www em modo texto. Cinco raz�es me levaram a preferir o


links em vez do lynx. As tr�s primeiras s�o: Frames , Bookmarks e Suporte a L�ngua
Portuguesa. A quarta raz�o � a otimiza��o. O pacote links tem 439KB contra 1550KB
do lynx e finalmente a quinta raz�o. Durante todos os teste, o links jamais
apresentou um erro se quer na compila��o do programa. J� o lynx tem um problema de
conflito com o pacote ncurses, obrigando voc� a fazer um pequeno remendo para que
funcione direito.

================================================================================

INSTALANDO MAKE

Pacote: make-3.79.1.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr &&


make &&
make install

================================================================================

INSTALANDO MODUTILS

Pacote: modutils-2.4.9.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure &&
make &&
make install

Descri��o do pacote:

O pacote modutils cont�m os seguintes programas: depmod, genksyms, insmod,


insmod_ksymoops_clean, kerneld, kernelversion, ksyms, lsmod, modinfo, modprobe e
rmmod.
================================================================================

INSTALANDO NETKIT-BASE

Pacote: netkit-base-0.17.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure &&
make &&
make install &&
cd etc.sample &&
cp services protocols /etc

Descri��o do Pacote: O pacote Netkit-base cont�m dois famosos programas: inetd e


ping .

================================================================================

INSTALANDO NET-TOOLS

Pacote: net-tools-1.60.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

make &&
make install

Descri��o do Pacote: Este pacote cont�m outros famosos programas como: arp,
hostname, ifconfig, netstat, plipconfig rarp, route e slattach.

================================================================================

INSTALANDO PROCINFO

Pacote: procinfo-18.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

sed "s/-ltermcap/-lncurses/" Makefile | make -f - &&


make install

Descri��o do pacote:

A fun��o do procinfo � coletar dados do diret�rio /proc e lan�a-los em um


dispositivo de sa�da padronizado.

Descri��o da instala��o:

sed "s/-ltermcap/-lncurses/" Makefile | fa�a -f - : Isso ira substituir -ltermcap


por
-lncurses no Makefile . Porque libtermcap est� obsoleto em rela��o a libncurses.

================================================================================

INSTALANDO PROCPS

Pacote: procps-2.0.7.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

make &&
make XSCPT='' install &&
mv /usr/bin/kill /bin

Descri��o do pacote:

O pacote procps cont�m os seguintes programas: free, kill, oldps, ps, skill,
snice, sysctl, tload, top, uptime, vmstat, w e watch.

Descri��o da instala��o:

make XSCPT='' install: Este par�metro repassa � vari�vel XSCPT um valor vazio de
modo que a instala��o do XConsole seja desabilitada. Impedindo assim que o
XConsole seja copiado para /usr/X11R6/bin, pois este diret�rio n�o existe, j� que
o ambiente X n�o est� instalado.

===============================================================================

INSTALANDO PSMISC

Pacote: psmisc-20.1.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr &&


make &&
make install

Descri��o do pacote:

O pacote psmisc cont�m: fuser, killall e pstree como programas.

================================================================================

INSTALANDO SED

Pacote: sed-3.02.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr --bindir=/bin &&


make &&
make install

================================================================================

INSTALANDO SH-UTILS

Pacote: sh-utils-2.0.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

./configure --prefix=/usr &&


make &&
make install &&
cd /usr/bin &&
mv date echo false pwd stty /bin &&
mv su true uname hostname /bin &&
ln -s test [

================================================================================

INSTALANDO SHADOW PASSWORD

Pacote: shadow-20001016.tar.bz2
Tempo: r�pido
Observa��o: descompactar o patch primeiro.
Instala��o:

patch -Np1 -i ../shadow-20001016.patch &&


./configure --prefix=/usr &&
make &&
make install &&
cd etc &&
cp limits login.access /etc &&
sed "s|/var/spool/mail|/var/mail|" login.defs.linux > /etc/login.defs

Descri��o do pacote:

Shadow Password Suite cont�m os programas: chage, chfn, chsh, expiry, faillog,
gpasswd, lastlog, login, newgrp, passwd, sg, su, chpasswd, dpasswd, groupadd,
groupdel, groupmod, grpck, grpconv, grpunconv, logoutd, mkpasswd, newusers, pwck,
pwconv, pwunconv, useradd, userdel, usermod e vipw .

Descri��o da instala��o:

cp limits login.access: Esses arquivos n�o foram instalados durante a instala��o


do pacote assim n�s copiamos eles manualmente.

sed "s|/var/spool/mail|/var/mail|" login.defs.linux > /etc/login.defs:


/var/spool/mail � a velha localiza��o das caixas de e-mail dos usu�rios. A
localiza��o atual est� em /var/mail.

================================================================================

INSTALANDO SYSKLOGD
Pacote: sysklogd-1.4.1.tar.bz2
Tempo: r�pido
Observa��o: descompactar o patch primeiro.
Instala��o:

make &&
make install

Descri��o do pacote:

O pacote sysklogd cont�m os programas: klogd e syslogd .

================================================================================

INSTALANDO SYSVINIT

Pacote: sysvinit-2.81.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

make -C src &&


make -C src install

Descri��o do pacote:

O pacote sysvinit cont�m os programas: pidof, last, lastb, mesg, utmpdump, wall,
halt, init, killall5, poweroff, reboot, runlevel, shutdown, sulogin e telinit.

================================================================================

INSTALANDO TAR

Pacote: tar-1.13.tar.bz2
Tempo: r�pido
Observa��o: descompactar o patch primeiro.
Instala��o:

cd src &&
patch -i ../../gnutarpatch.txt &&
cd .. &&
./configure --prefix=/usr --libexecdir=/usr/bin \
--bindir=/bin &&
make &&
make install

================================================================================

INSTALANDO TEXTUTILS

Pacote: textutils-2.0.tar.bz2
Tempo: r�pido
Observa��o: descompactar o patch primeiro.
Instala��o:
./configure --prefix=/usr &&
make &&
make install &&
mv /usr/bin/cat /bin

================================================================================

INSTALANDO UTIL-LINUX

Pacote: util-linux-2.11h.tar.bz2
Tempo: r�pido
Observa��o:
Instala��o:

sed "s|etc/adjtime\"\$|var/lib/hwclock/adjtime\"|" \
hwclock/hwclock.c > hwclock~ &&
mv hwclock~ hwclock/hwclock.c &&
mkdir /var/lib/hwclock &&
sed s/HAVE_SLN=no/HAVE_SLN=yes/ \
MCONFIG > MCONFIG~ &&
mv MCONFIG~ MCONFIG &&
./configure &&
make &&
make install

Descri��o do pacote:

O pacote util-linux cont�m os programas: dmesg, kill, more, mount, umount,


cfdisk, ctrlaltdel, fdisk, mkfs, mkswap, fdformat, hexdump, rename, script,
swapdev, tunelp e vidmode entre outros.

Descri��o da instala��o:

HAVE_SLN=yes: N�s n�o constru�mos este programa porque isto j� foi instalado por
Glibc.

================================================================================

CONFIGURA��ES

Ap�s termos completado a instala��o dos software necess�rios, � hora de configurar


alguns programas para que tudo funcione corretamente.

================================================================================

CONFIGURANDO VIM

Por padr�o Vim � executado em modo vi, mas como existe uma prefer�ncia em executar
o vim em modo vim. Crie o /root/.vimrc com esses comandos:

cat > /root/.vimrc << "EOF"


" Begin /root/.vimrc

set nocompatible
set bs=2
" End /root/.vimrc
EOF

================================================================================

CONFIGURANDO GLIBC

Precisamos agora criar o arquivo / etc/nsswitch.conf, para um perfeito


funcionamento da rede.

cat > /etc/nsswitch.conf << "EOF"


# Begin /etc/nsswitch.conf

passwd: files
group: files
shadow: files

publickey: files

hosts: files dns


networks: files

protocols: db files
services: db files
ethers: db files
rpc: db files

netgroup: db files

# End /etc/nsswitch.conf
EOF

================================================================================

CONFIGURANDO TIMEZONE

Para configurar o timezone voc� precisa executar um programa chamado tzselect e


responder as perguntas. No final ele lhe mostrar� o seu timezone. Feito isso a
configura��o � feita deste jeito:

cd /etc &&
ln -sf ../usr/share/zoneinfo/<o resultado do tzselect> localtime

Para mim que moro no sul a configura��o ficou assim:

cd /etc &&
ln -sf ../usr/share/zoneinfo/Am�rica/Sao_Paulo localtime

================================================================================

CONFIGURANDO DYNAMIC LOADER

Criamos este script para que dynamic loader ao procurar por caminhos padr�es para
as bibliotecas din�micas procure tamb�m nesses diret�rios.
cat > /etc/ld.so.conf << "EOF"
# Begin /etc/ld.so.conf

/lib
/usr/lib
/usr/local/lib

# End /etc/ld.so.conf
EOF

================================================================================

CONFIGURANDO SYSKLOGK

Cont�m configura��es para definir o que ser� registrado nos arquivos de log em
/var/log do sistema.

cat > /etc/syslog.conf << "EOF"


# Begin /etc/syslog.conf

auth,authpriv.* -/var/log/auth.log
*.*;auth,authpriv.none -/var/log/sys.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
*.emerg *

# End /etc/syslog.conf
EOF

================================================================================

CONFIGURANDO SYSVINIT

Este � o arquivo de configura��o utilizado pelo programa init para a inicializa��o


do sistema.

cat > /etc/inittab << "EOF"


# Begin /etc/inittab

id:3:initdefault:

si::sysinit:/etc/init.d/rcS

l0:0:wait:/etc/init.d/rc 0
l1:S1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

su:S016:respawn:/sbin/sulogin
1:2345:respawn:/sbin/agetty tty1 9600
2:2345:respawn:/sbin/agetty tty2 9600
3:2345:respawn:/sbin/agetty tty3 9600
4:2345:respawn:/sbin/agetty tty4 9600
5:2345:respawn:/sbin/agetty tty5 9600
6:2345:respawn:/sbin/agetty tty6 9600

# End /etc/inittab
EOF

================================================================================

CRIANDO OS ARQUIVOS UTMP, WTMP E BTMP

Programas como login, shutdown, uptime e outros desejam ler e escrevee em


/var/run/utmp /var/log/btmp e /var/log/wtmp. Esses arquivos cont�m informa��es
sobre quem est� atualmente logado no sistema, quando o computador foi reiniciado e
desligado pela �ltima vez e um registro das tentativas de login falhadas.

touch /var/run/utmp /var/log/wtmp \


/var/log/btmp /var/log/lastlog &&
chmod 644 /var/run/utmp /var/log/wtmp \
/var/log/btmp /var/log/lastlog

================================================================================

CRIANDO A SENHA PARA O ROOT

Vamos criar agora a nossa senha para o sistema.

passwd root

================================================================================

PARTE 4
FINALIZANDO O LEC

================================================================================

CAP�TULO 7 - BOOT SCRIPTS & CONFIGURA��ES

================================================================================

Neste cap�tulo iremos criar os principais scripts para o correto funcionamento do


sistema e realizar as �ltimas configura��es no LEC.

===============================================================================

ENTENDA O PROCESSO DE INICIALIZA��O DO SEU SISTEMA

Ao inicializarmos um sistema GNU/Linux, a primeira coisa que veremos � um monte de


mensagens e palavras esquisitas. Como estamos montando o nosso pr�prio sistema, �
hora de entender de vez como tudo isso funciona.

Tudo come�a com o kernel, que ir� se auto-descompactar e instalar-se na mem�ria do


computador, come�ando ent�o a identificar os perif�ricos, ou seja, o hardware.
Feito isso, o kernel passar� a execu��o do sistema para um programa chamado
SysVinit, mais conhecido como init. O init � baseado em um conceito de n�veis de
execu��o(run levels). Os N�veis de execu��o s�o diferentes modos de funcionamento
do GNU/Linux em rela��o a programas, daemons e recursos espec�ficos.

Normalmente, os sistemas GNU/Linux possuem sete n�veis de execu��o numerados de 0


a 6. O init � sempre o primeiro programa executado no GNU/Linux e � tamb�m o
respons�vel pelo "boot" de todos daemons de inicializa��o e configura��o do
sistema.

Na verdade n�o existe um padr�o fixo no qual deve ser seguido a risca, por isso, a
inicializa��o pode ser amplamente diferente de uma distribui��o para outra. O LEC
t�m o seu jeito de trabalhar, mas nada impede de voc� modific�-lo ao seu gosto.

O init colocar� o sistema em um dos seus poss�veis n�veis de inicializa��o. Eles


est�o definidos num arquivo especial em /etc/inittab. Os modos s�o:

0: congela o computador
1: modo monousu�rio
2: modo multi-usu�rio sem rede
3: modo multi-usu�rio com rede
4: reservado � personaliza��es, mas com as mesmas caracter�sticas que o modo 3
5: mesmo que o modo 4, mas normalmente usado para login em ambiente gr�fico.
6: reboot o computador

Cada um dos modos de inicializa��o possui os seus pr�prios script, encontrados no


diret�rio /etc/rc.d. Os arquivos mais importantes para a inicializa��o do LEC
est�o localizados no diret�rio /etc/init.d.

Cada daemon ou configura��o espec�fica do sistema possui um script de onde pode


ser ativado e/ou desativado.

Por padr�o, voc� pode usar as seguintes palavras chaves com os arquivos(scripts)
de configura��o:

* start - Inicia o daemon ou executa a configura��o

* stop - Interrompe a execu��o de um daemon ou desfaz a configura��o feita


anteriormente (quando poss�vel).

* restart - Reinicia a execu��o de um daemon. � equivalente ao uso de stop e start


mas se aplicam somente a alguns daemons e configura��es, que permitem a
interrup��o de execu��o e rein�cio

Como j� foi falado anteriormente voc� pode modificar o seu processo de boot do
jeito que quiser, mas para isso a �nica condi��o � que voc� saiba realmente o que
esteja fazendo.

CRIANDO OS DIRET�RIOS

Criaremos agora os diret�rios para armazenar os nossos scripts de inicializa��o.


Para isso execute os seguintes comandos:

cd /etc &&
mkdir rc{0,1,2,3,4,5,6,S}.d init.d sysconfig &&
cd init.d
================================================================================

CRIANDO RC

O primeiro script a ser criado � o rc em /etc/init.d/rc. Siga os comandos ou copie


o arquivo pronto para o seu respectivo diret�rio:

cat > rc << "EOF"


#!/bin/sh
# Begin /etc/init.d/rc
#
# By Jason Pearce - jason.pearce@linux.org
# print_error_msg based on ideas by Simon Perreault -
# nomis80@videotron.ca

#
# Include the functions declared in the /etc/init.d/functions file
#

source /etc/init.d/functions

#
# The print_error_msg function prints an error message when an unforeseen
# error occurred that wasn't trapped for some reason by a evaluate_retval
# call or error checking in different ways.

print_error_msg()
{

echo
$FAILURE
echo -n "voc� n�o deveria estar lendo esta mensagem de erro. "
echo "that an unforeseen error "
echo -n "took place and subscript $i exited with "
echo "a return value "
echo -n "of $error_value for an unknown reason. If you're able "
echo "to trace this error down "
echo -n "to a bug in one of the files provided by this book, "
echo "please be so kind to "
echo -n "inform us at bug@projetolec.com.br"
$NORMAL
echo
echo
echo "Pressione uma tecla para continuar..."
read
}

#
# If you uncomment the debug variable below none of the scripts will be
# executed, just the script name and parameters will be echo'ed to the
# screen so you can see how the scripts are called by rc.
#

# Un-comment the following for debugging.


# debug=echo

#
# Start script or program.
#
startup() {

$debug $*

#
# Ignore CTRL-C only in this shell, so we can interrupt subprocesses.
#

trap ":" INT QUIT TSTP

#
# Now find out what the current and what the previous runlevel are. The
# $RUNLEVEL variable is set by init for all it's children. This script
# runs as a child of init.
#

runlevel=$RUNLEVEL

#
# Get first argument. Set new runlevel to this argument. If no runlevel
# was passed to this script we won't change runlevels.
#

[ "$1" != "" ] && runlevel=$1


if [ "$runlevel" = "" ]
then
echo "Usage: $0 <runlevel>" >&2
exit 1
fi

#
# The same goes for $PREVLEVEL (see above for $RUNLEVEL). previous will
# be set to the previous run level. If $PREVLEVEL is not set it means
# that there is no previous runlevel and we'll set previous to N.
#

previous=$PREVLEVEL
[ "$previous" = "" ] && previous=N

export runlevel previous

#
# Is there an rc directory for the new runlevel?
#

if [ -d /etc/rc$runlevel.d ]

then

#
# If so, first collect all the K* scripts in the new run level.
#

if [ $previous != N ]
then
for i in /etc/rc$runlevel.d/K*
do
[ ! -f $i ] && continue

#
# the suffix variable will contain the script name without the leading
# Kxxx
#

suffix=${i#/etc/rc$runlevel.d/K[0-9][0-9][0-9]}
#
# If there is a start script for this K script in the previous runlevel
# determine what it's full path is
#
previous_start=/etc/rc$previous.d/S[0-9][0-9][0-9]$suffix
#
# If there was no previous run level it could be that something was
# started in rcS.d (sysinit level) so we'll determine the path for that
# possibility as well.
#

sysinit_start=/etc/rcS.d/S[0-9][0-9][0-9]$suffix

#
# Stop the service if there is a start script in the previous run level
# or in the sysinit level. If previous_start or sysinit_start do not
# exist the 'continue' command is run which causes the script to abort
# this iteration of the for loop and continue with the next iteration.
# This boils down to that it won't run the commands after the next two
# lines and start over from the top of this for loop. See man bash for
# more info on this.
#

[ ! -f $previous_start ] &&
[ ! -f $sysinit_start ] && continue

#
# If we found previous_start or sysinit_start, run the K script
#

startup $i stop
error_value=$?
#
# If the return value of the script is not 0, something went wrong with
# error checking inside the script. the print_error_msg function will be
# called and the message plus the return value of the K script will be
# printed to the screen
#

if [ $error_value != 0 ]
then
print_error_msg
fi

done
fi

#
# Now run the START scripts for this runlevel.
#

for i in /etc/rc$runlevel.d/S*
do
[ ! -f $i ] && continue

if [ $previous != N ]
then
#
# Find start script in previous runlevel and stop script in this
# runlevel.
#

suffix=${i#/etc/rc$runlevel.d/S[0-9][0-9][0-9]}
stop=/etc/rc$runlevel.d/K[0-9][0-9][0-9]$suffix
previous_start=/etc/rc$previous.d/S[0-9][0-9][0-9]$suffix
#
# If there is a start script in the previous level and no stop script in
# this level, we don't have to re-start the service; abort this
# iteration and start the next one.
#

[ -f $previous_start ] && [ ! -f $stop ] &&


continue
fi

case "$runlevel" in
0|6)

#
# levels 0 and 6 are halt and reboot levels. We don't really start
# anything here so we call with the 'stop' parameter
#

startup $i stop
error_value=$?
#
# If the return value of the script is not 0, something went wrong with
# error checking inside the script. the print_error_msg function will be
# called and the message plus the return value of the K script will be
# printed to the screen
#

if [ $error_value != 0 ]
then
print_error_msg
fi
;;
*)
startup $i start
error_value=$?
#
# If the return value of the script is not 0, something went wrong with
# error checking inside the script. the print_error_msg function will be
# called and the message plus the return value of the K script will be
# printed to the screen
#
if [ $error_value != 0 ]
then
print_error_msg
fi
;;
esac
done
fi

# End /etc/init.d/rc
EOF

================================================================================

CRIANDO RCS

O pr�ximo script que criaremos � o rcS:

cat > rcS << "EOF"


#!/bin/sh
# Begin /etc/init.d/rcS

#
# See the rc script for the extensive comments on the constructions
# used here
#

runlevel=S
prevlevel=N
umask 022
export runlevel prevlevel

trap ":" INT QUIT TSTP

#
# Collect all the S scripts in /etc/rcS.d and execute them
#

for i in /etc/rcS.d/S*
do
[ ! -f "$i" ] && continue;
$i start
done

# End /etc/init.d/rcS
EOF

================================================================================

CRIANDO FUNCITONS

Criando o script em /etc/init.d/:

cat > functions << "EOF"


#!/bin/sh
# Begin /etc/init.d/functions

#
# Set a few variables that influence the text that's printed on the
# screen. The SET_COL variable starts the text in column number 70 (as
# defined by the COL variable). NORMAL prints text in normal mode.
# SUCCESS prints text in a green colour and FAILURE prints text in a red
# colour
#

COL=70
WCOL=50
SET_COL="echo -en \\033[${COL}G"
SET_WCOL="echo -en \\033[${WCOL}G"
NORMAL="echo -en \\033[0;39m"
SUCCESS="echo -en \\033[1;32m"
WARNING="echo -en \\033[1;33m"
FAILURE="echo -en \\033[1;31m"

#
# The evaluate_retval function evaluates the return value of the process
# that was run just before this function was called. If the return value
# was 0, indicating success, the print_status function is called with
# the 'success' parameter. Otherwise the print_status function is called
# with the failure parameter.
#

evaluate_retval()
{
if [ $? = 0 ]
then
print_status success
else
print_status failure
fi
}

#
# The print_status prints [ OK ] or [FAILED] to the screen. OK appears
# in the colour defined by the SUCCESS variable and FAILED appears in # the colour
defined by the FAILURE variable. Both are printed starting
# in the column defined by the COL variable.
#

print_status()
{

#
# If no parameters are given to the print_status function, print usage
# information.
#

if [ $# = 0 ]
then
echo "Usage: print_status {success|failure}"
return 1
fi
case "$1" in
success)
$SET_COL
echo -n "[ "
$SUCCESS
echo -n "OK"
$NORMAL
echo " ]"
;;
warning)
$SET_COL
echo -n "[ "
$WARNING
echo -n "ATTN"
$NORMAL
echo " ]"
;;
failure)
$SET_COL
echo -n "["
$FAILURE
echo -n "FAILED"
$NORMAL
echo "]"
;;
esac

#
# The loadproc function starts a process (often a daemon) with
# proper error checking
#

loadproc()
{

#
# If no parameters are given to the print_status function, print usage
# information.
#

if [ $# = 0 ]
then
echo "Usage: loadproc {program}"
exit 1
fi
#
# Find the basename of the first parameter (the daemon's name without
# the path
# that was provided so /usr/sbin/syslogd becomes plain 'syslogd' after
# basename ran)
#

base=$(/usr/bin/basename $1)
#
# the pidlist variable will contains the output of the pidof command.
# pidof will try to find the PID's that belong to a certain string;
# $base in this case
#

pidlist=$(/bin/pidof -o $$ -o $PPID -o %PPID -x $base)

pid=""

for apid in $pidlist


do
if [ -d /proc/$apid ]
then
pid="$pid $apid"
fi
done
#
# If the $pid variable contains anything (from the previous for loop) it
# means the daemon is already running
#

if [ ! -n "$pid" ]
then
#
# Empty $pid variable means it's not running, so we run $* (all
# parameters giving to this function from the script) and then check the
# return value
#

$*
evaluate_retval
else
#
# The variable $pid was not empty, meaning it was already running. We'll
# print [ ATTN ] now
#

$SET_WCOL
echo -n "Already running"
print_status warning fi

#
# The killproc function kills a process with proper error checking
#

killproc()
{

#
# If no parameters are given to the print_status function, print usage
# information.
#

if [ $# = 0 ]
then
echo "Usage: killproc {program} [signal]"
exit 1
fi
#
# Find the basename of the first parameter (the daemon's name without
# the path
# that was provided so /usr/sbin/syslogd becomes plain 'syslogd' after
# basename ran)
#

base=$(/usr/bin/basename $1)

#
# Check if we gave a signal to kill the process with (like -HUP, -TERM,
# -KILL, etc) to this function (the second parameter). If no second
# parameter was provided set the nolevel variable. Else set the
# killlevel variable to the value of $2 (the second parameter)
#

if [ "$2" != "" ]
then
killlevel=-$2
else
nolevel=1
fi

#
# the pidlist variable will contains the output of the pidof command.
# pidof will try to find the PID's that belong to a certain string;
# $base in this case
#

pidlist=$(/bin/pidof -o $$ -o $PPID -o %PPID -x $base)

pid=""

for apid in $pidlist


do
if [ -d /proc/$apid ]
then
pid="$pid $apid"
fi
done

#
# If $pid contains something from the previous for loop it means one or
# more PID's were found that belongs to the processes to be killed
#

if [ -n "$pid" ]
then

#
# If no kill level was specified we'll try -TERM first and then sleep
# for 2 seconds to allow the kill to be completed
#

if [ "$nolevel" = 1 ]
then
/bin/kill -TERM $pid
#
# If after -TERM the PID still exists we'll wait 2 seconds before
# trying to kill it with -KILL. If the PID still exist after that, wait
# two more seconds. If the PIDs still exist by then it's safe to assume
# that we cannot kill these PIDs.
#

if /bin/ps h $pid >/dev/null 2>&1


then
/usr/bin/sleep 2
if /bin/ps h $pid > /dev/null 2>&1
then
/bin/kill -KILL $pid
if /bin/ps h $pid > /dev/null 2>&1
then
/usr/bin/sleep 2
fi
fi
fi
/bin/ps h $pid >/dev/null 2>&1
if [ $? = 0 ]
then
#
# If after the -KILL it still exists it can't be killed for some reason
# and we'll print [FAILED]
#

print_status failure
else

#
# It was killed, remove possible stale PID file in /var/run and
# print [ OK ]
#

/bin/rm -f /var/run/$base.pid
print_status success
fi
else

#
# A kill level was provided. Kill with the provided kill level and wait
# for 2 seconds to allow the kill to be completed
#

/bin/kill $killlevel $pid


if /bin/ps h $pid > /dev/null 2>&1
then
/usr/bin/sleep 2
fi
/bin/ps h $pid >/dev/null 2>&1
if [ $? = 0 ]
then

#
# If ps' return value is 0 it means it ran ok which indicates that the
# PID still exists. This means the process wasn't killed properly with
# the signal provided. Print [FAILED]
#

print_status failure
else

#
# If the return value was 1 or higher it means the PID didn't exist
# anymore which means it was killed successfully. Remove possible stale
# PID file and print [ OK ]
#

/bin/rm -f /var/run/$base.pid
print_status success
fi
fi
else

#
# The PID didn't exist so we can't attempt to kill it. Print [ ATTN ]
#

$SET_WCOL
echo -n "Not running"
print_status warning
fi
}

#
# The reloadproc functions sends a signal to a daemon telling it to
# reload it's configuration file. This is almost identical to the
# killproc function with the exception that it won't try to kill it with
# a -KILL signal (aka -9)
#

reloadproc()
{

#
# If no parameters are given to the print_status function, print usage
# information.
#

if [ $# = 0 ]
then
echo "Usage: reloadproc {program} [signal]"
exit 1
fi

#
# Find the basename of the first parameter (the daemon's name without
# the path that was provided so /usr/sbin/syslogd becomes plain 'syslogd'
# after basename ran)
#

base=$(/usr/bin/basename $1)

#
# Check if we gave a signal to send to the process (like -HUP)
# to this function (the second parameter). If no second
# parameter was provided set the nolevel variable. Else set the
# killlevel variable to the value of $2 (the second parameter)
#

if [ -n "$2" ]
then
killlevel=-$2
else
nolevel=1
fi

#
# the pidlist variable will contains the output of the pidof command.
# pidof will try to find the PID's that belong to a certain string;
# $base in this case
#

pidlist=$(/bin/pidof -o $$ -o $PPID -o %PPID -x $base)

pid=""

for apid in $pidlist


do
if [ -d /proc/$apid ]
then
pid="$pid $apid"
fi
done

#
# If $pid contains something from the previous for loop it means one or
# more PID's were found that belongs to the processes to be reloaded
#

if [ -n "$pid" ]
then

#
# If nolevel was set we will use the default reload signal SIGHUP.
#

if [ "$nolevel" = 1 ]
then
/bin/kill -SIGHUP $pid
evaluate_retval
else

#
# Else we will use the provided signal
#

/bin/kill $killlevel $pid


evaluate_retval
fi
else
#
# If $pid is empty no PID's have been found that belong to the process.
# Print [ ATTN ]
#

$SET_WCOL
echo -n "Not running"
print_status warning
fi
}

#
# The statusproc function will try to find out if a process is running
# or not
#

statusproc()
{

#
# If no parameters are given to the print_status function, print usage
# information.
#

if [ $# = 0 ]
then
echo "Usage: status {program}"
return 1
fi

#
# $pid will contain a list of PID's that belong to a process
#

pid=$(/bin/pidof -o $$ -o $PPID -o %PPID -x $1)


if [ -n "$pid" ]
then

#
# If $pid contains something, the process is running, print the cont�mts
# of the $pid variable
#

echo "$1 running with Process ID $pid"


return 0
fi

#
# If $pid doesn't contain it check if a PID file exists and inform the
# user about this stale file.
#

if [ -f /var/run/$1.pid ]
then
pid=$(/usr/bin/head -1 /var/run/$1.pid)
if [ -n "$pid" ]
then
echo "$1 not running but /var/run/$1.pid exists"
return 1
fi
else
echo "$1 is not running"
fi

# End /etc/init.d/functions
EOF

================================================================================

CRIANDO CHECKFS

O arquivo /etc/init.d/checkfs � criado com os seguites comandos:

cat > checkfs << "EOF"


#!/bin/sh
# Begin /etc/init.d/checkfs

#
# Include the functions declared in the /etc/init.d/functions file
#

source /etc/init.d/functions

#
# Activate all the swap partitions declared in the /etc/fstab file
#

echo -n "Ativando swap..."


/sbin/swapon -a
evaluate_retval

#
# If the /fastboot file exists we don't want to run the partition checks
#

if [ -f /fastboot ]
then
echo "Fast boot, no file system check"
else

#
# Mount the root partition read-only (just in case the kernel mounts it
# read-write and we don't want to run fsck on a read-write mounted
# partition).
#

/bin/mount -n -o remount,ro /
if [ $? = 0 ]
then

#
# If the /forcefsck file exists we want to force a partition check even
# if the partition was unmounted cleanly the last time
#
if [ -f /forcefsck ]
then
echo -n "/forcefsck exists, forcing "
echo "file system check"
force="-f"
else
force=""
fi

#
# Check all the file systems mentioned in /etc/fstab that have the
# fs_passno value set to 1 or 2 (the 6th field. See man fstab for more
# info)
#

echo "Checking file systems..."


/sbin/fsck $force -a -A -C -T

#
# If something went wrong during the checks of one of the partitions,
# fsck will exit with a return value greater than 1. If this is
# the case we start sulogin so you can repair the damage manually
#

if [ $? -gt 1 ]
then
$FAILURE
echo
echo -n "fsck failed. Please repair your file "
echo "systems manually by running /sbin/fsck"
echo "without the -a option"
echo
echo -n "Please note that the root file system "
echo "is currently mounted in read-only mode."
echo
echo -n "I will start sulogin now. When you "
echo "logout I will reboot your system."
echo
$NORMAL
/sbin/sulogin
/sbin/reboot -f
else
print_status success
fi

else

#
# If the remount to read-only mode didn't work abort the fsck and print
# an error
#

echo -n "Cannot check root file system because it "


echo "could not be mounted in read-only mode."
fi
fi
# End /etc/init.d/checkfs
EOF

================================================================================

CRIANDO HALT

Crie o /etc/init.d/halt deste modo:

cat > halt << "EOF"


#!/bin/sh
# Begin /etc/init.d/halt

#
# Call halt. See man halt for the meaning of the parameters
#

/sbin/halt -d -f -i -p

# End /etc/init.d/halt
EOF

================================================================================

CRIANDO LOADKEYS

voc� criar� este arquivo da seguinte maneira:

cat > loadkeys << "EOF"


#!/bin/sh
# Begin /etc/init.d/loadkeys

#
# Include the functions declared in the /etc/init.d/functions file
#

source /etc/init.d/functions

#
# Load the default keymap file
#

echo -n "Loading keymap..."


/bin/loadkeys -d 2>/dev/null
evaluate_retval

# End /etc/init.d/loadkeys
EOF

================================================================================

CRIANDO MOUNTFS

U novo arquivo � criado /etc/init.d/mountfs � criado assim:

cat > mountfs << "EOF"


#!/bin/sh
# Begin /etc/init.d/mountfs

#
# Include the functions declared in the /etc/init.d/functions file
#

source /etc/init.d/functions

case "$1" in
start)

#
# Remount the root partition in read-write mode. -n tells mount
# not to
# write to the /etc/mtab file (because it can't do this. The
# root
# partition is most likely still mounted in read-only mode
#

echo -n "Remounting root file system in read-write mode..."


/bin/mount -n -o remount,rw /
evaluate_retval

#
# First empty the /etc/mtab file. Then remount root partition
# in read-write
# mode again but pass -f to mount. This way mount does
# everything
# except the mount itself. This is needed for it to write to the
# mtab
# file which contains a list of currently mounted file systems.
#

echo > /etc/mtab


/bin/mount -f -o remount,rw /

#
# Remove the possible /fastboot and /forcefsck files. they are
# only
# supposed to be used during the next reboot's checkfs which just
# happened. If you want to fastboot or forcefsck again you'll
# have to
# recreate the files
#

/bin/rm -f /fastboot /forcefsck

#
# Walk through /etc/fstab and mount all file systems that don't
# have the noauto option set in the fs_mntops field (the 4th
# field.
# See man fstab for more info)
#

echo -n "Mounting other file systems..."


/bin/mount -a
evaluate_retval
;;
stop)

#
# Deactivate all the swap partitions
#

echo -n "Desativando swap..."


/sbin/swapoff -a
evaluate_retval

#
# And unmount all the file systems, mounting the root file
# system
# read-only (all are unmounted but because root can't be
# unmounted
# at this point mount will automatically mount it read-only
# which
# is what supposed to happen. This way no data can be written
# anymore from disk)
#

echo -n "Unmounting file systems..."


/bin/umount -a -r
evaluate_retval
;;

*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac

# End /etc/init.d/mountfs
EOF

================================================================================

CRIANDO REBOOT

O arquivo /etc/init.d/reboot cont�m as seguintes instru��es:

cat > reboot << "EOF"


#!/bin/sh
# Begin /etc/init.d/reboot

#
# Call reboot. See man halt for the meaning of the parameters
#

echo "Reboot do sistema em progresso..."

/sbin/reboot -d -f -i

# End /etc/init.d/reboot
EOF
================================================================================

CRIANDO SENDSIGNALS

Criando o /etc/init.d/sendsignals:

cat > sendsignals << "EOF"


#!/bin/sh
# Begin /etc/init.d/sendsignals

#
# Include the functions declared in the /etc/init.d/functions file
#

source /etc/init.d/functions

#
# Send all the remaining processes the TERM signal
#

echo -n "Sending all processes the TERM signal..."


/sbin/killall5 -15
evaluate_retval

#
# Send all the remaining process (after sending them the TERM signal
# before) the KILL signal.
#

echo -n "Sending all processes the KILL signal..."


/sbin/killall5 -9
evaluate_retval

# End /etc/init.d/sendsignals
EOF

================================================================================

CRIANDO SETCLOCK

Este script � somente recomendado para o uso caso a sua bios n�o esteja com o
rel�gio configurado com o hora GTM, sendo esse o nosso caso. Crie o script usando
os seguintes comandos:

cat > setclock << "EOF"


#!/bin/sh
# Begin /etc/init.d/setclock

#
# Include the functions declared in the /etc/init.d/functions file
# and include the variables from the /etc/sysconfig/clock file
#

source /etc/init.d/functions
source /etc/sysconfig/clock

#
# Right now we want to set the kernel clock according to the hardware
# clock, so we use the -hctosys parameter.
#

CLOCKPARAMS="--hctosys"

#
# If the UTC variable is set in the /etc/sysconfig/clock file, add the
# -u parameter as well which tells hwclock that the hardware clock is
# set to UTC time instead of local time.
#

case "$UTC" in
yes|true|1)
CLOCKPARAMS="$CLOCKPARAMS --utc"
;;
no|false|0)
CLOCKPARAMS="$CLOCKPARAMS --localtime" ;;
esac

echo -n "Setting clock..."


/sbin/hwclock $CLOCKPARAMS
evaluate_retval

# End /etc/init.d/setclock
EOF

CRIANDO SYSCONFIG/CLOCK

Se a BIOS n�o est� atribuindo a hora para GMT, ent�o a vari�vel do UTC no
arquivo /etc/sysconfig/clock tem que ter valor 0 (zero). Crie o arquivo clock:

cat > /etc/sysconfig/clock << "EOF"


# Begin /etc/sysconfig/clock

UTC=1

# End /etc/sysconfig/clock
EOF

================================================================================

CRIANDO SYSKLOGD

Um novo arquivo em /etc/init.d/ ser� criado com os seguintes comandos:

cat > sysklogd << "EOF"


#!/bin/sh
# Begin /etc/init.d/sysklogd

#
# Include the functions declared in the /etc/init.d/functions file
#

source /etc/init.d/functions
case "$1" in
start)
echo -n "Starting system log daemon..."
loadproc /usr/sbin/syslogd -m 0

echo -n "Starting kernel log daemon..."


loadproc /usr/sbin/klogd
;;

stop)
echo -n "Stopping kernel log daemon..."
killproc klogd

echo -n "Stopping system log daemon..."


killproc syslogd
;;

reload)
echo -n "Reloading system log daemon configuration file..."
reloadproc syslogd 1
;;

restart)
$0 stop
/usr/bin/sleep 1
$0 start
;;

status)
statusproc /usr/sbin/syslogd
statusproc /usr/sbin/klogd
;;

*)
echo "Usage: $0 {start|stop|reload|restart|status}"
exit 1
;;

esac

# End /etc/init.d/sysklogd
EOF

================================================================================

CRIANDO TEMPLATE

Criando um arquivo em /etc/init.d/template :

cat > template << "EOF"


#!/bin/sh
# Begin /etc/init.d/

#
# Include the functions declared in the /etc/init.d/functions file
#
source /etc/init.d/functions

case "$1" in
start)
echo -n "Starting ..."
loadproc
;;

stop)
echo -n "Stopping ..."
killproc
;;

reload)
echo -n "Reloading ..."
reloadproc
;;

restart)
$0 stop
/usr/bin/sleep 1
$0 start
;;

status)
statusproc
;;

*)
echo "Usage: $0 {start|stop|reload|restart|status}"
exit 1
;;

esac

# End /etc/init.d/
EOF

================================================================================

ATRIBUINDO LINKS SIMBOLICOS E PERMISS�ES I

Todos esses links simb�licos e permiss�es s�o necess�rias para um perfeito


funcionamento dos scripts instalados.

cd /etc/init.d &&
chmod 754 rc rcS functions checkfs halt loadkeys mountfs reboot &&
chmod 754 sendsignals setclock sysklogd template &&
cd ../rc0.d &&
ln -s ../init.d/sysklogd K900sysklogd &&
ln -s ../init.d/sendsignals S800sendsignals &&
ln -s ../init.d/mountfs S900mountfs &&
ln -s ../init.d/halt S999halt &&
cd ../rc6.d &&
ln -s ../init.d/sysklogd K900sysklogd &&
ln -s ../init.d/sendsignals S800sendsignals &&
ln -s ../init.d/mountfs S900mountfs &&
ln -s ../init.d/reboot S999reboot &&
cd ../rcS.d &&
ln -s ../init.d/checkfs S200checkfs &&
ln -s ../init.d/mountfs S300mountfs &&
ln -s ../init.d/setclock S400setclock &&
ln -s ../init.d/loadkeys S500loadkeys &&
cd ../rc1.d &&
ln -s ../init.d/sysklogd K900sysklogd &&
cd ../rc2.d &&
ln -s ../init.d/sysklogd S100sysklogd &&
cd ../rc3.d &&
ln -s ../init.d/sysklogd S100sysklogd &&
cd ../rc4.d &&
ln -s ../init.d/sysklogd S100sysklogd &&
cd ../rc5.d &&
ln -s ../init.d/sysklogd S100sysklogd

================================================================================

CRIANDO FSTAB

O arquivo /etc/fstab permite que as parti��es do sistema sejam montadas


facilmente, especificando somente o dispositivo ou o ponto de montagem. Um novo
arquivo /etc/fstab � criado contendo o seguinte:

cat > /etc/fstab << "EOF"


# Begin /etc/fstab

/dev/<lec parti��o> / ext2 defaults 1 1


/dev/<swap parti��o> swap swap defaults 0 0
proc /proc proc defaults 0 0

# End /etc/fstab
EOF

N�o se esque�a de adicionar os outros perif�ricos como: floppy, cdrom..etc, caso


voc� os tenha.

================================================================================

INSTALANDO Linux KERNEL

Pacote: Linux-2.4.9.tar.bz2
Tempo: demorado
Observa��o: A hora � agora, � neste momento que voc� vai definir e escolher como o
seu sistema ir� se comportar. N�o se esque�a que � no kernel que voc� habilita os
seus drives para o hardware que se encontra no seu computador, ent�o aten��o na
hora de escolher os drives para depois n�o ficar sem.
Instala��o:

cd /usr/src/linux &&
make mrproper &&
make menuconfig &&
make dep &&
make bzImage &&
make modules &&
make modules_install &&
cp arch/i386/boot/bzImage /boot/leckernel &&
cp System.map /boot

================================================================================

CONFIGURANDO O LILO

Para que sejamos capaz de inicializar o sistema, precisamos atualizar nosso


gerenciador de boot. Estou assumindo que o seu sistema anfitri�o esteja usando
Lilo. Como n�o podemos rodar o lilo de dentro do nosso ambiente chroot, pois isso
pode causar s�rios danos ao sistema, vamos sair do ambiente. Agora � hora de
copiar o arquivo leckernel para o GNU/Linux anfitri�o e fazer as entradas do LEC
no lilo.

logout
cp /mnt/lec/boot/leckernel /boot &&
cat >> /etc/lilo.conf << "EOF"
image=/boot/leckernel
label=LEC
root=<lec parti��o>
read-only
EOF

Atualizamos o lilo com o seguinte comando:

/sbin/lilo

Para evitar que os dois GNU/Linux entrem em incompatibilidade por causo do lilo,
execute os seguintes comandos:

cp /etc/lilo.conf /mnt/lec/etc &&


cp <kernel imagens> /mnt/lec/boot

Para descobrir que arquivos de imagens do kernel est�o sendo utilizados, olhe
no /etc/lilo.conf e encontre a linha come�ando com "imagem=". Feito isso � s�
preencher o <kernel imagens> pelo caminho correto.

Agora que instalamos os bootscripts, o kernel e lilo, � hora de reiniciar o


computador e entrar pela primeira vez no LEC. Antes disso n�o se esque�a de
desmontar as parti��es, para isso fa�a o seguinte:

umount /mnt/lec/proc &&


umount /mnt/lec

Agora voc� j� pode reiniciar o computador com esse comando:

/sbin/shutdown -r now

As mensagens de erros vista na inicializa��o do LEC s�o normais, pois n�o


preparamos o LEC para a rede.

Agora de dentro do LEC digite o seguinte:

/sbin/lilo

Isso faz com que fiquemos com a �ltima vers�o do lilo no MBR.
================================================================================

CRIANDO LOCALNET

cat > /etc/init.d/localnet << "EOF"


#!/bin/sh
# Begin /etc/init.d/localnet

#
# Include the functions declared in the /etc/init.d/functions file
# and include the variables from the /etc/sysconfig/network file.
#

source /etc/init.d/functions
source /etc/sysconfig/network

case "$1" in
start)
echo -n "Bringing up the loopback interface..."
/sbin/ifconfig lo 127.0.0.1
evaluate_retval

echo -n "Setting up hostname..."


/bin/hostname $HOSTNAME
evaluate_retval
;;

stop)
echo -n "Bringing down the loopback interface..."
/sbin/ifconfig lo down
evaluate_retval
;;

restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: $0: {start|stop|restart}"
exit 1
;;
esac

# End /etc/init.d/localnet
EOF

================================================================================

ATRIBUINDO LINKS SIMBOLICOS E PERMISS�ES II

As atribui��es a seguir s�o necess�rias para que o script localnet funcione


corretamente.

cd /etc/init.d &&
chmod 754 localnet &&
cd ../rcS.d &&
ln -s ../init.d/localnet S100localnet

================================================================================

CRIANDO NETWORK I

Um novo arquivo /etc/sysconfig/network ser� criado agora:

echo "HOSTNAME=lec" > /etc/sysconfig/network

Caso queira, voc� pode trocar "lec" pelo nome do seu computador.

================================================================================

CRIANDO HOST

Antes de seguir leia as duas op��es:

Se voc� possui uma placa de rede siga os comandos:

cat > /etc/hosts << "EOF"


# Begin /etc/hosts (com placa de rede)

127.0.0.1 localhost.localdomain localhost


192.168.1.1 www.mydomain.org <value of HOSTNAME>

# End /etc/hosts (com placa de rede)


EOF

Se voc� n�o possui uma placa de rede fa�a isso:

cat > /etc/hosts << "EOF"


# Begin /etc/hosts (sem placa de rede)

127.0.0.1 www.mydomain.com <value of HOSTNAME> localhost

# End /etc/hosts (sem placa de rede)


EOF

================================================================================

CRIANDO ETHNET

Se voc� for configurar a sua placa de rede ent�o siga os comandos abaixo, se n�o
for configurar ou n�o tem uma placa de rede ent�o pode ir direto para a conclus�o.

cat > /etc/init.d/ethnet << "EOF"


#!/bin/sh
# Begin /etc/init.d/ethnet
#
# GATEWAY check by Jean-Fran�ois Le Ray - jfleray@club-internet.fr
# "Specify which IF to use to reach default GATEWAY" by
# Graham Cantin - gcantin@pacbell.net
#
#
# Include the functions declared in the /etc/init.d/functions file
# and the variables from the /etc/sysconfig/network file.
#

source /etc/init.d/functions
source /etc/sysconfig/network

case "$1" in
start)

#
# Obtain all the network card configuration files
#

for interface in $(/bin/ls /etc/sysconfig/nic-config/ifcfg* | \


grep -v ifcfg-lo)
do
#
# Load the variables from that file
#

source $interface
#
# If the ONBOOT variable is set to yes, process this file and bring the
# interface up.
#

if [ "$ONBOOT" == yes ]
then
echo -n "Bringing up the $DEVICE interface..."
/sbin/ifconfig $DEVICE $IP broadcast $BROADCAST \
netmask $NETMASK
evaluate_retval
fi
done

#
# If the /etc/sysconfig/network file contains a GATEWAY variable, set
# the default gateway and the interface through which the default
# gateway can be reached.
#

if [ "$GATEWAY" != "" ]; then


echo -n "Setting up routing for $GATEWAY_IF interface..."
/sbin/route add default gateway $GATEWAY \
metric 1 dev $GATEWAY_IF
evaluate_retval
fi
;;

stop)

#
# Obtain all the network card configuration files
#

for interface in $(/bin/ls /etc/sysconfig/nic-config/ifcfg* | \


grep -v ifcfg-lo)
do
#
# Load the variables from that file
#

source $interface
#
# If the ONBOOT variable is set, process the file and bring the
# interface down
#

if [ $ONBOOT == yes ]
then
echo -n "Bringing down the $DEVICE interface..."
/sbin/ifconfig $DEVICE down
evaluate_retval
fi
done
;;

restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac

# End /etc/init.d/ethnet
EOF

================================================================================

CRIANDO NETWORK II

Se uma gateway for requerida fa�a o seguinte:

cat >> /etc/sysconfig/network << "EOF"


GATEWAY=192.168.1.2
GATEWAY_IF=eth0
EOF

================================================================================

CRIANDO ARQUIVOS DE CONFIGURA��ES DO NIC

Para ser configurada corretamente, a interface precisa receber um endere�o IP para


ser identificada na rede ,al�m de outros par�metros como o endere�o de broadcast e
m�scara de rede. O arquivo usado para fazer isso � o ifcfg-eth0. Para criar um
arquivo gen�rico digite os seguintes comandos:

mkdir /etc/sysconfig/network-scripts &&


cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
ONBOOT=yes
DEVICE=eth0
IP=192.168.1.1
NETMASK=255.255.255.0
BROADCAST=192.168.1.255
EOF

================================================================================

ATRIBUINDO LINKS SIMB�LICOS E PERMISS�ES III

cd /etc/init.d &&
chmod 754 ethnet &&
cd ../rc0.d &&
ln -s ../init.d/ethnet K800ethnet &&
cd ../rc1.d &&
ln -s ../init.d/ethnet K800ethnet &&
cd ../rc2.d &&
ln -s ../init.d/ethnet K800ethnet &&
cd ../rc3.d &&
ln -s ../init.d/ethnet S200ethnet &&
cd ../rc4.d &&
ln -s ../init.d/ethnet S200ethnet &&
cd ../rc5.d &&
ln -s ../init.d/ethnet S200ethnet &&
cd ../rc6.d &&
ln -s ../init.d/ethnet K800ethnet

================================================================================

Terminamos a configura��o de uma rede gen�rica, se voc� possui uma rede dever�
trocar os endere�os sugeridos pelos praticados na sua rede.

Reinicie o seu sistema mais uma vez. Caso nenhuma mensagem de erro aparecer
durante o boot e voc� conseguir se logar no sistema sem problemas, ent�o tudo deu
certo....

PARAB�NS !!! VOC� CONSTRU�U O SEU PR�PRIO SISTEMA OPERACIONAL GNU/Linux.

================================================================================

CONCLUS�O

Parab�ns! Trabalho feito.

Pronto! Voc� tem em m�os o seu pr�prio GNU/Linux e agora o que fazer? Essa � uma
quest�o que s� voc� poder� responder. Existem tantas coisas que podem ser feitas
que faltaria espa�o no livro para descreve-las, mas aqui vai algumas dicas:

Estudo: Voc� pode fazer do seu LEC um laborat�rio de estudos. Constru�-o v�rias e
v�rias vezes e tente aprender o funcionamento e a fun��o de cada pacote. Quem sabe
voc� um dia poder� se tornar um Engenheiro GNU/Linux :).

Empresa: Inves da sua empresa comprar uma distribui��o, n�o seria melhor
desenvolver a sua pr�pria solu��o. Pelo simples motivo de voc� saber exatamente o
que a sua empresa precisa.
Comercial: Que tal ter a sua pr�pria distribui��o GNU/Linux no mercado. O Brasil �
um excelente campo para esse investimento e n�s usu�rios agradecer�amos, quanto
mais op��es melhor.
Metade do caminho j� est� feito para sua distribui��o, o que voc� precisa agora �
definir algumas caracter�sticas , exemplos:
- Ser� uma distribui��o para empresas ou usu�rios finais ?
- Se for para empresas quais softwares precisa ser instalados ? E se for para os
usu�rios ?
Ser� preciso tamb�m desenvolver softwares complementares como instalador e
configurador, mas isso j� � outro papo.

Com todos esses caminhos a disposi��o, fica dif�cil saber exatamente o que voc�
quer ou precisa, por isso � que o livro abrange apenas a constru��o b�sica do
sistema.

Vou disponibilizar o meu e-mail aqui, para que voc� entre em contato comigo e de a
sua sugest�o, coment�rio, critica, elogio ..etc.

autor@projetolec.com.br

Para finalizar gostaria de agradecer voc� pela leitura do livro e a todos aqueles
que ajudam na realiza��o do LEC.

================================================================================

BIBLIOGRAFIA

- Linux From Scratch - Gerard Beekmans


- Building a Minimal Linux System from Source Code - Greg O'Keefe
- From Power Up To Bash Prompt HOWTO - Greg O'Keefe
- Guia Foca GNU/Linux - Gleydson Mazioli da Silva
- Red Hat Linux Unleashed

================================================================================

AP�NDICE - ERROS

Espero que voc� esteja lendo este ap�ndice apenas como curiosidade, caso
contr�rio, algo saiu errado.

Antes do livro chegar at� voc� foi realizado v�rios testes em varias m�quinas
diferentes para a segurar que o livro funciona. E com certeza muita gente nesse
momento j� sabe disso.

Eu demorei um bom tempo para conseguir instalar o sistema sem que nenhum erro
aperece-se. Nas primeiras tentativas os erros s�o mais comuns, por isso n�o
desanime e tente de novo.

Grande parte dos erros s�o provocados por n�s. Uma virgula digitada erra j� � o
suficiente para acabar com o sistema. A mesma coisa acontece se voc� deixar um
espa�o a mais entre os comandos, ou ao contrario, n�o deixando espa�o nenhum.
Ent�o muito cuidado e paci�ncia ao digitar os comandos de instala��o. Uma
alternativa para evitar erros de digita��o � usar os scripts.

Aqui algumas verifica��es antes do desespero.


1) O seu computador est� funcionando corretamente? Existe algum conflito entre
pe�as?
2) O GNU/Linux anfitri�o � muito velho? O sistema foi instalado corretamente, com
todos os compiladores e bibliotecas necess�rias?
3) A digita��o dos comandos de instala��o est�o corretos ?

Se mesmo assim voc� continua com o erro, ent�o � hora de agirmos. Para facilitar o
trabalho de todos e prestar para voc� um servi�o de melhor qualidade, estamos
disponibilizando uma lista de discuss�o onde voc� pode participar e tirar todas as
suas d�vidas. Visite o nosso site e inscreva-se j�.

www.projetolec.com.br