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 |