Bastante Quimera Linux ☯ Daniel Wayne Armstrong
•
Marcado em #chimera #linux #encrypt #zfs #zfsbootmenu
Chimera Linux é uma deliciosa distribuição Linux voltada para a comunidade, construída do zero e que faz as coisas de maneira diferente: musl em vez do típico glibc para biblioteca C, dinit sobre systemd para inicialização do sistema e uma área de usuário derivada das ferramentas principais do FreeBSD.
Usando a quimera base instalar imagem e trabalhar neste excelente guia de instalação para configurar o Chimera com o OpenZFS sistema de arquivos e o ZFSBootMenu bootloader, mostro as escolhas que faço para criar um sistema Linux criptografado e mínimo com “apenas o suficiente” para fornecer uma base sólida para continuar: seja configurando um desktop, laptop ou servidor.

1. Comece aqui
Ao longo deste COMO FAZER, se você vir colchetes () em blocos de código, isso significa que a palavra do código (incluindo colchetes) deve ser substituída por outra coisa. Isso é detalhado nas instruções antes ou depois do bloco de código.
O Chimera Linux é instalado como único sistema operacional em um único disco usando um layout de três partições:
- Partição
espserve como partição do sistema EFI e é formatado com ofat32sistema de arquivos. - Partição
swapfornece espaço de troca com criptografia cortesia dedm-crypt. - Partição
poolcontém o sistema de arquivos raiz e é formatado com ozfssistema de arquivos usando criptografia nativa.
Algumas suposições:
- O dispositivo de destino é
x86_64arquitetura usando UEFI para inicializar. - A inicialização segura está desabilitada no dispositivo de destino.
- O acesso à rede durante a instalação utiliza uma interface com fio.
- O sistema não requer suporte para hibernação.
Adquira uma imagem de instalação
As últimas imagens de instalação ISO ao vivo (atualmente 20251220) estão disponíveis aqui: repo.chimera-linux.org
Download chimera-linux-x86_64-LIVE-20251220-base.isoo sha256sums.txt arquivo e verifique a integridade da imagem:
sha256sum -c --ignore-missing sha256sums.txt
Preparar meio de instalação USB
Grave o instalador em um dispositivo de armazenamento USB desmontado executando o dd comando como root.
AVISO
Tenha muito cuidado para anotar o dispositivo adequado (que pode ser identificado com o lsblk comando). Todo o conteúdo do dispositivo será perdido!
Exemplo: Em um sistema Linux, se um pendrive USB aparecer como sdx1então escreva o instalador para sdx (omitir o número da partição):
dd bs=4M conv=fsync oflag=direct status=progress if=chimera-linux-x86_64-LIVE-20251220-base.iso of=/dev/sdx
2. Configure o ambiente ativo
Inicialize o dispositivo de destino a partir da mídia de instalação do Chimera. Login e senha são root:chimera.
Definir fonte de console maior
Se o tamanho da fonte existente parecer muito pequeno, execute:
setfont -d
… dobrará o tamanho.
As fontes do console estão localizadas em /usr/share/consolefonts/ e uma fonte diferente pode ser definida com setfont omitindo o caminho e a extensão do arquivo.
Definir teclado temporário do console
O mapa de teclado padrão do console é us. Os mapas de teclado disponíveis estão listados em /usr/share/keymaps/.
Se algum outro mapa de teclado for desejado, defina um mapa de teclado diferente temporariamente com loadkeys:
loadkeys (keymap)
…onde (keymap) é o layout de teclado desejado.
Exemplo: eu configuro o sistema para usar meu preferido colemak layout, que está disponível em /usr/share/keymaps/i386/colemak:
loadkeys colemak/en-latin9
Verifique o modo de inicialização
Confirme se o dispositivo de destino está usando o modo de inicialização UEFI:
cat /sys/firmware/efi/fw_platform_size
Se o comando retornar 64então o sistema é inicializado em UEFI com UEFI x64 de 64 bits e estamos prontos para prosseguir.
OBSERVAÇÃO
Se o arquivo não existir, o dispositivo não está usando UEFI.
Conecte-se à Internet
As interfaces de rede com fio devem ser habilitadas automaticamente e conectadas na inicialização.
Verifique se a interface de rede está ativa, se foi atribuído um endereço e se a Internet está acessível:
ip addr
ping -c 5 chimera-linux.org
Login remoto para instalador
Facilite este processo de instalação manual (ou seja, comandos recortar e colar) fazendo login remotamente no instalador via ssh de outro computador.
Inicie o sshd demônio:
dinitctl start sshd
Mude para o outro computador e ssh no dispositivo alvo como anon:chimera:
ssh anon@(ip_address)
… onde (ip_address) é o endereço do dispositivo alvo obtido com o ip addr comando acima.
Mudar para root:
doas -s
Definir variável de ID
Arquivo /etc/os-release define variáveis que descrevem o sistema operacional atual. Use o $ID variável para definir o nome abreviado da distribuição Linux em comandos posteriores:
. /etc/os-release && export ID && echo $ID
Gerar hostid
Gerar hostid identificador hexadecimal para uso pelo ZFSBootMenu:
zgenhostid "$(hostid)" && hostid
OBSERVAÇÃO
Musl não lê /etc/hostid e sempre exibirá 00000000. Não é um problema.
3. Prepare o DISCO
Configure um layout de partição personalizado em um único disco antes de implementar a instalação básica do Chimera.
Instalar:
apk update && apk add --no-interactive gptfdisk parted
Definir variáveis DISK
Identifique o disco onde o Chimera será instalado listando os dispositivos de bloco:
lsblk -f
Defina variáveis DISK para um disco SATA ou NVMe:
Sata
Exemplo de disco: sda
export DISK="/dev/sda"
export ESP_PART="1"
export SWAP_PART="2"
export POOL_PART="3"
export ESP_DEVICE="${DISK}${ESP_PART}"
export SWAP_DEVICE="${DISK}${SWAP_PART}"
export POOL_DEVICE="${DISK}${POOL_PART}"
echo $ESP_DEVICE && echo $SWAP_DEVICE && echo $POOL_DEVICE
NVMe
Exemplo de disco: nvme0n1
export DISK="/dev/nvme0n1"
export ESP_PART="1"
export SWAP_PART="2"
export POOL_PART="3"
export ESP_DEVICE="${DISK}p${ESP_PART}"
export SWAP_DEVICE="${DISK}p${SWAP_PART}"
export POOL_DEVICE="${DISK}p${POOL_PART}"
echo $ESP_DEVICE && echo $SWAP_DEVICE && echo $POOL_DEVICE
Limpar DISCO
Se anteriormente havia um pool ZFS no DISK, execute:
zpool labelclear -f $DISK
Se o DISK foi configurado anteriormente com LVM, desative o grupo de volumes:
vgchange -an
Limpe os sistemas de arquivos existentes e a tabela de partições no DISK:
wipefs -af $DISK && sgdisk --zap-all --clear $DISK
Notifique o sistema sobre alterações na tabela de partições:
partprobe $DISK
Disco de partição
OBSERVAÇÃO
Muitos guias de particionamento atribuem 256-512M de espaço à partição do sistema EFI. Eu gosto de preparar a partição para o futuro para qualquer outra coisa que o Linux queira armazenar lá, atribuindo 2G de espaço mais generoso.
Crie uma tabela de partição GPT no DISK com o seguinte layout:
| Número | Tamanho | Código | Formatar | Usar como | Ponto de montagem |
|---|---|---|---|---|---|
| 1 | 2g | ef00 | vfat | Partição do sistema EFI | /boot/efi |
| 2 | 8g | 8200 | trocar | Trocar partição | (não aplicável) |
| 3 | ->FIM | bf00 | zfs | Partição do conjunto ZFS | / |
Crie a partição do sistema EFI:
sgdisk -n "${ESP_PART}:1m:+2g" -t "${ESP_PART}:ef00" -c 0:esp $DISK
Crie a partição swap:
sgdisk -n "${SWAP_PART}:0:+8g" -t "${SWAP_PART}:8200" -c 0:swap $DISK
Crie a partição do pool ZFS:
sgdisk -n "${POOL_PART}:0:0" -t "${POOL_PART}:bf00" -c 0:pool $DISK
Exibir layout do DISCO:
partprobe $DISK && sgdisk -p $DISK
4. Criação de pool ZFS
Ao adicionar discos ou partições a pools ZFS, é uma boa prática referir-se a eles pelos links simbólicos criados em /dev/disk/by-partuuid (UEFI) para que o ZFS identifique os dispositivos corretos, mesmo que a nomenclatura do disco mude em algum momento. Usando nós de dispositivos tradicionais como /dev/sda2 pode causar falhas intermitentes de importação.
Então eu crio um POOL_ID variável:
POOL_ID=/dev/disk/by-partuuid/$( blkid -s PARTUUID -o value $POOL_DEVICE )
Verificar:
ls -al /dev/disk/by-partuuid/ && echo "POOL_ID = $POOL_ID"
Criar arquivo-chave de criptografia
Armazene a senha de criptografia do pool ZFS em um arquivo-chave:
echo 'SuperSecretPassphrase' > /etc/zfs/zroot.key
chmod 000 /etc/zfs/zroot.key
Criar pool ZFS criptografado
Crie o pool com criptografia nativa habilitada:
zpool create -f \
-o ashift=12 \
-o autotrim=on \
-o compatibility=openzfs-2.3-linux \
-O acltype=posixacl \
-O xattr=sa \
-O compression=lz4 \
-O encryption=aes-256-gcm \
-O keylocation=file:///etc/zfs/zroot.key \
-O keyformat=passphrase \
-O relatime=on \
-m none zroot "$POOL_ID"
Crie conjuntos de dados ZFS
OBSERVAÇÃO
É necessário definir explicitamente o canmount=noauto em cada ambiente de inicialização que você criar.
zfs create -o mountpoint=none zroot/ROOT
zfs create -o mountpoint=/ -o canmount=noauto zroot/ROOT/${ID}
Defina o sistema de arquivos de inicialização preferido:
zpool set bootfs=zroot/ROOT/${ID} zroot
Eu crio um adicional home conjunto de dados para cada sistema:
zfs create zroot/ROOT/${ID}/home
Isso me permite manter os arquivos de configuração do usuário exclusivos para cada ambiente de inicialização que eu possa criar no futuro. Ele também separa os dados do usuário dos dados do sistema, o que é útil para instantâneos do ZFS e permite reversões do sistema, deixando os dados do usuário intactos.
Para compartilhar dados entre ambientes de inicialização, eu crio um data conjunto de dados para armazenar arquivos comuns:
zfs create -o mountpoint=/data zroot/data
Exportar e reimportar pool para instalação
zpool export zroot
zpool import -N -R /mnt zroot
zfs load-key -L prompt zroot
Monte conjuntos de dados:
zfs mount zroot/ROOT/${ID}
zfs mount zroot/ROOT/${ID}/home
zfs mount zroot/data
Verificar:
# mount -t zfs
zroot/ROOT/chimera on /mnt type zfs (rw,relatime,xattr,posixacl,casesensitive)
zroot/ROOT/chimera/home on /mnt/home type zfs (rw,relatime,xattr,posixacl,casesensitive)
root/data on /mnt/data type zfs (rw,relatime,xattr,posixacl,casesensitive)
Atualizar links simbólicos do dispositivo:
udevadm trigger
5. Instalação
Instale o base-full pacotes:
chimera-bootstrap /mnt
Copie os arquivos para o novo sistema operacional:
cp /etc/hostid /mnt/etc/
mkdir /mnt/etc/zfs && cp /etc/zfs/zroot.key /mnt/etc/zfs/
6. Configure o novo sistema
Faça chroot no Chimera recém-instalado e configure o novo sistema operacional.
Digite chroot
chimera-chroot /mnt
Definir senha de root
passwd
Criar superusuário
Crie uma conta de usuário com privilégios de superusuário:
useradd -m -G wheel (username)
… onde (username) é o nome desejado para a conta.
Defina uma senha para (username):
passwd (username)
(Opcional) Dê root acesso a (username) sem senha usando o doas comando:
echo 'permit nopass keepenv (username)' >> /etc/doas.conf
Gerenciador de pacotes e pacotes extras
Adicione o user subrepo e espelhos de sincronização:
apk add --no-interactive chimera-repo-user && apk update
Identifique o fornecedor do processador:
grep vendor_id /proc/cpuinfo
Defina uma variável para um pacote de microcódigo apropriado para carregar atualizações e correções de segurança:
UCODE="(vendor)"
… onde (vendor) para processadores Intel é ucode-intel e processadores AMD é ucode-amd.
Instalar:
apk add --no-interactive $UCODE linux-lts-zfs-bin cryptsetup cryptsetup-scripts-initramfs-tools curl efibootmgr font-terminus
Definir fonte do console
OBSERVAÇÃO
Para terminus configurações de fonte, consulte /usr/share/consolefonts/README.Lat2-Terminus16 para obter detalhes.
Quimera usa o mesmo console-setup sistema como o Debian.
Exemplo: Usar TerminusBold como a fonte do console e aumente o tamanho da fonte modificando /etc/default/console-setup:
ACTIVE_CONSOLES="/dev/tty(1-6)"
CHARMAP="UTF-8"
CODESET=guess
FONTFACE=TerminusBold
FONTSIZE=14x28
Definir teclado do console
O teclado padrão é us. Se uma alternativa de mapa de teclado for desejada, consulte keyboard(5) para opções.
Exemplo: gosto de usar o colemak mapa de teclado (disponível em /usr/share/keymaps/i386/colemak), que eu configurei modificando /etc/default/keyboard:
KMAP=colemak/en-latin9
XKBMODEL=pc105
XKBLAYOUT=us
Definir fuso horário
Os fusos horários estão localizados em /usr/share/zoneinfo/(Region)/(City)onde (Region) é a região geográfica (África, América, Europa, …) e o (City) dentro daquela região.
Exemplo: Crie o /etc/localtime link simbólico para o fuso horário onde Toronto está localizado:
ln -sf /usr/share/zoneinfo/America/Toronto /etc/localtime && date
Atribuir nome de host
Crie o hostname arquivo:
echo (hostname) > /etc/hostname
… onde (hostname) é o nome desejado do sistema (palavra única, sem espaços):
echo chimeralinux > /etc/hostname
Habilitar serviços
Links para serviços habilitados pelo administrador estão em /etc/dinit.d/boot.d/.
O sistema de registro padrão no Chimera é syslog-ng.
Habilite o serviço:
dinitctl -o enable syslog-ng
Os logs são gravados em /var/log/messages.
Você pode configurar redes com fio estaticamente ou dinamicamente com dhcpcd.
Habilite o serviço:
dinitctl -o enable dhcpcd
A atividade padrão é para dhcpcd para configurar todas as interfaces com DHCP. As alterações são feitas em /etc/dhcpcd.conf. Ver dhcpcd.conf(5) para mais detalhes.
Habilite o sshd serviço para permitir logins remotos:
dinitctl -o enable sshd
Formate e monte a partição ESP
OBSERVAÇÃO
Os rótulos nos sistemas de arquivos são opcionais, mas úteis. Eles são uma maneira mais confiável de identificar a partição correta do que simples nós de dispositivos e permitem fácil montagem sem um UUID.
Crie um fat32 sistema de arquivos:
mkfs.fat -n ESP -F 32 $ESP_DEVICE
Dispositivo de montagem:
mount --mkdir $ESP_DEVICE /boot/efi
Adicionar partição a fstab:
echo 'LABEL=ESP /boot/efi vfat defaults 0 0' >> /etc/fstab
Habilitar criptografia de troca
Usando bruto dm-crypt permite que o sistema gere uma chave de criptografia aleatória e única na inicialização que não requer nenhuma ação do usuário para criptografar swap. No desligamento, a chave é descartada, tornando todos os dados restantes efetivamente destruídos.
Para permitir o uso de um rótulo (como feito anteriormente com o ESP) para identificar a partição swap que pode sobreviver a uma substituição, um deslocamento de troca pode ser usado. Crie esse deslocamento escrevendo um sistema de arquivos minúsculo e vazio em SWAP_DEVICE cujo único propósito é fornecer um rótulo persistente para criação de swap:
mkfs.ext2 -L cryptswap $SWAP_DEVICE 1M
Configurar dm-crypt para configurar a troca neste cryptswap partição na inicialização adicionando uma entrada a crypttab:
echo 'swap LABEL=cryptswap /dev/urandom plain,swap,offset=2048,cipher=aes-xts-plain64,size=512,sector-size=4096' >> /etc/crypttab
Adicionar dispositivo de troca a fstab:
echo '/dev/mapper/swap none swap defaults 0 0' >> /etc/fstab
Regenerar initramfs
A chave de criptografia é armazenada em /etc/zfs e será automaticamente copiado para o initramfs.
Definir UMASK=0077 como permissões padrão para arquivos e diretórios recém-criados:
mkdir -p /etc/initramfs-tools/conf.d
echo 'UMASK=0077' > /etc/initramfs-tools/conf.d/umask.conf
… e definir RESUME=none para desabilitar o cryptsetup comando de verificação/aviso sobre a falta de suporte para hibernação/retomada em nossa partição swap:
echo 'RESUME=none' > /etc/initramfs-tools/conf.d/resume
Regenerado:
update-initramfs -u -k all
Quaisquer mensagens de aviso como:
cryptsetup: WARNING: Couldn't determine root device
… pode ser ignorado com segurança. Neste caso, o script está procurando um mapeamento raiz que não existe (a criptografia raiz é tratada no ZFS).
Instale o bootloader ZBM para suportar Root no ZFS ambientes de inicialização no Linux.
Propriedades de inicialização
OBSERVAÇÃO
Adicione o hibernate=no argumento para garantir que nenhum processo possa acionar uma ação de suspensão para disco, o que é consistente com o objetivo de usar uma troca efêmera de chave aleatória.
Atribua argumentos de linha de comando a serem usados ao inicializar o kernel:
zfs set org.zfsbootmenu:commandline="quiet hibernate=no" zroot/ROOT
Configure o cache de chaves:
zfs set org.zfsbootmenu:keysource="zroot/ROOT/${ID}" zroot
Executável pré-construído
Instale um executável ZBM pré-construído no ESP:
mkdir -p /boot/efi/EFI/ZBM
curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi
cp /boot/efi/EFI/ZBM/VMLINUZ.EFI /boot/efi/EFI/ZBM/VMLINUZ-BACKUP.EFI
Entradas de inicialização EFI
efibootmgr -c -d "$DISK" -p "$ESP_PART" -L "ZFSBootMenu (Backup)" -l '\EFI\ZBM\VMLINUZ-BACKUP.EFI'
efibootmgr -c -d "$DISK" -p "$ESP_PART" -L "ZFSBootMenu" -l '\EFI\ZBM\VMLINUZ.EFI'
8. Concluir
Saia do chroot, desmonte e exporte
Saia do chroot:
exit
Desmonte tudo:
umount /mnt/home && umount /mnt/data && umount /mnt/boot/efi && umount -n -R /mnt
Exporte o zpool:
zpool export zroot
Reinício
reboot
OBSERVAÇÃO
Quando solicitada a senha para desbloquear o zpool, o mapa de teclado é us independentemente do mapa de teclado que possa ter sido definido no sistema.
O usuário é solicitado a fornecer a senha para desbloquear a partição raiz criptografada. Após o sucesso, a inicialização é retomada:
chimeralinux login:
Bem-vindo à Quimera!
9. Recursos
Próximo: Chimera Linux: após a primeira inicialização (TODO)
Você pode curtir, compartilhar ou comentar esta postagem no Fediverse 💬
