Crie Seu Próprio Gerenciador de Pacotes do Zero - Parte 1

Eu sempre fui curioso em relação às coisas que me interessam, quando iniciei no mundo do GNU/Linux, eu fiquei admirado com a facilidade de instalar programas. No início, rodando entre as distribuições Linux, eu acabei conhecendo vários tipos de gerenciadores de pacotes e cada um com sua peculiaridade. Foi aí que me interessei em ler o código fonte de diversos gerenciadores e criar o meu próprio.

[ Hits: 10.924 ]

Por: Slackjeff em 19/02/2020 | Blog: https://slackjeff.com.br


Introdução



Eu sempre fui curioso em relação às coisas que me interessam, quando iniciei no mundo do GNU/Linux, eu fiquei admirado com a facilidade de instalar programas. No início, rodando entre as distribuições Linux, eu acabei conhecendo vários tipos de gerenciadores de pacotes e cada um com sua peculiaridade. Foi aí que me interessei em ler o código fonte de diversos gerenciadores e criar o meu próprio.

No início foi um pouco penoso, quebrei o meu sistema operacional várias vezes por erros bobos. Mas com o tempo, depois de criar pelo menos 4 gerenciadores de pacotes, resolvi passar adiante o meu conhecimento para quem deseja criar o seu próprio. Temos vários DIY e HOWTOS de como criar distribuições Linux, mas é incrível que não temos absolutamente nenhum tutorial de como criar um gerenciador. Temos muitos bons hackers espalhados pelo mundo, mas parece que nenhum quer mostrar o seu conhecimento.

Isso é triste, pois o que diferencia um distribuição da outra, além dos softwares instalados e filosofia, é o gerenciador de pacotes.

O que você precisa

Apesar deste artigo abordar todo passo a passo de como construir seu próprio gerenciador de pacotes, você precisa ter uma noção de programação na linguagem Shell Script. Não existe melhor linguagem que não a do próprio UNIX*, não é? Todas ferramentas normalmente já disponíveis no próprio S.O. Utilizaremos o sh, normalmente nas distribuições GNU/Linux é um link simbólico para o Shell Bash.

No entanto, você pode usar este livro para fazer em outra linguagem de programação, bastando apenas seguir a lógica utilizada.

Uma nota importante, é que criaremos um gerenciador de baixo nível! Ou seja, que não resolva dependências, já que este processo fica a cargo de um gerenciador de alto nível. Por enquanto, não vamos abordar como se cria um gerenciador de alto nível ao estilo apt, yum/dnf e sim, algo simples e parecido com pkgtools, dpkg e rpm.

Futuramente, talvez abordemos sobre o assunto em novos níveis? Vamos ver, boa diversão!

N-a1

Este nível a1 visa abordar a parte estrutural de um gerenciador de pacotes de baixo nível, seguindo a filosofia do UNIX, vamos criar a primeira versão bem simplória de três programas: criar, instalar e remover um pacote.

Não vamos nos preocupar tanto com vaidade e sim como funciona todo o esquema destes três processos. Por isso é de extrema importância você não executar estes programas em seu sistema operacional diário! Você pode executar em uma virtual box, ou até mesmo criar um ambiente enjaulado e entrar com chroot.

Este nível, como dito acima, não chega nem perto de um gerenciador de baixo nível seguro e utilizável em uma distribuição diária. Mas é totalmente funcional e é o ponta pé inicial. Tenha uma boa diversão.

Tipos de gerenciadores de pacotes

Normalmente, pensamos que gerenciadores de pacotes são todos a mesma coisa, quando normalmente não são! Existem dois tipos de gerenciadores, os de baixo nível e os de alto nível. Cada um realiza um tipo de função, como por exemplo, o dpkg do Debian faz a parte estrutural de um pacote e o apt/apt-get faz a parte inteligente, como resolver dependências.

Gerenciador de Baixo Nível

O gerenciador de baixo nível é o coração do gerenciador. É ele que cria, instala, remove, atualiza pacotes.

Alguns exemplos de gerenciadores de baixo nível, são:
  • dpkg
  • bananapkg
  • rpm
  • pkgtools

Um fato que precisamos saber, é que normalmente gerenciadores de baixo nível não resolvem as dependências dos softwares. Eles normalmente empregam uma técnica em algum arquivo para o próprio empacotador do software adicionar as dependências. E este arquivo é puxado pelo gerenciador de alto nível que se encarrega de listar as dependências e resolver as mesmas.

Então, quando você faz alguma função listada acima, você está utilizando o gerenciador de baixo nível.

Gerenciador de Alto Nível

O gerenciador de alto nível realiza a parte mais inteligente do gerenciamento, é ele que se encarrega de baixar pacotes disponíveis em um determinado espelho, resolve dependências, se assim permitir, e faz todo este processo mais burocrático.

Gerenciadores de alto nível:
  • apt
  • slackpkg (não resolve dependências)
  • dnf/yum

Devo salientar que, normalmente, os gerenciadores de alto nível são propensos a milhares de erros! Fazer algo inteligente é complicado. Você pede para remover o D, por exemplo, se o A, B e C depender do D e o Y depender do A e for removido jundo com o D, acaba quebrando tudo. Você acaba ficando sem os softwares ditos acimas. :)

O bom de se trabalhar com gerenciadores de alto nível é mais pela praticidade, mas precisa ser programado com muito cuidado.

    Próxima página

Páginas do artigo
   1. Introdução
   2. Iniciando
   3. createpkg - Criando um pacote
   4. pkginstall - Instalando um pacote
   5. pkgremove - Removendo um pacote
Outros artigos deste autor

Programas em Modo Texto (on Shell)

Compilação do Kernel Linux para máquinas locais Debian

Slackware x Debian

Boot Seguro LILO

Programar em Shell - Script só para os baixinhos

Leitura recomendada

Introdução ao Arch Build System

Desmistificando o GNU/Linux

Dando uma olhada no Mageia 7 (beta)

Kernel 4.0 no Debian, Linux Mint e Ubuntu - Atualização rápida

Sistemas Operacionais, Kernel e Shell

  
Comentários
[1] Comentário enviado por Tio_do_Toldo em 23/02/2020 - 11:06h

Legal.

[2] Comentário enviado por cizordj em 29/02/2020 - 15:23h

Caramba hein, que massa! Nunca entendi como o dpkg do Debian removia os pacotes do sistema e vendo agora o seu shell script dá para entender a lógica disso. E é uma coisa perigosa, o comando rm se for passado o argumento errado já era.

Outra coisa que aprendi também é que #!/bin/sh também interpreta funções.
________________________________________________
O programador tem a mania de achar que tudo é objeto


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts