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: 3.267 ]

Por: Jefferson Rocha 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

Software Manivela VS Software Modinha

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

Criando um pacote TXZ no Slackware

Compilação Kernel Linux no Slackware

Programas em Modo Texto (on Shell)

Leitura recomendada

Ubuntu: desvendando o "fantasma" das instalações de programas

Introdução aos sistemas operacionais

Guia Openbox

23 distribuições Linux brasileiras

Introdução ao gEDA - Suíte de eletrônica

  
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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts