porcellis.com

ref: master

content/blog/alpine-linux.md


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
---
title: "Alpine Linux"
date: 2021-06-15
draft: false
tags: ["infra", "linux"]
---

Eu comecei a utilizar o Alpine Linux já faz um tempo, em especial porque eu
sabia que ele era conhecido por ser uma distribuição leve, um requisito do qual
eu [julgo muito necessário][duravel] e da qual [eu já escrevi a
respeito][light]. Depois de um ano trabalhando de casa devido a pandemia de
Covid-19, decidi parar de utilizar um notebook como minha ferramenta principal.
Os motivos são variados, mas a falta de espaço para armazenamento e ter que
lidar com bateria me fizeram eu finalmente fazer um merecido upgrade para uma
estação de trabalho desktop.

[duravel]: https://porcellis.com/2021/03/29/Sobre-Software-Dur%C3%A1vel.html
[light]: https://porcellis.com/2020/04/02/Porque-eu-uso-Vim-ou-Uma-Reflex%C3%A3o-sobre-Complexidade-na-Tecnologia.html

Depois que eu migrei tudo do notebook para a nova máquina, vi que era uma ótima
oportunidade de fazer um tão desejado test-drive do Alpine no notebook. Não
preciso dizer que nunca mais voltei atrás.

Sinceramente, o que eu mais gosto no Alpine é o fato de que ele é *muito*
simples. Tudo nele me remete a um certo minimalismo, a um desejo de não ser
intrusivo e de tentar ser um sistema _barebones_ (apenas o mínimo), mas sem ser
masoquista. Tudo nele me parece que foi feito com o objetivo de optar pelo
caminho mais simples, mesmo que isso signifique sacrificar algumas "otimizações"
para você, e escolher poucas peças, mas peças que apresentem um funcionamento
correto.

Eu sinto que também é uma distribuição que eu consigo confiar como que ela vai
se portar e que simplesmente emana estabilidade. Todo o desenvolvimento é feito
em uma branch "edge" (ponta) e a cada seis meses se congela uma nova versão,
versão essa que tem suporte por até dois anos. O modelo de _rolling release_, ou
seja, onde assim que um pacote é atualizado _upstream_ [^1] é automaticamente
atualizado pelos empacotadores na distribuição já se provou um sucesso entre
outras distribuições (implementado por distribuições respeitáveis como o Arch
Linux, Gentoo, etc), e o Alpine seguiu o mesmo caminho.  Eu considero o período
de dois anos um pouco longo, mas o suficiente para que não deixe o sistema
atrofiar. Atualizar entre versões do Alpine é tão simples quanto editar um
arquivo, trocar a versão e mandar atualizar os pacotes. Manter um sistema
atualizado é o mínimo de qualquer infra-estrutura decente, e o Alpine consegue
tornar isso ainda menos doloroso.

[^1]: _upstream_ remete à fonte, ou seja, onde o software é publicado e
  _downstream_ onde ele é consumido e mantido.

O gerenciador de serviços, openRC, é pequeno e simples, e essencilamente existem
dois formatos de escrever serviços para ele, preenchendo algumas variaveis no
arquivo de serviço [^2] ou escrevendo scripts mais complexos se necessário [^3],
afinal é tudo shell-script.

[^2]: https://git.eletrotupi.com/pacotes.eletrotupi.com/tree/master/pkgs/satellite/satellite.initd
[^3]: https://git.eletrotupi.com/alfazema.club-etc/tree/master/init.d/hometown-web

O gerenciador de pacotes do sistema é incrívelmente rápido e vastamente
documentado. Empacotar programas é realmente muito direto ao ponto. Fora que em
menos de uma hora é possível montar uma infra-estrutura para oferecer pacotes
customizados, ou que ainda não estão disponíveis nos repositórios oficiais. O
próprio Alpine oferece as ferramentas para você montar essa infra-estrutura,
assinar pacotes, manter um índice para consulta (o comando abuild) e basta você
expor esse repositório por um proxy reverso e pronto.

O ponto mais fraco, infelizmente, é a documentação que além de ser bastante
incompleta em alguns lugares, muitas vezes se refere a documentações externas
como a wiki do Arch Linux ou até mesmo de versões antigas do Alpine. Dito isso,
desenvolvedores do Alpine tem colocado bastante peso em manter as _man pages_
dos pacotes atualizadas e disponíveis, e alguns esforços tem sido feito para
melhorar a documentação como um todo.

Outro ponto que ainda atrapalha, mas que na minha opinião revela muito mais
sobre como desenvolvedores veem Linux, é o fato de que a maior parte de
softwares externos tem dificuldade de funcionar no Alpine. Em especial, pelo
fato que o Alpine usa como biblioteca C o projeto do [musl-c], ao invés do GNU.
O projeto do musl-c tenta implementar uma versão "correta, simples e segura" da
biblioteca C, o que faz com que alguns softwares específicos não consigam rodar
por ser extremamente dependente de uma implementação específica da biblioteca C,
ou seja, não são por si só, softwares portáveis.

[musl-c]: https://musl.libc.org/

Apesar disso, não é uma causa perdida e existem algumas camadas de
compatibilidade que a própria equipe do musl e do Alpine disponibilizam, e são
muitos poucos programas que de fato não funcionam ou quebram (eu pessoalmente,
só vi ocorrer em alguns jogos).

Em suma, eu realmente gosto muito do Alpine Linux e me pego muitas vezes
preferindo utilizar o meu notebook justamente porque roda Alpine. Todos os meus
servidores rodam Alpine, e em breve a minha estação de trabalho irá também. Eu
mantenho um [repositório de pacotes de terceiros][repositorio], algumas dezenas
de pacotes e se possível utilizo em máquinas virtuais/dockers do trabalho.

[repositorio]: https://pacotes.eletrotupi.com