A aventura de um usuário de BSD com o Alpine Linux
(rubenerd.com)-
A história do Alpine Linux
- O Alpine Linux é uma distribuição Linux independente e não comercial de uso geral, projetada para usuários avançados que valorizam segurança, simplicidade e eficiência no uso de recursos
- Todos os binários de userland são compilados como PIE (Position Independent Executables) e contam com proteção contra stack smashing, prevenindo antecipadamente classes inteiras de exploits, incluindo vulnerabilidades zero-day
- Em 2005, Natanael Copa discutiu o início do projeto e, assim como o BSD, ele é usado em sistemas embarcados, roteadores, dispositivos móveis, bem como em servidores e desktops de uso geral
- Devido ao seu tamanho compacto e dependências limitadas, também é popular como base para contêineres Linux
- Também oferece um toolchain que pode ser executado facilmente em
chroot(8), o que o torna interessante para quem usa amplamente NetBSD chroots(8) e FreeBSD jail
-
A instalação do Alpine Linux
- Está disponível em várias versões, incluindo builds para ARM, PPC64, x86 e x86_64
- O processo de instalação é muito simples: basta fazer login como
rootno ambiente live e executarsetup-alpine - São feitas perguntas básicas sobre keymap, rede, fuso horário, autenticação de root etc., e também é possível injetar chaves SSH desde o início, o que é útil ao implantar VMs ou conjuntos de servidores com ferramentas de orquestração, ou ao implantar em provedores de hospedagem que não fornecem mídia
- É possível escolher entre alguns servidores SSH e clientes NTP, incluindo a preferência por OpenSSH e openntpd, e ele também identifica corretamente quando está rodando em Xen
- Também é possível configurar LVM, mas por enquanto a escolha é continuar com a partição padrão
sysdo Alpine usandoext4
-
Explorando após a instalação
- Ao iniciar o Alpine pela primeira vez, dá para entender um motivo especial: o
dmesg(1)informa que ele está executando o OpenRC - É portável, pequeno, rápido, eficiente, transparente e seguro
- Muito familiar para usuários de BSD acostumados a escrever scripts rc
- A presença de
/etc/rc.confecrond(8)é motivo de alegria - É muito bom ver isso sendo usado em distribuições Linux como Devuan, Gentoo e Alpine, e isso torna o Linux divertido de novo
- Junto com o OpenRC, musl e busybox vêm incluídos, reduzindo ainda mais o tamanho e a superfície de ataque do sistema básico
- llvm também está disponível, assim como um dos shells interativos preferidos do autor, o MirBSD Korn shell
- Ao iniciar o Alpine pela primeira vez, dá para entender um motivo especial: o
-
Pacotes
- O gerenciador de pacotes padrão do Alpine é o apk e, como é comum no Linux, ele lida com atualizações sem separar o sistema base de todos os pacotes
- Como no BSD, o autor quer verificar se é possível executar uma cópia sem privilégios, mas ainda não confirmou isso; além disso, o pkgsrc também está disponível, então não chega a ser um problema
- A configuração fica em
/etc/apk/repositories, e é possível ativar o repositório community descomentando a segunda URL fornecida pelo instalador - O Alpine também tem um repositório
testing, e você também pode adicionar seus próprios repositórios - O uso é fácil, mas, por força do hábito, o autor ainda acaba digitando
apt installpor engano em vez deapk add - Há uma interface web oficial, e os repositórios do Alpine estão no pkgs.org
- O pacote zfs foi o mais surpreendente, e foram necessários apenas dois comandos para instalar e carregar o módulo do kernel (embora root on ZFS deva ser mais complicado)
-
Conclusão
- Foi apenas uma exploração superficial, mas já há motivos suficientes para considerar seriamente migrar para ele como principal distribuição Linux para testes e servidores
- O autor gosta do fato de
htop(1)elsof(1)mostrarem apenas uma pequena lista de processos reconhecíveis, de ele usar OpenRC, de o gerenciamento de pacotes parecer simples e de a configuração ser muito direta - O autor se perguntava como seria um “Occam’s Linux” moderno e funcional, e isso é exatamente isso
- Se for preciso mais do que o busybox, o autor gostaria de verificar se o uutils funciona, embora tenha dúvidas no caso de servidores
A opinião do GN⁺
-
O Alpine Linux é otimizado para implantações baseadas em contêineres e, por isso, é amplamente usado em plataformas de contêineres como Docker. Parece ser uma distribuição que vale a pena considerar ao implementar uma arquitetura de microsserviços com contêineres.
-
O uso padrão de musl libc pode ser tanto uma vantagem quanto uma desvantagem. O musl é mais leve e tem pontos fortes em segurança em comparação com o glibc, mas pode haver problemas de compatibilidade com alguns aplicativos. Portanto, vale a pena verificar com antecedência a compatibilidade dos aplicativos que serão usados.
-
O uso de ash como shell padrão também é um ponto peculiar. O ash tem menos recursos que o bash, mas é um shell muito leve e rápido, útil em ambientes com recursos limitados, como sistemas embarcados. Por outro lado, pode ser um pouco inconveniente para usuários comuns.
-
Para quem usa principalmente sistemas da família BSD, o Alpine Linux provavelmente parecerá atraente por oferecer um ambiente familiar. No entanto, como o suporte a ambiente desktop ainda parece insuficiente, ele parece mais adequado para uso em servidores ou sistemas embarcados.
-
No geral, o Alpine Linux parece ter sua própria relevância como uma distribuição leve e otimizada para segurança. Ainda assim, como seu ecossistema próprio não é tão grande, é preciso considerar que o suporte da comunidade pode ser um pouco limitado em caso de problemas. Mesmo assim, é de se esperar que, com o tempo, o Alpine Linux conquiste cada vez mais usuários graças às suas vantagens.
1 comentários
Comentários do Hacker News
Resumo:
Binários Linux são compilados como PIE (Position Independent Executable), o que aumenta a segurança
O GLIBC tem a implementação de heap mais endurecida, com mais mecanismos de mitigação para vulnerabilidades como double free
O Alpine usa musl, então é menos seguro que o GLIBC. Um sistema pequeno e fácil de entender ajuda na segurança
O Illumos (OpenSolaris) fica muito mais simples depois de décadas usando Linux
A maior parte do que funcionava no Solaris 10 ainda vale hoje com pequenas modificações
Zones são 10 vezes melhores que contêineres Docker, e o suporte a ZFS é embutido
Gerenciamento de serviços com SMF. A única desvantagem é configurar tudo em XML
Compartilhamento de experiência usando servidores OmniOS e SmartOS
Como usuário de BSD, foi a primeira vez rodando Alpine no bhyve
Por ser baseado em busybox, não é necessário ter binários separados para utilitários em /bin e /sbin, então o espaço de usuário é pequeno e o boot é rápido
Com tmux e zsh, já é suficiente para a maior parte dos usos Unix
Foi preciso instalar muitos pacotes com apk, mas no geral foi a melhor experiência com Linux
Seria bom se viesse com ZFS embutido e suporte a bindings virtio para bhyve
Void Linux também é recomendado para usuários de BSD. Foi criado por um desenvolvedor do NetBSD, tem versões com glibc e musl, e usa runit como sistema init
Com
xbps-src, é possível compilar pacotes a partir do código-fonteAlgumas pessoas evitam usar Alpine porque ele não inclui páginas man por padrão
Há curiosidade sobre existir alguma opção para instalar documentação automaticamente ao instalar pacotes
Houve posts sobre desempenho do Alpine no Docker. Recomenda-se usar Debian/Ubuntu
Há dúvida se isso ainda continua válido
Não entendem muito bem o apelo do OpenRC e afins. Consideram opções baseadas em supervisão melhores do que gerenciar arquivos PID
Reconhecem que não reiniciar automaticamente pode ser uma vantagem
A forte dependência de syslog também parece tecnologia dos anos 80
Concordam com a necessidade de melhorar uma visão centralizada para entender a ordem dos eventos entre várias ferramentas
Vantagem do Alpine: sem Nix, é possível fazer gerenciamento declarativo de pacotes editando
/etc/apk/worlde depois executandoapk fixSlackware é um meio-termo entre BSD e Linux. Tem estilo Unix e não é complicado. O Slackbuilds oferece uma árvore de ports rica
O musl não oferece suporte a pthread_attr_setaffinity_np, então alguns softwares como PyTorch não conseguem rodar