Вы находитесь на странице: 1из 18

Linux System Administration 456 Instalao de Programas

www.4linux.com.br

-2

Sumrio
Gerenciamento de paCompilando Programas............................................................................3 1.1. Objetivos......................................................................................................................... 3 1.2. Introduo Terica.......................................................................................................... 4 1.3. Configure........................................................................................................................ 5 1.4. Makefile.......................................................................................................................... 5 1.5. Prtica Dirigida............................................................................................................... 6 Bibliotecas.................................................................................................................................. 9 1.6. Objetivos......................................................................................................................... 9 1.7. Introduo Terica........................................................................................................ 10 1.8. Tipos fundamentais de programas executveis............................................................10 1.9. Modo Esttico e Compartilhado.................................................................................... 12 1.10. Exemplo Real ............................................................................................................. 13 1.11. Prtica Dirigida........................................................................................................... 14 REFERNCIAS BIBLIOGRFICAS.................................................................................................................... 19 ANEXOS................................................................................................................................... 21 Primeiro anexo..................................................................................................................... 22
Tpico do Anexo ............................................................................................................................ 22

ndice de tabelas ndice de Figuras

Gerenciamento de paCompilando Programas - 3

Gerenciamento de paCompilando Programas

1.1. Objetivos
Compilar um programa a partir do deu cdigo fonte; O que possvel fazer com o cdigo fonte de um programa; As vantagens de se ter um programa compilado a partir do cdigo fonte.

Gerenciamento de paCompilando Programas - 4

1.2. Introduo Terica

Um dos pontos centrais do mundo GNU/Linux est baseado nas quatro liberdades bsicas propostas pela FSF - Free Software Foundation, sendo elas: 1 liberdade de rodar o programa para qualquer propsito; 2 liberdade de acesso ao cdigo fonte, estudar como ele funciona e adapt-lo s suas necessidades; 3 liberdade de redistribuir cpias do software; 4 liberdade de melhorar o programa e distribuir essas melhorias em benefcio da comunidade. . Para que essas quatro liberdades bsicas sejam alcanadas necessrio que

tenhamos acesso ao cdigo fonte dos programas. Tirando a parte ideolgica, h diversas situaes que exigem que recompilemos um determinado software a partir do cdigo fonte, sendo algumas delas, quando necessitamos alter-lo para que ele satisfaa alguma necessidade pessoal, corrigir um erro ou melhorar a segurana, o software no est disponvel na forma de pacote ou simplesmente o pacote no vem compilado com alguma funcionalidade que desejamos.

Gerenciamento de paCompilando Programas - 5

1.3. Configure
Em geral, sempre que pegamos o cdigo fonte de um programa ele vir com um aplicativo chamado configure que ir executar uma verificao em seu sistema a fim de verificar se ele dispe de todos os componentes bsicos para uma compilao bem sucedida. Alm disso, quando consultamos o help do configure ele ir nos mostrar todas as funcionalidades que podemos compilar com o programa e todas as funcionalidades que podemos retirar do mesmo para que ele se encaixe em nossas necessidades. Alm da escolha das funcionalidades, ele nos permite informar a localizao de certos componentes que por ventura no encontre. Uma vez que o processo de configure for encerrado com sucesso, ele ira gerar um arquivo chamado Makefile, contm instrues de compilao e instalao entre outras.

1.4. Makefile
A Makefile em geral criada utilizando a ferramenta configure e o objetivo desta automatizar os processos de compilao, verificao e instalao dos softwares. A Makefile estruturada em sees; cada uma delas realiza alguma tarefa especfica. Em geral essas Makefiles vm com pelo menos trs sees padro: default, install e clean. Algumas podem vir com test ou check ou alguma outra que o desenvolvedor ache relevante. Por isso devemos sempre ler a documentao do programa. A forma de utilizao da Makefile , simplesmente, utilizar o comando make com o nome de alguma das sees. Se nenhuma for especificada, ele ir executar a seo default.

Gerenciamento de paCompilando Programas - 6

1.5. Prtica Dirigida


Para que possamos instalar um software a partir de seu cdigo fonte, o primeiro passo que temos que seguir : fazer o download dele. Em geral fazemos isso acessando a pgina do desenvolvedor do programa. Neste captulo vamos realizar a compilao do software chamado nmap, que pode ser encontrado em http://www.insecure.org. O procedimento de compilao de um programa parte do princpio que, atravs do cdigo fonte do programa, qualquer um possa ter acesso ao cdigo e gerar o binrio final a partir dele. O procedimento de compilao sempre bem parecido para todas as aplicaes, porm, sempre que for compilar algum programa, devemos consultar o arquivo INSTALL ou o README que est sempre presente junto com o cdigo fonte. 1) Vamos instalar os pacotes necessrios:

# aptitude install make gcc g++ bzip2 gzip unzip

2) Descomprima e desempacote o cdigo fonte do nmap no diretrio apropriado entre nele:

# wget 192.168.200.254/ nmap-versao.tar.bz2 # tar xvjf nmap-versao.tar.bz2 -C /usr/local # cd /usr/local/nmap-versao

Gerenciamento de paCompilando Programas - 7

3) Qual o primeiro passo para compilar um programa?? Ler os arquivos README e INSTALL: # vim README # vim INSTALL Dica LPI:Todos esses metodos chegam ao mesmo resultado. Certfique-se de que voc entende que o tar capaz de arquivar direto para arquivos e que se pode fazer uma verso comprimida de um arquivo tar como gzip. Para a prova voc deve dominar o TAR e o GZIP, que estudamos no 450, e utilizaremos aqui. Obs.: Nem sempre ambos os arquivos estaro presentes, mas certamente um deles sempre estar. 4) Agora que sabemos o que fazer, vamos executar. Para determinar quais so os parmetros que podemos passar ao configure: # ./configure --help

5) Como no estamos interessados na interface grfica do nmap, podemos informar ao configure que no queremos que o nmap a utilize: # ./configure --without-zenmap

Dica LPI: muito comum, quando compilamos um programa a partir de seu cdigo fonte, que alguns de seus requisitos no estejam presentes, ocasionando assim um erro durante a execuo do configure. Quando isso ocorrer, deve-se identificar o componente que est faltando, instal-lo e executar novamente o configure at que ele termine com sucesso. Fique atento esse processo.

Gerenciamento de paCompilando Programas - 8

6) Quando o configure for executado com sucesso, podemos passar compilao, mas antes vamos conhecer o arquivo Makefile criado pelo configure: # vi Makefile

7) Agora sim vamos compilar o programa: # make

8) Se no der nenhum erro de compilao, podemos prosseguir com a instalao: # make install

9) Se tudo ocorreu bem, j possvel utilizar o novo aplicativo: # nmap localhost

10) Aps compilarmos o programa, podemos remover os arquivos binrios e de objetos que foram criados durante a compilao: # make clean

Bibliotecas - 9

Bibliotecas

1.6. Objetivos
Mesmo depois que um programa esteja instalado precisamos ver se as suas bibliotecas foram carregadas; Mostrar como carregar as bibliotecas; As diferenas entre as bibliotecas; As bibliotecas so utilizadas pelos executveis do sistema, sem ela no h execuo.

Bibliotecas - 10

1.7. Introduo Terica


Hoje em dia muito simples instalar um programa j compilado, com a ajuda de gerenciadores de pacotes como o rpm, dpkg, aptitude e outros. Mas voc vai encontrar muitos programas disponveis somente em cdigo-fonte, e s vezes nem to bem documentados assim. Entretanto, compilar um programa no algo de outro mundo, no um bicho de sete cabeas. A funo destas bibliotecas lembra um pouco a dos arquivos .dll no Windows. Temos as bibliotecas estticas e dinmicas. As dinmicas so usadas por vrios programas e necessrias para instalar programas distribudos em cdigo fonte (os famosos arquivos tar.gz).

1.8. Tipos fundamentais de programas executveis


Em sistemas Linux existem dois tipos fundamentais de programas executveis. O primeiro chamado de esttico. Esse tipo de programa contm todas as funes que ele precisa para ser executado, em outras palavras, completo. Devido a isso, os executveis estticos no dependem de nenhuma biblioteca externa para funcionar. O segundo tipo o executvel dinmico. Mas como descobrir se um executvel dinmico ou esttico? Para isso, podemos usar o comando abaixo, que produz uma lista de dependncias: # ldd <caminho_do_executvel> Obs: Deve ser colocado o caminho completo do executvel, no somente o nome do comando. Para facilitar em vez de digitar o caminho completo: # ldd $(which ls)

Bibliotecas - 11 Exemplo de executvel esttico: # aptitude install module-assistant # ldd /usr/bin/module-assistant not a dynamic executable Exemplo de executvel compartilhado: # ldd /bin/ln linux-gate.so.1 => (0xffffe000) libc.so.6 => /lib/tls/libc.so.6 (0xb7ded000) /lib/ld-linux.so.2 (0xb7f29000) Verificando tamanhos: # du -h /usr/bin/module-assistant ; du -h /bin/ln 64K /usr/bin/module-assistant 40K /bin/ln Note que um executvel esttico bem maior que o executvel dinmico, isso ocorre pois o esttico j contm o que precisa dentro do prprio executvel. Obviamente, bibliotecas compartilhadas tendem a gerar executveis menores; eles tambm usam menos memria, ou seja, menos espao em disco usado.

Bibliotecas - 12

1.9. Modo Esttico e Compartilhado


O modo esttico ligeiramente mais rpido, pois no precisa buscar bibliotecas em diretrios, mas consome mais espao (dado que cada programa teria uma cpia da biblioteca dentro de si). O modo compartilhado ligeiramente mais lento, pois precisa sempre abrir o arquivo da biblioteca, mas ocupa menos espao (dado que s se tem uma cpia da biblioteca) e facilita, centralizando a manuteno (se voc precisar mudar a verso de uma biblioteca, no tem de recompilar o programa, basta trocar o arquivo da biblioteca). O padro usar bibliotecas compartilhadas , e geralmente a deciso mais sbia, mas precisa que todas as bibliotecas necessrias estejam presentes no sistema para executar. No Linux, bibliotecas estticas tm nomes como libname.a, enquanto bibliotecas compartilhadas so chamadas libname.so.x.y.z onde x.y.z alguma forma de nmero de verso. A ltima fase do desenvolvimento de um software a biblioteca , ou seja, reunir todas as partes fundamentais para haver execuo. Existem tarefas que a maioria dos softwares iram querer realizar como abrir arquivos, por exemplo, e esse tipo de tarefa realizada atravs de bibliotecas. No Linux, as bibliotecas podem ser encontradas em /lib e /usr/lib/ ou em outros diretrios.

Bibliotecas - 13

1.10. Exemplo Real


Um exemplo real a linguagem C, que rica em poder de expresso, mas relativamente pobre em funcionalidades. Para construir aplicaes que fazem uso de funcionalidades especficas, como interfaces grficas, comunicao via rede, frmulas matemticas complexas, etc, devem ser usadas bibliotecas. As bibliotecas mais comuns, utilizadas por todas as aplicaes e utilitrios do sistema, so: libc: na verdade um grande "pacote" de bibliotecas que prov funcionalidades bsicas de entrada/sada, de acesso a servios do sistema, rede, etc. ld-linux: prov as funes necessrias para a carga de bibliotecas dinmicas, durante a inicializao do programa. Por default, essas duas bibliotecas so automaticamente incluidas e ligadas em todos os programas. Ao usar uma biblioteca esttica, o linker encontra as partes que os mdulos do programa precisam, e as cpia fisicamente no arquivo de sada executvel que ele gera. Para bibliotecas compartilhadas, no --- em vez disso, ele deixa uma nota na sada dizendo quando este programa for executado, ele ter que carregar primeiro esta biblioteca. Diversos programas, para no terem sempre que reinventar a roda, usam bibliotecas, como a libc, por exemplo.

Bibliotecas - 14

1.11. Prtica Dirigida


Utilizando o comando ldd:

# which ping # ldd /bin/ping linux-gate.so.1 => (0xb77c6000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb764f000) /lib/ld-linux.so.2 (0xb77c7000)

Para instalar uma biblioteca necessria ausente, devemos copi-la em um dos diretrios listados no arquivo /etc/ld.so.conf e em seguida executar o comando ldconfig.

Dica LPI: Opcionalmente, podemos editar o arquivo e colocar outros diretrios para o ldconfig procurar as bibliotecas, e depois reexecut-lo.

Para verificar todas as bibliotecas presentes em nossa mquina usamos ldconfig -p.

Bibliotecas - 15

# ldconfig -p libgucharmap.so.7 (libc6) => /usr/lib/libgucharmap.so.7 libgtop-2.0.so.7 (libc6) => /usr/lib/libgtop-2.0.so.7 libgtkspell.so.0 (libc6) => /usr/lib/libgtkspell.so.0 libgtksourceview-2.0.so.0 (libc6) => /usr/lib/libgtksourceview-2.0.so.0 libgtkmm-2.4.so.1 (libc6) => /usr/lib/libgtkmm-2.4.so.1 libgtkhtml-3.14.so.19 (libc6) => /usr/lib/libgtkhtml-3.14.so.19 libgtkhtml-editor-3.14.so.0 (libc6) => /usr/lib/libgtkhtml-editor-3.14.so.0 libgtk-x11-2.0.so.0 (libc6) => /usr/lib/libgtk-x11-2.0.so.0 libgtk-vnc-1.0.so.0 (libc6) => /usr/lib/libgtk-vnc-1.0.so.0 libgthread-2.0.so.0 (libc6) => /usr/lib/i386-linux-gnu/libgthread-2.0.so.0 libgstvideo-0.10.so.0 (libc6) => /usr/lib/libgstvideo-0.10.so.0 libgsttag-0.10.so.0 (libc6) => /usr/lib/libgsttag-0.10.so.0 libgstsignalprocessor-0.10.so.0 0.10.so.0 libgstsdp-0.10.so.0 (libc6) => /usr/lib/libgstsdp-0.10.so.0 libgstrtsp-0.10.so.0 (libc6) => /usr/lib/libgstrtsp-0.10.so.0 libgstrtp-0.10.so.0 (libc6) => /usr/lib/libgstrtp-0.10.so.0 libgstriff-0.10.so.0 (libc6) => /usr/lib/libgstriff-0.10.so.0 (libc6) => /usr/lib/libgstsignalprocessor-

Bibliotecas - 16

# cat /etc/ld.so.conf include /etc/ld.so.conf.d/*.conf

# cd /etc/ld.so.conf.d # ls i686-linux-gnu.conf libc.conf

# cat i686-linux-gnu.conf /lib/i386-linux-gnu /usr/lib/i386-linux-gnu /lib/i686-linux-gnu /usr/lib/i686-linux-gnu

Obs: /lib e /usr/lib j esto automaticamente inclusas!

# cat libc.conf /usr/local/lib

Bibliotecas - 17 Exerccio: 1)

# aptitude install vim

# ldd $(which vim) linux-gate.so.1 => (0xb77fd000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb77c1000) libncurses.so.5 => /lib/libncurses.so.5 (0xb7789000) libselinux.so.1 => /lib/i386-linux-gnu/libselinux.so.1 (0xb776d000) libacl.so.1 => /lib/i386-linux-gnu/libacl.so.1 (0xb7765000) libgpm.so.2 => /usr/lib/libgpm.so.2 (0xb775e000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75fd000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb75f9000) /lib/ld-linux.so.2 (0xb77fe000) libattr.so.1 => /lib/i386-linux-gnu/libattr.so.1 (0xb75f2000)

2) Agora, para vermos a importncia das bibliotecas, vamos fazer uma simulao, vamos esconder uma biblioteca da aplicao vim. Ento, mudando o nome da biblioteca:

# mv /lib/libncurses.so.5 /root

3) Tente executar o vim: # vim vim: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

Bibliotecas - 18 4) Volte ao normal: # mv /root/libncurses.so.5 /lib/ # vim

Existe tambm a varivel de ambiente LD_LIBRARY_PATH, que instrui o carregador dinmico para checar um certo diretrio: # export LD_LIBRARY_PATH=/usr/lib/velho:/opt/lib/novo

Temos tambm outro arquivo, o /etc/ld.so.cache, que contm uma lista de todas as bibliotecas compartilhadas que ld.so ou ld-linux.so iro procurar na mquina. Esse arquivo sempre gerado e atualizado por ldconfig baseando-se no arquivo /etc/ld.so.conf: # file /etc/ld.so.cache

Dica LPI: Se apagarmos o arquivo /etc/ld.so.cache, basta rodar o comando ldconfig que o arquivo ser criado novamente.