O documento discute conceitos de software livre e como instalar programas a partir de arquivos tarball, incluindo como descompactar os arquivos, compilar o código-fonte e gerenciar bibliotecas compartilhadas.
Sistemas Operacionais - Gnu/Linux Instalando Programas
1. 1 Sistemas Operacionais Luiz Arthur
Sem dúvida o código livre está sendo o grande rival das empresas que produzem
software “proprietário”.
A filosofia do software livre tem confundido muitas pessoas, pois livre não está
associada a software grátis e sim à liberdade.
O termo livre refere-se à liberdade de o usuário executar, copiar, distribuir e
aperfeiçoar o programa.
O distribuidor pode até cobrar uma taxa pelo software, como acontece nas
distribuições Linux empacotadas. Desde que o direito de alterar o programa e
redistribuí-lo seja preservado, o software continua sendo livre.
A maioria das distribuições do Linux vem muito software livre nos CD-ROMS. O
próprios site do GNU contém muito software disponível.
Uma vez que se possa utilizar software livre, é necessário compilar e instalar
estes programas. Um ótimo site para procurar programas é o
http://www.freshmeat.net.
Porém para isso é necessário entender o conceito de arquivos tarball.
2. 2 Sistemas Operacionais Luiz Arthur
Arquivos Tarball
Os arquivos tarball são distribuições de software livre que mantêm uma estrutura
de diretório, arquivos fonte, um arquivo Makefile, documentação e outros
arquivos, encapsulados em um arquivo tar com compressão de dados gzip. Este
método de distribuição de software é muito popular porque os utilitários tar e
gzip são muitos comuns.
O resultado é um arquivo de extensão .tar.gz ou .tgz.
Ainda é possível encontrar os arquivos tarball com as extensões .bz2 e .tbz2. Este
arquivos são compactados com o bzip2, que utiliza um algoritmo de compressão
de dados melhor que o gzip.
Para abrir o conteúdo de um arquivo tarball:
#gzip -d arquivo.tar.gz
O comando gzip descomprime o arquivo .tar.gz e retira a extensão .gz:
#tar xvf arquivo.tar
O utilitários tar extrai o conteúdo do pacote.
3. 3 Sistemas Operacionais Luiz Arthur
Pode-se também utilizar formas mais simples:
#tar xvzf arquivo.tar.gz
ou
#gzip -dc arquivo.tar.gz | tar vx
Se o arquivo for compactado com o bzip2, ele deve ser descompactado pelo
bunzip2 ou utilizar a opção -d do bzip2:
#tar xvjf arquivo.tar.bz2
ou
#bunzip2 arquivo.tar.bz2
e
# tar xvf arquivo.tar
A saída de qualquer dos comandos citados anteriormente é um conjunto de
arquivos sem compactação, ou seja, os arquivo compactados deverão gerar uma
estrutura de arquivos/diretórios.
4. 4 Sistemas Operacionais Luiz Arthur
Compilando o Código-fonte
Depois de extrair o conteúdo de um pacote de software é necessário compilar e
fazer sua instalação.
O compilador mais utilizado no Linux é a Coleção de Compiladores GNU – GCC.
Ele compila códigos C ANSI, bem como C++, Java e Fortran. O GCC suporta
vários níveis de checagem de erros nos códigos-fonte, produz informações de
debug e pode ainda otimizar o arquivo objeto produzido.
O GCC suporta os novos processadores Intel IA-64, permitindo que os programas
executem nesta arquitetura.
Alguns programas do pacote do GNU são necessários para compilar um
programa código livre. São eles:
Make
O utilitário make é necessário para compilar múltiplos arquivos de código fonte de
um projeto. Ele utiliza um arquivo de descrição geralmente nomeado makefile
ou Makefile.
O conteúdo deste arquivo contém regras que definem as dependências entre
arquivos fonte e os comandos necessários para a compilação.
5. 5 Sistemas Operacionais Luiz Arthur
A partir arquivo de descrição make ele executa seqüências de comandos que são
interpretados pelo shell. Geralmente o compilador gcc é invocado com diversas
opções que completam as dependências de outros arquivos objetos e
bibliotecas.
“DEPENDENCIA é um pacote (programa) necessário para a compilação ou
funcionamento de um dado programa, um programa pode ser DEPENDENTE de
um ou mais pacotes”.
Mesmo os menores projetos de software podem contêm vários arquivos que têm
interdependência, e o comando make facilita manter e compilar os projetos.
Configure
Alguns projetos incluem um arquivo especial chamado configure. Este arquivo é
um script de shell que examina o sistema para verificar se as diversas
dependências necessárias para compilar o projeto serão satisfeitas.
O configure procura por compiladores, bibliotecas, utilitários e outros itens
necessários. Ele também pode receber informações extras do usuário, como
diretivas de compilação, habilitar ou desabilitar opções incluídas ou excluídas do
objeto a ser compilado.
6. 6 Sistemas Operacionais Luiz Arthur
Se alguma dependência estiver ausente este script (configure) avisa o usuário
para que ele satisfaça instalando arquivos e programas necessários ao projeto.
Depois de reunir toda a informação necessária o configure gera um arquivo
Makefile customizado para o sistema.
O configure é fornecido pelo programador do projeto utilizando o utilitário
autoconf.
Após, executar o comando configure (se este existir) para criar o arquivo
Makefile, podemos continuar a instalação do sistema com os comandos make
para compilar o programa e make install para instalar os arquivos compilados.
Por exemplo para instalar o servidor de Web (HTTP) Apache:
#tar vxzf apache-1.3.31.tar.gz
#cd apache-1.3.31
#./configure
#make
#make install
Depois de instalar você pode apagar o diretório apache-1.3.31 gerado pelo
arquivo apache-1.3.31.tar.gz.
7. 7 Sistemas Operacionais Luiz Arthur
Gerenciando Bibliotecas Compartilhadas
Para entender a gerência das bibliotecas compartilhadas, precisa-se primeiro
saber o que são bibliotecas e para que elas servem.
Durante a escrita do código-fonte de um programa, o desenvolvedor faz uso de
diversas funções e procedimentos já definidos em arquivos chamados
bibliotecas.
Estas funções permitem que o programador possa usar recursos como escrita em
disco, escrita na tela, receber dados do teclado, do mouse, enviar dados pela rede
e muito mais, sem a necessidade de reescrever a roda.
Quando o programa é compilado, o último estágio de sua construção é fazer as
ligações (linker). Alguns compiladores já fazem este processo de reunir todos os
objetos necessários e compor um objeto final automaticamente. Outros
necessitam que o programador execute um outro programa chamado de linker.
Existem dois tipos de bibliotecas no Linux: as estáticas e as dinâmicas. A
decisão de qual biblioteca utilizar compete ao programador.
8. 8 Sistemas Operacionais Luiz Arthur
Ao usar uma biblioteca estática, o linker encontra as funções e procedimentos
de que o programa precisa, e as copia fisicamente no arquivo de saída executável
gerado. Isso faz com que o executável final possa rodar de forma independente
sem utilizar nenhuma biblioteca. Mas perde-se na performance, no gasto
desnecessário de memória e no tamanho final do programa.
Para resolver este problema o programador pode fazer uso de bibliotecas
compartilhadas (dinâmicas). Ao fazer as ligações de um programa que as
utiliza, o linker faz uma referência às bibliotecas compartilhadas. Desta forma,
quando este programa for executado, o sistema terá de carregar primeiro as
bibliotecas necessárias.
Desta maneira, os executáveis gerados através do uso de bibliotecas
compartilhadas são mais eficientes, pois tendem a ser menores, usar menos
memória e ocupar menos espaço em disco. O ponto fraco desta metodologia é
que os programas necessitam das bibliotecas compartilhadas e uma mudança nas
versões destes arquivos também pode afetar o seu funcionamento.
Os arquivos executáveis são examinados no tempo de execução pelo linker de
tempo de execução chamado ld.so. Este interpretador especial completa as
ligações entre o executável e as bibliotecas compartilhadas. Se o ld.so não
conseguir encontrar e ler as dependências, ele irá falhar e o executável não irá
ser carregado.
9. 9 Sistemas Operacionais Luiz Arthur
O linker ld.so mantém índice de todas as bibliotecas e sua localização em
um arquivos especial chamado /etc/ld.so.cache. Ele é binário e, portanto, pode
ser lido rapidamente pelo ld.so.
É isto que um administrador Linux tem de estar preparado para gerenciar as
bibliotecas compartilhadas e suas versões para um correto funcionamento do
sistema e seus aplicativos. Os utilitários que irão ajudar nesta tarefa são:
ldd
O comando ldd – List Dynamic Dependencies – fornece uma lista das
dependências dinâmicas de que um determinado programa precisa. Ele irá
retornar o nome da biblioteca compartilhada e sua localização esperada.
$ ldd /bin/bash
linux-gate.so.1 => (0xffffe000)
libtermcap.so.2 => /lib/libtermcap.so.2 (0xb7f8c000)
libdl.so.2 => /lib/tls/libdl.so.2 (0xb7f88000)
libc.so.6 => /lib/tls/libc.so.6 (0xb7e59000)
/lib/ld-linux.so.2 (0xb7fad000)
Este comando é importante para determinar quais são as bibliotecas necessárias
de um executável.
10. 10 Sistemas Operacionais Luiz Arthur
ldconfig
O utilitário ldconfig cria os links e refaz o índice das bibliotecas dinâmicas do
arquivo /etc/ld.so.cache. Ele procura por bibliotecas nos diretórios /usr/lib
e /lib, assim como nos diretórios listados em /etc/ls.so.conf, bem como o
diretório informado na linha de comando.
As opções mais comuns são:
-p Lista o conteúdo do cache /etc/ld.so.cache
-v Mostra o progresso da atualização do cache.
-f arquivo Informa um outro arquivo de configuração diferente do padrão
/etc/ld.so.conf.
11. 11 Sistemas Operacionais Luiz Arthur
Atividade 1
1 – Pesquise por ferramentas que facilitam a instalação em sistemas Linux.
2 – Pesquise sobre a ferramenta de instalação do Slackare, indicando as opções
de como instalar, atualizar e remover os pacotes.
3- Pesquise sobre a ferramenta de instalação do Debian (que é igual ao ubunto,
Kurumin, etc), indicando as opções de como instalar, atualizar e remover os
pacotes.
4 - Pesquise sobre a ferramenta de instalação do Gentoo, indicando as opções de
como instalar, atualizar e remover os pacotes.
5 - Pesquise sobre a ferramenta de instalação do Red-Hat, indicando as opções de
como instalar, atualizar e remover os pacotes.
6 -Pesquise sobre a ferramenta de instalação apt-get (procure por versões para
o Slackware), indicando as opções de como instalar, atualizar e remover os
pacotes.