Just Enough Chimera Linux ☯ Дэниел Уэйн Армстронг

Just Enough Chimera Linux ☯ Дэниел Уэйн Армстронг


Последний раз редактировалось 16 апреля 2026 г.


С тегами #chimera #linux #encrypt #zfs #zfsbootmenu

Chimera Linux — это восхитительный дистрибутив Linux, управляемый сообществом, созданный с нуля, который делает все по-другому: musl вместо типичного glibc для библиотеки C, dinit над systemd для инициализации системы и пользовательское пространство, полученное из основных инструментов FreeBSD.

Использование Химеры base install image и прорабатываю это превосходное руководство по установке для настройки Chimera с помощью OpenZFS файловая система и ZFSBootМеню загрузчик, я показываю выбор, который я делаю для создания зашифрованная минимальная система Linux с «достаточно», чтобы обеспечить прочную основу для дальнейшего развития: будь то настройка настольного компьютера, ноутбука или сервера.

Just Enough Chimera Linux ☯ Дэниел Уэйн Армстронг



1. Начните здесь

Если в этом HOWTO вы видите квадратные скобки () в блоках кода это означает, что слово кода (включая квадратные скобки) следует заменить чем-то другим. Это подробно описано в инструкциях до или после блока кода.

Chimera Linux устанавливается как единственная операционная система на один диск с использованием трехраздельной структуры:

  • Раздел esp служит системным разделом EFI и отформатирован с помощью fat32 файловая система.
  • Раздел swap предоставляет пространство подкачки с шифрованием благодаря dm-crypt.
  • Раздел pool содержит корневую файловую систему и отформатирован с помощью zfs файловая система с использованием собственного шифрования.

Несколько предположений:

  • Целевое устройство x86_64 архитектура, использующая UEFI для загрузки.
  • Безопасная загрузка отключена на целевом устройстве.
  • Доступ к сети во время установки осуществляется через проводной интерфейс.
  • Система не требует поддержки спящего режима.

Получить установочный образ

Последние установочные образы ISO (на данный момент 20251220) доступны здесь: repo.chimera-linux.org.

Скачать chimera-linux-x86_64-LIVE-20251220-base.iso, sha256sums.txt файл, затем проверьте целостность образа:

sha256sum -c --ignore-missing sha256sums.txt

Подготовьте установочный USB-носитель

Запишите программу установки на отключенное USB-устройство хранения данных, на котором работает dd команду от имени root.

ПРЕДУПРЕЖДЕНИЕ
Будьте очень внимательны и обратите внимание на правильное устройство (которое можно идентифицировать по lsblk команда). Все содержимое устройства будет потеряно!

Пример. Если в системе Linux USB-накопитель отображается как sdx1затем напишите установщик в sdx (опустить номер раздела):

dd bs=4M conv=fsync oflag=direct status=progress if=chimera-linux-x86_64-LIVE-20251220-base.iso of=/dev/sdx

2. Настройте живую среду

Загрузите целевое устройство с установочного носителя Chimera. Логин и пароль есть root:chimera.

Установить более крупный шрифт консоли

Если существующий размер шрифта кажется слишком маленьким, выполните:

setfont -d

… увеличится вдвое.

Консольные шрифты расположены в /usr/share/consolefonts/ и другой шрифт можно установить с помощью setfont опуская путь и расширение файла.

Установить временную консольную клавиатуру

Раскладка клавиатуры консоли по умолчанию: us. Доступные раскладки клавиш перечислены в /usr/share/keymaps/.

Если требуется какая-то другая раскладка клавиатуры, временно установите другую раскладку клавиатуры с помощью loadkeys:

loadkeys (keymap)

…где (keymap) — желаемая раскладка клавиатуры.

Пример: я настраиваю систему на использование предпочитаемого мной colemak макет, который доступен в /usr/share/keymaps/i386/colemak:

loadkeys colemak/en-latin9

Проверьте режим загрузки

Убедитесь, что целевое устройство использует режим загрузки UEFI:

cat /sys/firmware/efi/fw_platform_size

Если команда возвращает 64затем система загружается в UEFI с 64-разрядной версией UEFI x64, и все готово.

ПРИМЕЧАНИЕ
Если файл не существует, устройство не использует UEFI.

Подключиться к Интернету

Проводные сетевые интерфейсы должны автоматически включаться и подключаться при загрузке.

Убедитесь, что сетевой интерфейс активен, ему присвоен адрес и доступен Интернет:

ip addr
ping -c 5 chimera-linux.org

Удаленный вход в установщик

Упростите процесс установки вручную (например, команды вырезания и вставки), удаленно войдя в программу установки через ssh с другого компьютера.

Запустите sshd демон:

dinitctl start sshd

Переключитесь на другой компьютер и ssh в целевое устройство как anon:chimera:

ssh anon@(ip_address)

… где (ip_address) — это адрес целевого устройства, полученный с помощью ip addr команда выше.

Переключиться на root:

doas -s

Определить переменную идентификатора

Файл /etc/os-release определяет переменные, описывающие текущую операционную систему. Используйте $ID переменная для установки короткого имени дистрибутива Linux в последующих командах:

. /etc/os-release && export ID && echo $ID

Создать хостид

Генерировать hostid Шестнадцатеричный идентификатор для использования ZFSBootMenu:

zgenhostid "$(hostid)" && hostid

ПРИМЕЧАНИЕ
Мусл не читает /etc/hostid и всегда будет отображаться 00000000. Это не проблема.

3. Подготовьте ДИСК

Перед выполнением базовой установки Chimera настройте собственную структуру разделов на одном диске.

Установить:

apk update && apk add --no-interactive gptfdisk parted

Определить переменные DISK

Определите диск, на который будет установлена ​​Chimera, перечислив блочные устройства:

lsblk -f

Установите переменные DISK для диска SATA или NVMe:

САТА

Пример диска: 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

Пример диска: 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

Очистить ДИСК

Если ранее на DISK существовал пул ZFS, запустите:

zpool labelclear -f $DISK

Если DISK ранее был настроен с помощью LVM, отключите группу томов:

vgchange -an

Очистите существующие файловые системы и таблицу разделов на ДИСКЕ:

wipefs -af $DISK && sgdisk --zap-all --clear $DISK

Сообщите системе об изменениях таблицы разделов:

partprobe $DISK

Раздел ДИСК

ПРИМЕЧАНИЕ
Многие руководства по разбиению разделов выделяют 256–512 МБ пространства для системного раздела EFI. Мне хотелось бы подготовить этот раздел к будущему для всего, что Linux захочет там хранить, выделив более щедрое пространство в 2 ГБ.

Создайте таблицу разделов GPT на ДИСКЕ со следующей разметкой:

Число Размер Код Формат Использовать как Точка монтирования
1 ef00 жирный Системный раздел EFI /boot/ефи
2 8200 менять Раздел подкачки (непригодный)
3 ->КОНЕЦ bf00 zfs Раздел пула ZFS /

Создайте системный раздел EFI:

sgdisk -n "${ESP_PART}:1m:+2g" -t "${ESP_PART}:ef00" -c 0:esp $DISK

Создайте раздел подкачки:

sgdisk -n "${SWAP_PART}:0:+8g" -t "${SWAP_PART}:8200" -c 0:swap $DISK

Создайте раздел пула ZFS:

sgdisk -n "${POOL_PART}:0:0" -t "${POOL_PART}:bf00" -c 0:pool $DISK

Отображение структуры ДИСКА:

partprobe $DISK && sgdisk -p $DISK

4. Создание пула ZFS

При добавлении дисков или разделов в пулы ZFS рекомендуется ссылаться на них с помощью символических ссылок, созданных в /dev/disk/by-partuuid (UEFI), чтобы ZFS идентифицировала нужные устройства, даже если в какой-то момент имя диска изменится. Использование традиционных узлов устройств, таких как /dev/sda2 может вызвать периодические сбои импорта.

Поэтому я создаю POOL_ID переменная:

POOL_ID=/dev/disk/by-partuuid/$( blkid -s PARTUUID -o value $POOL_DEVICE )

Проверять:

ls -al /dev/disk/by-partuuid/ && echo "POOL_ID = $POOL_ID"

Создать ключевой файл шифрования

Сохраните парольную фразу шифрования для пула ZFS в ключевом файле:

echo 'SuperSecretPassphrase' > /etc/zfs/zroot.key
chmod 000 /etc/zfs/zroot.key

Создать зашифрованный пул ZFS

Создайте пул с включенным собственным шифрованием:

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"

Создание наборов данных ZFS

ПРИМЕЧАНИЕ
Необходимо явно указать canmount=noauto в каждой создаваемой вами загрузочной среде.

zfs create -o mountpoint=none zroot/ROOT
zfs create -o mountpoint=/ -o canmount=noauto zroot/ROOT/${ID}

Установите предпочтительную загрузочную файловую систему:

zpool set bootfs=zroot/ROOT/${ID} zroot

Я создаю дополнительный home набор данных для каждой системы:

zfs create zroot/ROOT/${ID}/home

Это позволяет мне сохранять файлы конфигурации пользователя уникальными для каждой среды загрузки, которую я могу создать в будущем. Он также отделяет пользовательские данные от системных данных, что полезно для снимков ZFS и позволяет выполнять откат системы, оставляя пользовательские данные нетронутыми.

Чтобы обмениваться данными между загрузочными средами, я создаю data набор данных для хранения общих файлов:

zfs create -o mountpoint=/data zroot/data

Пул экспорта и реимпорта для установки

zpool export zroot
zpool import -N -R /mnt zroot
zfs load-key -L prompt zroot

Установить наборы данных:

zfs mount zroot/ROOT/${ID}
zfs mount zroot/ROOT/${ID}/home
zfs mount zroot/data

Проверять:

# 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)

Обновите символические ссылки устройства:

udevadm trigger

5. Установка

Установите base-full пакеты:

chimera-bootstrap /mnt

Скопируйте файлы в новую операционную систему:

cp /etc/hostid /mnt/etc/
mkdir /mnt/etc/zfs && cp /etc/zfs/zroot.key /mnt/etc/zfs/

6. Настройте новую систему

Выполните chroot в только что установленную Chimera и настройте новую ОС.

Введите chroot

chimera-chroot /mnt

Установить пароль root

passwd

Создать суперпользователя

Создайте учетную запись пользователя с правами суперпользователя:

useradd -m -G wheel (username)

… где (username) — желаемое имя учетной записи.

Установите пароль для (username):

passwd (username)

(Необязательно) Дайте root доступ к (username) без пароля, используя doas команда:

echo 'permit nopass keepenv (username)' >> /etc/doas.conf

Менеджер пакетов и дополнительные пакеты

Добавьте user субрепо и зеркала синхронизации:

apk add --no-interactive chimera-repo-user && apk update

Определите производителя процессора:

grep vendor_id /proc/cpuinfo

Определите переменную для соответствующего пакета микрокода для загрузки обновлений и исправлений безопасности:

UCODE="(vendor)"

… где (vendor) для процессоров Intel ucode-intel и процессоры AMD ucode-amd.

Установить:

apk add --no-interactive $UCODE linux-lts-zfs-bin cryptsetup cryptsetup-scripts-initramfs-tools curl efibootmgr font-terminus

Установить шрифт консоли

ПРИМЕЧАНИЕ
Для terminus настройки шрифта см. /usr/share/consolefonts/README.Lat2-Terminus16 для получения подробной информации.

Химера использует то же самое console-setup система как Debian.

Пример: использовать TerminusBold в качестве шрифта консоли и увеличьте размер шрифта, изменив /etc/default/console-setup:

ACTIVE_CONSOLES="/dev/tty(1-6)"

CHARMAP="UTF-8"

CODESET=guess
FONTFACE=TerminusBold
FONTSIZE=14x28

Установить консольную клавиатуру

Клавиатура по умолчанию us. Если требуется альтернативная раскладка клавиатуры, см. keyboard(5) для вариантов.

Пример: мне нравится использовать colemak раскладка клавиатуры (доступна в /usr/share/keymaps/i386/colemak), который я установил, изменив /etc/default/keyboard:

KMAP=colemak/en-latin9

XKBMODEL=pc105
XKBLAYOUT=us

Установить часовой пояс

Часовые пояса расположены в /usr/share/zoneinfo/(Region)/(City)где (Region) это географический регион (Африка, Америка, Европа, …) и (City) внутри этого региона.

Пример: Создайте /etc/localtime символическая ссылка на часовой пояс, где Toronto находится:

ln -sf /usr/share/zoneinfo/America/Toronto /etc/localtime && date

Назначить имя хоста

Создайте hostname файл:

echo (hostname) > /etc/hostname

… где (hostname) — желаемое имя системы (одно слово, без пробелов):

echo chimeralinux > /etc/hostname

Включить службы

Ссылки на сервисы, включенные администратором, находятся в /etc/dinit.d/boot.d/.

Система журналирования по умолчанию на Chimera: syslog-ng.

Включите услугу:

dinitctl -o enable syslog-ng

Логи записываются в /var/log/messages.

Вы можете настраивать проводные сети статически или динамически с помощью dhcpcd.

Включите услугу:

dinitctl -o enable dhcpcd

Действие по умолчанию предназначено для dhcpcd настроить все интерфейсы с DHCP. Изменения вносятся в /etc/dhcpcd.conf. Видеть dhcpcd.conf(5) для более подробной информации.

Включите sshd сервис для разрешения удаленного входа в систему:

dinitctl -o enable sshd

Отформатируйте и смонтируйте раздел ESP

ПРИМЕЧАНИЕ
Метки файловых систем необязательны, но полезны. Они являются более надежным способом определения правильного раздела, чем простые узлы устройств, и позволяют легко монтировать без UUID.

Создайте fat32 файловая система:

mkfs.fat -n ESP -F 32 $ESP_DEVICE

Крепление устройства:

mount --mkdir $ESP_DEVICE /boot/efi

Добавить раздел в fstab:

echo 'LABEL=ESP /boot/efi vfat defaults 0 0' >> /etc/fstab

Включить шифрование подкачки

Использование сырого dm-crypt позволяет системе генерировать случайный одноразовый ключ шифрования при загрузке, который не требует никаких действий со стороны пользователя для шифрования swap. При выключении ключ удаляется, в результате чего все оставшиеся данные фактически уничтожаются.

Чтобы разрешить использование метки (как это делалось ранее с ESP) для идентификации раздела подкачки, который может пережить перезапись, можно использовать смещение подкачки. Создайте это смещение, записав крошечную пустую файловую систему на SWAP_DEVICE, единственная цель которой — предоставить постоянную метку для создания подкачки:

mkfs.ext2 -L cryptswap $SWAP_DEVICE 1M

Настроить dm-crypt чтобы настроить обмен на этом cryptswap раздел при загрузке, добавив запись в crypttab:

echo 'swap LABEL=cryptswap /dev/urandom plain,swap,offset=2048,cipher=aes-xts-plain64,size=512,sector-size=4096' >> /etc/crypttab

Добавьте устройство подкачки в fstab:

echo '/dev/mapper/swap none swap defaults 0 0' >> /etc/fstab

Восстановить initramfs

Ключ шифрования хранится в /etc/zfs и будет автоматически скопирован в initramfs.

Набор UMASK=0077 в качестве разрешений по умолчанию для вновь создаваемых файлов и каталогов:

mkdir -p /etc/initramfs-tools/conf.d
echo 'UMASK=0077' > /etc/initramfs-tools/conf.d/umask.conf

… и установил RESUME=none отключить cryptsetup команда проверки/предупреждения об отсутствии поддержки спящего режима/возобновления в нашем разделе подкачки:

echo 'RESUME=none' > /etc/initramfs-tools/conf.d/resume

Регенерировать:

update-initramfs -u -k all

Любые предупреждающие сообщения вроде:

cryptsetup: WARNING: Couldn't determine root device

… можно смело игнорировать. В этом случае сценарий ищет корневое сопоставление, которое не завершается (корневое шифрование обрабатывается в ZFS).

Установите загрузчик ZBM для поддержки Корень на ZFS загрузочные среды в Linux.

Свойства загрузки

ПРИМЕЧАНИЕ
Добавьте hibernate=no аргумент, гарантирующий, что ни один процесс не может инициировать действие приостановки на диске, что соответствует цели использования эфемерной замены случайных ключей.

Назначьте аргументы командной строки, которые будут использоваться при загрузке ядра:

zfs set org.zfsbootmenu:commandline="quiet hibernate=no" zroot/ROOT

Настройте кэширование ключей:

zfs set org.zfsbootmenu:keysource="zroot/ROOT/${ID}" zroot

Готовый исполняемый файл

Установите готовый исполняемый файл ZBM в 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

Загрузочные записи 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. Завершить

Выйдите из chroot, размонтируйте и экспортируйте

Выход из chroot:

exit

Размонтируйте все:

umount /mnt/home && umount /mnt/data && umount /mnt/boot/efi && umount -n -R /mnt

Экспортируйте zpool:

zpool export zroot

Перезагрузить

reboot

ПРИМЕЧАНИЕ
Когда будет предложено ввести парольную фразу для разблокировки zpool, раскладка клавиатуры будет us независимо от раскладки клавиатуры, которая могла быть установлена ​​в системе.

Пользователю будет предложено ввести парольную фразу для разблокировки зашифрованного корневого раздела. В случае успеха загрузка возобновляется:

chimeralinux login:

Добро пожаловать в Химеру!

9. Ресурсы

Следующий: Chimera Linux: после первой загрузки (ВСЕ)

Вы можете поставить лайк, поделиться или прокомментировать этот пост на Fediverse 💬



Source link

Postagens Similares

Deixe um comentário

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