Bastante Quimera Linux ☯ Daniel Wayne Armstrong

Bastante Quimera Linux ☯ Daniel Wayne Armstrong


Última edição em 16/04/2026


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.

Bastante Quimera Linux ☯ Daniel Wayne Armstrong



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 esp serve como partição do sistema EFI e é formatado com o fat32 sistema de arquivos.
  • Partição swap fornece espaço de troca com criptografia cortesia de dm-crypt.
  • Partição pool contém o sistema de arquivos raiz e é formatado com o zfs sistema de arquivos usando criptografia nativa.

Algumas suposições:

  • O dispositivo de destino é x86_64 arquitetura 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 💬



Source link

Postagens Similares

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *