Lec-linux-em-construcao-cvs-211101-72pag

  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Lec-linux-em-construcao-cvs-211101-72pag as PDF for free.

More details

  • Words: 14,853
  • Pages: 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 INSTALANDO INSTALANDO INSTALANDO INSTALANDO INSTALANDO INSTALANDO INSTALANDO INSTALANDO INSTALANDO INSTALANDO INSTALANDO INSTALANDO INSTALANDO INSTALANDO INSTALANDO

BASH BINUTILS BZIP2 DIFFUTILS FILEUTILS GCC GREP GZIP KERNEL Linux MAKE MAWK SED SHELLUTILS TAR TEXINFO 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: pesquisa de palavras ou texto.

egrep, fgrep egrep e s�o usados para

================================================================================ 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 isso depois de termos terminado a instala��o do sistema pacotes necessitam dos arquivos de cabe�alho do kernel, kernel agora e configur�-lo de modo a podermos compilar Instala��o: make mrproper && yes "" | make config && make dep && cd /mnt/lec/usr/include &&

kernel ainda. N�s faremos base. Mas como alguns vamos descompactar o os pacote dependente.

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 glibclinuxthreads ================================================================================ 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: size86.

as86, as86_encap, ld86, objdump86, nm86 e

================================================================================ 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 ln ln ln

/usr/share/man/man1 && -s bzip2.1 bunzip2.1 && -s bzip2.1 bzcat.1 && -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 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/ 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 2:2345:respawn:/sbin/agetty 3:2345:respawn:/sbin/agetty 4:2345:respawn:/sbin/agetty 5:2345:respawn:/sbin/agetty 6:2345:respawn:/sbin/agetty

tty1 tty2 tty3 tty4 tty5 tty6

9600 9600 9600 9600 9600 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: 1: 2: 3: 4: 5: 6:

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

Cada um dos modos de inicializa��o possui os seus pr�prios script, encontrados diret�rio /etc/rc.d. Os arquivos mais importantes para a inicializa��o do LEC est�o localizados no diret�rio /etc/init.d.

no

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 - [email protected] # print_error_msg based on ideas by Simon Perreault # [email protected] # # 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 [email protected]" $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 " >&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 then

if [ $previous != N ]

# # 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

esac fi

if [ $error_value != 0 ] then print_error_msg fi ;;

done

# 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)

warning)

failure)

$SET_COL echo -n "[ " $SUCCESS echo -n "OK" $NORMAL echo " ]" ;; $SET_COL echo -n "[ " $WARNING echo -n "ATTN" $NORMAL echo " ]" ;; $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 ] #

fi

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

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] # else

print_status failure

# # 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 ] #

fi else

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

fi

# # 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 else

fi

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

fi

$SET_WCOL echo -n "Not running" print_status warning

} # # 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 else fi

fi echo "$1 is not running"

} # 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)

status)

$0 stop /usr/bin/sleep 1 $0 start ;; 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)

status)

*) ;;

$0 stop /usr/bin/sleep 1 $0 start ;; 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 cd ln ln ln ln cd ln cd ln cd ln cd ln cd ln

-s ../init.d/reboot S999reboot && ../rcS.d && -s ../init.d/checkfs S200checkfs && -s ../init.d/mountfs S300mountfs && -s ../init.d/setclock S400setclock && -s ../init.d/loadkeys S500loadkeys && ../rc1.d && -s ../init.d/sysklogd K900sysklogd && ../rc2.d && -s ../init.d/sysklogd S100sysklogd && ../rc3.d && -s ../init.d/sysklogd S100sysklogd && ../rc4.d && -s ../init.d/sysklogd S100sysklogd && ../rc5.d && -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/ /dev/<swap parti��o> proc

/ swap /proc

ext2 swap proc

defaults 1 1 defaults 0 0 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= 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 /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 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 # 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 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 - [email protected] # "Specify which IF to use to reach default GATEWAY" by # Graham Cantin - [email protected] #

# # 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)

*)

esac

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

# 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 cd ../rc1.d && ln -s ../init.d/ethnet cd ../rc2.d && ln -s ../init.d/ethnet cd ../rc3.d && ln -s ../init.d/ethnet cd ../rc4.d && ln -s ../init.d/ethnet cd ../rc5.d && ln -s ../init.d/ethnet cd ../rc6.d && ln -s ../init.d/ethnet

K800ethnet && K800ethnet && K800ethnet && S200ethnet && S200ethnet && S200ethnet && 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. [email protected] 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