# Referência Rápida Alpine Linux

*Gerenciamento de pacotes, serviços, redes, imagem base Docker*

> Source: Alpine Linux Documentation (wiki.alpinelinux.org) · MIT

## Gerenciamento de Pacotes

### Básico do apk

```
apk update               # atualizar índice de pacotes
apk upgrade              # atualizar todos os pacotes
apk add curl git vim     # instalar pacotes
apk del curl             # remover um pacote
apk search nginx         # buscar pacotes
```

### Informações de Pacotes

```
apk info                 # listar pacotes instalados
apk info -a nginx        # informações detalhadas do pacote
apk info -L nginx        # listar arquivos do pacote
apk policy nginx         # exibir versões disponíveis
```

### Pacotes Virtuais

```
# Install build deps as a group, remove later
apk add --virtual .build-deps gcc musl-dev
make && make install
apk del .build-deps
```

### Repositórios

```
# /etc/apk/repositories
https://dl-cdn.alpinelinux.org/alpine/v3.20/main
https://dl-cdn.alpinelinux.org/alpine/v3.20/community
@edge https://dl-cdn.alpinelinux.org/alpine/edge/testing
```

## Serviços

### Gerenciamento de Serviços OpenRC

```
rc-service nginx start    # iniciar serviço
rc-service nginx stop     # parar serviço
rc-service nginx restart  # reiniciar serviço
rc-service nginx status   # verificar status
```

### Gerenciamento de Runlevels

```
rc-update add nginx default   # habilitar na inicialização
rc-update del nginx default   # desabilitar na inicialização
rc-update show               # listar todos os serviços
rc-status                    # exibir serviços em execução
```

### Runlevels

| Command | Description |
|---------|-------------|
| `sysinit` | Inicialização do sistema (sistemas de arquivos, relógio) |
| `boot` | Serviços básicos do sistema (rede, syslog) |
| `default` | Serviços normais (servidores web, daemons) |
| `shutdown` | Tarefas de desligamento |

## Configuração

### Arquivos de Configuração Principais

| Command | Description |
|---------|-------------|
| `/etc/apk/repositories` | URLs dos repositórios de pacotes |
| `/etc/hostname` | Nome do host do sistema |
| `/etc/network/interfaces` | Configuração de interfaces de rede |
| `/etc/conf.d/` | Configuração específica de serviços |
| `/etc/motd` | Mensagem do dia |

### Configuração do Sistema

```
setup-alpine             # configuração completa interativa
setup-timezone           # definir fuso horário
setup-keymap             # configurar layout do teclado
setup-hostname myhost    # definir nome do host
```

### Fuso Horário

```
apk add tzdata
cp /usr/share/zoneinfo/US/Eastern /etc/localtime
echo "US/Eastern" > /etc/timezone
apk del tzdata          # optional: remove to save space
```

## Redes

### Configuração de Interface

```
# /etc/network/interfaces
auto eth0
iface eth0 inet dhcp
# --- static ---
iface eth0 inet static
  address 192.168.1.10/24
  gateway 192.168.1.1
```

### Comandos de Rede

```
ip addr show             # exibir endereços IP
ip route show            # exibir tabela de rotas
ip link set eth0 up     # ativar interface
setup-interfaces         # configuração interativa de rede
```

### DNS e Firewall

```
# DNS: /etc/resolv.conf
nameserver 1.1.1.1
nameserver 8.8.8.8
# Firewall
apk add iptables
iptables -L -n           # listar regras
```

## Usuários

### Gerenciamento de Usuários

```
adduser alice             # criar usuário (interativo)
adduser -D -s /bin/sh bob # não-interativo, definir shell
deluser alice             # excluir usuário
passwd alice              # definir/alterar senha
```

### Grupos e Sudo

```
addgroup devs             # criar grupo
addgroup alice devs       # adicionar usuário ao grupo
apk add doas              # lightweight sudo alternative
# /etc/doas.conf
permit persist alice as root
```

### Usuários do Sistema

```
adduser -S -D -H -s /sbin/nologin myapp
# -S system user  -D no password
# -H no home dir  -s no shell
```

## Disco e Armazenamento

### Comandos de Sistema de Arquivos

```
df -h                    # resumo de uso do disco
du -sh /var/log          # tamanho do diretório
lsblk                    # listar dispositivos de bloco
mount /dev/sda1 /mnt     # montar dispositivo
umount /mnt              # desmontar
```

### LBU (Backup Local Alpine)

```
# For diskless/data modes — persist changes across reboots
lbu status               # exibir alterações não confirmadas
lbu commit               # salvar alterações na mídia de boot
lbu list                 # listar arquivos no backup
lbu include /etc/myconf  # adicionar caminho ao backup
```

### Configuração de Disco

```
setup-disk               # instalação interativa em disco
setup-disk /dev/sda      # instalar em disco específico
# Modes: sys (traditional), data, diskless
```

## Imagem Base Docker

### Por que Alpine para Docker

| Command | Description |
|---------|-------------|
| `~5 MB base image` | vs ~80 MB para Debian slim |
| `musl libc` | Menor que glibc (alguns problemas de compatibilidade) |
| `apk package manager` | Rápido, sem cache por padrão |
| `Minimal attack surface` | Menos pacotes = menos CVEs |

### Dockerfile Mínimo

```
FROM alpine:3.20
RUN apk add --no-cache python3 py3-pip
COPY app.py /app/
CMD ["python3", "/app/app.py"]
```

### Build Multi-Estágio

```
FROM golang:1.22-alpine AS builder
WORKDIR /src
COPY . .
RUN go build -o /app
FROM alpine:3.20
COPY --from=builder /app /app
CMD ["/app"]
```

### Armadilhas Comuns

| Command | Description |
|---------|-------------|
| `--no-cache` | Sempre use para manter a imagem pequena |
| `musl vs glibc` | Alguns binários precisam do pacote gcompat |
| `No bash by default` | Use /bin/sh ou apk add bash |
| `Timezone missing` | Instale tzdata se necessário |

## Padrões Comuns

### Instalar Ferramentas de Build

```
apk add --no-cache build-base   # gcc, make, etc.
apk add --no-cache python3-dev  # Python headers
apk add --no-cache linux-headers # kernel headers
```

### Tarefas Cron

```
# Add a cron job
echo "*/5 * * * * /usr/local/bin/task.sh" \
  | crontab -
rc-service crond start
rc-update add crond default
```

### Habilitar SSH

```
apk add openssh
rc-service sshd start
rc-update add sshd default
# Config: /etc/ssh/sshd_config
```

### Atualizar Versão do Alpine

```
# Edit /etc/apk/repositories: change v3.19 → v3.20
apk update
apk upgrade --available
sync && reboot
```
