Vous êtes sur la page 1sur 45

LEC LINUX EM CONSTRUO 2.

Daniel Zilli

DEDICATRIA Dedico este trabalho a minha esposa e famlia. AGRADECIMENTOS A seguir uma relao das pessoas que ajudam o Projeto LEC: Clodonil, pela hospedagem do projeto. Dennis Schwartz ,pelo desenvolvimento do site. Sandro Mello, pelo constante insentivo e ajuda ao projeto.

LEC LINUX EM CONSTRUO 2.0

Daniel Zilli

Copyright (c) 2002 - Daniel Zilli Uma cpia fsica ou verbal deste documento ou parte dele pode ser livremente distribuda ou colocada em meios de distribuio eletrnicos desde que contenha um aviso mencionando a origem do documento. A distribuio e/ou reproduo comercial encorajada, no entanto o autor deve ser noticado e todas as informaes de direitos reservadas devem permanecer intactas. Os nomes Linux Em Construo, LEC, do autor e de seus colaboradores no podem ser utilizados para endossar ou promover produtos derivados deste material sem uma permisso por escrito do autor. O autor e os participantes no se responsabilizam por quaisquer danos ou perdas que o livro ou o mau uso do mesmo venha causar.

PREFCIO..................................................................................................................... 4 ORGANIZAO........................................................................................................... 4 PARTE 1....................................................................................................................... 5 CAPTULO 1 - O LINUX.............................................................................................. 5 A CRIAO................................................................................................................... 5 AS CARACTERSTICAS................................................................................................ 5 AS DISTRIBUIES..................................................................................................... 5 CAPTULO 2 - PADRES............................................................................................. 6 FILESYSTEM HIERARCHY STANDARD.................................................................... 6 LINUX STANDARD BASE............................................................................................ 6 CAPTULO 3 - PREPARAO.................................................................................... 7 COMO SER FEITO..................................................................................................... 7 PR-REQUISITOS......................................................................................................... 7 FAZENDO O DOWNLOAD......................................................................................... 7 DESCOMPACTANDO.................................................................................................. 8 QUADRO DE INSTALAO....................................................................................... 8 EXEMPLO DE INSTALAO...................................................................................... 9 PARTE 2..................................................................................................................... 10 CAPTULO 4 - PRIMEIROS TIJOLOS......................................................................... 10 CRIANDO UMA PARTIO E UM SISTEMA DE ARQUIVOS............................... 10 MOUNTANDO A NOVA PARTIO......................................................................... 10 CRIANDO OS DIRETRIOS...................................................................................... 10 VARIVEL $LEC............................................................................................................ 11 CAPTULO 5 - CONSTRUNDO A BASE................................................................... 11 CRIANDO O USURO LEC........................................................................................ 11 INSTALANDO BASH.................................................................................................... 11 INSTALANDO BINUTILS............................................................................................ 12 INSTALANDO BZIP2................................................................................................... 12 INSTALANDO DIFFUTILS.......................................................................................... 12 INSTALANDO FILEUTILS........................................................................................... 12 INSTALANDO GCC..................................................................................................... 13 INSTALANDO GREP.................................................................................................... 13 INSTALANDO GZIP..................................................................................................... 13 INSTALANDO MAKE................................................................................................... 13 INSTALANDO MAWK.................................................................................................. 13 INSTALANDO SED....................................................................................................... 14 INSTALNDO SH-UTILS............................................................................................... 14 INSTALANDO TAR....................................................................................................... 14 INSTALANDO TEXINFO.............................................................................................

14 INSTALANDO TEXTUTILS......................................................................................... 14 PARTE 3..................................................................................................................... 15 INSTALANDO O LEC.................................................................................................. 15 CAPTULO 6 - INSTALANDO OS SOFTWARE NECESSRIOS.............................. 15 MOUNTANDO O PROC............................................................................................. 15 ENTRANDO NO AMBIENTE CHROOT................................................................... 15 CRIANDO DIRETRIOS............................................................................................. 15 CRIANDO PASSWD E GROUP................................................................................... 16 MOVENDOS OS FONTES........................................................................................... 16 CRIANDO LINKS.......................................................................................................... 16

INSTALANDO KERNEL HEADERS............................................................................ 17 INSTALANDO GLIBC.................................................................................................. 17 CRIANDO DEVICES.................................................................................................... 17 INSTALADO PATCH.................................................................................................... 18 INSTALANDO GCC..................................................................................................... 18 INSTALANDO MAN-PAGES........................................................................................ 18 INSTALANDO FINDUTILS......................................................................................... 18 INSTALANDO MAWK.................................................................................................. 18 INSTALANDO NCURSES............................................................................................ 18 INSTALANDO VIM...................................................................................................... 19

INSTALANDO BISON.................................................................................................. 19 INSTALANDO LESS...................................................................................................... 19 INSTALANDO GROFF................................................................................................. 19 INSTALANDO TEXTUTILS......................................................................................... 20 INSTALANDO SED....................................................................................................... 20 INSTALANDO FLEX:.................................................................................................... 20 INSTALANDO BINUTILS............................................................................................ 20 INSTALANDO FILEUTILS........................................................................................... 20 INSTALANDO SH-UTILS............................................................................................ 20 INSTALANDO GETTEXT............................................................................................ 20 INSTALANDO PERL..................................................................................................... 21 INSTALANDO M4........................................................................................................ 21 INSTALANDO TEXINFO............................................................................................. 21 INSTALANDO AUTOCONF........................................................................................ 21 INSTALANDO AUTOMAKE........................................................................................ 21 INSTALANDO BASH.................................................................................................... 21 INSTALANDO FILE...................................................................................................... 21 INSTALANDO LIBTOOL............................................................................................. 21 INSTALANDO BIN86................................................................................................... 22 INSTALANDO BZIP2................................................................................................... 22 INSTALANDO KBD...................................................................................................... 22 INSTALANDO DIFFUTILS.......................................................................................... 22 INSTALANDO E2FSPROGS........................................................................................ 22 INSTALANDO GREP.................................................................................................... 22 INSTALANDO GZIP..................................................................................................... 23 INSTALANDO MAN..................................................................................................... 23 INSTALANDO LILO..................................................................................................... 23 INSTALANDO LINKS................................................................................................... 23 INSTALANDO MAKE................................................................................................... 23 INSTALANDO MODUTILS......................................................................................... 23 INSTALANDO PROCINFO.......................................................................................... 24 INSTALANDO PROCPS............................................................................................... 24 INSTALANDO PSMISC................................................................................................ 24 INSTALANDO SHADOW PASSWORD...................................................................... 24 INSTALANDO SYSKLOGD.......................................................................................... 24 INSTALANDO SYSVINIT............................................................................................. 24 INSTALANDO TAR....................................................................................................... 24 INSTALANDO UTIL-LINUX....................................................................................... 25 CONFIGURAES....................................................................................................... 25 CONFIGURANDO GLIBC........................................................................................... 25 CONFIGURANDO TIMEZONE.................................................................................. 25 CONFIGURANDO DYNAMIC LOADER................................................................... 26 CONFIGURANDO SYSKLOGK.................................................................................. 26 COOFIGURANDO SYSVINIT..................................................................................... 26 CRIANDO OS ARQUIVOS UTMP, WTMP E BTMP................................................. 27 CRIANDO A SENHA PARA O ROOT......................................................................... 27 PARTE 4.....................................................................................................................28 CAPTULO 7 - BOOT SCRIPTS & CONFIGURAES............................................ 28 CRIANDO OS DIRETRIOS...................................................................................... 29 CRIANDO RC................................................................................................................ 29 CRIANDO RCS.............................................................................................................. 32 CRIANDO CHECKFS................................................................................................... 39 CRIANDO HALT........................................................................................................... 41 CRIANDO LOADKEYS................................................................................................. 41 CRIANDO MOUNTFS................................................................................................. 41 CRIANDO REBOOT..................................................................................................... 43 CRIANDO SENDSIGNALS.......................................................................................... 43 CRIANDO SETCLOCK................................................................................................ 43 CRIANDO SYSCONFIG/CLOCK................................................................................ 44 CRIANDO SYSKLOGD................................................................................................. 44 CRIANDO TEMPLATE................................................................................................. 45 CRIANDO O BASH_PROFILE..................................................................................... 46 ATRIBUINDO LINKS SIMBOLICOS E PERMISSES I............................................ 46 CAPTULO 8 - CRIANDO UMA REDE GENERICA................................................. 46 INSTALANDO NETKIT-BASE..................................................................................... 46 INSTALANDO NET-TOOLS........................................................................................ 47 CRIANDO LOCALNET................................................................................................ 47 CRIANDO NETWORK I.............................................................................................. 47 CRIANDO HOST.......................................................................................................... 47 CRIANDO ETHNET..................................................................................................... 48 CRIANDO NETWORK II............................................................................................. 49 CRIANDO ARQUIVOS DE CONFIGURAES DO NIC........................................ 49 ATRIBUINDO LINKS SIMBLICOS E PERMISSES II........................................... 50 CAPTULO 9 - CONFIGURACOES FINAIS............................................................... 50 CRIANDO FSTAB........................................................................................................ 50 INSTALANDO LINUX KERNEL................................................................................. 50 CONFIGURANDO O LILO......................................................................................... 50 CONCLUSO................................................................................................................ 51 BIBLIOGRAFIA.............................................................................................................. 52

APNDICE - ERROS..................................................................................................... 52

PARTE 1
PREFCIO
Ao falarmos , lermos ou escrevermos sobre o linux, geralemnte a palavra liberdade citada. Isto porque as distribuies apelam para essa vantagem de voce poder realmente ter liberdade para mexer no sistema, e o congur-lo do seu jeito. Mas a liberdade que as distribuies falam realmente uma liberdade por completa ? Quantas distribuies tem o seu processo de desenvolvimento totalmente aberto ao pblico ? Poucas! Quantas distribuies tem uma instalao mnima, no qual voc instala somente o necessrio para o funcionamento da distribuio ? Poucas novamente! Pior ainda. Tem distribuio que nem o sistema para download oferece. Cansado dessa falsa liberdade, resolvi ir atrs de solues que me satisfaziam, nos mais variados critrios. Foi ento que nasceu o Projeto LEC. O Projeto LEC atravs deste livro tem por objetivo levar todas as pessoas interessadas, condies necessrias para a construo passo a passo do seu prprio sistema operacional Linux. isso mesmo! Voc vai construir o seu prprio Linux e razes para isso no faltam. O principal motivo que me levou a construir o meu prprio sistema, foi de poder conhecer em detalhes o seu funcionamento e assim entende-lo como um todo. O nosso sistema 100% puro Linux, no sendo baseado em nenhuma outra distribuio. O objetivo disso criar um sistema base para que depois cada um possa personaliz-lo ao seu modo.

TEORIA DO SISTEMA
CAPTULO 1 O LINUX
Antes de construrmos o LEC, vamos aprender um pouco mais sobre esse sistema operacional que est conquistando o mundo a cada dia.

A CRIAO
O nascimento do Linux, ao contrrio do que muita gente pensa, no uma obra exclusiva de Linus Torvalds, apesar dele ser o mentor de toda essa revoluo 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 distribuio. Quando Richard iniciou o projeto GNU em 1984, a ideia era fazer um sistema operacional (chamado GNU, que signca GNU No 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 intenes, Linus comeou a construo de um sistema operacional. O detalhe que Torvalds comeou 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 no apenas Linux, j que Linux apenas o kernel e ele sozinho no faz nada.

ORGANIZAO
Para um melhor entendimento do livro, explicarei como este se encontra organizado. O livro est dividido em 3 partes: Primeira parte. Do capitulo um ao trs onde se encontram os ensinamentos tericos necessrios para uma perfeita compreenso do LEC. Segunda parte. O captulo quatro e cinco so encarregados de comear a formao da base necessria para o sistema. Terceira parte. No capitulo seis onde efetivamente construmos o nosso sistema. No capitulo sete, instalamos os bootscripts, no capitulo oito conguramos o sistema para uma rede generica e no ultimo capitulo nalizamos a construcao do sistema com kernel. LOGS 02-02-02 Um novo livro!

AS CARACTERSTICAS
O sistema GNU/Linux descendente do padro POSIX que o pai do UNIX e suas variantes. A seguir algumas das principais caractersticas desse sistema: - um sistema operacional de cdigo aberto distribudo gratuitamente pela Internet. - Multiusurio - Multitarefa real - Multi-processamento - Proteo entre processos executados na memria RAM - Pode ser executado em 10 arquiteturas diferentes como: Intel, Macintosh,Alpha, etc. - Memria Virtual (swap). - Suporte a vrios sistemas de arquivos. - Utiliza permisses de acesso a arquivos, diretrios e programas.

AS DISTRIBUIES
Existe atualmente mais de 180 distribuies GNU/Linux ao redor do mundo, sendo elas mantidas por empresas, organizaes e/ou pessoas comum. Ao grosso modo, uma distribuio onde basicamente se encontra o sistema base GNU/LINUX junto com aplicativos adicionais. Cada distribuio tem a sua prpria caracterstica, ou seja, contm algumas particularidades como conguradores, gerenciadores de pacotes, sistema de instalao, o objetivo, pblico alvo...etc, mas no nal todas tem a mesma origem. O que as empresas vendem na verdade a distribuio ,ou seja, a caixa contendo os livros, cds de instalao, programas adicionais e obrigatoriamente o cdigo fonte do sistema. A empresa que desenvolve a distribuio precisa tambm disponibilizar o download gratuito do GNU/Linux atravs da internet. Dentre as distribuies mais famosas do mundo, podemos citar as cinco maiores: Mandrake, Red Hat, Slackware, Suse e Debian Sendo a Debian a distribuio ocial do GNU/Linux por ser desenvolvida e mantida atravs de voluntrios espalhados ao redor do mundo, sem fundo comercial. A escolha de uma distribuio pessoal, mas se voc car na dvida faa que nem a comunidade LEC, construa a sua prpria distribuio! :)

Encurtando o papo, o pessoal da FHS que dene quais os diretrios que devem existir e aonde cada arquivo deve ser instalado no sistema. Todos aqueles diretrios existente no nosso sistema no esto a por acaso, e sim, por seguirem normas. Grande parte das distribuies existente no mercado so FHS compatveis, ou seja, seguem os padres estabelecidos para a construo do sistema e isso bom, pelo motivo que ajuda a crescer a compatibilidade entre as mesmas. Como unanimidade quase impossvel quando falamos em padres. A FHS tambm tem seus protestantes. Muita gente como, desenvolvedores de sistemas e algumas distribuies no concordam com certas regras ditas pelo FHS e prova maior de que essa discordncia existe, foi o que escreveu um dos coordenadores do projeto no lanamento da ltima verso do documento. Com muita demora e controvrsia, a verso 2.2 do FHS est lanado Como j foi dito, certas distribuies fogem um pouco do esquema da FHS. Isso porque cada distribuio tem as suas particularidades e jeito de trabalhar. Nenhuma distribuio obrigada a seguir os padres da FHS, mas quanto mais empresas o seguirem menor ser a incompatibilidade entre as distribuies. A atual verso do FHS a 2.2 datada em 24 de maio de 2001. Poder levar algum tempo para que as distribuies a adotem e a coloquem em prtica. Para voc obter maiores informaes sobre o FHS entre no site www.pathname.com/fhs.

CAPTULO 2 PADRES
Como tudo na vida precisa de regras, o GNU/Linux no se difere disso. Imagina se aquelas mais de 180 distribuies zessem 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 distribuies, claro. Para evitar essa dor de cabeas criou-se organizaes para ditarem normas e padres. Duas organizaes destacam-se nesse papel, a Filesystem Hierarchy Standard (Hierarquia Padro Para Sistemas De Arquivos) mais conhecida como FHS e a Linux Standard Base (Padres Para Base Linux) ou LSB como preferir. Os dois padres sero estudados mais detalhadamente agora.

LINUX STANDARD BASE


O objetivo do LSB desenvolver e promover um conjunto de padres que aumentam a compatibilidade entre distribuies GNU/Linux e permitir que aplicaes de softwares funcionem em qualquer sistema GNU/Linux. O LSB na verdade no um padro e sim, uma famlia de padres(standards), contando mais ou menos uns 20 padres, inclusive o FHS. da unio de todos esses padres que nasceu o LSB. Na verdade o que denir a compatibilidade entre as distribuies ser o quanto do LSB os desenvolvedores ou as empresas adotaro para o seu sistema. O GNU/Linux Standard Base um assunto bastante tcnico, sendo voltado principalmente para engenheiros de software e programadores experientes, mas com certeza no far mal a voc caso queira visitar o site www.linuxbase.org.

FILESYSTEM HIERARCHY STANDARD


O FHS so normas usadas para criao e localizao de diretorios e arquivos num sistema GNU/Linux. Estas normas so usadas por desenvolvedores de distribuies Linux/Unix, programadores GNU/Linux e implementadores de sistemas, tendo como inteno servir de referncia para realizaes de tais atividades.

CAPTULO 3

PREPARAO
COMO SER FEITO
Este livro descreve o processo de construo do nosso prprio sistema operacional GNU/Linux, atravs de uma distribuio GNU/Linux j instalada, usando apenas as fontes dos programas necessrios para tal e nada mais.

PR-REQUISITOS
Como descrito acima necessrio voc ter apenas uma distribuio GNU/Linux j instalada no seu computador, no importando qual, s no pode ser muito velha,mas tambm no precisa ser o ltimo lanamento. Particularmente para construo eu j usei Red Hat 6.2, 7.x, Mandrake 7.2, 8.x e Slackware 7.1 e 8.0 e nunca tive problemas sendo por isso que eu as recomendo, principalmente as verses mais novas. A nica particularidade que pedirei voc para que a sua distribuio base tenha como gerenciador de boot o LILO. Quanto maquina este livro voltado para arquitetura intel e a princpio um modelo de mdio porte a escolha mais certa. J observei alguns problemas com mquinas velhas como 386 e 486. O ideal seria voc dispor de um computador s para trabalhar com o LEC no incio, at voc pegar o jeito da coisa, mas se voc no poder, tudo bem, o importante ter uma mquina que esteja funcionando tudo certinho, na dvida e se voc poder, formate (no se esquea de fazer os backups necessrios antes) a mquina e instale tudo de novo. A pacincia 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 documentao de cada pacote, assim voc estar dando um grande passo para a compreenso do sistema.

19. Text Utils (2.0): ftp://ftp.gnu.org/gnu/textutils/ 20. Glibc (2.2.4): ftp://ftp.gnu.org/gnu/glibc/ 21. Glibc-linuxthreads (2.2.4): ftp://ftp.gnu.org/gnu/glibc/ 22. MAKEDEV: www.projetolec.com.br/downloads/pacotes 23. Man-pages (1.43): ftp://ftp.win.tue.nl/pub/linux-local/manpages/ 24. Find Utils (4.1): ftp://ftp.gnu.org/gnu/ndutils/ 25. Find Utils Patch (4.1): 26. Ncurses (5.2): ftp://ftp.gnu.org/gnu/ncurses/ 27. Vim (6.0): ftp://ftp.vim.org/pub/editors/vim/unix/ 28. Bison (1.32): ftp://ftp.gnu.org/gnu/bison/ 29. Less (358): ftp://ftp.gnu.org/gnu/less/ 30. Groff (1.17.2): ftp://ftp.gnu.org/gnu/groff/ 31. Man (1.5j): ftp://ftp.win.tue.nl/pub/linux-local/utils/man/ 32. Perl (5.6.1): http://www.perl.com/ 33. M4 (1.4): ftp://ftp.gnu.org/gnu/m4/ 34. Autoconf (2.52): ftp://ftp.gnu.org/gnu/autoconf/ 35. Automake (1.5): ftp://ftp.gnu.org/gnu/automake/ 36. Flex (2.5.4a): ftp://ftp.gnu.org/non-gnu/ex/ 37. File (3.36): ftp://ftp.gw.com/mirrors/pub/unix/le/ 38. Libtool (1.4.2): ftp://ftp.gnu.org/gnu/libtool/ 39. Bin86 (0.16.2): http://www.cix.co.uk/~mayday/ 40. Gettext (0.10.40): ftp://ftp.gnu.org/gnu/gettext/ 41. Kbd (1.06): ftp://ftp.win.tue.nl/pub/linux-local/utils/kbd/ 42. Kbd patch: www.projetolec.com.br/downloads/pacotes 43. E2fsprogs (1.25): ftp://download.sourceforge.net/pub/sourceforge/ e2fsprogs/ 44. Lilo (22.1): ftp://metalab.unc.edu/pub/Linux/system/boot/lilo/ 45. Modutils (2.4.12): ftp://ftp.kernel.org/pub/linux/utils/kernel/ modutils/ 46. Procinfo (18): ftp://ftp.cistron.nl/pub/people/svm/ 47. Procps (2.0.7): ftp://people.redhat.com/johnsonm/procps/ 48. Psmisc (20.1): ftp://download.sourceforge.net/pub/sourceforge/ psmisc/ 49. Shadow Password Suite (20001016): ftp://ftp.pld.org.pl/software/ shadow/ 50. Sysklogd (1.4.1): ftp://ftp.ibiblio.org/pub/Linux/system/daemons/ 51. Sysvinit (2.83): ftp://ftp.cistron.nl/pub/people/miquels/sysvinit/ 52. Util Linux (2.11m): ftp://ftp.win.tue.nl/pub/linux-local/utils/utillinux/ 53. Netkit-base (0.17): ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/ 54. Net-tools (1.60): http://www.tazenda.demon.co.uk/phil/net-tools/

DESCOMPACTANDO
Todos os pacotes necessrios para a criao do nosso sistema encontram-se compactados. Quando comearmos a construo do GNU/Linux iremos ter que descompactar dezenas de pacotes, ento para poupar tempo explicarei agora como fazer isso: Para os pacotes com extenso .tar.bz2 use esse comando: bzcat nomedoarquivo.tar.bz2 | tar xv Para os pacotes com extenso .tar.gz use esse comando: tar -xvzf nomedoarquivo.tar.gz Para os pacotes com extenso .bz2 use esse comando: bunzip nomedoarquivoa.bz2

FAZENDO O DOWNLOAD
Para podermos continuar com a construo do nosso sistema preciso realizar o downlaod dos pacotes necessrios. Isso feito atraves desses endereos:
1. Bash (2.05a): ftp://ftp.gnu.org/gnu/bash/ 2. Binutils (2.11.2): ftp://ftp.gnu.org/gnu/binutils/ 3. Bzip2 (1.0.1): ftp://sourceware.cygnus.com/pub/bzip2/ 4. Diff Utils (2.7): ftp://ftp.gnu.org/gnu/diffutils/ 5. File Utils (4.1): ftp://ftp.gnu.org/gnu/leutils/ 6. GCC (2.95.3): ftp://ftp.gnu.org/pub/gnu/gcc/ 7. Grep (2.4.2): ftp://ftp.gnu.org/gnu/grep/ 8. Gzip (1.2.4a): ftp://ftp.gnu.org/gnu/gzip/ 9. Linux Kernel (2.4.18): ftp://ftp.kernel.org/pub/linux/kernel/ 10. Make (3.79.1): ftp://ftp.gnu.org/gnu/make/ 11. Mawk (1.3.3): ftp://ftp.whidbey.net/pub/brennan/ 12. Patch (2.5.4): ftp://ftp.gnu.org/gnu/patch/ 13. Sed (3.02): ftp://ftp.gnu.org/gnu/sed/ 14. Sh-utils (2.0): ftp://ftp.gnu.org/gnu/sh-utils/ 15. Sh-utils Patch (2.0): www.projetolec.com.br/downloads/pacotes 16. Tar (1.13): ftp://ftp.gnu.org/gnu/tar/ 17. Tar Patch (1.13): www.projetolec.com.br/downloads/pacotes 18. Texinfo (4.0): ftp://ftp.gnu.org/gnu/texinfo/

QUADRO DE INSTALAO
Agora que voc j sabe como descompactar, vou explicar o funcionamento do quadro de instalao. Todos os pacotes a

serem instalados sero apresentados para voc nesta forma: Pacote: Tempo: Observao: Instalao: Descrio do pacote: Descrio da instalao: Onde: Pacote: Nesse campo voc encontrar o nome e verso do pacote a ser instalado. Tempo: Por serem pacotes de tamanhos diferentes o tempo de instalao tambm muda. Os pacotes esto divididos em trs categorias em relao ao tempo: rpido,mdio e demorado. Observao: Caso seja necessrio apresentar alguma observao em relao ao pacote ou a instalao ela ser feita aqui. Instalao: Aqui descrito os comandos referente instalao. Descrio do pacote: Neste campo ser feita uma descrio do pacote a ser instalado. Descrio da instalao: Aqui explicarei os comandos usado na instalao. recomendado que voc remova o diretrio depois de feita a instalao, mas ateno, para apagar somente o diretrio criado pela descompactao e no o pacote. Como sempre tem um que quer fugir da regra, voc est proibido de remover o diretrio Linux criado pela descompactao do kernel depois da instalao. Alguns pacotes iram precisar dos kernel heards, por isso o diretrio deve car.

EXEMPLO DE INSTALAO
Como a primeira vez (eu acho) que voc constri um sistema operacional, vou te dar uma mo e exemplicar como ocorrer as instalaes dos pacotes. Usarei como exemplo a instalao do pacote bash. Quando voc descompactar um pacote o mesmo criar automaticamente um diretrio. O prximo passo implesmente fazer a instalao do pacote. Para isso voc tem duas opes: 1) Uma simplesmente entrando no diretrio criado pelo pacote e digitar os comandos descritos no campo instalao. 2) Outra maneira copiar o script referente ao pacote para o diretrio criado e execut-lo. Exemplo 1: Para instalar o bash faa o seguinte, descompacte o pacote bash usando esse comando: bzcat bash-2.05a.tar.bz2 | tar xv Entre no novo diretrio criado, o bash-2.05 e execute os comandos descritos no campo instalao. Exemplo 2: Primeiramente descompacte o pacote bash. Depois descompacte o pacote comandos.tar.bz2 dentro do diretrio a onde os seus fontes esto e entre no diretrio capitulo5; copie o arquivo cap5_bash para o diretrio que a descompactao do pacote bash criou. Dentro do diretrio 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 instalao saia do diretrio bash e remova-o com o seguinte comando: rm -rf bash-2.05

PARTE 2

PREPARANDO O SISTEMA
CAPTULO 4 PRIMEIROS TIJOLOS
extremamente necessrio que voc faa a construo do LEC como usurio root do seu GNU/Linux antrio e at ordem contrria voc dever permanecer nele. Inicie o pingim e vamos l!

CRIANDO OS DIRETRIOS
Para construir os diretrios necessrios faa o seguinte: mkdir -p /build-lec/estatica/usr/src

VARIVEL $LEC
Para facilitar a nossa vida e simplicar os comandos de instalao usaremos a varivel $LEC para especicar o diretrio que contem a partio onde o sistema ser montado, ou seja, no nosso caso /build/lec. Deste modo o livro assume que voce faa o mesmo. Para atribuir a varivel $LEC para a nossa partio faa o seguinte: export LEC=/build-lec Execute o comando acima toda vez que sair do seu terminal. Para comprovar que o sistema fez a atribuiao corretamente, digite: echo $LEC Se apareceu o caminho correto /build-lec ento est tudo ok! Agora copie todos os seus arquivos fontes para o diretrio /src da partio LEC.

CRIANDO A PARTIO E O SISTEMA DE ARQUIVOS


A primeira ao que iremos fazer ser obter uma partio vazia. 800 MB o necessrio para voc construir o sistema base sem se preocupar com espao, mas se voc pretende adicionar outros aplicativos mais tarde como, X11, kde, alguns daemons, etc., ento bom aumentar o tamanho da partio. Para a criao da partio voc poder usar programas como fdisk ou cfdisk, escolha o seu e crie uma partio Linux nativa. Depois de criada, a partio cou como hda alguma coisa, para mim cou hda2. Anote esse numero, pois ele a sua partio LEC. No se preocupe com a participao swap, pois no ser preciso criar, j que usaremos a partio existente do nosso sistema antrio. Com a nova partio j criada, hora de denirmos o sistema de arquivos do nosso LEC. Por padro dos sistemas GNU/ Linux usaremos o ext2. Para isso faa o seguinte: mke2fs /dev/hdax Substitua o x pelo nmero da sua partio.

CAPTULO 5 CONSTRUNDO A BASE


Realizaremos a construo do sistema de modo que o captulo cinco e seis estejam completamente separados uns dos outros. A razo para isso simples. Como iremos construir o capitluo 5 dentro do $LEC/estatica o nosso sistema estar limpo quando comearmos a construo do captulo seis. Assim o capitulo cinco nao acaba poluindo o capitulo seis. Mais vantagens para esse tipo de construo so descritas aqui: - Voce pode construir o capitulo 5 numa partio separada do sistema, ou mounta num CDROM. Assim voce economiza espao. - Voce pode usar o mesmo capitulo 5 para construir vrios sistemas LEC. - Nenhum lixo ou arquivo comrrompido do captulo 5 permanece no sistema.

MOUNTANDO A NOVA PARTIO


Agora que o sistema de arquivos j est criado, ns precisamos montar a partio para permitir o acesso de leitura e gravao nela. Iremos montar em /build-lec e assumirei que voc tenha feito o mesmo. Para criar o diretrio faa: mkdir -p /build-lec Para montar a partio faa: mount /dev/hdax /build-lec

Todos os softwares no captulo 5 sero linkados estticamente e reinstalados no capitulo 6, sendo somente neste momento linkados dinmicamente. A razo para instalar a verso esttica primeiro que existe uma grande chance de que o GNU/Linux antrio e o nosso LEC no estejam usando as mesmas verses de Biblioteca C. Se os programas na primeira parte so linkados contra uma verso de biblioteca C mais velha, aqueles programas no funcionaram no nosso sistema LEC. Desde modo garantimos a construo de um sistema com qualidade.

CRIANDO O USURO LEC


Para evetitarmos problemas durante a instalao do captulo 5, criaremos uma conta destinada a construo esttica. Assim nos asseguramos que arquivos nao so serao sobescritos durante essa instalao. Para criar o usurio faa: adduser -s /bin/bash lec Agora vamos criar a senha lec para esse usurio: passwd lec Precisamos agora dar as permisses necessrias para que o usurio consigua construir o capitulo 5: chown -R lec $LEC Com o comando acima simplesmente dissemos para o sistema que o dono da partio LEC o nosso usuario que criamos, ganhando assim acesso de escrita. Vamos comear a construo! prxima linha, desde que a linha anterior no retorne erros. Nas instalaes futuras descreverei apenas os parmetros e descries no repetitvas.

INSTALANDO BINUTILS
Este pacote contm vrios GNU compiladores, assembles, linkers, debugges, etc. Pacote: binutils-2.11.2.tar.bz2. Tempo: mdio. Instalao: ./configure --prefix=$LEC/estatica/usr --disable-nls && make LDFLAGS=-all-static tooldir=$LEC/ estatica/usr && make tooldir=$LEC/estatica/usr install Descrio da instalao: --disable-nls: este parmetro disabilita o Suporte a Lingua Nativa, tornado o sistema compatvel apenas com o ingls. LDFLAGS=-all-static: Apontando LDFLAGS para o parmetro -all-static permite que o binutils seja todo ele linkado estaticamente. tooldir=$LEC/estatica/usr: Normalmente o tooldir est atribundo para $(exec_prex)/$(target_alias) mas, como estamos construndo o nosso prprio sistema, no precisamos desta atribuio especca em $LEC/estatica/usr.

INSTALANDO BASH
O bash (Bourne-Again Shell) o interpretador de comandos padro em sistemas Unix e GNU/Linux, sendo ele o responsvel por fazer o computador entender o que digitamos no console. Pacote: bash-2.05a.tar.bz2. Tempo: rpido. Instalao: ./configure --enable-static-link -prefix=$LEC/estatica/usr \ --bindir=$LEC/estatica/bin --withcurses && make && make install && cd $LEC/estatica/bin && ln -s bash sh Descrio da instalao: --enable-static-link: Est congurao fora o linkamento esttico. --prex=$LEC/estatica/usr: Est opo faz que todos os arquivos do bash sejam instalados no diretrio $LEC/ estatica/usr. --bindir=$LEC/estatica/bin: Instala os executveis em $LEC/estatica/bin. --with-curses: Faz o bash ser linkado contra as bibliotecas curses enves das bibliotecas termcap. ln -s bash sh: Este comando cria o link simblico sh que aponta para o bash. &&: No nal de cada linha causa a execuo do comando da

INSTALANDO BZIP2
O pacote bzip2 contm vrios programas voltados para compresso e descompresso de dados, entre eles o bzip2 e bunzip2. Pacote: bzip2-1.0.1.tar.bz2. Tempo: rpido. Instalao: make CC=gcc -static && make PREFIX=$LEC/estatica/usr install && cd $LEC/estatica/usr/bin && mv bzcat bunzip2 bzip2 bzip2recover $LEC/estatica/bin

INSTALANDO DIFFUTILS
O pacote Diffutils contm os seguintes programas: cmp, diff, diff3 e sdiff. Esses programas so usados para comparar

arquivos entre si e mostrar suas diferenas. Somente o formato texto aceito para comparao. Pacote: diffutils-2.7.tar.bz2. Tempo: rpido. Instalao: export CPPFLAGS=-Dre_max_failures=re_ max_failures2 && ./configure --prefix=$LEC/estatica/usr && unset CPPFLAGS && make LDFLAGS=-static && make install Descrio da instalao: CPPFLAGS=-Dre_max_failures=re_max_failures2: A varivel CPPFLAGS a varivel que est sendo lida pelo programa cpp. O valor desta varivel ordena o preprocessor para repor toda solicitao que re_max_failures encontrar por re_max_ failures2. Isso evita problemas na hora da compilao, caso o seu sistema base use glibc-2.1.x .

como Fortran e Java. Se voc precisar dos outros compiladores, apenas omita o comando acima.

INSTALANDO GREP
O pacote grep contm os seguintes programas: egrep, fgrep egrep e so usados para pesquisa de palavras ou texto. Pacote: grep-2.4.2.tar.bz2. Tempo: rpido. Instalao: ./configure --disable-nls --withoutincluded-regex --prefix=$LEC/estatica/usr && make LDFLAGS=-static && make install

INSTALANDO GZIP
Pacote: gzip-1.2.4a.tar.bz2. Tempo: rapido. Instalao: ./configure --prefix=$LEC/estatica/usr && make LDFLAGS=-static && make install && mv $LEC/estatica/usr/bin/gunzip $LEC/ estatica/usr/bin/gzip $LEC/estatica/bin

INSTALANDO FILEUTILS
O pacote leutils contm os progamas chgrp, chmod, chown, cp, dd, df, dir, dircolors, du, install, ln, ls, mkdir, mkfo, mknod, mv, rm, rmdir, sync, touch e vdir. Esses programas so voltados para manipulao de arquivos e diretrios. Pacote: leutils-4.1.tar.bz2. Tempo: rpido. Instalao: ./configure --disable-nls --prefix=$LEC/ estatica/usr \ --libexecdir=$LEC/estatica/bin -bindir=$LEC/estatica/bin && make LDFLAGS=-static && make install && cd $LEC/estatica/usr/bin && ln -s ../../bin/install Descrio da instalao: --libexecdir=$LEC/estatica/bin: Este parmetro da congurao, atribuir o diretrio executvel do programa para $LEC/estatica/bin.

INSTALANDO MAKE
O pacote make contm o programa make. O make determina automaticamente que parte de um programa necessita ser recompilado, e assume os comandos para recompila-lo. Pacote: make-3.79.1.tar.bz2. Tempo: rpido. Instalao: ./configure --prefix=$LEC/estatica/usr -disable-nls && make LDFLAGS=-static && make install $$

INSTALANDO MAWK
O pacote mawk contm o programa mawk. Mawk um interpretador para linguagem de programao AWK. Pacote: mawk1.3.3.tar.bz2. Tempo: rpido. Instalao: mkdir -p $LEC/estatica/usr/share/man/ man1 && ./configure && make CFLAGS=-O -static && make BINDIR=$LEC/estatica/usr/bin \ MANDIR=$LEC/estatica/usr/share/man/man1 install && ln -s mawk $LEC/estatica/usr/bin/awk Descrio da instalao: ln -s mawk $LEC/estatica/usr/bin/awk: Criamos esse alias devido a necessidade que o gcc tem na compilao do capitulo 6.

INSTALANDO GCC
O pacote GCC contm alm do famoso compilador gcc, preprocessors,GNU C++ bibliotecas entre outros. Pacote: gcc2.95.3.tar.bz2. Tempo: demorado. Observao: Tenha calma o gcc bem demorado mesmo. Instalao: mkdir ../gcc-build && cd ../gcc-build && ../gcc-2.95.3/configure --prefix=/ estatica/usr \ --enable-languages=c,c++ --disable-nls && make BOOT_LDFLAGS=-static bootstrap && make prefix=$LEC/estatica/usr install && cd $LEC/estatica/usr/bin && ln -s gcc cc Descrio da instalao: --enable-languages=c,c++ : Esta opo constri unicamente os compiladores C e C++ e no os outros disponveis no pacote,

INSTALANDO SED
Sed um editor de stream. Um editor de stream utilizado para desempenhar transformaes bsicas de texto em uma stream

de entrada (um arquivo ou entrada de um pipeline). Pacote: sed-3.02.tar.bz2. Tempo: rpido. Instalao: export CPPFLAGS=-Dre_max_failures=re_ max_failures2 && ./configure --prefix=$LEC/estatica/usr --bindir=$LEC/estatica/bin && unset CPPFLAGS && make LDFLAGS=-static && make install

INSTALANDO TEXINFO
O pacote texinfo contm os programas: info, installinfo, makeinfo, texi2dvi e texindex . Sendo usados para construo de documentos de textos. Pacote: texinfo-4.0.tar. bz2. Tempo: rpido. Instalao: ./configure --prefix=$LEC/estatica/usr --disable-nls && make LDFLAGS=-static && make install

INSTALNDO SH-UTILS
O pacote sh-utils contm 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 utilitrios so usados normalmente para programao shell. Pacote: sh-utils-2.0.tar.bz2. Tempo: rpido. Observao: Antes de instalar o pacote descompacte o pacth. Durante a instalao desse pacote, voce poder receber mensagens de aviso dizendo que o programa su no foi instalado por falta de privilegios do seu usurio(somente oroot instala esse programa). Ignore esses avisos, pois o programa su, nao necessrio para a construo deste captulo. O mesmo ser criado no capitulo seguinte. Instalao: patch -Np1 -i ../sh-utils-2.0.patch && ./configure --prefix=$LEC/estatica/usr --disable-nls && make LDFLAGS=-static && make install && cd $LEC/estatica/usr/bin && mv date echo false pwd stty su true uname hostname $LEC/estatica/bin

INSTALANDO TEXTUTILS
O pacote textutils contm 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. So usados como utilitrios de processamento de texto. Pacote: textuils-2.0.tar.bz2. Tempo: rpido. Instalao: ./configure --prefix=$LEC/estatica/usr --disable-nls && make LDFLAGS=-static && make install && mv $LEC/estatica/usr/bin/cat $LEC/ estatica/bin

INSTALANDO TAR
O pacote tar contm o programa tar e rmt. Tar um programa projetado para agrupar arquivos. Ao contrrio do que muitos pensam, o tar no um compactador e sim um arquivador, sua funo juntar vrios 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 manipulao de ta magntica. Pacote: tar-1.13.tar.bz2. Tempo: rpido. Observao: descompactar o patch antes da instalao. Instalao: cd src && patch -i ../../tarpatch.txt && cd .. && ./configure --prefix=$LEC/estatica/usr --disable-nls \ --libexecdir=$LEC/estatica/usr/bin -bindir=$LEC/estatica/bin && make LDFLAGS=-static && make install

PARTE 3

SHELL=/estatica/bin/bash PS1=\u:\ w\$ /estatica/bin/bash --login


A construo TERM=$TERM atribuir a $TERM o valor

interno do chroot ao valor externo do mesmo chroot, isso necessrio para programas como o vim e o less poderem funcionar corretamente.

INSTALANDO O LEC
CAPTULO 6 INSTALANDO OS SOFTWARE NECESSRIOS
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. Este ponto o nosso divisor de guas. Se voce manter essa arvore de diretorios segura, ou seja, compactar ou gravar num CD o nosso $LEC/estatica, voce nao precisar voltar a construir do zero quanto quiser criar um sistema novo, apenas comee daqui por diante. Ao contrrio das verses anteriores do livro, ao entrarmos no chroot, teremos um sistema completamente limpo. Antes de prosseguir no livro torna-se o usuario root.

Note que o prompt do bash contm a frase I have no name! Isto normal porque Glibc no est instalada ainda.

CRIANDO DIRETRIOS
Antes de criarmos os diretrios conforme as especicaes da FHS. Vamos cetar corretamente o valor das permisses o umask. Para isso faa:

umask 022
Agora podemos criar os nosso diretrios tranquilamente.

mkdir -p bin boot dev etc/opt lib mnt opt sbin tmp usr var home root cd /usr mkdir bin include lib local sbin share src cd /usr/local mkdir bin include lib man sbin share src cd /usr/share mkdir man misc cd /usr/share/man mkdir man{1,2,3,4,5,6,7,8} cd /var mkdir -p cache lib/misc local lock log opt run spool tmp mail cd /usr ln -s ../var/tmp tmp
Geralmente os diretrios so criados com permisso mode de 755, o que no boa coisa para alguns diretrios, por isso iremos mudar algumas permisses.

MOUNTANDO O PROC
Vamos montar o proc para permitir que alguns programas sejo instalados corretamente:

mkdir $LEC/proc && mount proc $LEC/proc -n -t proc ENTRANDO NO AMBIENTE CHROOT
Agora hora de entrar no ambiente chrooted para instalar o restante dos pacotes que necessitamos.

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


A primeira mudana acima foi feita no root, que para ter certeza que nem todos possam acessar o diretrio. A segunda mudana foi nos diretrios tmp. Essa mudana proporciona que todos os usurios possam escrever nestes diretrios, mas no possam apagar os arquivos de outros usurios.

cd $LEC/ && chroot $LEC /estatica/usr/bin/env -i HOME=/root TERM=$TERM \ PATH=/sbin:/bin:/usr/sbin:/usr/ bin:/estatica/bin:/estatica/usr/bin \

CRIANDO PASSWD E GROUP


Para que o usurio 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 passwd e

group. Para criar o arquivo passwd em /etc/passwd faa o seguinte comando:

echo root:x:0:0:root:/root:/bin/ bash > /etc/passwd


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

base do sistema. Mas como alguns pacotes necessitam dos arquivos de cabealho do kernel, vamos descompactar o kernel agora e congur-lo de modo a podermos compilar os pacote dependente. Instalao:

cat > /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 MOVENDOS OS FONTES
J que est tudo pronto para comearmos a construo do nosso sistema, vamos mover agora os fontes que se encontra em /estatico/usr/src para /usr/src. Isso feito assim:

yes | make config && make include/linux/version.h && cd include && cp -a linux /usr/include && chown -R 0.0 /usr/include/linux && mkdir /usr/include/asm && cp -a asm/* /usr/include/asm && chown -R 0.0 /usr/include/asm
Descrio da instalao make mrproper: Este comando assegura que a rvore de diretrio do kernel est absolutamente limpa. yes | make cong: Este parmetro faz que todas as perguntas do cong sejam respondida como sim por padro. make dep: Checa e monta o arquivo de dependncias, mas para ns o que realmente importa agora que ele crie os arquivos em /build/lec/usr/src/linux/include/linux que sero necessrios a seguir.

INSTALANDO GLIBC
O pacote Glibc contm a Biblioteca GNU C. A biblioteca C uma coleo das funes mais utilizadas por programas no GNU/Linux. 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! desaparea. Pacote: glibc-2.2.4.tar.bz2. Tempo: demorado. Observao: descompactar glibc-linuxthreads dentro do diretrio glibc-2.2.4. Instalao:

cd /estatica/usr/src && mv * /usr/src CRIANDO LINKS ln -s /estatica/bin/bash /bin/bash && ln -s /estatica/bin/sh /bin/sh && ln -s /estatica/bin/pwd /bin/pwd ln -s /estatica/usr/bin/cpp /lib/ cpp &&
Precisamos criar esses links que consigamos compilar os kernel header e o glibc.

INSTALANDO KERNEL HEADERS


O Kernel o ncleo do sistema GNU/Linux, ele o software que possui a funo de detectar, congurar e operar o hardware que possumos no nosso computador, alm de ser o responsvel pelo controle de discos, inicializao de programas, alocao de memrias e outras funes. por isso que o kernel chamado de o corao do sistema. Pacote: Linux-2.4.18.tar.bz2. Tempo: demorado. Observao: No estaremos compilando uma nova imagem do kernel ainda. Ns faremos isso depois de termos terminado a instalao

mknod -m 0666 /dev/null c 1 3 && touch /etc/ld.so.conf && mkdir ../glibc-build && cd ../glibc-build && sed s/root/0/ ../glibc-2.2.4/ login/Makefile > tmp~ && mv tmp~ ../glibc-2.2.4/login/ Makefile && ../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

logout cd $LEC && chroot $LEC/estatica /estatica/usr/ bin/env -i HOME=/root TERM=$TERM \ PATH=/sbin:/bin:/usr/sbin:/usr/ bin:/estatica/bin:/estatica/usr/bin \ SHELL=/estatica/bin/bash PS1=\u:\ w\$ /estatica/bin/bash --login
Descrio da instalao: mknod -m 0666 /dev/null c 1 3: Glibc necessita um dispositivo nulo para compilar propriamente. touch /etc/ld.so.conf :Um dos passos nais da instalao do Glibc executar ldcong para atualizar o loader de cache dinmico. Isso necessrio para evitarmos que o glibc aborte a operao. --enable-add-ons: Isto habilita os add-on que ns instalamos com o glibc-linuxthreads

--enable-languages=c,c++ && make bootstrap && make install cd /lib && ln -sf ../usr/bin/cpp && cd /usr/lib && ln -sf ../bin/cpp && cd /usr/bin && ln -sf gcc cc INSTALANDO MAN-PAGES
O pacote man-pages contm vrios manuais que no vem com alguns pacotes. Pacote: man-pages-1.47.tar.bz2. Tempo: rpido. Instalao:

make install INSTALANDO FINDUTILS


Pacote: nutils-4.1.tar.bz2. Tempo: rpido. Observao: descompactar o patch antes de instalar o arquivo principal. Instalao:

CRIANDO DEVICES
O makedev o responsvel pela criao de todos os dispositivos do sistema, como: hda1, fd0...etc. Pacote: makedev.bz2. Tempo: rpido. Observao: O arquivo que voc descompactou apenas um script e no um programa, por esse motivo no criado nenhum diretrio na descompactaco. Instalao:

chmod 755 makedev && cp makedev /dev && cd /dev && ./makedev -v generic
Descrio da instalao: ./MAKEDEV -v generic: Isto cria os principais dispositivos que normalmente voc ecessita.

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: rpido. Instalao:

INSTALADO PATCH
O programa patch usado para modicar arquivos, ou melhor, atualiza arquivos texto atravs das diferenas geradas pelo comando diff. Pacote: patch-2.5.4.tar.bz2. Tempo: rpido. Instalao:

./configure && make && make BINDIR=/usr/bin MANDIR=/usr/ share/man/man1 install && cd /usr/bin && ln -s mawk awk INSTALANDO NCURSES
O pacote ncurses contm os seguintes programas: ncurses, painel, menu e bibliotecas. Pacote: ncurses-5.2.tar.bz2. Tempo: mdio. Instalao:

./configure --prefix=/usr && make && make install INSTALANDO GCC


Pacote: GCC-2.95.3.tar.bz2. Tempo: demorado. Instalao:

mkdir ../gcc-build && cd ../gcc-build && ../gcc-2.95.3/configure --prefix=/usr \ --with-slibdir=/lib --enable-shared \

./configure --prefix=/usr --libdir=/ lib \ --with-shared --disable-termcap && make && make install && cd /lib && ln -s libncurses.a libcurses.a
Descrio da instalao : --with-shared: Isto habilita a construo dos arquivos da biblioteca do ncurses compartilhados. --disable-termcap: Desabilita a compilao do suporte de

termcap para fall back ln -s libncurses.a libcurses.a: Isto cria o link simblico /lib/libcurses.a.

INSTALANDO VIM
O motivo de sua instalao simples, o vim praticamente um padro. Quase todas das distribuies GNU/Linux e Unix, tem ele como default na instalao. Pacote: vim6.0.tar.bz2. Tempo: rpido. Instalao:

# Begin /usr/bin/yacc /usr/bin/bison -y $@ # End /usr/bin/yacc EOF chmod 755 /usr/bin/yacc INSTALANDO LESS
O programa less um visualizador de texto. Ele exibe o texto de um arquivo com a capacidade de poder rolar o contedo. Pacote: less-358.tar.bz2. Tempo: rpido. Instalao:

./configure --prefix=/usr -localstatedir=/var/lib/vim && make && make install && cd /usr/bin && ln -s vim vi && mkdir /var/lib/vim
Por padro Vim executado em modo vi, mas como existe uma preferncia em executar o vim em modo vim. Crie o /root/.vimrc com esses comandos:

./configure --prefix=/usr --bindir=/ bin && make && make install INSTALANDO GROFF
O pacote groff contm 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. Pacote: groff-1.17.2.tar.bz2. Tempo: rpido. Instalao:

cat set set set set set set set EOF

> /root/.vimrc << EOF nocompatible bs=2 columns=80 tabstop=8 wrapmargin=8 ruler noexpandtab

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


Descrio da instalao: CXXFLAGS=-Dstrerror=strerror: Se nenhum strerror macro denido, src/include/lib.h declara um prottipo de funo ao strerror que incompatvel com o Glibc /usr/include/ string.h. Por garantia um macro strerror=strerror denido para prevenir a declarao e no altera-se o signicado de strerror.

INSTALANDO BISON
Bison um software que gera um programa para analisar a estrutura de um arquivo de texto. Pacote: bison-1.32.tar. bz2. Tempo: rpido. Instalao:

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


Descrio da instalao: --datadir=/usr/share/bison: Isto instala o arquivo de gramtica do bison em /usr/share/bison em vez de /usr/share. Alguns programas no 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 sada do arquivo de convenes de nome do yacc. Para criar o script faa o seguinte:

INSTALANDO TEXTUTILS
Pacote: textutils-2.0.tar.bz2. Tempo: rpido. Instalao:

./configure --prefix=/usr && make && make install && mv /usr/bin/cat /bin INSTALANDO SED
Pacote: sed-3.02.tar.bz2. Tempo: rpido. Instalao:

cat > /usr/bin/yacc << EOF #!/bin/sh

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

INSTALANDO FLEX:
Flex uma ferramenta para gerar os programas que reconhecem padres no texto. Pacote: ex-2.5.4a.tar.bz2. Tempo: rpido. Instalao:

INSTALANDO PERL
Perl signica Practical Extraction and Report Language, e uma linguagem de programao interpretada muito poderosa e utilizada na internet. Pacote: perl-5.6.1.tar.bz2. Tempo: mdio. Instalao:

./configure --prefix=/usr && make && make install && cd /usr/bin && ln -s flex lex INSTALANDO BINUTILS
Pacote: binutils-2.11.2.tar.bz2. Tempo: demorado. Instalao:

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


Descrio da instalao: -d -e : Essa opo faz com que o script de congurao use todas as conguraes padres na instalao do perl.

./configure --prefix=/usr --enableshared && make tooldir=/usr && make tooldir=/usr install && make tooldir=/usr install-info INSTALANDO FILEUTILS
Pacote: leutils-4.1.tar.bz2. Tempo: rpido. Instalao:

INSTALANDO M4
M4 um processador macro. Pacote: m4-1.4.tar.bz2. Tempo: rpido. Instalao:

./configure --prefix=/usr && make && make install INSTALANDO TEXINFO


Pacote: texinfo-4.0.tar.bz2. Tempo: rpido. Instalao:

./configure --prefix=/usr --bindir=/ bin --libexecdir=/bin && make && make install && cd /usr/bin && ln -sf ../../bin/install INSTALANDO SH-UTILS
Pacote: sh-utils-2.0.tar.bz2. Tempo: rpido. Instalao:

./configure --prefix=/usr && make && make install && make TEXMF=/usr/share/texmf install-tex INSTALANDO AUTOCONF
O Autoconf contm os pacotes: autoconf, autoheader, autoreconf, autoscan, autoupdate e ifnames. Esses pacotes so usados para criao de scripts durante a instalao de programas. Pacote: autoconf-2.52.tar.bz2. Tempo: rpido. Instalao:

./configure --prefix=/usr && make && make install && cd /usr/bin && mv date echo false pwd stty su true uname hostname /bin && ln -s test [ INSTALANDO GETTEXT
O pacote gettext usado para internacionalizao de softwares. Programas podem ser compilados com Native Language Support (Suporte a Lngua Nativa) habilitando assim as mensagens de sadas para linguagem nativa do usurio. Pacote: gettext-0.10.40.tar.bz2. Tempo: rpido. Instalao:

./configure --prefix=/usr && make && make install INSTALANDO AUTOMAKE


O pacote Automake contm os seguintes programas: aclocal e automake. Pacote: automake-1.5.tar.bz2. Tempo: rpido. Instalao:

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

./configure --prefix=/usr && make install INSTALANDO BASH


Pacote: bash-2.05a.tar.bz2. Tempo: rpido. Instalao:

./configure --prefix=/usr --withcurses &&

make && make install && cd /usr/bin && mv bash bashbug /bin && cd /bin && ln -sf bash sh

INSTALANDO FILE
O le testa cada arquivo com a intuio de classic-lo. Pacote: le-3.37.tar.bz2. Tempo: rpido. Instalao:

touch aclocal.m4 configure Makefile. in stamp-h.in && ./configure --prefix=/usr -datadir=/usr/share/misc && make && make install INSTALANDO LIBTOOL
O pacote libtool contm os seguinte programas e biblioteca: libtool e libtoolize e ltdl. Pacote: libtool-1.4.tar.bz2. Tempo: rpido. Instalao:

ln cd ln ln ln

-sf bzip2 bzcat && /usr/share/man/man1 && -s bzip2.1 bunzip2.1 && -s bzip2.1 bzcat.1 && -s bzip2.1 bzip2recover.1

Descrio da instalao: make -f Makele-libbz2_so: Este parmetro ordenar ao bzip2 que seja construdo usando um outro arquivo Makele, neste caso o Makele-libbz2_so, criar uma biblioteca dinmica libbz2.so e linkar os utilitrios bzip2 contra ela.

INSTALANDO KBD
O pacote kbd contm os arquivos keytable e utilitrios de teclado. Pacote: kbd-1.06.tar.bz2. Tempo: rpido. Instalao:

./configure --prefix=/usr && make && make install INSTALANDO BIN86


O pacote bin86 contm programas: as86, as86_encap, ld86, objdump86, nm86 e size86. Pacote: bin86-0.16.1.tar.bz2. Tempo: rpido. Instalao:

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


Descrio da instalao:

make && make PREFIX=/usr install INSTALANDO BZIP2


Pacote: bzp2-1.0.1.tar.bz2. Tempo: rpido. Instalao:

--datadir=/usr/share/kbd: Isto coloca os arquivos de dados do kbd no diretrio /usr/share/kbd. INSTALANDO DIFFUTILS
Pacote: diffutils-2.7.tar.bz2. Tempo: rpido. Instalao:

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 && cd /bin && ln -sf bzip2 bunzip2 &&

./configure --prefix=/usr && make && make install INSTALANDO E2FSPROGS


O pacote e2fsprogs contm os seguintes programas: chattr, lsattr, uuidgen, badblocks, debugfs, dumpe2fs, e2fsck, e2label, fsck, fsck.ext2, mke2fs, mkfs.ext2, mklost+found e tune2fs. Todos eles so utilitrios para manuteno do sistema de arquivos ext2. Pacote: e2fsprogs-1.25.tar.bz2.

make install
Tempo: rpido. Instalao:

./configure --prefix=/usr --with-root-prefix= --enable-elf-shlibs && make && make install && make install-libs && mv /usr/sbin/mklost+found /sbin INSTALANDO GREP
Pacote: grep-2.4.2.tar.bz2. Tempo: rpido. Instalao:

./configure --prefix=/usr && make && make install INSTALANDO GZIP


Pacote: gzip-1.2.4a.tar.bz2. Tempo: rpido. Instalao:

./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
O pacote man contm os programas: man, apropos whatis e makewhatis. Pacote: man-1.5j.tar.bz2. Tempo: rpido. Instalao:

PATH=$PATH:/usr/bin:/bin ./configure -default && make && make install


Descricao da instalacao: PATH=$PATH:/usr/bin:/bin: est especicao necessria para termos certeza que o man no usar a verso /build-lec/estatica/ dos nossos programas, assim o path de alguns programas que so escritos nos arquivos do man estaro corretos.

INSTALANDO LILO
O Lilo signica Linux Loader, e atualmente o gerenciador de inicializao GNU/Linux mais usado no mundo. Sua funo permitir qual sistema operacional ser iniciado na maquina, caso exista mais de um. Pacote: lilo-22.1.tar.bz2. Tempo: rpido. Instalao:

make && make install INSTALANDO LINKS


Links um browser de www em modo texto. Trs so as principais razes que me levaram a preferir o links em vez do lynx. As trs primeiras so: Frames , Bookmarks e Suporte a Lngua Portuguesa. Pacote: links-0.96.tar.bz2. Tempo: rpido. Instalao:

./configure --prefix=/usr && make &&

INSTALANDO MAKE
Pacote: make-3.79.1.tar.bz2. Tempo: rpido. Instalao:

./configure --prefix=/usr && make && make install INSTALANDO MODUTILS


O pacote modutils contm os seguintes programas: depmod, genksyms, insmod, insmod_ksymoops_clean, kerneld, kernelversion, ksyms, lsmod, modinfo, modprobe e rmmod. Pacote: modutils-2.4.12.tar.bz2. Tempo: rpido. Instalao:

./configure && make && make install INSTALANDO PROCINFO


A funo do procinfo coletar dados do diretrio /proc e lana-los em um dispositivo de sada padronizado. Pacote: procinfo18.tar.bz2. Tempo: rpido. Instalao:

make LDLIBS=-lncurses && make install INSTALANDO PROCPS


O pacote procps contm os seguintes programas: free, kill, oldps, ps, skill, snice, sysctl, tload, top, uptime, vmstat, w e watch. Pacote: procps-2.0.7.tar.bz2. Tempo: rpido. Instalao:

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


Descrio da instalao: make XSCPT= install: Este parmetro repassa varivel XSCPT um valor vazio de modo que a instalao do XConsole seja desabilitada. Impedindo assim que o XConsole seja copiado para /usr/X11R6/bin, pois este diretrio no existe, j que o ambiente X no est instalado.

INSTALANDO PSMISC
O pacote psmisc contm: fuser, killall e pstree como programas. Pacote: psmisc-20.2.tar.bz2. Tempo: rpido. Instalao:

./configure --prefix=/usr && make && make install INSTALANDO SHADOW PASSWORD
Shadow Password Suite contm 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 . Pacote: shadow-20001016.tar.bz2. Tempo: rpido. Observao: descompactar o patch primeiro. Instalao:

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
Descrio da instalao: cp limits login.access: Esses arquivos no foram instalados durante a instalao do pacote assim ns copiamos eles manualmente. sed s|/var/spool/mail|/var/mail| login.defs.linux > /etc/login.defs: /var/spool/mail a velha localizao das caixas de e-mail dos usurios. A localizao atual est em /var/mail.

INSTALANDO SYSKLOGD
O pacote sysklogd contm os programas: klogd e syslogd . Pacote: sysklogd-1.4.1.tar.bz2. Tempo: rpido. Observao: descompactar o patch primeiro. Instalao:

make && make install INSTALANDO SYSVINIT


O pacote sysvinit contm os programas: pidof, last, lastb, mesg, utmpdump, wall, halt, init, killall5, poweroff, reboot, runlevel, shutdown, sulogin e telinit. Pacote: sysvinit-2.83.tar.bz2. Tempo: rpido. Instalao:

make -C src && make -C src install Descrio do pacote: INSTALANDO TAR
Pacote: tar-1.13.tar.bz2. Tempo: rpido. Observao: descompactar o patch primeiro. Instalao:

cd src && patch -i ../../tarpatch.txt && cd .. && ./configure --prefix=/usr --libexecdir=/usr/bin --bindir=/bin && make && make install INSTALANDO UTIL-LINUX
O pacote util-linux contm os programas: dmesg, kill, more, mount, umount, cfdisk, ctrlaltdel, fdisk, mkfs, mkswap, fdformat, hexdump, rename, script, swapdev, tunelp e vidmode entre outros. Pacote: util-linux-2.11n.tar.bz2. Tempo: rpido. Instalao:

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
Descrio da instalao: HAVE_SLN=yes: Ns no construmos este programa porque isto j foi instalado por Glibc.

CONFIGURAES

Aps termos completado a instalao dos software necessrios, hora de congurar alguns programas para que tudo funcione corretamente.

CONFIGURANDO GLIBC
Precisamos agora criar o arquivo / etc/nsswitch.conf, para um perfeito funcionamento da rede.

cat > /etc/nsswitch.conf << EOF # /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 # /etc/nsswitch.conf EOF CONFIGURANDO TIMEZONE
Para congurar o timezone voc precisa executar um programa chamado tzselect e responder as perguntas. No nal ele lhe mostrar o seu timezone. Feito isso a congurao feita deste jeito:

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


Para mim que moro no Sul a congurao cou assim:

cd /etc && ln -sf ../usr/share/zoneinfo/America/Sao_Paulo localtime CONFIGURANDO DYNAMIC LOADER


Criamos este script para que dynamic loader ao procurar por caminhos padres para as bibliotecas dinmicas procure tambm nesses diretrios.

cat > /etc/ld.so.conf << EOF #/etc/ld.so.conf /lib /usr/lib /usr/local/lib #/etc/ld.so.conf

EOF CONFIGURANDO SYSKLOGK


Contm conguraes para denir o que ser registrado nos arquivos de log em /var/log do sistema.

cat > /etc/syslog.conf << EOF #/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 * #/etc/syslog.conf EOF COOFIGURANDO SYSVINIT
Este o arquivo de congurao utilizado pelo programa init para a inicializao do sistema.

cat > /etc/inittab << EOF # /etc/inittab # # inittab # # # Author: # #

This file describes how the INIT process should set up the system in a certain run-level. Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org> Modified para o Projeto LEC, Daniel Zilli.

# Default runlevel. The runlevels used by LEC are: # 0 - congela o computador # 1 - modo monousuario # 2 - modo multiusuario sem rede # 3 - modo multiusuario com rede # 4 - reservado personalizaes, mas com as caractersticas que o # modo 3 # 5 - mesmo que o modo 4, mas usado para ambiente grfico. # 6 - reboot id:3:initdefault: # System initialization. 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 # Trap CTRL-ALT-DELETE ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now su:S016:respawn:/sbin/sulogin # Run gettys in standard runlevels 1:2345:respawn:/sbin/agetty tty1 9600 2:2345:respawn:/sbin/agetty tty2 9600 3:2345:respawn:/sbin/agetty tty3 9600 4:2345:respawn:/sbin/agetty tty4 9600 5:2345:respawn:/sbin/agetty tty5 9600 6:2345:respawn:/sbin/agetty tty6 9600 # End /etc/inittab EOF CRIANDO OS ARQUIVOS UTMP, WTMP E BTMP
Programas como login, shutdown, uptime e outros desejam ler e escrevee em /var/run/utmp /var/log/btmp e /var/log/wtmp. Esses arquivos contm informaes 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,btmp,lastlog} && chmod 644 /var/run/utmp /var/log/{wtmp,btmp,lastlog} CRIANDO A SENHA PARA O ROOT
Vamos criar agora a nossa senha para o sistema.

passwd root

PARTE 4

FINALIZANDO O LEC
CAPTULO 7 BOOT SCRIPTS & CONFIGURAES

Neste captulo iremos criar os principais scripts para o correto funcionamento do sistema e realizar as ltimas conguraes no LEC. ENTENDA O PROCESSO DE INICIALIZAO 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 prprio sistema, hora de entender de vez como tudo isso funciona. Tudo comea com o kernel, que ir se auto-descompactar e instalar-se na memria do computador, comeando ento a identicar os perifricos, ou seja, o hardware. Feito isso, o kernel passar a execuo do sistema para um programa chamado SysVinit, mais conhecido como init. O init baseado em um conceito de nveis de execuo(run levels). Os Nveis de execuo so diferentes modos de funcionamento do GNU/Linux em relao a programas, daemons e recursos especcos. Normalmente, os sistemas GNU/Linux possuem sete nveis de execuo numerados de 0 a 6. O init sempre o primeiro programa executado no GNU/Linux e tambm o responsvel pelo boot de todos daemons de inicializao e congurao do sistema. Na verdade no existe um padro xo no qual deve ser seguido a risca, por isso, a inicializao pode ser amplamente diferente de uma distribuio para outra. O LEC tm o seu jeito de trabalhar, mas nada impede de voc modic-lo ao seu gosto. O init colocar o sistema em um dos seus possveis nveis de inicializao. Eles esto denidos num arquivo especial em /etc/inittab. Os modos so: 0: congela o computador 1: modo monousurio 2: modo multi-usurio sem rede 3: modo multi-usurio com rede 4: reservado personalizaes, mas com as caractersticas que o modo 3 5: mesmo que o modo 4, mas usado para ambiente grco. 6: reboot o computador Cada um dos modos de inicializao possui os seus prprios script, encontrados no diretrio /etc/rc.d. Os arquivos mais importantes para a inicializao do LEC esto localizados no diretrio /etc/init.d. Cada daemon ou congurao especca do sistema possui um script de onde pode ser ativado e/ou desativado. Por padro, voc pode usar as seguintes palavras chaves com os arquivos(scripts) de congurao: * start - Inicia o daemon ou executa a congurao * stop - Interrompe a execuo de um daemon ou desfaz a congurao feita anteriormente (quando possvel). * restart - Reinicia a execuo de um daemon. equivalente ao uso de stop e start mas se aplicam somente a alguns daemons e conguraes, que permitem a interrupo de execuo e reincio Como j foi falado anteriormente voc pode modicar o seu processo de boot do jeito que quiser, mas para isso a nica condio que voc saiba realmente que esteja fazendo.

CRIANDO OS DIRETRIOS

Criaremos agora os diretrios para armazenar os nossos scripts de inicializao. 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 diretrio:

cat > /etc/init.d/rc << EOF #!/bin/sh # Begin /etc/init.d/rc # # By Jason Pearce - jason.pearce@linux.org # print_error_msg based on ideas by Simon Perreault # nomis80@videotron.ca # # Include the functions declared in the /etc/init.d/functions file # source /etc/init.d/functions # # The print_error_msg function prints an error message when an unforeseen # error occurred that wasnt trapped for some reason by a evaluate_ retval # call or error checking in different ways. print_error_msg() { echo $FAILURE echo -n voc no 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 youre able echo to trace this error down echo -n to a bug in one of the files provided by this book, echo please be so kind to echo -n inform us at bug@projetolec.com.br $NORMAL echo echo echo Pressione uma tecla para continuar... read

# # If you uncomment the debug variable below none of the scripts will be # executed, just the script name and parameters will be echoed 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 its 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 wont change runlevels. # [ $1 != ] && runlevel=$1 if [ $runlevel = ] then echo Usage: $0 <runlevel> >&2 exit 1 fi # # The same goes for $PREVLEVEL (see above for $RUNLEVEL). previous will # be set to the previous run level. If $PREVLEVEL is not set it means # that there is no previous runlevel and well 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 its 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 well 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 wont 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 fi done

# # # # # #

# # 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 dont 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 dont really start # anything here so we call with the stop parameter #

# # # # # #

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

*) # # # # # #

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

fi

done

esac

# End /etc/init.d/rc EOF CRIANDO RCS


O prximo script que criaremos o rcS:

cat > /etc/init.d/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 > /etc/init.d/functions << EOF #!/bin/sh # Begin /etc/init.d/functions # # # # # # # Set a few variables that influence the text thats 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

fi

print_status failure

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

$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 ] ;;

failure)

esac

# return value

# # 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 daemons 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 PIDs 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 its not running, so we run $* (all # parameters giving to this function from the script) and then check the

# $* evaluate_retval

else # # The variable $pid was not empty, meaning it was already running. Well # print [ ATTN ] now # $SET_WCOL echo -n Already running print_status warning } # # 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 daemons 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

fi

else fi

killlevel=-$2 nolevel=1

# # the pidlist variable will contains the output of the pidof command. # pidof will try to find the PIDs 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 PIDs were found that belongs to the processes to be killed # if [ -n $pid ] then # # If no kill level was specified well 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 well 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 its 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

# # If after the -KILL it still exists it cant be killed for some reason # and well print [FAILED] # else print_status failure

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

fi

/usr/bin/sleep 2

# # It was killed, remove possible stale PID file in /var/run and # print [ OK ] # /bin/rm -f /var/run/$base.pid print_status success

else

fi

# # 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 wasnt killed properly with # the signal provided. Print [FAILED] # else print_status failure

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

fi # reload its configuration file. fi # This is almost identical to the else # the pidlist variable will # killproc function with the contains the output of the pidof exception that it wont try to kill # command. it with # The PID didnt exist so we cant attempt to kill it. Print [ ATTN ] # pidof will try to find the PIDs # a -KILL signal (aka -9) that belong to a certain string; # # $base in this case $SET_WCOL # reloadproc() echo -n Not running { print_status warning pidlist=$(/bin/pidof -o $$ fi -o $PPID -o %PPID -x $base) # } # If no parameters are given to the pid= print_status function, print usage # # information. The reloadproc functions sends a signal to a daemon telling it to for apid in $pidlist # do if [ -d /proc/$apid if [ $# = 0 ] ] then then echo Usage: pid=$pid reloadproc {program} [signal] $apid exit 1 fi fi done # # Find the basename of the first parameter (the daemons name without # the path that was provided so /usr/sbin/syslogd becomes plain syslogd # after basename ran) # $1) base=$(/usr/bin/basename # # If $pid contains something from the previous for loop it means one or # more PIDs 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. # ] -SIGHUP $pid retval else if [ $nolevel = 1 then /bin/kill evaluate_

killlevel=-$2 else /bin/rm -f /var/run/$base.pid nolevel=1 print_status success fi

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

# # Else we will use the provided signal # /bin/kill $killlevel $pid evaluate_retval

else

fi

# # If $pid is empty no PIDs have been found that belong to the process. # Print [ ATTN ] # $SET_WCOL echo -n Not running print_status warning

fi

# # The statusproc function will try to find out if a process is running # or not # statusproc() { # # If no parameters are given to the print_status function, print usage # information. # if [ $# = 0 ] then echo Usage: status {program} return 1 fi # # $pid will contain a list of PIDs 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 contmts # of the $pid variable #

echo $1 running with Process ID $pid return 0 fi # # If $pid doesnt contain it check if a PID file exists and inform the # user about this stale file. # if [ -f /var/run/$1.pid ] then pid=$(/usr/bin/head -1 /var/run/$1.pid) if [ -n $pid ] then echo $1 not running but /var/run/$1.pid exists return 1 fi else echo $1 is not running fi } # End /etc/init.d/functions EOF CRIANDO CHECKFS
O arquivo /etc/init.d/checkfs criado com os seguites comandos:

evaluate_retval # # If the /fastboot file exists we dont want to run the partition checks # if [ -f /fastboot ] then echo Fast boot, no file system check else # # Mount the root partition readonly (just in case the kernel mounts it # read-write and we dont 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

cat > /etc/init.d/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

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) # systems... -a -A -C -T echo Checking file /sbin/fsck $force

status success else

fi

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

# # If the remount to read-only mode didnt 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 > /etc/init.d/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 > /etc/init.d/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
Um novo arquivo criado /etc/init.d/mountfs criado assim:

cat > /etc/init.d/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 cant 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

Vous aimerez peut-être aussi