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                         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                         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                         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                         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                        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                         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                         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                        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                     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                     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.
12     Sistemas Operacionais   Luiz Arthur


 fim

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.
  • 12.
    12 Sistemas Operacionais Luiz Arthur fim