Aula #26 - Sistemas de gestão de pacotes


É necessário introduzir ordem na forma como programas são instalados, atualizados e removidos em sistemas Linux. Sistemas de gestão Pacotes fornecem uma maneira limpa para alcançar esse objetivo e podem impedir os sistemas de mergulhar em caos com o tempo. Além disso, eles fornecem um método para verificar se o software no sistema não foi corrompido, seja de forma maliciosa ou por acidente. Uma função essencial das distribuições Linux é desenvolver e manter os pacotes para garantir que as dependências são respeitadas ao longo do tempo.

Sistemas de gerenciamento de pacotes fornecem as ferramentas que permitem aos administradores de sistema automatizar a instalação, atualização, configuração, e remoção de pacotes de software de uma forma conhecida, previsível e consistente. Esses sistemas:

  •     Juntam todos os arquivos associados ao programa em um único pacote (arquivo) compactado, que pode depender que um ou mais pacotes sejam instalados antes.​
  •     Permitem instalação e remoção fácil de aplicativos.​
  •     É capaz de verificar a integridade de arquivos através de uma base de dados.​
  •     Pode atestar a origem dos pacotes.​
  •     Facilita atualizações.​
  •     Agrupa pacotes por características lógicas.​
  •     Gerencia dependências entre pacotes.


Um pacote pode conter arquivos executáveis, arquivos de dados, documentação, scripts de instalação, e arquivos de configuração. Além disso, um pacote também contém metadados, que são atributos como números de versão, checksums, informações sobre o criador do pacote, dependências, descrições, etc.

Durante a instalação, toda essa informação é armazenada localmente, em uma base de dados que pode ser convenientemente consultada para verificar versões de pacotes instalados e para consultar informações sobre atualizações.



Sistemas de pacotes de software são vistos como um dos maiores avanços que o Linux trouxe para o ambiente corporativo de TI. Ao manter o controle de arquivos e metadados de forma automatizada, previsível, e confiável os administradores de sistema podem usar os sistemas de pacotes para potencializar os processos de instalação e atualização a ponto de controlar milhares de sistemas sem a necessidade de intervenção manual em cada sistema individual. As características incluem:


  •     Automação: Não há necessidade de instalação e atualizações manuais.
  •     Escalabilidade: instalar pacotes em 1 sistema ou 10.000 sistemas.
  •     Repetibilidade e previsibilidade.
  •     Segurança e auditoria. 




Pacotes vêm em vários tipos diferentes:

    Os pacotes binários contêm arquivos prontos para uso, incluindo arquivos executáveis ​​e bibliotecas. Estes dependem da arquitetura e devem ser feitos para cada tipo de máquina.
    Pacotes de código fonte são usados ​​para gerar pacotes binários; um pacote de código fonte deve sempre ser capaz de gerar o pacote binário (por exemplo, usando rpmbuild --rebuild) em sistemas que usam o RPM. Um pacote fonte pode ser usado para várias arquiteturas.
    Pacotes independentes de arquitetura contém arquivos e scripts que são interpretados, assim como arquivos de documentação e configuração.
    Meta-pacotes são essencialmente grupos de pacotes que simplificam as tarefas necessárias para instalar um subsistema relativamente grande, como um ambiente de desktop, ou uma suíte de escritório. 

Os pacotes binários são os que os administradores de sistemas lidam na maior parte do tempo.

Em sistemas de 64 bits que podem executar programas de 32 bits, pode-se ter dois pacotes binários instalados para um mesmo programa, um com x86_64 ou amd64 em seu nome, e outro com i386 ou i686 em seu nome.

Pacotes fonte podem ser úteis para acompanhar as mudanças no código-fonte que geram os binários que estão em uso no sistema. Eles geralmente não são instalados em um sistema por padrão, mas sempre podem ser obtidos. 




Existem dois sistemas muito comuns de gerenciamento de pacotes:

    RPM (Red Hat Package Manager)
    Este sistema é utilizado por todas as distribuições baseadas no Red Hat, como o Red Hat Enterprise Linux, CentOS, Scientific Linux bem como pela SUSE e pela comunidade openSUSE.


    dpkg (Pacote Debian)
    Este sistema é utilizado por todas as distribuições baseadas no Debian incluindo Debian, Ubuntu e Linux Mint. 



Existem outros sistemas de gerenciamento de pacotes, como o portage/emerge usado pelo Gentoo, pacman usado pelo Arch, e alguns especializados usados ​​por sistemas Linux Embarcados e pelo Android.

Outro sistema antigo é apenas fornecer pacotes como arquivos tar (tarballs) sem qualquer controle real ou estratégias de remoção de poluentes; essa abordagem ainda é usada pelo Slackware, uma das distribuições mais antigas do Linux.

Mas na maioria das vezes pacotes RPM ou pacotes dpkg são usados, e serão os únicos que iremos considerar neste curso. 



Existem dois níveis de aplicativos para sistemas de pacotes:

    Ferramentas de baixo nível: Simplesmente instala ou remove um único pacote, ou uma lista de pacotes, cada um precisa estar presente no sistema local. Dependências não são instaladas, no máximo uma mensagem diz quais são as dependências que estão faltando.
    - Se você quer instalar um pacote, mas outro pacote precisa ser instalado para satisfazer dependências do seu pacote, a instalação do seu pacote falhará.
    - Se você quer remover um pacote, mas ele é uma dependência de outro pacote já instalado, a remoção do seu pacote falhará. O rpm e as ferramentas dpkg fazem esse papel de ferramentas de baixo nível.
    Ferramentas de alto nível: Resolve os problemas de dependência:
    - Se outro pacote ou grupo de pacotes precisa ser instalado antes de instalar o software que você quer instalar, as dependências serão detectadas e todas as ações necessárias serão executadas.
    - Se a remoção de um pacote interfere com outro pacote já instalado, o administrador poderá abortar a desinstalação, ou remover todos os softwares afetados.

    Os utilitários yum e zypper (e mais recentemente PackageKit) cuidam da resolução de dependências para sistemas rpm, e o apt-get e apt-cache cuidam das ações de alto nível para sistemas dpkg. 






Repositórios


Cada distribuição tem um ou mais repositórios de pacotes que são usados por ferramentas do sistema para obter e atualizar software. É responsabilidade das distribuições se certificar de que todos os pacotes presentes nos repositórios não interferem de forma negativa uns com os outros.

É comum encontrar repositórios não oficiais que podem ser configurados no sistema. Às vezes, estes estão intimamente associados com a distribuição e raramente produzem problemas significativos; um exemplo é o EPEL (Pacotes extras para o Linux Enterprise, ou Extra Packages for Enterprise Linux) que é um conjunto de repositórios que são feitos para o RHEL, mas que são mantidos pela comunidade Fedora que é muito próxima da Red Hat.

No entanto, alguns repositórios externos não são muito bem construídos ou mantidos. Por exemplo, quando um pacote é atualizado no repositório principal, pacotes dependentes não podem ser atualizados o que pode levar a uma forma de inferno de dependências, que é uma situação me que é impossível satisfazer as dependências e que torna muito complicado usar as ferramentas de pacotes. 


Construir seus próprios pacotes personalizados de software facilita a distribuição e instalação do seu software/conteúdo. Quase todas as versões do Linux tem algum mecanismo para fazer isso. 

Construir seu próprio pacote permite controlar exatamente o que se vai ser distribuído com o software e exatamente como ele será instalado. Você pode criar o pacote do modo que ao instalá-lo scripts executem as tarefas necessárias para instalar o novo software e/ou remover o software antigo. Alguns exemplos de tarefas que podem ser executadas durante a instalação/remoção de um pacote:
    Criar links simbólicos.
    Criar diretórios conforme necessário.
    Definir permissões.
    Qualquer coisa que pode ser descrita com um script. 

Futuramente vamos ver como criar pacotes .deb e .rpm;






Sistemas de controle de revisão


Projetos de software tornam-se cada vez mais difíceis de gerir com o aumento da complexidade e com o aumento do número de desenvolvedores trabalhando ao mesmo tempo.

Para organizar atualizações e facilitar a cooperação, vários métodos diferentes estão disponíveis para controle de código fonte utilizados para manter um histórico preciso ou registro de mudanças. São capazes de fazer backup de versões anteriores, coordenam atualizações conflitantes, e permitem que equipes inteiras alterem o mesmo código fonte. 


Existem vários sistemas de controle de revisão disponíveis, tanto pagos quanto de código aberto; segue uma lista de sistemas de controle de revisão liberados sob a licença GPL:



Sistemas de Controle de Revisão 





Entre as várias opções disponíveis, vamos nos concentrar no g​it,​ por ele ser o mais utilizado. Uma curiosidade é que o g​it ​foi criado pelo Linus Torvalds, criador do Linux. 
O g​it ​se tornou a ferramenta padrão nos projetos de código aberto em um tempo notavelmente curto, e também é frequentemente utilizado em ambientes de código fechado. 





O sistema de desenvolvimento do Kernel do L​inux​ tem necessidades especiais por atender milhares de desenvolvedores distribuídos em todo o mundo. Tudo isso é feito publicamente sob a licença G​PL.​

Por muito tempo os desenvolvedores do kernel do Linux não utilizaram um sistema de controle de revisão. Porém, os principais desenvolvedores do Kernel passaram a usar o B​itKeeper (veja em h​ttp://www.bitkeeper.com)​, que mesmo sendo comercial, cedia uma licença restrita para o desenvolvimento do kernel do L​inux.​

No entanto em 2005, houve uma discussão pública intensa sobre as restrições de uso impostas pela licença do BitKeeper. ​A conclusão foi que o Bitkeeper não atendia mais as necessidades da comunidade do kernel do L​inux.​

A resposta foi o desenvolvimento de g​it,​ cujo autor original é Linus Torvalds. O código fonte do git ​pode ser obtido no endereço 
h​ttp://www.kernel.org/pub/software/scm/git/,​ e a documentação completa pode ser encontrada em 
h​ttp://www.kernel.org/pub/software/scm/git/docs/.​ 

Mais vistos no mês:

As melhores distribuições Linux para 2017

TuxMath - Tux, do Comando da Matemática. Ensino e diversão a crianças.

Teste de Performance de Rede com Iperf

DHCP - Guia Completo

Aula #14 - Os sistemas de arquivos ext2/ext3/ext4

OPNsense - Firewall Open Source

Ophcrack: Descubra todas as senhas do Windows

SSD no linux

Administração de sistema e Deploys: Ansible, Chef, Fabric, Puppet ou Salt?

Brískola - aprenda a jogar !!