Just Enough Chimera Linux ☯ Дэниел Уэйн Армстронг
•
С тегами #chimera #linux #encrypt #zfs #zfsbootmenu
Chimera Linux — это восхитительный дистрибутив Linux, управляемый сообществом, созданный с нуля, который делает все по-другому: musl вместо типичного glibc для библиотеки C, dinit над systemd для инициализации системы и пользовательское пространство, полученное из основных инструментов FreeBSD.
Использование Химеры base install image и прорабатываю это превосходное руководство по установке для настройки Chimera с помощью OpenZFS файловая система и ZFSBootМеню загрузчик, я показываю выбор, который я делаю для создания зашифрованная минимальная система 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 | 2г | ef00 | жирный | Системный раздел EFI | /boot/ефи |
| 2 | 8г | 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 💬
