Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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.
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.
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.
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.
6) Quando o configure for executado com sucesso, podemos passar compilao, mas antes vamos conhecer o arquivo Makefile criado pelo configure: # vi Makefile
8) Se no der nenhum erro de compilao, podemos prosseguir com a instalao: # make install
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
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
Bibliotecas - 13
Bibliotecas - 14
# 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
Bibliotecas - 17 Exerccio: 1)
# 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
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.